From a77cc0cb35455d12a84ccde1e7457345448a375c Mon Sep 17 00:00:00 2001 From: Matthias Melcher Date: Mon, 4 Nov 2024 22:35:43 +0100 Subject: [PATCH] MacOS version check using try_compile: #1103 This change will work as well when cross-compiling. --- CMake/macOSMaxAllowed.c | 12 +++++------- CMake/setup.cmake | 30 +++++++++++++++--------------- 2 files changed, 20 insertions(+), 22 deletions(-) diff --git a/CMake/macOSMaxAllowed.c b/CMake/macOSMaxAllowed.c index 625bcb6af..93fff3c3d 100644 --- a/CMake/macOSMaxAllowed.c +++ b/CMake/macOSMaxAllowed.c @@ -1,8 +1,6 @@ -#include -#include -int main(int argc, char **argv) { - unsigned int ver = __MAC_OS_X_VERSION_MAX_ALLOWED; - printf("%d.%d.%d", ver/10000, (ver/100)%100, ver%100); - return 0; -} +#include +#if __MAC_OS_X_VERSION_MAX_ALLOWED < SDK_VERSION_CHECK +#error __MAC_OS_X_VERSION_MAX_ALLOWED < SDK_VERSION_CHECK +#endif +int main(int, char**) { return 0; } diff --git a/CMake/setup.cmake b/CMake/setup.cmake index 8c06f2782..fa9534c0a 100644 --- a/CMake/setup.cmake +++ b/CMake/setup.cmake @@ -111,25 +111,23 @@ if(CMAKE_GENERATOR MATCHES "Xcode") endif() if(APPLE) + # Check if the __MAC_OS_X_VERSION_MAX_ALLOWED compile time macro is at least + # the version encoded in SDK_VERSION and return TRUE or FALSE in RESULT. + macro(CHECK_OSX_MAX_ALLOWED SDK_VERSION RESULT) + try_compile(LOCAL_RESULT + ${CMAKE_BINARY_DIR}/CMakeTmpDup + SOURCES ${CMAKE_CURRENT_SOURCE_DIR}/CMake/macOSMaxAllowed.c + COMPILE_DEFINITIONS -DSDK_VERSION_CHECK=${SDK_VERSION} + ) + set(${RESULT} ${LOCAL_RESULT}) + endmacro() + # APPLE macOS setup set(HAVE_STRCASECMP 1) set(HAVE_DIRENT_H 1) set(HAVE_SNPRINTF 1) set(HAVE_VSNPRINTF 1) set(HAVE_SCANDIR 1) set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -Wno-deprecated") - # Retrieve the value of the macOS compile-time macro - # __MAC_OS_X_VERSION_MAX_ALLOWED. This is needed to decide which - # frameworks must be linked later. - try_run( - RUN_RESULT COMPILE_RESULT - SOURCES ${CMAKE_CURRENT_SOURCE_DIR}/CMake/macOSMaxAllowed.c - RUN_OUTPUT_VARIABLE MAC_OS_X_VERSION_MAX_ALLOWED - ) - if (NOT COMPILE_RESULT) - set(MAC_OS_X_VERSION_MAX_ALLOWED ${CURRENT_OSX_VERSION}) - endif() - fl_debug_var(CMAKE_OSX_DEPLOYMENT_TARGET) - fl_debug_var(MAC_OS_X_VERSION_MAX_ALLOWED) if(FLTK_BACKEND_X11) if(NOT(${CMAKE_SYSTEM_VERSION} VERSION_LESS 17.0.0)) # a.k.a. macOS version ≥ 10.13 set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -D_LIBCPP_HAS_THREAD_API_PTHREAD") @@ -137,10 +135,12 @@ if(APPLE) else() set(FLTK_COCOA_FRAMEWORKS "-framework Cocoa") if (NOT (CMAKE_OSX_ARCHITECTURES STREQUAL "ppc" OR CMAKE_OSX_ARCHITECTURES STREQUAL "i386")) - if(${MAC_OS_X_VERSION_MAX_ALLOWED} VERSION_GREATER_EQUAL 11.0) + CHECK_OSX_MAX_ALLOWED(110000 SDK_AVAILABLE) # at least SDK 11.0.0 ? + if (SDK_AVAILABLE) list(APPEND FLTK_COCOA_FRAMEWORKS "-weak_framework UniformTypeIdentifiers") endif() - if(${MAC_OS_X_VERSION_MAX_ALLOWED} VERSION_GREATER_EQUAL 15.0) + CHECK_OSX_MAX_ALLOWED(150000 SDK_AVAILABLE) # at least SDK 15.0.0 ? + if (SDK_AVAILABLE) list(APPEND FLTK_COCOA_FRAMEWORKS "-weak_framework ScreenCaptureKit") endif() endif()