Browse Source

macOS 10.4: Guard non-existing APIs

Based on @AJenbo's patch.
pull/7538/head
Gleb Mazovetskiy 1 year ago committed by Anders Jenbo
parent
commit
a838078341
  1. 2
      CMake/Definitions.cmake
  2. 14
      CMake/Platforms.cmake
  3. 2
      Source/platform/locale.cpp
  4. 4
      Source/utils/file_util.cpp
  5. 2
      Source/utils/stdcompat/filesystem.hpp

2
CMake/Definitions.cmake

@ -94,6 +94,8 @@ foreach(
STREAM_ALL_AUDIO_MIN_FILE_SIZE STREAM_ALL_AUDIO_MIN_FILE_SIZE
DEVILUTIONX_DISPLAY_TEXTURE_FORMAT DEVILUTIONX_DISPLAY_TEXTURE_FORMAT
DEVILUTIONX_SCREENSHOT_FORMAT DEVILUTIONX_SCREENSHOT_FORMAT
DARWIN_MAJOR_VERSION
DARWIN_MINOR_VERSION
) )
if(DEFINED ${def_name} AND NOT ${def_name} STREQUAL "") if(DEFINED ${def_name} AND NOT ${def_name} STREQUAL "")
list(APPEND DEVILUTIONX_DEFINITIONS ${def_name}=${${def_name}}) list(APPEND DEVILUTIONX_DEFINITIONS ${def_name}=${${def_name}})

14
CMake/Platforms.cmake

@ -75,3 +75,17 @@ endif()
if(NXDK) if(NXDK)
include(platforms/xbox_nxdk) include(platforms/xbox_nxdk)
endif() endif()
if(CMAKE_SYSTEM_NAME MATCHES "Darwin")
# Some notable Darwin (macOS kernel) versions are:
# 8.x == macOS 10.4 (Tiger)
# 9.x == macOS 10.5 (Leopard)
#
# Importantly, a lot of the APIs first appeared in version 9, including
# the feature availability API (the <Availability.h> header).
#
# For Darwin 8 and below, we have to rely on the kernel version
# to detect available APIs.
string(REGEX REPLACE "^([0-9]+)\\.([0-9]+).*$" "\\1" DARWIN_MAJOR_VERSION "${CMAKE_SYSTEM_VERSION}")
string(REGEX REPLACE "^([0-9]+)\\.([0-9]+).*$" "\\2" DARWIN_MINOR_VERSION "${CMAKE_SYSTEM_VERSION}")
endif()

2
Source/platform/locale.cpp

@ -160,7 +160,7 @@ std::vector<std::string> GetLocales()
locales.push_back(std::move(locale)); locales.push_back(std::move(locale));
} }
#endif #endif
#elif defined(__APPLE__) && defined(USE_COREFOUNDATION) #elif defined(__APPLE__) && defined(USE_COREFOUNDATION) && DARWIN_MAJOR_VERSION >= 9
// Get the user's language list (in order of preference) // Get the user's language list (in order of preference)
CFArrayRef languages = CFLocaleCopyPreferredLanguages(); CFArrayRef languages = CFLocaleCopyPreferredLanguages();
CFIndex numLanguages = CFArrayGetCount(languages); CFIndex numLanguages = CFArrayGetCount(languages);

4
Source/utils/file_util.cpp

@ -36,7 +36,7 @@
#include <unistd.h> #include <unistd.h>
#endif #endif
#ifdef __APPLE__ #if defined(__APPLE__) && DARWIN_MAJOR_VERSION >= 9
#include <copyfile.h> #include <copyfile.h>
#endif #endif
@ -397,7 +397,7 @@ void CopyFileOverwrite(const char *from, const char *to)
LogError("Failed to copy {} to {}", from, to); LogError("Failed to copy {} to {}", from, to);
} }
#endif // _WIN32 #endif // _WIN32
#elif defined(__APPLE__) #elif defined(__APPLE__) && DARWIN_MAJOR_VERSION >= 9
::copyfile(from, to, nullptr, COPYFILE_ALL); ::copyfile(from, to, nullptr, COPYFILE_ALL);
#elif defined(DVL_HAS_FILESYSTEM) #elif defined(DVL_HAS_FILESYSTEM)
std::error_code error; std::error_code error;

2
Source/utils/stdcompat/filesystem.hpp

@ -1,6 +1,6 @@
#pragma once #pragma once
#if defined(__APPLE__) #if defined(__APPLE__) && DARWIN_MAJOR_VERSION >= 9
#include <Availability.h> #include <Availability.h>
#if (defined(__MAC_OS_X_VERSION_MIN_REQUIRED) && __MAC_OS_X_VERSION_MIN_REQUIRED < 101500) \ #if (defined(__MAC_OS_X_VERSION_MIN_REQUIRED) && __MAC_OS_X_VERSION_MIN_REQUIRED < 101500) \
|| (defined(__IPHONE_OS_VERSION_MIN_REQUIRED) && __IPHONE_OS_VERSION_MIN_REQUIRED < 130000) || (defined(__IPHONE_OS_VERSION_MIN_REQUIRED) && __IPHONE_OS_VERSION_MIN_REQUIRED < 130000)

Loading…
Cancel
Save