summaryrefslogtreecommitdiffstats
path: root/Modules/Platform/OpenBSD.cmake
diff options
context:
space:
mode:
authorChuck Atkins <chuck.atkins@kitware.com>2010-02-15 16:22:36 (GMT)
committerBrad King <brad.king@kitware.com>2010-03-26 13:33:28 (GMT)
commite750761857fa2e35ad9630b13606570c561ae829 (patch)
tree9baea65512a386950c970a08374a74d96235dd1c /Modules/Platform/OpenBSD.cmake
parenta8abb30c38443dbd5063df05bcdceb233c9678ff (diff)
downloadCMake-e750761857fa2e35ad9630b13606570c561ae829.zip
CMake-e750761857fa2e35ad9630b13606570c561ae829.tar.gz
CMake-e750761857fa2e35ad9630b13606570c561ae829.tar.bz2
OpenBSD: Work-around static/runtime linker inconsistency
Detect the runtime linker's search path and add to the compile time linker's search path. This is needed because OpenBSD's static linker does not search for shared library dependencies in the same places as the runtime linker.
Diffstat (limited to 'Modules/Platform/OpenBSD.cmake')
-rw-r--r--Modules/Platform/OpenBSD.cmake16
1 files changed, 16 insertions, 0 deletions
diff --git a/Modules/Platform/OpenBSD.cmake b/Modules/Platform/OpenBSD.cmake
index e7df46d..b4ed66f 100644
--- a/Modules/Platform/OpenBSD.cmake
+++ b/Modules/Platform/OpenBSD.cmake
@@ -1,2 +1,18 @@
INCLUDE(Platform/NetBSD)
+
+# On OpenBSD, the compile time linker does not share it's configuration with
+# the runtime linker. This will extract the library search paths from the
+# system's ld.so.hints file which will allow CMake to set the appropriate
+# -rpath-link flags
+IF(NOT CMAKE_PLATFORM_RUNTIME_PATH)
+ EXECUTE_PROCESS(COMMAND /sbin/ldconfig -r
+ OUTPUT_VARIABLE LDCONFIG_HINTS
+ ERROR_QUIET)
+ STRING(REGEX REPLACE ".*search\\ directories:\\ ([^\n]*).*" "\\1"
+ LDCONFIG_HINTS "${LDCONFIG_HINTS}")
+ STRING(REGEX REPLACE ":" ";"
+ CMAKE_PLATFORM_RUNTIME_PATH
+ "${LDCONFIG_HINTS}")
+ENDIF()
+
SET_PROPERTY(GLOBAL PROPERTY FIND_LIBRARY_USE_OPENBSD_VERSIONING 1)