summaryrefslogtreecommitdiffstats
path: root/Modules/Platform
diff options
context:
space:
mode:
authorBrad King <brad.king@kitware.com>2005-03-01 17:26:25 (GMT)
committerBrad King <brad.king@kitware.com>2005-03-01 17:26:25 (GMT)
commit54c99dc5fdfb845a3ae5076f5daa812adda36ad1 (patch)
tree7b5f688735a163bbf0f39fabe02530b93dbfd5b9 /Modules/Platform
parent2aa613b98c28daa5ed71f7b1798976197b467a76 (diff)
downloadCMake-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/Platform')
-rw-r--r--Modules/Platform/Darwin-xlc.cmake6
-rw-r--r--Modules/Platform/Darwin.cmake35
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>")