From e33f7bdc7156c9acf129bb103a67ba7503fbf9c9 Mon Sep 17 00:00:00 2001 From: Adam Moody Date: Tue, 12 Mar 2019 21:52:42 -0700 Subject: [PATCH] cmake: fix missing rpath --- CMakeLists.txt | 31 ++++++++++++++++++++++++++++++- cmake/MFU_ADD_TOOL.cmake | 2 +- experimental/dtar/CMakeLists.txt | 2 +- src/common/CMakeLists.txt | 4 ++-- src/dcp1/CMakeLists.txt | 2 +- 5 files changed, 35 insertions(+), 6 deletions(-) diff --git a/CMakeLists.txt b/CMakeLists.txt index 383930c56..fe493f688 100644 --- a/CMakeLists.txt +++ b/CMakeLists.txt @@ -6,7 +6,6 @@ IF(POLICY CMP0042) CMAKE_POLICY(SET CMP0042 NEW) ENDIF(POLICY CMP0042) SET(CMAKE_MACOSX_RPATH ON) -SET(CMAKE_INSTALL_RPATH_USE_LINK_PATH TRUE) SET(CMAKE_POSITION_INDEPENDENT_CODE ON) # Configuration Options @@ -85,6 +84,36 @@ SET(X_DATADIR ${CMAKE_INSTALL_FULL_DATADIR} CACHE INTERNAL "share") SET(X_INCLUDEDIR ${CMAKE_INSTALL_FULL_INCLUDEDIR} CACHE INTERNAL "include") SET(X_LIBDIR ${CMAKE_INSTALL_FULL_LIBDIR} CACHE INTERNAL "lib") +############ +# This sets an rpath to buildtime libraries in build directory +# and rewrites the rpath to the install location during install +# these lines must come before add_library and add_executable macros +############ + +# https://gitlab.kitware.com/cmake/community/wikis/doc/cmake/RPATH-handling +# use, i.e. don't skip the full RPATH for the build tree +SET(CMAKE_SKIP_BUILD_RPATH FALSE) + +# when building, don't use the install RPATH already +# (but later on when installing) +SET(CMAKE_BUILD_WITH_INSTALL_RPATH FALSE) + +SET(CMAKE_INSTALL_RPATH "${CMAKE_INSTALL_PREFIX}/${CMAKE_INSTALL_LIBDIR}") + +# add the automatically determined parts of the RPATH +# which point to directories outside the build tree to the install RPATH +SET(CMAKE_INSTALL_RPATH_USE_LINK_PATH TRUE) + +# the RPATH to be used when installing, but only if it's not a system directory +LIST(FIND CMAKE_PLATFORM_IMPLICIT_LINK_DIRECTORIES "${CMAKE_INSTALL_PREFIX}/${CMAKE_INSTALL_LIBDIR}" isSystemDir) +IF("${isSystemDir}" STREQUAL "-1") + SET(CMAKE_INSTALL_RPATH "${CMAKE_INSTALL_PREFIX}/${CMAKE_INSTALL_LIBDIR}") +ENDIF("${isSystemDir}" STREQUAL "-1") + +############ +# End rpath stuff +############ + # Subdirectories INCLUDE(MFU_ADD_TOOL) INCLUDE_DIRECTORIES(${CMAKE_CURRENT_SOURCE_DIR}/src/common) diff --git a/cmake/MFU_ADD_TOOL.cmake b/cmake/MFU_ADD_TOOL.cmake index bb9d90884..49c8196b8 100644 --- a/cmake/MFU_ADD_TOOL.cmake +++ b/cmake/MFU_ADD_TOOL.cmake @@ -3,6 +3,6 @@ FUNCTION(MFU_ADD_TOOL name) ADD_EXECUTABLE(${name} ${name}.c) TARGET_LINK_LIBRARIES(${name} mfu) SET_TARGET_PROPERTIES(${name} PROPERTIES C_STANDARD 99) - INSTALL(PROGRAMS ${CMAKE_CURRENT_BINARY_DIR}/${name} DESTINATION ${CMAKE_INSTALL_BINDIR}) + INSTALL(TARGETS ${name} DESTINATION ${CMAKE_INSTALL_BINDIR}) ENDFUNCTION(MFU_ADD_TOOL name) diff --git a/experimental/dtar/CMakeLists.txt b/experimental/dtar/CMakeLists.txt index 4d9c69121..abcdc4a0f 100644 --- a/experimental/dtar/CMakeLists.txt +++ b/experimental/dtar/CMakeLists.txt @@ -4,4 +4,4 @@ INCLUDE_DIRECTORIES(${CMAKE_CURRENT_SOURCE_DIR}) ADD_EXECUTABLE(dtar dtar.c mfu_flist_archive.c) TARGET_LINK_LIBRARIES(dtar mfu) SET_TARGET_PROPERTIES(dtar PROPERTIES C_STANDARD 99) -INSTALL(PROGRAMS ${CMAKE_CURRENT_BINARY_DIR}/dtar DESTINATION ${CMAKE_INSTALL_BINDIR}) +INSTALL(TARGETS dtar DESTINATION ${CMAKE_INSTALL_BINDIR}) diff --git a/src/common/CMakeLists.txt b/src/common/CMakeLists.txt index 84070816e..b6d12b605 100644 --- a/src/common/CMakeLists.txt +++ b/src/common/CMakeLists.txt @@ -40,11 +40,11 @@ ADD_LIBRARY(mfu_o OBJECT ${libmfu_srcs}) SET_TARGET_PROPERTIES(mfu_o PROPERTIES C_STANDARD 99) ADD_LIBRARY(mfu SHARED $) -TARGET_LINK_LIBRARIES(mfu ${MFU_EXTERNAL_LIBS}) +TARGET_LINK_LIBRARIES(mfu LINK_PUBLIC ${MFU_EXTERNAL_LIBS}) SET_TARGET_PROPERTIES(mfu PROPERTIES OUTPUT_NAME mfu CLEAN_DIRECT_OUTPUT 1) INSTALL(TARGETS mfu DESTINATION ${CMAKE_INSTALL_LIBDIR}) ADD_LIBRARY(mfu-static STATIC $) -TARGET_LINK_LIBRARIES(mfu-static ${MFU_EXTERNAL_LIBS}) +TARGET_LINK_LIBRARIES(mfu-static LINK_PUBLIC ${MFU_EXTERNAL_LIBS}) SET_TARGET_PROPERTIES(mfu-static PROPERTIES OUTPUT_NAME mfu CLEAN_DIRECT_OUTPUT 1) INSTALL(TARGETS mfu-static DESTINATION ${CMAKE_INSTALL_LIBDIR}) diff --git a/src/dcp1/CMakeLists.txt b/src/dcp1/CMakeLists.txt index fdcebd70e..ba72276ff 100644 --- a/src/dcp1/CMakeLists.txt +++ b/src/dcp1/CMakeLists.txt @@ -15,4 +15,4 @@ LIST(APPEND dcp1_srcs ADD_EXECUTABLE(dcp1 ${dcp1_srcs}) TARGET_LINK_LIBRARIES(dcp1 mfu) SET_TARGET_PROPERTIES(dcp1 PROPERTIES C_STANDARD 99) -INSTALL(PROGRAMS ${CMAKE_CURRENT_BINARY_DIR}/dcp1 DESTINATION ${CMAKE_INSTALL_BINDIR}) +INSTALL(TARGETS dcp1 DESTINATION ${CMAKE_INSTALL_BINDIR})