diff options
Diffstat (limited to 'Tests/RunCMake/file-GET_RUNTIME_DEPENDENCIES/linux-parent-rpath-propagation.cmake')
-rw-r--r-- | Tests/RunCMake/file-GET_RUNTIME_DEPENDENCIES/linux-parent-rpath-propagation.cmake | 54 |
1 files changed, 54 insertions, 0 deletions
diff --git a/Tests/RunCMake/file-GET_RUNTIME_DEPENDENCIES/linux-parent-rpath-propagation.cmake b/Tests/RunCMake/file-GET_RUNTIME_DEPENDENCIES/linux-parent-rpath-propagation.cmake new file mode 100644 index 0000000..7e9b7a5 --- /dev/null +++ b/Tests/RunCMake/file-GET_RUNTIME_DEPENDENCIES/linux-parent-rpath-propagation.cmake @@ -0,0 +1,54 @@ +enable_language(C) +cmake_policy(SET CMP0095 NEW) + +# Force linker to set RPATH instead of RUNPATH +add_link_options("-Wl,--disable-new-dtags") + +# bin/exe (RPATH = "lib1:lib2:lib3") +# ^ +# | +# lib1/libone.so (RPATH erased) +# ^ +# | +# lib2/libtwo.so (RPATH erased) +# ^ +# | +# lib3/libthree.so (RPATH erased) +# GET_RUNTIME_DEPENDENCIES(bin/exe) should resolve all three libraries + +set(TEST_SOURCE_DIR "linux/parent-rpath-propagation") + +add_library(three SHARED "${TEST_SOURCE_DIR}/three.c") + +add_library(two SHARED "${TEST_SOURCE_DIR}/two.c") +target_link_libraries(two PUBLIC three) + +add_library(one SHARED "${TEST_SOURCE_DIR}/one.c") +target_link_libraries(one PUBLIC two) + +add_executable(exe "${TEST_SOURCE_DIR}/main.c") +target_link_libraries(exe PUBLIC one) + +set_property(TARGET exe PROPERTY INSTALL_RPATH + $ORIGIN/../lib1 + $ORIGIN/../lib2 + $ORIGIN/../lib3 +) + +install(TARGETS exe DESTINATION bin) +install(TARGETS one DESTINATION lib1) +install(TARGETS two DESTINATION lib2) +install(TARGETS three DESTINATION lib3) + +install(CODE [[ + file(GET_RUNTIME_DEPENDENCIES + EXECUTABLES + "${CMAKE_INSTALL_PREFIX}/bin/$<TARGET_FILE_NAME:exe>" + PRE_INCLUDE_REGEXES + "^lib(one|two|three)\\.so$" + "^libc\\.so" + PRE_EXCLUDE_REGEXES ".*" + POST_INCLUDE_REGEXES "^.*/lib(one|two|three)\\.so$" + POST_EXCLUDE_REGEXES ".*" + ) + ]]) |