2007-08-09 22:45:23 +04:00
SET ( APPLE 1 )
2007-11-08 17:09:14 +03:00
# Darwin versions:
2010-02-11 18:50:43 +03:00
# 6.x == Mac OSX 10.2 (Jaguar)
# 7.x == Mac OSX 10.3 (Panther)
# 8.x == Mac OSX 10.4 (Tiger)
# 9.x == Mac OSX 10.5 (Leopard)
# 10.x == Mac OSX 10.6 (Snow Leopard)
2007-11-08 17:09:14 +03:00
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}" )
# Do not use the "-Wl,-search_paths_first" flag with the OSX 10.2 compiler.
# Done this way because it is too early to do a TRY_COMPILE.
IF ( NOT DEFINED HAVE_FLAG_SEARCH_PATHS_FIRST )
SET ( HAVE_FLAG_SEARCH_PATHS_FIRST 0 )
IF ( "${DARWIN_MAJOR_VERSION}" GREATER 6 )
SET ( HAVE_FLAG_SEARCH_PATHS_FIRST 1 )
ENDIF ( "${DARWIN_MAJOR_VERSION}" GREATER 6 )
ENDIF ( NOT DEFINED HAVE_FLAG_SEARCH_PATHS_FIRST )
# More desirable, but does not work:
#INCLUDE(CheckCXXCompilerFlag)
#CHECK_CXX_COMPILER_FLAG("-Wl,-search_paths_first" HAVE_FLAG_SEARCH_PATHS_FIRST)
2003-10-15 18:14:13 +04:00
SET ( CMAKE_SHARED_LIBRARY_PREFIX "lib" )
SET ( CMAKE_SHARED_LIBRARY_SUFFIX ".dylib" )
SET ( CMAKE_SHARED_MODULE_PREFIX "lib" )
SET ( CMAKE_SHARED_MODULE_SUFFIX ".so" )
2002-11-11 17:11:31 +03:00
SET ( CMAKE_MODULE_EXISTS 1 )
2002-11-08 23:46:08 +03:00
SET ( CMAKE_DL_LIBS "" )
2007-11-08 17:09:14 +03:00
2009-01-29 21:41:58 +03:00
SET ( CMAKE_C_OSX_COMPATIBILITY_VERSION_FLAG "-compatibility_version " )
SET ( CMAKE_C_OSX_CURRENT_VERSION_FLAG "-current_version " )
2008-07-09 18:09:46 +04:00
SET ( CMAKE_CXX_OSX_COMPATIBILITY_VERSION_FLAG "${CMAKE_C_OSX_COMPATIBILITY_VERSION_FLAG}" )
SET ( CMAKE_CXX_OSX_CURRENT_VERSION_FLAG "${CMAKE_C_OSX_CURRENT_VERSION_FLAG}" )
2007-11-08 17:09:14 +03:00
SET ( CMAKE_C_LINK_FLAGS "-headerpad_max_install_names" )
SET ( CMAKE_CXX_LINK_FLAGS "-headerpad_max_install_names" )
IF ( HAVE_FLAG_SEARCH_PATHS_FIRST )
SET ( CMAKE_C_LINK_FLAGS "-Wl,-search_paths_first ${CMAKE_C_LINK_FLAGS}" )
SET ( CMAKE_CXX_LINK_FLAGS "-Wl,-search_paths_first ${CMAKE_CXX_LINK_FLAGS}" )
ENDIF ( HAVE_FLAG_SEARCH_PATHS_FIRST )
2006-02-24 21:13:14 +03:00
SET ( CMAKE_PLATFORM_HAS_INSTALLNAME 1 )
SET ( CMAKE_SHARED_LIBRARY_CREATE_C_FLAGS "-dynamiclib -headerpad_max_install_names" )
SET ( CMAKE_SHARED_MODULE_CREATE_C_FLAGS "-bundle -headerpad_max_install_names" )
2007-04-18 00:19:36 +04:00
SET ( CMAKE_SHARED_MODULE_LOADER_C_FLAG "-Wl,-bundle_loader," )
SET ( CMAKE_SHARED_MODULE_LOADER_CXX_FLAG "-Wl,-bundle_loader," )
2006-02-09 23:05:13 +03:00
SET ( CMAKE_FIND_LIBRARY_SUFFIXES ".dylib" ".so" ".a" )
2002-11-08 23:46:08 +03:00
2007-05-18 19:57:29 +04:00
# hack: if a new cmake (which uses CMAKE_INSTALL_NAME_TOOL) runs on an old build tree
# (where install_name_tool was hardcoded) and where CMAKE_INSTALL_NAME_TOOL isn't in the cache
# and still cmake didn't fail in CMakeFindBinUtils.cmake (because it isn't rerun)
# hardcode CMAKE_INSTALL_NAME_TOOL here to install_name_tool, so it behaves as it did before, Alex
IF ( NOT DEFINED CMAKE_INSTALL_NAME_TOOL )
2008-12-30 17:11:54 +03:00
FIND_PROGRAM ( CMAKE_INSTALL_NAME_TOOL install_name_tool )
2007-05-18 19:57:29 +04:00
ENDIF ( NOT DEFINED CMAKE_INSTALL_NAME_TOOL )
2009-01-27 18:30:55 +03:00
# Set the assumed (Pre 10.5 or Default) location of the developer tools
SET ( OSX_DEVELOPER_ROOT "/Developer" )
# Find installed SDKs
FILE ( GLOB _CMAKE_OSX_SDKS "${OSX_DEVELOPER_ROOT}/SDKs/*" )
# If nothing is found there, then try locating the dev tools based on the xcode-select tool
# (available in Xcode >= 3.0 installations)
IF ( NOT _CMAKE_OSX_SDKS )
FIND_PROGRAM ( CMAKE_XCODE_SELECT xcode-select )
IF ( CMAKE_XCODE_SELECT )
EXECUTE_PROCESS ( COMMAND ${ CMAKE_XCODE_SELECT } "-print-path"
O U T P U T _ V A R I A B L E O S X _ D E V E L O P E R _ R O O T )
FILE ( GLOB _CMAKE_OSX_SDKS "${OSX_DEVELOPER_ROOT}/SDKs/*" )
ENDIF ( CMAKE_XCODE_SELECT )
ENDIF ( NOT _CMAKE_OSX_SDKS )
2010-02-11 18:50:43 +03:00
EXECUTE_PROCESS ( COMMAND sw_vers -productVersion
O U T P U T _ V A R I A B L E C U R R E N T _ O S X _ V E R S I O N
O U T P U T _ S T R I P _ T R A I L I N G _ W H I T E S P A C E )
2009-01-27 18:30:55 +03:00
2010-02-11 18:50:43 +03:00
#----------------------------------------------------------------------------
# _CURRENT_OSX_VERSION - as a two-component string: 10.5, 10.6, ...
#
STRING ( REGEX REPLACE "^([0-9]+\\.[0-9]+).*$" "\\1"
_ C U R R E N T _ O S X _ V E R S I O N " $ { C U R R E N T _ O S X _ V E R S I O N } " )
#----------------------------------------------------------------------------
# CMAKE_OSX_DEPLOYMENT_TARGET
# Set cache variable - end user may change this during ccmake or cmake-gui configure.
IF ( _CURRENT_OSX_VERSION VERSION_GREATER 10.3 )
SET ( CMAKE_OSX_DEPLOYMENT_TARGET "$ENV{MACOSX_DEPLOYMENT_TARGET}" CACHE STRING
" M i n i m u m O S X v e r s i o n t o t a r g e t f o r deployment ( at runtime ) ; n e w e r A P I s w e a k l i n k e d . S e t t o e m p t y s t r i n g f o r d e f a u l t v a l u e . " )
ENDIF ( _CURRENT_OSX_VERSION VERSION_GREATER 10.3 )
#----------------------------------------------------------------------------
# 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}" )
2009-01-27 18:30:55 +03:00
2010-02-11 18:50:43 +03:00
# Set CMAKE_OSX_SYSROOT_DEFAULT based on _CURRENT_OSX_VERSION,
# accounting for the known specially named SDKs.
SET ( CMAKE_OSX_SYSROOT_DEFAULT
" $ { O S X _ D E V E L O P E R _ R O O T } / S D K s / M a c O S X $ { _ C U R R E N T _ O S X _ V E R S I O N } . s d k " )
IF ( _CURRENT_OSX_VERSION STREQUAL "10.4" )
2009-01-27 18:30:55 +03:00
SET ( CMAKE_OSX_SYSROOT_DEFAULT
" $ { O S X _ D E V E L O P E R _ R O O T } / S D K s / M a c O S X 1 0 . 4 u . s d k " )
2010-02-11 18:50:43 +03:00
ENDIF ( _CURRENT_OSX_VERSION STREQUAL "10.4" )
2009-01-27 18:30:55 +03:00
2010-02-11 18:50:43 +03:00
IF ( _CURRENT_OSX_VERSION STREQUAL "10.3" )
2009-01-27 18:30:55 +03:00
SET ( CMAKE_OSX_SYSROOT_DEFAULT
" $ { O S X _ D E V E L O P E R _ R O O T } / S D K s / M a c O S X 1 0 . 3 . 9 . s d k " )
2010-02-11 18:50:43 +03:00
ENDIF ( _CURRENT_OSX_VERSION STREQUAL "10.3" )
2009-01-27 18:30:55 +03:00
2010-02-11 18:50:43 +03:00
# Use environment or default as initial cache value:
2009-01-27 18:30:55 +03:00
IF ( NOT ENV_SDKROOT STREQUAL "" )
2009-01-29 22:57:38 +03:00
SET ( CMAKE_OSX_SYSROOT_VALUE ${ ENV_SDKROOT } )
2009-01-27 23:51:43 +03:00
ELSE ( NOT ENV_SDKROOT STREQUAL "" )
2009-01-29 22:57:38 +03:00
SET ( CMAKE_OSX_SYSROOT_VALUE ${ CMAKE_OSX_SYSROOT_DEFAULT } )
2009-01-27 18:30:55 +03:00
ENDIF ( NOT ENV_SDKROOT STREQUAL "" )
2010-02-11 18:50:43 +03:00
# Set cache variable - end user may change this during ccmake or cmake-gui configure.
2009-01-29 22:57:38 +03:00
SET ( CMAKE_OSX_SYSROOT ${ CMAKE_OSX_SYSROOT_VALUE } CACHE PATH
2009-01-27 18:30:55 +03:00
" T h e p r o d u c t w i l l b e b u i l t a g a i n s t t h e h e a d e r s a n d l i b r a r i e s l o c a t e d i n s i d e t h e i n d i c a t e d S D K . " )
#----------------------------------------------------------------------------
function ( SanityCheckSDKAndDeployTarget _sdk_path _deploy )
2010-02-11 18:50:43 +03:00
if ( _deploy STREQUAL "" )
2009-01-27 18:30:55 +03:00
return ( )
endif ( )
2010-02-11 18:50:43 +03:00
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" )
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" )
endif ( )
endfunction ( SanityCheckSDKAndDeployTarget )
2009-01-27 18:30:55 +03:00
#----------------------------------------------------------------------------
# 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
O U T P U T _ S T R I P _ T R A I L I N G _ W H I T E S P A C E
O U T P U T _ V A R I A B L E _ C M A K E _ O S X _ M A C H I N E )
# 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" )
# check for environment variable CMAKE_OSX_ARCHITECTURES
# if it is set.
IF ( NOT "$ENV{CMAKE_OSX_ARCHITECTURES}" STREQUAL "" )
2009-01-27 23:51:43 +03:00
SET ( CMAKE_OSX_ARCHITECTURES_VALUE "$ENV{CMAKE_OSX_ARCHITECTURES}" )
ELSE ( NOT "$ENV{CMAKE_OSX_ARCHITECTURES}" STREQUAL "" )
2009-09-17 19:53:02 +04:00
SET ( CMAKE_OSX_ARCHITECTURES_VALUE "" )
2009-01-27 18:30:55 +03:00
ENDIF ( NOT "$ENV{CMAKE_OSX_ARCHITECTURES}" STREQUAL "" )
# now put _CMAKE_OSX_MACHINE into the cache
2009-01-29 22:57:38 +03:00
SET ( CMAKE_OSX_ARCHITECTURES ${ CMAKE_OSX_ARCHITECTURES_VALUE } CACHE STRING
2009-01-27 18:30:55 +03:00
" B u i l d a r c h i t e c t u r e s f o r O S X " )
2006-03-24 17:15:05 +03:00
2003-10-15 18:14:13 +04:00
IF ( "${CMAKE_BACKWARDS_COMPATIBILITY}" MATCHES "^1\\.[0-6]$" )
SET ( CMAKE_SHARED_MODULE_CREATE_C_FLAGS
" $ { C M A K E _ S H A R E D _ M O D U L E _ C R E A T E _ C _ F L A G S } - f l a t _ n a m e s p a c e - u n d e f i n e d s u p p r e s s " )
ENDIF ( "${CMAKE_BACKWARDS_COMPATIBILITY}" MATCHES "^1\\.[0-6]$" )
2005-04-08 00:09:13 +04:00
IF ( NOT XCODE )
2006-02-24 21:13:14 +03:00
# Enable shared library versioning. This flag is not actually referenced
# but the fact that the setting exists will cause the generators to support
# soname computation.
2005-04-08 00:09:13 +04:00
SET ( CMAKE_SHARED_LIBRARY_SONAME_C_FLAG "-install_name" )
ENDIF ( NOT XCODE )
2002-11-08 23:46:08 +03:00
2006-10-06 17:16:53 +04:00
# Xcode does not support -isystem yet.
IF ( XCODE )
SET ( CMAKE_INCLUDE_SYSTEM_FLAG_C )
SET ( CMAKE_INCLUDE_SYSTEM_FLAG_CXX )
ENDIF ( XCODE )
2008-01-31 23:45:31 +03:00
# Need to list dependent shared libraries on link line. When building
# with -isysroot (for universal binaries), the linker always looks for
# dependent libraries under the sysroot. Listing them on the link
# line works around the problem.
2008-02-01 16:56:00 +03:00
SET ( CMAKE_LINK_DEPENDENT_LIBRARY_FILES 1 )
2008-01-31 23:45:31 +03:00
2006-03-14 22:03:16 +03:00
SET ( CMAKE_C_CREATE_SHARED_LIBRARY_FORBIDDEN_FLAGS -w )
SET ( CMAKE_CXX_CREATE_SHARED_LIBRARY_FORBIDDEN_FLAGS -w )
2006-02-24 21:13:14 +03:00
SET ( CMAKE_C_CREATE_SHARED_LIBRARY
2006-03-06 23:14:53 +03:00
" < C M A K E _ C _ C O M P I L E R > < L A N G U A G E _ C O M P I L E _ F L A G S > < C M A K E _ S H A R E D _ L I B R A R Y _ C R E A T E _ C _ F L A G S > < L I N K _ F L A G S > - o < T A R G E T > - i n s t a l l _ n a m e < T A R G E T _ I N S T A L L N A M E _ D I R > < T A R G E T _ S O N A M E > < O B J E C T S > < L I N K _ L I B R A R I E S > " )
2006-02-24 21:13:14 +03:00
SET ( CMAKE_CXX_CREATE_SHARED_LIBRARY
2006-03-06 23:14:53 +03:00
" < C M A K E _ C X X _ C O M P I L E R > < L A N G U A G E _ C O M P I L E _ F L A G S > < C M A K E _ S H A R E D _ L I B R A R Y _ C R E A T E _ C X X _ F L A G S > < L I N K _ F L A G S > - o < T A R G E T > - i n s t a l l _ n a m e < T A R G E T _ I N S T A L L N A M E _ D I R > < T A R G E T _ S O N A M E > < O B J E C T S > < L I N K _ L I B R A R I E S > " )
2006-10-04 18:54:53 +04:00
SET ( CMAKE_Fortran_CREATE_SHARED_LIBRARY
" < C M A K E _ F o r t r a n _ C O M P I L E R > < L A N G U A G E _ C O M P I L E _ F L A G S > < C M A K E _ S H A R E D _ L I B R A R Y _ C R E A T E _ F o r t r a n _ F L A G S > < L I N K _ F L A G S > - o < T A R G E T > - i n s t a l l _ n a m e < T A R G E T _ I N S T A L L N A M E _ D I R > < T A R G E T _ S O N A M E > < O B J E C T S > < L I N K _ L I B R A R I E S > " )
2002-11-08 23:46:08 +03:00
SET ( CMAKE_CXX_CREATE_SHARED_MODULE
2006-03-06 23:14:53 +03:00
" < C M A K E _ C X X _ C O M P I L E R > < L A N G U A G E _ C O M P I L E _ F L A G S > < C M A K E _ S H A R E D _ M O D U L E _ C R E A T E _ C X X _ F L A G S > < L I N K _ F L A G S > - o < T A R G E T > < O B J E C T S > < L I N K _ L I B R A R I E S > " )
2002-11-08 23:46:08 +03:00
SET ( CMAKE_C_CREATE_SHARED_MODULE
2006-03-06 23:14:53 +03:00
" < C M A K E _ C _ C O M P I L E R > < L A N G U A G E _ C O M P I L E _ F L A G S > < C M A K E _ S H A R E D _ M O D U L E _ C R E A T E _ C _ F L A G S > < L I N K _ F L A G S > - o < T A R G E T > < O B J E C T S > < L I N K _ L I B R A R I E S > " )
2003-11-14 18:44:12 +03:00
2006-10-04 18:54:53 +04:00
SET ( CMAKE_Fortran_CREATE_SHARED_MODULE
" < C M A K E _ F o r t r a n _ C O M P I L E R > < L A N G U A G E _ C O M P I L E _ F L A G S > < C M A K E _ S H A R E D _ M O D U L E _ C R E A T E _ F o r t r a n _ F L A G S > < L I N K _ F L A G S > - o < T A R G E T > < O B J E C T S > < L I N K _ L I B R A R I E S > " )
2004-04-28 21:21:56 +04:00
2007-05-08 18:32:54 +04:00
SET ( CMAKE_C_CREATE_MACOSX_FRAMEWORK
" < C M A K E _ C _ C O M P I L E R > < L A N G U A G E _ C O M P I L E _ F L A G S > < C M A K E _ S H A R E D _ L I B R A R Y _ C R E A T E _ C _ F L A G S > < L I N K _ F L A G S > - o < T A R G E T > - i n s t a l l _ n a m e < T A R G E T _ I N S T A L L N A M E _ D I R > < T A R G E T _ S O N A M E > < O B J E C T S > < L I N K _ L I B R A R I E S > " )
SET ( CMAKE_CXX_CREATE_MACOSX_FRAMEWORK
" < C M A K E _ C X X _ C O M P I L E R > < L A N G U A G E _ C O M P I L E _ F L A G S > < C M A K E _ S H A R E D _ L I B R A R Y _ C R E A T E _ C X X _ F L A G S > < L I N K _ F L A G S > - o < T A R G E T > - i n s t a l l _ n a m e < T A R G E T _ I N S T A L L N A M E _ D I R > < T A R G E T _ S O N A M E > < O B J E C T S > < L I N K _ L I B R A R I E S > " )
2006-10-04 18:54:53 +04:00
2006-02-28 18:27:30 +03:00
# default to searching for frameworks first
SET ( CMAKE_FIND_FRAMEWORK FIRST )
# set up the default search directories for frameworks
SET ( CMAKE_SYSTEM_FRAMEWORK_PATH
~ / L i b r a r y / F r a m e w o r k s
2006-03-30 01:34:50 +04:00
/ L i b r a r y / F r a m e w o r k s
2006-02-28 18:27:30 +03:00
/ N e t w o r k / L i b r a r y / F r a m e w o r k s
/ S y s t e m / L i b r a r y / F r a m e w o r k s )
2006-04-13 19:00:52 +04:00
# default to searching for application bundles first
SET ( CMAKE_FIND_APPBUNDLE FIRST )
# set up the default search directories for application bundles
SET ( CMAKE_SYSTEM_APPBUNDLE_PATH
~ / A p p l i c a t i o n s
/ A p p l i c a t i o n s
/ D e v e l o p e r / A p p l i c a t i o n s )
2006-03-02 21:30:22 +03:00
INCLUDE ( Platform/UnixPaths )
2008-01-16 17:51:57 +03:00
LIST ( APPEND CMAKE_SYSTEM_PREFIX_PATH /sw )