Index: Modules/Platform/Darwin.cmake =================================================================== RCS file: /cvsroot/CMake/CMake/Modules/Platform/Darwin.cmake,v retrieving revision 1.49 diff -u -r1.49 Darwin.cmake --- Modules/Platform/Darwin.cmake 19 Aug 2008 18:23:38 -0000 1.49 +++ Modules/Platform/Darwin.cmake 18 Sep 2008 19:15:42 -0000 @@ -54,39 +54,103 @@ IF(NOT DEFINED CMAKE_INSTALL_NAME_TOOL) SET(CMAKE_INSTALL_NAME_TOOL install_name_tool) ENDIF(NOT DEFINED CMAKE_INSTALL_NAME_TOOL) + +SET (OSX_DEVELOPER_ROOT "/Developer") # find installed SDKs -FILE(GLOB _CMAKE_OSX_SDKS "/Developer/SDKs/*") -# setup for universal binaries if sysroot exists -IF(_CMAKE_OSX_SDKS) - # find the most recent sdk for the default - LIST(SORT _CMAKE_OSX_SDKS) - LIST(REVERSE _CMAKE_OSX_SDKS) - LIST(GET _CMAKE_OSX_SDKS 0 _CMAKE_OSX_SDKS) - SET(CMAKE_OSX_SYSROOT_DEFAULT "${_CMAKE_OSX_SDKS}") - # use the environment variable CMAKE_OSX_SYSROOT if it is set - IF(NOT "$ENV{CMAKE_OSX_SYSROOT}" STREQUAL "") - SET(_CMAKE_OSX_SDKS "$ENV{CMAKE_OSX_SYSROOT}") - ENDIF(NOT "$ENV{CMAKE_OSX_SYSROOT}" STREQUAL "") - SET(CMAKE_OSX_SYSROOT ${_CMAKE_OSX_SDKS} CACHE PATH - "isysroot used for universal binary support") - # set _CMAKE_OSX_MACHINE to umame -m - EXEC_PROGRAM(uname ARGS -m 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("${_CMAKE_OSX_MACHINE}" MATCHES "Power") - # set the default based on uname and not the environment variable - # as that is what is used to change it! - SET(CMAKE_OSX_ARCHITECTURES_DEFAULT ${_CMAKE_OSX_MACHINE}) - # check for environment variable CMAKE_OSX_ARCHITECTURES - # if it is set. - IF(NOT "$ENV{CMAKE_OSX_ARCHITECTURES}" STREQUAL "") - SET(_CMAKE_OSX_MACHINE "$ENV{CMAKE_OSX_ARCHITECTURES}") - ENDIF(NOT "$ENV{CMAKE_OSX_ARCHITECTURES}" STREQUAL "") - # now put _CMAKE_OSX_MACHINE into the cache - SET(CMAKE_OSX_ARCHITECTURES ${_CMAKE_OSX_MACHINE} - CACHE STRING "Build architectures for OSX") -ENDIF(_CMAKE_OSX_SDKS) +FILE(GLOB _CMAKE_OSX_SDKS "${OSX_DEVELOPER_ROOT}/SDKs/*") + +IF(NOT _CMAKE_OSX_SDKS) + EXEC_PROGRAM(/usr/bin/xcode-select ARGS "-print-path" OUTPUT_VARIABLE OSX_DEVELOPER_ROOT) + FILE(GLOB _CMAKE_OSX_SDKS "${OSX_DEVELOPER_ROOT}/SDKs/*") +ENDIF(NOT _CMAKE_OSX_SDKS) + +# Find out the current version of OS X and set the CMAKE_OSX_DEPLOYMENT_TARGET to that version +# unless over ridden by an environment variable +EXEC_PROGRAM(sw_vers ARGS -productVersion OUTPUT_VARIABLE CURRENT_OSX_VERSION) +#message(STATUS "CURRENT_OSX_VERSION: ${CURRENT_OSX_VERSION}") +STRING(REGEX REPLACE "(10?)\\.([0-9]+)\\.([0-9]+)" "\\1.\\2" CMAKE_OSX_DEPLOYMENT_TARGET_DEFAULT ${CURRENT_OSX_VERSION}) + +SET(CMAKE_OSX_DEPLOYMENT_TARGET ${CMAKE_OSX_DEPLOYMENT_TARGET_DEFAULT} CACHE + STRING "Minimum OS X Version to target for deployment.") +# MESSAGE(STATUS "CMAKE_OSX_DEPLOYMENT_TARGET_DEFAULT: ${CMAKE_OSX_DEPLOYMENT_TARGET_DEFAULT}") + +# This next line assumes that Apple will start being consistent with +# the naming of the SDKs from here on out... +if (CMAKE_OSX_DEPLOYMENT_TARGET_DEFAULT GREATER "10.4") + SET(CMAKE_OSX_SYSROOT_DEFAULT "${OSX_DEVELOPER_ROOT}/SDKs/MacOSX${CMAKE_OSX_DEPLOYMENT_TARGET_DEFAULT}.sdk") +endif(CMAKE_OSX_DEPLOYMENT_TARGET_DEFAULT GREATER "10.4") + +if (CMAKE_OSX_DEPLOYMENT_TARGET_DEFAULT EQUAL "10.4") + SET(CMAKE_OSX_SYSROOT_DEFAULT "${OSX_DEVELOPER_ROOT}/SDKs/MacOSX10.4u.sdk") +endif(CMAKE_OSX_DEPLOYMENT_TARGET_DEFAULT EQUAL "10.4") + +if (CMAKE_OSX_DEPLOYMENT_TARGET_DEFAULT EQUAL "10.3") + SET(CMAKE_OSX_SYSROOT_DEFAULT "${OSX_DEVELOPER_ROOT}/SDKs/MacOSX10.3.9.sdk") +endif(CMAKE_OSX_DEPLOYMENT_TARGET_DEFAULT EQUAL "10.3") + +# Set our SYSROOT and DEPLOYMENT variables into the cache so that they can be +# changed by the user if needed. +SET(CMAKE_OSX_SYSROOT "${CMAKE_OSX_SYSROOT_DEFAULT}" CACHE PATH + "Maximum Allowed Version to Deploy your compiled code.") +SET(CMAKE_OSX_DEPLOYMENT_TARGET ${CMAKE_OSX_DEPLOYMENT_TARGET_DEFAULT} CACHE + STRING "Minimum OS X Version to target for deployment.") + +# Get any Environment variables that were set by the user +# These environment variables are what Xcode uses so those are a good choice rather +# defining new ones. +SET (ENV_MACOSX_DEPLOYMENT_TARGET "$ENV{MACOSX_DEPLOYMENT_TARGET}") +SET (ENV_MACOSX_SDKROOT "$ENV{SDKROOT}") + +# See if an environment variable needs is set and over ride the default with the +# environment variables +IF(NOT ENV_MACOSX_DEPLOYMENT_TARGET STREQUAL "") + SET(CMAKE_OSX_DEPLOYMENT_TARGET ${ENV_MACOSX_DEPLOYMENT_TARGET}) +ENDIF(NOT ENV_MACOSX_DEPLOYMENT_TARGET STREQUAL "") + +IF(NOT ENV_MACOSX_SDKROOT STREQUAL "") + SET(CMAKE_OSX_SYSROOT ${ENV_MACOSX_SDKROOT}) +ENDIF(NOT ENV_MACOSX_SDKROOT STREQUAL "") + +#---------------------------------------------------------------------------- +function(SanityCheckSDKAndDeployTarget _sdk_path _deploy) + STRING (REGEX REPLACE "(.*MacOSX*)(....)(.*\\.sdk)" "\\2" SDK ${_sdk_path} ) + if (_deploy GREATER SDK) + message (FATAL_ERROR "MACOSX_DEPLOYMENT_TARGET (${_deploy}) is greater than SDK (${_sdk_path}). Please set the MACOSX_DEPLOYMENT_TARGET to ${SDK}") + endif (_deploy GREATER SDK) +endfunction(SanityCheckSDKAndDeployTarget _sdk_path _deploy) +#---------------------------------------------------------------------------- + +if (NOT CMAKE_OSX_SYSROOT) + SET (CMAKE_OSX_SYSROOT ${CMAKE_OSX_SYSROOT_DEFAULT} ) +endif (NOT CMAKE_OSX_SYSROOT) +if (NOT CMAKE_OSX_DEPLOYMENT_TARGET) + SET (CMAKE_OSX_DEPLOYMENT_TARGET ${CMAKE_OSX_DEPLOYMENT_TARGET_DEFAULT} ) +endif (NOT CMAKE_OSX_DEPLOYMENT_TARGET) + +SanityCheckSDKAndDeployTarget(${CMAKE_OSX_SYSROOT} ${CMAKE_OSX_DEPLOYMENT_TARGET}) + +# message (STATUS "CMAKE_OSX_DEPLOYMENT_TARGET_DEFAULT: ${CMAKE_OSX_DEPLOYMENT_TARGET_DEFAULT}") +# message (STATUS "CMAKE_OSX_DEPLOYMENT_TARGET: ${CMAKE_OSX_DEPLOYMENT_TARGET}") +# message (STATUS "CMAKE_OSX_SYSROOT_DEFAULT: ${CMAKE_OSX_SYSROOT_DEFAULT}") +# message (STATUS "CMAKE_OSX_SYSROOT: ${CMAKE_OSX_SYSROOT}") + +# set _CMAKE_OSX_MACHINE to umame -m +EXEC_PROGRAM(uname ARGS -m 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("${_CMAKE_OSX_MACHINE}" MATCHES "Power") +# set the default based on uname and not the environment variable +# as that is what is used to change it! +SET(CMAKE_OSX_ARCHITECTURES_DEFAULT ${_CMAKE_OSX_MACHINE}) +# check for environment variable CMAKE_OSX_ARCHITECTURES +# if it is set. +IF(NOT "$ENV{CMAKE_OSX_ARCHITECTURES}" STREQUAL "") + SET(_CMAKE_OSX_MACHINE "$ENV{CMAKE_OSX_ARCHITECTURES}") +ENDIF(NOT "$ENV{CMAKE_OSX_ARCHITECTURES}" STREQUAL "") + +# now put _CMAKE_OSX_MACHINE into the cache +SET(CMAKE_OSX_ARCHITECTURES ${_CMAKE_OSX_MACHINE} CACHE STRING "Build architectures for OSX") IF("${CMAKE_BACKWARDS_COMPATIBILITY}" MATCHES "^1\\.[0-6]$")