|
|
@@ -59,34 +59,28 @@ if(NOT DEFINED CMAKE_INSTALL_NAME_TOOL)
|
|
|
mark_as_advanced(CMAKE_INSTALL_NAME_TOOL)
|
|
|
endif()
|
|
|
|
|
|
-# Set the assumed (Pre 10.5 or Default) location of the developer tools
|
|
|
-set(OSX_DEVELOPER_ROOT "/Developer")
|
|
|
-
|
|
|
-# Use the xcode-select tool if it's available (Xcode >= 3.0 installations)
|
|
|
-find_program(CMAKE_XCODE_SELECT xcode-select)
|
|
|
-mark_as_advanced(CMAKE_XCODE_SELECT)
|
|
|
-if(CMAKE_XCODE_SELECT)
|
|
|
- execute_process(COMMAND ${CMAKE_XCODE_SELECT} "-print-path"
|
|
|
- OUTPUT_VARIABLE OSX_DEVELOPER_ROOT
|
|
|
- OUTPUT_STRIP_TRAILING_WHITESPACE)
|
|
|
-endif()
|
|
|
-
|
|
|
-# Find installed SDKs
|
|
|
-# Start with Xcode-4.3+ default SDKs directory
|
|
|
-set(_CMAKE_OSX_SDKS_DIR
|
|
|
- "${OSX_DEVELOPER_ROOT}/Platforms/MacOSX.platform/Developer/SDKs")
|
|
|
-file(GLOB _CMAKE_OSX_SDKS "${_CMAKE_OSX_SDKS_DIR}/*")
|
|
|
-
|
|
|
-# If not present, try pre-4.3 SDKs directory
|
|
|
-if(NOT _CMAKE_OSX_SDKS)
|
|
|
-set(_CMAKE_OSX_SDKS_DIR "${OSX_DEVELOPER_ROOT}/SDKs")
|
|
|
- file(GLOB _CMAKE_OSX_SDKS "${_CMAKE_OSX_SDKS_DIR}/*")
|
|
|
+# Ask xcode-select where to find /Developer or fall back to ancient location.
|
|
|
+execute_process(COMMAND xcode-select -print-path
|
|
|
+ OUTPUT_VARIABLE _stdout
|
|
|
+ OUTPUT_STRIP_TRAILING_WHITESPACE
|
|
|
+ ERROR_VARIABLE _stderr
|
|
|
+ RESULT_VARIABLE _failed)
|
|
|
+if(NOT _failed AND IS_DIRECTORY ${_stdout})
|
|
|
+ set(OSX_DEVELOPER_ROOT ${_stdout})
|
|
|
+elseif(IS_DIRECTORY "/Developer")
|
|
|
+ set(OSX_DEVELOPER_ROOT "/Developer")
|
|
|
+else()
|
|
|
+ set(OSX_DEVELOPER_ROOT "")
|
|
|
endif()
|
|
|
|
|
|
execute_process(COMMAND sw_vers -productVersion
|
|
|
OUTPUT_VARIABLE CURRENT_OSX_VERSION
|
|
|
OUTPUT_STRIP_TRAILING_WHITESPACE)
|
|
|
|
|
|
+# Save CMAKE_OSX_ARCHITECTURES from the environment.
|
|
|
+set(CMAKE_OSX_ARCHITECTURES "$ENV{CMAKE_OSX_ARCHITECTURES}" CACHE STRING
|
|
|
+ "Build architectures for OSX")
|
|
|
+
|
|
|
#----------------------------------------------------------------------------
|
|
|
# _CURRENT_OSX_VERSION - as a two-component string: 10.5, 10.6, ...
|
|
|
#
|
|
|
@@ -105,79 +99,108 @@ endif()
|
|
|
#----------------------------------------------------------------------------
|
|
|
# CMAKE_OSX_SYSROOT
|
|
|
|
|
|
-# Environment variable set by the user overrides our default.
|
|
|
-# Use the same environment variable that Xcode uses.
|
|
|
-set(ENV_SDKROOT "$ENV{SDKROOT}")
|
|
|
-
|
|
|
-# Set CMAKE_OSX_SYSROOT_DEFAULT based on _CURRENT_OSX_VERSION,
|
|
|
-# accounting for the known specially named SDKs.
|
|
|
-set(CMAKE_OSX_SYSROOT_DEFAULT
|
|
|
- "${_CMAKE_OSX_SDKS_DIR}/MacOSX${_CURRENT_OSX_VERSION}.sdk")
|
|
|
-
|
|
|
-if(_CURRENT_OSX_VERSION STREQUAL "10.4")
|
|
|
- set(CMAKE_OSX_SYSROOT_DEFAULT
|
|
|
- "${_CMAKE_OSX_SDKS_DIR}/MacOSX10.4u.sdk")
|
|
|
-endif()
|
|
|
-
|
|
|
-if(_CURRENT_OSX_VERSION STREQUAL "10.3")
|
|
|
- set(CMAKE_OSX_SYSROOT_DEFAULT
|
|
|
- "${_CMAKE_OSX_SDKS_DIR}/MacOSX10.3.9.sdk")
|
|
|
-endif()
|
|
|
+if(CMAKE_OSX_SYSROOT)
|
|
|
+ # Use the existing value without further computation to choose a default.
|
|
|
+ set(_CMAKE_OSX_SYSROOT_DEFAULT "${CMAKE_OSX_SYSROOT}")
|
|
|
+elseif(NOT "x$ENV{SDKROOT}" STREQUAL "x" AND
|
|
|
+ (NOT "x$ENV{SDKROOT}" MATCHES "/" OR IS_DIRECTORY "$ENV{SDKROOT}"))
|
|
|
+ # Use the value of SDKROOT from the environment.
|
|
|
+ set(_CMAKE_OSX_SYSROOT_DEFAULT "$ENV{SDKROOT}")
|
|
|
+elseif("${CMAKE_GENERATOR}" MATCHES Xcode
|
|
|
+ OR CMAKE_OSX_ARCHITECTURES MATCHES "[^;]"
|
|
|
+ OR NOT EXISTS "/usr/include/sys/types.h")
|
|
|
+ # Find installed SDKs in either Xcode-4.3+ or pre-4.3 SDKs directory.
|
|
|
+ set(_CMAKE_OSX_SDKS_DIR "")
|
|
|
+ if(OSX_DEVELOPER_ROOT)
|
|
|
+ foreach(d Platforms/MacOSX.platform/Developer/SDKs SDKs)
|
|
|
+ file(GLOB _CMAKE_OSX_SDKS ${OSX_DEVELOPER_ROOT}/${d}/*)
|
|
|
+ if(_CMAKE_OSX_SDKS)
|
|
|
+ set(_CMAKE_OSX_SDKS_DIR ${OSX_DEVELOPER_ROOT}/${d})
|
|
|
+ break()
|
|
|
+ endif()
|
|
|
+ endforeach()
|
|
|
+ endif()
|
|
|
|
|
|
-# Use environment or default as initial cache value:
|
|
|
-if(NOT ENV_SDKROOT STREQUAL "")
|
|
|
- set(CMAKE_OSX_SYSROOT_VALUE ${ENV_SDKROOT})
|
|
|
-else()
|
|
|
- set(CMAKE_OSX_SYSROOT_VALUE ${CMAKE_OSX_SYSROOT_DEFAULT})
|
|
|
+ if(_CMAKE_OSX_SDKS_DIR)
|
|
|
+ # Select SDK for current OSX version accounting for the known
|
|
|
+ # specially named SDKs.
|
|
|
+ set(_CMAKE_OSX_SDKS_VER_SUFFIX_10.4 "u")
|
|
|
+ set(_CMAKE_OSX_SDKS_VER_SUFFIX_10.3 ".9")
|
|
|
+ set(_CMAKE_OSX_SDKS_VER ${_CURRENT_OSX_VERSION}${_CMAKE_OSX_SDKS_VER_SUFFIX_${_CURRENT_OSX_VERSION}})
|
|
|
+ set(_CMAKE_OSX_SYSROOT_DEFAULT
|
|
|
+ "${_CMAKE_OSX_SDKS_DIR}/MacOSX${_CMAKE_OSX_SDKS_VER}.sdk")
|
|
|
+ else()
|
|
|
+ # Assume developer files are in root (such as Xcode 4.5 command-line tools).
|
|
|
+ set(_CMAKE_OSX_SYSROOT_DEFAULT "")
|
|
|
+ endif()
|
|
|
endif()
|
|
|
|
|
|
# Set cache variable - end user may change this during ccmake or cmake-gui configure.
|
|
|
-set(CMAKE_OSX_SYSROOT ${CMAKE_OSX_SYSROOT_VALUE} CACHE PATH
|
|
|
+# Choose the type based on the current value.
|
|
|
+set(_CMAKE_OSX_SYSROOT_TYPE STRING)
|
|
|
+foreach(v CMAKE_OSX_SYSROOT _CMAKE_OSX_SYSROOT_DEFAULT)
|
|
|
+ if("x${${v}}" MATCHES "/")
|
|
|
+ set(_CMAKE_OSX_SYSROOT_TYPE PATH)
|
|
|
+ break()
|
|
|
+ endif()
|
|
|
+endforeach()
|
|
|
+set(CMAKE_OSX_SYSROOT "${_CMAKE_OSX_SYSROOT_DEFAULT}" CACHE ${_CMAKE_OSX_SYSROOT_TYPE}
|
|
|
"The product will be built against the headers and libraries located inside the indicated SDK.")
|
|
|
|
|
|
-#----------------------------------------------------------------------------
|
|
|
-function(SanityCheckSDKAndDeployTarget _sdk_path _deploy)
|
|
|
- if(_deploy STREQUAL "")
|
|
|
- return()
|
|
|
+# Transform the cached value to something we can use.
|
|
|
+set(_CMAKE_OSX_SYSROOT_ORIG "${CMAKE_OSX_SYSROOT}")
|
|
|
+set(_CMAKE_OSX_SYSROOT_PATH "")
|
|
|
+if(CMAKE_OSX_SYSROOT)
|
|
|
+ if("x${CMAKE_OSX_SYSROOT}" MATCHES "/")
|
|
|
+ # This is a path to the SDK. Make sure it exists.
|
|
|
+ if(NOT IS_DIRECTORY "${CMAKE_OSX_SYSROOT}")
|
|
|
+ message(WARNING "Ignoring CMAKE_OSX_SYSROOT value:\n ${CMAKE_OSX_SYSROOT}\n"
|
|
|
+ "because the directory does not exist.")
|
|
|
+ set(CMAKE_OSX_SYSROOT "")
|
|
|
+ set(_CMAKE_OSX_SYSROOT_ORIG "")
|
|
|
+ endif()
|
|
|
+ set(_CMAKE_OSX_SYSROOT_PATH "${CMAKE_OSX_SYSROOT}")
|
|
|
+ else()
|
|
|
+ # Transform the sdk name into a path.
|
|
|
+ execute_process(
|
|
|
+ COMMAND xcodebuild -sdk ${CMAKE_OSX_SYSROOT} -version Path
|
|
|
+ OUTPUT_VARIABLE _stdout
|
|
|
+ OUTPUT_STRIP_TRAILING_WHITESPACE
|
|
|
+ ERROR_VARIABLE _stderr
|
|
|
+ RESULT_VARIABLE _failed
|
|
|
+ )
|
|
|
+ if(NOT _failed AND IS_DIRECTORY "${_stdout}")
|
|
|
+ set(_CMAKE_OSX_SYSROOT_PATH "${_stdout}")
|
|
|
+ # For non-Xcode generators use the path.
|
|
|
+ if(NOT "${CMAKE_GENERATOR}" MATCHES "Xcode")
|
|
|
+ set(CMAKE_OSX_SYSROOT "${_CMAKE_OSX_SYSROOT_PATH}")
|
|
|
+ endif()
|
|
|
+ endif()
|
|
|
endif()
|
|
|
+endif()
|
|
|
|
|
|
- if(_sdk_path STREQUAL "")
|
|
|
- message(FATAL_ERROR "CMAKE_OSX_DEPLOYMENT_TARGET='${_deploy}' but CMAKE_OSX_SYSROOT is empty... - either set CMAKE_OSX_SYSROOT to a valid SDK or set CMAKE_OSX_DEPLOYMENT_TARGET to empty")
|
|
|
+# Make sure the combination of SDK and Deployment Target are allowed
|
|
|
+if(CMAKE_OSX_DEPLOYMENT_TARGET)
|
|
|
+ if("${_CMAKE_OSX_SYSROOT_PATH}" MATCHES "^.*/MacOSX([0-9]+\\.[0-9]+)[^/]*\\.sdk")
|
|
|
+ set(_sdk_ver "${CMAKE_MATCH_1}")
|
|
|
+ elseif("${_CMAKE_OSX_SYSROOT_ORIG}" MATCHES "^macosx([0-9]+\\.[0-9]+)$")
|
|
|
+ set(_sdk_ver "${CMAKE_MATCH_1}")
|
|
|
+ else()
|
|
|
+ message(FATAL_ERROR
|
|
|
+ "CMAKE_OSX_DEPLOYMENT_TARGET is '${CMAKE_OSX_DEPLOYMENT_TARGET}' "
|
|
|
+ "but CMAKE_OSX_SYSROOT:\n \"${_CMAKE_OSX_SYSROOT_ORIG}\"\n"
|
|
|
+ "is not set to a MacOSX SDK with a recognized version. "
|
|
|
+ "Either set CMAKE_OSX_SYSROOT to a valid SDK or set "
|
|
|
+ "CMAKE_OSX_DEPLOYMENT_TARGET to empty.")
|
|
|
endif()
|
|
|
-
|
|
|
- string(REGEX REPLACE "(.*MacOSX*)(....)(.*\\.sdk)" "\\2" SDK "${_sdk_path}")
|
|
|
- if(_deploy GREATER "${SDK}")
|
|
|
- message(FATAL_ERROR "CMAKE_OSX_DEPLOYMENT_TARGET (${_deploy}) is greater than CMAKE_OSX_SYSROOT SDK (${_sdk_path}). Please set CMAKE_OSX_DEPLOYMENT_TARGET to ${SDK} or lower")
|
|
|
+ if(CMAKE_OSX_DEPLOYMENT_TARGET VERSION_GREATER "${_sdk_ver}")
|
|
|
+ message(FATAL_ERROR
|
|
|
+ "CMAKE_OSX_DEPLOYMENT_TARGET (${CMAKE_OSX_DEPLOYMENT_TARGET}) "
|
|
|
+ "is greater than CMAKE_OSX_SYSROOT SDK:\n ${_CMAKE_OSX_SYSROOT_ORIG}\n"
|
|
|
+ "Please set CMAKE_OSX_DEPLOYMENT_TARGET to ${_sdk_ver} or lower.")
|
|
|
endif()
|
|
|
-endfunction()
|
|
|
-#----------------------------------------------------------------------------
|
|
|
-
|
|
|
-# Make sure the combination of SDK and Deployment Target are allowed
|
|
|
-SanityCheckSDKAndDeployTarget("${CMAKE_OSX_SYSROOT}" "${CMAKE_OSX_DEPLOYMENT_TARGET}")
|
|
|
-
|
|
|
-# set _CMAKE_OSX_MACHINE to uname -m
|
|
|
-execute_process(COMMAND uname -m
|
|
|
- OUTPUT_STRIP_TRAILING_WHITESPACE
|
|
|
- OUTPUT_VARIABLE _CMAKE_OSX_MACHINE)
|
|
|
-
|
|
|
-# check for Power PC and change to ppc
|
|
|
-if(_CMAKE_OSX_MACHINE MATCHES "Power")
|
|
|
- set(_CMAKE_OSX_MACHINE ppc)
|
|
|
-endif()
|
|
|
-
|
|
|
-# check for environment variable CMAKE_OSX_ARCHITECTURES
|
|
|
-# if it is set.
|
|
|
-if(NOT "$ENV{CMAKE_OSX_ARCHITECTURES}" STREQUAL "")
|
|
|
- set(CMAKE_OSX_ARCHITECTURES_VALUE "$ENV{CMAKE_OSX_ARCHITECTURES}")
|
|
|
-else()
|
|
|
- set(CMAKE_OSX_ARCHITECTURES_VALUE "")
|
|
|
endif()
|
|
|
|
|
|
-# now put _CMAKE_OSX_MACHINE into the cache
|
|
|
-set(CMAKE_OSX_ARCHITECTURES ${CMAKE_OSX_ARCHITECTURES_VALUE} CACHE STRING
|
|
|
- "Build architectures for OSX")
|
|
|
-
|
|
|
-
|
|
|
if("${CMAKE_BACKWARDS_COMPATIBILITY}" MATCHES "^1\\.[0-6]$")
|
|
|
set(CMAKE_SHARED_MODULE_CREATE_C_FLAGS
|
|
|
"${CMAKE_SHARED_MODULE_CREATE_C_FLAGS} -flat_namespace -undefined suppress")
|