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 01:59:41 -0000 @@ -54,39 +54,175 @@ 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} +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 "([0-9]+)\\.([0-9])" "\\1" CMAKE_OSX_DEPLOYMENT_TARGET_DEFAULT ${CURRENT_OSX_VERSION}) +# 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") + +# Get any Environment variables that were set +SET (ENV_OSX_DEPLOYMENT_TARGET "$ENV{CMAKE_OSX_DEPLOYMENT_TARGET}") +SET (ENV_OSX_SYSROOT "$ENV{CMAKE_OSX_SYSROOT}") + + +# MACOSX_DEPLOYMENT_TARGET IS set but CMAKE_OSX_SYSROOT is NOT set +IF(NOT ENV_OSX_DEPLOYMENT_TARGET STREQUAL "") + SET(CMAKE_OSX_DEPLOYMENT_TARGET ${ENV_OSX_DEPLOYMENT_TARGET} CACHE STRING "OS X Version to target deployment.") + IF( ENV_OSX_SYSROOT STREQUAL "") + + # Make the SDK match the deployment target OS Version + if (ENV_OSX_DEPLOYMENT_TARGET GREATER "10.4") + SET(CMAKE_OSX_SYSROOT "${OSX_DEVELOPER_ROOT}/SDKs/MacOSX${CMAKE_OSX_DEPLOYMENT_TARGET_DEFAULT}.sdk") + endif(ENV_OSX_DEPLOYMENT_TARGET GREATER "10.4") + + if (ENV_OSX_DEPLOYMENT_TARGET EQUAL "10.4") + SET(CMAKE_OSX_SYSROOT "${OSX_DEVELOPER_ROOT}/SDKs/MacOSX10.4u.sdk") + endif(ENV_OSX_DEPLOYMENT_TARGET EQUAL "10.4") + + if (ENV_OSX_DEPLOYMENT_TARGET EQUAL "10.3") + SET(CMAKE_OSX_SYSROOT "${OSX_DEVELOPER_ROOT}/SDKs/MacOSX10.3.9.sdk") + endif(ENV_OSX_DEPLOYMENT_TARGET EQUAL "10.3") + + ENDIF( ENV_OSX_SYSROOT STREQUAL "") +ENDIF(NOT ENV_OSX_DEPLOYMENT_TARGET STREQUAL "") + +# MACOSX_DEPLOYMENT_TARGET is NOT set but CMAKE_OSX_SYSROOT IS set +IF( ENV_OSX_DEPLOYMENT_TARGET STREQUAL "") + SET(CMAKE_OSX_SYSROOT ${ENV_OSX_SYSROOT} CACHE PATH "OS X SDK Version to build against.") + IF(NOT ENV_OSX_SYSROOT STREQUAL "") + + # Make the deployment target OS Version match the SDK + if (ENV_OSX_SYSROOT MATCHES "${OSX_DEVELOPER_ROOT}/SDKs/MacOSX10.4u.sdk") + SET(CMAKE_OSX_DEPLOYMENT_TARGET "10.4") + endif (ENV_OSX_SYSROOT MATCHES "${OSX_DEVELOPER_ROOT}/SDKs/MacOSX10.4u.sdk") + + if (ENV_OSX_SYSROOT MATCHES "${OSX_DEVELOPER_ROOT}/SDKs/MacOSX10.3.9.sdk") + SET(CMAKE_OSX_DEPLOYMENT_TARGET "10.3") + endif (ENV_OSX_SYSROOT MATCHES "${OSX_DEVELOPER_ROOT}/SDKs/MacOSX10.3.9.sdk") + + if (ENV_OSX_SYSROOT MATCHES "${OSX_DEVELOPER_ROOT}/SDKs/MacOSX${CMAKE_OSX_DEPLOYMENT_TARGET_DEFAULT}.sdk") + SET(CMAKE_OSX_DEPLOYMENT_TARGET "${CMAKE_OSX_DEPLOYMENT_TARGET_DEFAULT}") + endif (ENV_OSX_SYSROOT MATCHES "${OSX_DEVELOPER_ROOT}/SDKs/MacOSX${CMAKE_OSX_DEPLOYMENT_TARGET_DEFAULT}.sdk") + + ENDIF(NOT ENV_OSX_SYSROOT STREQUAL "") +ENDIF( ENV_OSX_DEPLOYMENT_TARGET STREQUAL "") + +#---------------------------------------------------------------------------- +function (SanityCheckOSXSDKAndDeployTarget _deploy_trgt _sdk_path) + SET (notSane 0) + SET (breakTest 0) + #MESSAGE(STATUS "Checking 10.3.9 sanity.. ") + if ( ${_deploy_trgt} EQUAL "10.3") + IF ( NOT ${_sdk_path} STREQUAL "${OSX_DEVELOPER_ROOT}/SDKs/MacOSX10.3.9.sdk") + message (STATUS "10.3.9 NOT Sane") + SET (notSane 1) + ENDIF ( NOT ${_sdk_path} STREQUAL "${OSX_DEVELOPER_ROOT}/SDKs/MacOSX10.3.9.sdk" ) + SET (breakTest 1) + endif ( ${_deploy_trgt} EQUAL "10.3") + + # MESSAGE(STATUS "Checking 10.4 sanity.. ") + if ( ${_deploy_trgt} EQUAL "10.4") + IF ( NOT ${_sdk_path} STREQUAL "${OSX_DEVELOPER_ROOT}/SDKs/MacOSX10.4u.sdk") + message (STATUS "10.4 NOT Sane") + SET (notSane 1) + ENDIF ( NOT ${_sdk_path} STREQUAL "${OSX_DEVELOPER_ROOT}/SDKs/MacOSX10.4u.sdk" ) + SET (breakTest 1) + endif ( ${_deploy_trgt} EQUAL "10.4") + + #MESSAGE(STATUS "Checking 10.5 and above sanity.. ") + IF ( breakTest EQUAL 0 ) + IF ( NOT ${_sdk_path} STREQUAL "${OSX_DEVELOPER_ROOT}/SDKs/MacOSX${_deploy_trgt}.sdk") + message (STATUS "10.5 NOT Sane") + SET (notSane 1) + ENDIF ( NOT ${_sdk_path} STREQUAL "${OSX_DEVELOPER_ROOT}/SDKs/MacOSX${_deploy_trgt}.sdk") + ENDIF ( breakTest EQUAL 0 ) + + if (notSane EQUAL 1) + message (STATUS "Both environment variables CMAKE_OSX_DEPLOYMENT_TARGET and CMAKE_OSX_SYSROOT were set but are not compatible") + message (STATUS "CMAKE_OSX_DEPLOYMENT_TARGET: ${_deploy_trgt}") + message (STATUS "CMAKE_OSX_SYSROOT: ${_sdk_path}") + message (FATAL "This can cause unpredictable results and probably will not compile correctly. Please correct the values.") + endif (notSane EQUAL 1) +endfunction(SanityCheckOSXSDKAndDeployTarget _os_version _sdk_path) + + +# MACOSX_DEPLOYMENT_TARGET IS set AND CMAKE_OSX_SYSROOT IS set +IF(NOT ENV_OSX_DEPLOYMENT_TARGET STREQUAL "") + IF(NOT ENV_OSX_SYSROOT STREQUAL "") + # MESSAGE(STATUS "Both ENV Vars are Set... Checking sanity.. ") + SET(CMAKE_OSX_SYSROOT ${ENV_OSX_SYSROOT} CACHE PATH "OS X SDK Version to build against.") + SET(CMAKE_OSX_DEPLOYMENT_TARGET ${ENV_OSX_DEPLOYMENT_TARGET} CACHE STRING "OS X Version to target deployment.") + + SanityCheckOSXSDKAndDeployTarget( ${CMAKE_OSX_DEPLOYMENT_TARGET} ${CMAKE_OSX_SYSROOT}) + + ENDIF(NOT ENV_OSX_SYSROOT STREQUAL "") +ENDIF(NOT ENV_OSX_DEPLOYMENT_TARGET STREQUAL "") + +if (NOT CMAKE_OSX_SYSROOT) + SET (CMAKE_OSX_SYSROOT ${CMAKE_OSX_SYSROOT_DEFAULT} CACHE PATH "OS X SDK Version to build against.") +endif (NOT CMAKE_OSX_SYSROOT) +if (NOT CMAKE_OSX_DEPLOYMENT_TARGET) + SET (CMAKE_OSX_DEPLOYMENT_TARGET ${CMAKE_OSX_DEPLOYMENT_TARGET_DEFAULT} CACHE STRING "OS X Version to target deployment.") +endif (NOT 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 "") + +#-- Not real sure about this next part so I am leaving the check out for now.. +if(0) +if ( NOT ${CMAKE_OSX_ARCHITECTURES_DEFAULT} STREQUAL "${_CMAKE_OSX_MACHINE}") + if ( ${CMAKE_OSX_DEPLOYMENT_TARGET} LESS "10.4") + message(FATAL " The Default arch ${CMAKE_OSX_ARCHITECTURES_DEFAULT} does not match ${_CMAKE_OSX_MACHINE} and you have a deployment of 10.3.9. You need to have a deployment target of at least 10.4") + endif ( ${CMAKE_OSX_DEPLOYMENT_TARGET} LESS "10.4") +endif ( NOT ${CMAKE_OSX_ARCHITECTURES_DEFAULT} STREQUAL "${_CMAKE_OSX_MACHINE}") +endif(0) +# 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) + IF("${CMAKE_BACKWARDS_COMPATIBILITY}" MATCHES "^1\\.[0-6]$")