mirror of
https://github.com/Kitware/CMake.git
synced 2026-05-18 05:31:11 -05:00
e1409ac59b
Add a boolean target property NO_SONAME which may be used to disable
soname for the specified shared library or module even if the platform
supports it. This property should be useful for private shared
libraries or various plugins which live in private directories and have
not been designed to be found or loaded globally.
Replace references to <CMAKE_SHARED_LIBRARY_SONAME_${LANG}_FLAG> and
hard-coded -install_name flags with a conditional <SONAME_FLAG> which is
expanded to the value of the CMAKE_SHARED_LIBRARY_SONAME_${LANG}_FLAG
definition as long as soname supports is enabled for the target in
question. Keep expanding CMAKE_SHARED_LIBRARY_SONAME_${LANG}_FLAG in
rules in case third party projects still use it. Such projects would
not yet use NO_SONAME so the adjacent <TARGET_SONAME> will always be
expanded. Make <TARGET_INSTALLNAME_DIR> NO_SONAME aware as well. Since
-install_name is soname on OS X, this should not be a problem if this
variable is expanded only if soname is enabled.
The Ninja generator performs rule variable substitution only once
globally per rule to put its own placeholders. Final substitution is
performed by ninja at build time. Therefore we cannot conditionally
replace the soname placeholders on a per-target basis. Rather than
omitting $SONAME from rules.ninja, simply do not write its contents for
targets which have NO_SONAME. Since 3 variables are affected by
NO_SONAME ($SONAME, $SONAME_FLAG, $INSTALLNAME_DIR), set them only if
soname is enabled.
129 lines
5.8 KiB
CMake
129 lines
5.8 KiB
CMake
SET(CMAKE_C_CREATE_SHARED_LIBRARY_FORBIDDEN_FLAGS "" )
|
|
SET(CMAKE_CXX_CREATE_SHARED_LIBRARY_FORBIDDEN_FLAGS "")
|
|
|
|
# Setup for Leopard Compatibility
|
|
EXEC_PROGRAM(sw_vers ARGS -productVersion OUTPUT_VARIABLE _OSX_VERSION)
|
|
# MESSAGE (STATUS "_OSX_VERSION: ${_OSX_VERSION}")
|
|
IF ( _OSX_VERSION MATCHES "^10.4" )
|
|
#IF(CMAKE_COMPILER_IS_GNUCC)
|
|
SET (CMAKE_C_FLAGS_INIT "")
|
|
SET (CMAKE_C_FLAGS_DEBUG_INIT "-gdwarf-2")
|
|
SET (CMAKE_C_FLAGS_MINSIZEREL_INIT "-Os -DNDEBUG")
|
|
SET (CMAKE_C_FLAGS_RELEASE_INIT "-O3 -DNDEBUG")
|
|
SET (CMAKE_C_FLAGS_RELWITHDEBINFO_INIT "-O2 -gdwarf-2")
|
|
SET (CMAKE_C_CREATE_PREPROCESSED_SOURCE "<CMAKE_C_COMPILER> <FLAGS> -E <SOURCE> > <PREPROCESSED_SOURCE>")
|
|
SET (CMAKE_C_CREATE_ASSEMBLY_SOURCE "<CMAKE_C_COMPILER> <FLAGS> -S <SOURCE> -o <ASSEMBLY_SOURCE>")
|
|
# ENDIF(CMAKE_COMPILER_IS_GNUCC)
|
|
|
|
# IF(CMAKE_COMPILER_IS_GNUCXX)
|
|
SET (CMAKE_CXX_FLAGS_INIT "")
|
|
SET (CMAKE_CXX_FLAGS_DEBUG_INIT "-gdwarf-2")
|
|
SET (CMAKE_CXX_FLAGS_MINSIZEREL_INIT "-Os -DNDEBUG")
|
|
SET (CMAKE_CXX_FLAGS_RELEASE_INIT "-O3 -DNDEBUG")
|
|
SET (CMAKE_CXX_FLAGS_RELWITHDEBINFO_INIT "-O2 -gdwarf-2")
|
|
SET (CMAKE_CXX_CREATE_PREPROCESSED_SOURCE "<CMAKE_CXX_COMPILER> <FLAGS> -E <SOURCE> > <PREPROCESSED_SOURCE>")
|
|
SET (CMAKE_CXX_CREATE_ASSEMBLY_SOURCE "<CMAKE_CXX_COMPILER> <FLAGS> -S <SOURCE> -o <ASSEMBLY_SOURCE>")
|
|
# ENDIF(CMAKE_COMPILER_IS_GNUCXX)
|
|
ENDIF ( _OSX_VERSION MATCHES "^10.4" )
|
|
|
|
|
|
SET(CMAKE_SHARED_LIBRARY_PREFIX "lib")
|
|
SET(CMAKE_SHARED_LIBRARY_SUFFIX ".dylib")
|
|
SET(CMAKE_SHARED_MODULE_PREFIX "lib")
|
|
SET(CMAKE_SHARED_MODULE_SUFFIX ".so")
|
|
SET(CMAKE_MODULE_EXISTS 1)
|
|
SET(CMAKE_DL_LIBS "")
|
|
SET(CMAKE_C_LINK_FLAGS "-Wl,-headerpad_max_install_names")
|
|
SET(CMAKE_CXX_LINK_FLAGS "-Wl,-headerpad_max_install_names")
|
|
SET(CMAKE_PLATFORM_HAS_INSTALLNAME 1)
|
|
SET(CMAKE_SHARED_LIBRARY_CREATE_C_FLAGS "-dynamiclib -Wl,-headerpad_max_install_names")
|
|
SET(CMAKE_SHARED_MODULE_CREATE_C_FLAGS "-bundle -Wl,-headerpad_max_install_names")
|
|
SET(CMAKE_FIND_LIBRARY_SUFFIXES ".dylib" ".so" ".a")
|
|
|
|
|
|
# setup for universal binaries if sysroot exists
|
|
IF(EXISTS /Developer/SDKs/MacOSX10.4u.sdk)
|
|
# set the sysroot to be used if CMAKE_OSX_ARCHITECTURES
|
|
# has more than one value
|
|
SET(CMAKE_OSX_SYSROOT /Developer/SDKs/MacOSX10.4u.sdk CACHE STRING
|
|
"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 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(EXISTS /Developer/SDKs/MacOSX10.4u.sdk)
|
|
|
|
|
|
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")
|
|
ENDIF("${CMAKE_BACKWARDS_COMPATIBILITY}" MATCHES "^1\\.[0-6]$")
|
|
|
|
IF(NOT XCODE)
|
|
# 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.
|
|
SET(CMAKE_SHARED_LIBRARY_SONAME_C_FLAG "-install_name")
|
|
SET(CMAKE_SHARED_LIBRARY_SONAME_CXX_FLAG "-install_name")
|
|
SET(CMAKE_SHARED_LIBRARY_SONAME_Fortran_FLAG "-install_name")
|
|
ENDIF(NOT XCODE)
|
|
|
|
# Xcode does not support -isystem yet.
|
|
IF(XCODE)
|
|
SET(CMAKE_INCLUDE_SYSTEM_FLAG_C)
|
|
SET(CMAKE_INCLUDE_SYSTEM_FLAG_CXX)
|
|
ENDIF(XCODE)
|
|
|
|
SET(CMAKE_MacOSX_Content_COMPILE_OBJECT "\"${CMAKE_COMMAND}\" -E copy_if_different <SOURCE> <OBJECT>")
|
|
|
|
SET(CMAKE_C_CREATE_SHARED_LIBRARY
|
|
"<CMAKE_C_COMPILER> <LANGUAGE_COMPILE_FLAGS> <CMAKE_SHARED_LIBRARY_CREATE_C_FLAGS> <LINK_FLAGS> -o <TARGET> <SONAME_FLAG> <TARGET_INSTALLNAME_DIR><TARGET_SONAME> <OBJECTS> <LINK_LIBRARIES>")
|
|
SET(CMAKE_CXX_CREATE_SHARED_LIBRARY
|
|
"<CMAKE_CXX_COMPILER> <LANGUAGE_COMPILE_FLAGS> <CMAKE_SHARED_LIBRARY_CREATE_CXX_FLAGS> <LINK_FLAGS> -o <TARGET> <SONAME_FLAG> <TARGET_INSTALLNAME_DIR><TARGET_SONAME> <OBJECTS> <LINK_LIBRARIES>")
|
|
SET(CMAKE_Fortran_CREATE_SHARED_LIBRARY
|
|
"<CMAKE_Fortran_COMPILER> <LANGUAGE_COMPILE_FLAGS> <CMAKE_SHARED_LIBRARY_CREATE_Fortran_FLAGS> <LINK_FLAGS> -o <TARGET> <SONAME_FLAG> <TARGET_INSTALLNAME_DIR><TARGET_SONAME> <OBJECTS> <LINK_LIBRARIES>")
|
|
|
|
SET(CMAKE_CXX_CREATE_SHARED_MODULE
|
|
"<CMAKE_CXX_COMPILER> <LANGUAGE_COMPILE_FLAGS> <CMAKE_SHARED_MODULE_CREATE_CXX_FLAGS> <LINK_FLAGS> -o <TARGET> <OBJECTS> <LINK_LIBRARIES>")
|
|
|
|
SET(CMAKE_C_CREATE_SHARED_MODULE
|
|
"<CMAKE_C_COMPILER> <LANGUAGE_COMPILE_FLAGS> <CMAKE_SHARED_MODULE_CREATE_C_FLAGS> <LINK_FLAGS> -o <TARGET> <OBJECTS> <LINK_LIBRARIES>")
|
|
|
|
SET(CMAKE_Fortran_CREATE_SHARED_MODULE
|
|
"<CMAKE_Fortran_COMPILER> <LANGUAGE_COMPILE_FLAGS> <CMAKE_SHARED_MODULE_CREATE_Fortran_FLAGS> <LINK_FLAGS> -o <TARGET> <OBJECTS> <LINK_LIBRARIES>")
|
|
|
|
|
|
# We can use $ENV{INTEL_LICENSE_FILE} to try and get at the installation location for ICC.
|
|
# We also need to consider to use cce (which is the 64bit compiler) and not JUST the 32bit compiler.
|
|
# I have no idea what the best way to do that would be.
|
|
|
|
|
|
# default to searching for frameworks first
|
|
SET(CMAKE_FIND_FRAMEWORK FIRST)
|
|
# set up the default search directories for frameworks
|
|
SET(CMAKE_SYSTEM_FRAMEWORK_PATH
|
|
~/Library/Frameworks
|
|
/Library/Frameworks
|
|
/Network/Library/Frameworks
|
|
/System/Library/Frameworks)
|
|
|
|
# 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
|
|
~/Applications
|
|
/Applications
|
|
/Developer/Applications)
|
|
|
|
INCLUDE(Platform/UnixPaths)
|
|
SET(CMAKE_SYSTEM_INCLUDE_PATH ${CMAKE_SYSTEM_INCLUDE_PATH} /sw/include)
|
|
SET(CMAKE_SYSTEM_LIBRARY_PATH ${CMAKE_SYSTEM_LIBRARY_PATH} /sw/lib)
|
|
|