diff options
author | Brad King <brad.king@kitware.com> | 2005-03-01 17:26:25 (GMT) |
---|---|---|
committer | Brad King <brad.king@kitware.com> | 2005-03-01 17:26:25 (GMT) |
commit | 54c99dc5fdfb845a3ae5076f5daa812adda36ad1 (patch) | |
tree | 7b5f688735a163bbf0f39fabe02530b93dbfd5b9 /Modules | |
parent | 2aa613b98c28daa5ed71f7b1798976197b467a76 (diff) | |
download | CMake-54c99dc5fdfb845a3ae5076f5daa812adda36ad1.zip CMake-54c99dc5fdfb845a3ae5076f5daa812adda36ad1.tar.gz CMake-54c99dc5fdfb845a3ae5076f5daa812adda36ad1.tar.bz2 |
ENH: Adding support for shared library versioning using the -install_name option on the OSX linker. This is actually needed to support relative -o paths which are used by cmLocalUnixMakefileGenerator2.
Diffstat (limited to 'Modules')
-rw-r--r-- | Modules/Platform/Darwin-xlc.cmake | 6 | ||||
-rw-r--r-- | Modules/Platform/Darwin.cmake | 35 |
2 files changed, 37 insertions, 4 deletions
diff --git a/Modules/Platform/Darwin-xlc.cmake b/Modules/Platform/Darwin-xlc.cmake index 8b4f9ff..ebe099b 100644 --- a/Modules/Platform/Darwin-xlc.cmake +++ b/Modules/Platform/Darwin-xlc.cmake @@ -1,2 +1,8 @@ SET(CMAKE_SHARED_LIBRARY_CREATE_C_FLAGS "-qmkshrobj") SET(CMAKE_SHARED_MODULE_CREATE_C_FLAGS "-bundle") + +IF(CMAKE_GENERATOR_NEW) + # Enable shared library versioning. + SET(CMAKE_SHARED_LIBRARY_SONAME_C_FLAG "-Wl,-install_name") + SET(CMAKE_SHARED_LIBRARY_SONAME_CXX_FLAG "-Wl,-install_name") +ENDIF(CMAKE_GENERATOR_NEW) diff --git a/Modules/Platform/Darwin.cmake b/Modules/Platform/Darwin.cmake index 3bf4607..e3b8890 100644 --- a/Modules/Platform/Darwin.cmake +++ b/Modules/Platform/Darwin.cmake @@ -12,11 +12,38 @@ IF("${CMAKE_BACKWARDS_COMPATIBILITY}" MATCHES "^1\\.[0-6]$") "${CMAKE_SHARED_MODULE_CREATE_C_FLAGS} -flat_namespace -undefined suppress") ENDIF("${CMAKE_BACKWARDS_COMPATIBILITY}" MATCHES "^1\\.[0-6]$") -SET(CMAKE_CXX_CREATE_SHARED_LIBRARY - "<CMAKE_CXX_COMPILER> <CMAKE_SHARED_LIBRARY_CREATE_CXX_FLAGS> <LINK_FLAGS> -o <TARGET> <OBJECTS> <LINK_LIBRARIES>") +IF(CMAKE_GENERATOR_NEW) + # Enable shared library versioning. + SET(CMAKE_SHARED_LIBRARY_SONAME_C_FLAG "-install_name") + SET(CMAKE_SHARED_LIBRARY_SONAME_CXX_FLAG "-install_name") -SET(CMAKE_C_CREATE_SHARED_LIBRARY - "<CMAKE_C_COMPILER> <CMAKE_SHARED_LIBRARY_CREATE_C_FLAGS> <LINK_FLAGS> -o <TARGET> <OBJECTS> <LINK_LIBRARIES>") + # OSX does not really implement an rpath, but it does allow a path to + # be specified in the soname field of a dylib. + IF(CMAKE_SKIP_RPATH) + # No rpath requested. Just use the soname directly. + SET(CMAKE_C_CREATE_SHARED_LIBRARY + "<CMAKE_C_COMPILER> <CMAKE_SHARED_LIBRARY_CREATE_C_FLAGS> <LINK_FLAGS> -o <TARGET> <CMAKE_SHARED_LIBRARY_SONAME_C_FLAG> <TARGET_SONAME> <OBJECTS> <LINK_LIBRARIES>") + SET(CMAKE_CXX_CREATE_SHARED_LIBRARY + "<CMAKE_CXX_COMPILER> <CMAKE_SHARED_LIBRARY_CREATE_CXX_FLAGS> <LINK_FLAGS> -o <TARGET> <CMAKE_SHARED_LIBRARY_SONAME_CXX_FLAG> <TARGET_SONAME> <OBJECTS> <LINK_LIBRARIES>") + ELSE(CMAKE_SKIP_RPATH) + # Support for rpath is requested. Approximate it by putting the + # full path to the library in the soname field. Then when executables + # link the library they will copy this full path as the name to use + # to find the library. We can get the directory containing the library + # by using the dirname of the <TARGET>. It may be a relative path + # so we use a "cd ...;pwd" trick to convert it to a full path at + # build time. + SET(CMAKE_C_CREATE_SHARED_LIBRARY + "<CMAKE_C_COMPILER> <CMAKE_SHARED_LIBRARY_CREATE_C_FLAGS> <LINK_FLAGS> -o <TARGET> <CMAKE_SHARED_LIBRARY_SONAME_C_FLAG> \"`cd \\`dirname <TARGET>\\`\;pwd`/<TARGET_SONAME>\" <OBJECTS> <LINK_LIBRARIES>") + SET(CMAKE_CXX_CREATE_SHARED_LIBRARY + "<CMAKE_CXX_COMPILER> <CMAKE_SHARED_LIBRARY_CREATE_CXX_FLAGS> <LINK_FLAGS> -o <TARGET> <CMAKE_SHARED_LIBRARY_SONAME_CXX_FLAG> \"`cd \\`dirname <TARGET>\\`\;pwd`/<TARGET_SONAME>\" <OBJECTS> <LINK_LIBRARIES>") + ENDIF(CMAKE_SKIP_RPATH) +ELSE(CMAKE_GENERATOR_NEW) + SET(CMAKE_CXX_CREATE_SHARED_LIBRARY + "<CMAKE_CXX_COMPILER> <CMAKE_SHARED_LIBRARY_CREATE_CXX_FLAGS> <LINK_FLAGS> -o <TARGET> <OBJECTS> <LINK_LIBRARIES>") + SET(CMAKE_C_CREATE_SHARED_LIBRARY + "<CMAKE_C_COMPILER> <CMAKE_SHARED_LIBRARY_CREATE_C_FLAGS> <LINK_FLAGS> -o <TARGET> <OBJECTS> <LINK_LIBRARIES>") +ENDIF(CMAKE_GENERATOR_NEW) SET(CMAKE_CXX_CREATE_SHARED_MODULE "<CMAKE_CXX_COMPILER> <CMAKE_SHARED_MODULE_CREATE_CXX_FLAGS> <LINK_FLAGS> -o <TARGET> <OBJECTS> <LINK_LIBRARIES>") |