Skip to content

Commit a627bd3

Browse files
committed
Fix assumptions that CMAKE_INSTALL_*DIR paths are relative.
When an absolute path is desired, the CMAKE_INSTALL_FULL_*DIR variables should be used instead of concatenating with CMAKE_INSTALL_PREFIX. Special handling is also needed for pkg-config and CMake config files to retain relative paths if the lib/include directories are subdirectories of the install prefix.
1 parent 41838e1 commit a627bd3

File tree

3 files changed

+18
-9
lines changed

3 files changed

+18
-9
lines changed

CMakeLists.txt

Lines changed: 13 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -67,19 +67,25 @@ set(CMAKE_ARCHIVE_OUTPUT_DIRECTORY "${CMAKE_BINARY_DIR}/${CMAKE_INSTALL_LIBDIR}"
6767
enable_testing()
6868

6969
if(WIN32 AND NOT CYGWIN)
70-
set(CMAKE_CONFIG_INSTALL_DIR CMake)
70+
set(CMAKE_CONFIG_INSTALL_DIR "${CMAKE_INSTALL_PREFIX}/CMake")
7171
else()
72-
set(CMAKE_CONFIG_INSTALL_DIR ${CMAKE_INSTALL_LIBDIR}/${PROJECT_NAME}/cmake)
72+
set(CMAKE_CONFIG_INSTALL_DIR "${CMAKE_INSTALL_FULL_LIBDIR}/${PROJECT_NAME}/cmake")
7373
endif()
74-
string(REGEX REPLACE "[^/]+" ".." RELATIVE_PATH_CMAKE_DIR_TO_PREFIX "${CMAKE_CONFIG_INSTALL_DIR}")
75-
string(REGEX REPLACE "[^/]+" ".." RELATIVE_PATH_LIBDIR_TO_PREFIX "${CMAKE_INSTALL_LIBDIR}")
74+
file(RELATIVE_PATH RELATIVE_PATH_CMAKE_DIR_TO_PREFIX "${CMAKE_CONFIG_INSTALL_DIR}" "${CMAKE_INSTALL_PREFIX}")
75+
file(RELATIVE_PATH RELATIVE_PATH_LIBDIR_TO_PREFIX "${CMAKE_INSTALL_FULL_LIBDIR}" "${CMAKE_INSTALL_PREFIX}")
7676

7777
add_subdirectory(urdf_parser)
7878

7979
set(PKG_NAME ${PROJECT_NAME})
8080
set(PKG_LIBRARIES urdfdom_sensor urdfdom_model_state urdfdom_model urdfdom_world)
8181
set(PKG_DEPENDS urdfdom_headers console_bridge)
8282
set(PKG_EXPORTS urdfdom)
83+
string(REPLACE
84+
"${CMAKE_INSTALL_PREFIX}" "\${${PROJECT_NAME}_DIR}/${RELATIVE_PATH_CMAKE_DIR_TO_PREFIX}"
85+
CMAKE_CONF_LIBDIR "${CMAKE_INSTALL_FULL_LIBDIR}")
86+
string(REPLACE
87+
"${CMAKE_INSTALL_PREFIX}" "\${${PROJECT_NAME}_DIR}/${RELATIVE_PATH_CMAKE_DIR_TO_PREFIX}"
88+
CMAKE_CONF_INCLUDEDIR "${CMAKE_INSTALL_FULL_INCLUDEDIR}")
8389
set(cmake_conf_file "cmake/urdfdom-config.cmake")
8490
configure_file("${CMAKE_CURRENT_SOURCE_DIR}/${cmake_conf_file}.in" "${CMAKE_BINARY_DIR}/${cmake_conf_file}" @ONLY)
8591
install(FILES package.xml DESTINATION share/${PROJECT_NAME})
@@ -91,7 +97,10 @@ if (NOT MSVC)
9197
set(PKG_DESC "Unified Robot Description Format")
9298
set(PKG_DEPENDS "urdfdom_headers console_bridge") # make the list separated by spaces instead of ;
9399
set(PKG_URDF_LIBS "-lurdfdom_sensor -lurdfdom_model_state -lurdfdom_model -lurdfdom_world")
100+
string(REPLACE "${CMAKE_INSTALL_PREFIX}" "\${prefix}" PKG_CONF_LIBDIR "${CMAKE_INSTALL_FULL_LIBDIR}")
101+
string(REPLACE "${CMAKE_INSTALL_PREFIX}" "\${prefix}" PKG_CONF_INCLUDEDIR "${CMAKE_INSTALL_FULL_INCLUDEDIR}")
94102
set(pkg_conf_file "cmake/pkgconfig/urdfdom.pc")
103+
95104
configure_file("${CMAKE_CURRENT_SOURCE_DIR}/${pkg_conf_file}.in" "${CMAKE_BINARY_DIR}/${pkg_conf_file}" @ONLY)
96105
install(FILES ${CMAKE_BINARY_DIR}/${pkg_conf_file}
97106
DESTINATION ${CMAKE_INSTALL_LIBDIR}/pkgconfig/ COMPONENT pkgconfig)

cmake/pkgconfig/urdfdom.pc.in

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -1,8 +1,8 @@
11
# This file was generated by CMake for @PROJECT_NAME@
22
prefix=${pcfiledir}/../@RELATIVE_PATH_LIBDIR_TO_PREFIX@
33
exec_prefix=${prefix}
4-
libdir=${prefix}/@CMAKE_INSTALL_LIBDIR@
5-
includedir=${prefix}/@CMAKE_INSTALL_INCLUDEDIR@
4+
libdir=@PKG_CONF_LIBDIR@
5+
includedir=@PKG_CONF_INCLUDEDIR@
66

77
Name: @PKG_NAME@
88
Description: @PKG_DESC@

cmake/urdfdom-config.cmake.in

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -3,16 +3,16 @@ if (@PKG_NAME@_CONFIG_INCLUDED)
33
endif()
44
set(@PKG_NAME@_CONFIG_INCLUDED TRUE)
55

6-
set(@PKG_NAME@_INCLUDE_DIRS "${@PROJECT_NAME@_DIR}/@RELATIVE_PATH_CMAKE_DIR_TO_PREFIX@/@CMAKE_INSTALL_INCLUDEDIR@" "@TinyXML_INCLUDE_DIRS@")
6+
set(@PKG_NAME@_INCLUDE_DIRS "@CMAKE_CONF_INCLUDEDIR@" "@TinyXML_INCLUDE_DIRS@")
77

88
foreach(lib @PKG_LIBRARIES@)
99
set(onelib "${lib}-NOTFOUND")
1010
set(onelibd "${lib}-NOTFOUND")
1111
find_library(onelib ${lib}
12-
PATHS "${@PROJECT_NAME@_DIR}/@RELATIVE_PATH_CMAKE_DIR_TO_PREFIX@/@CMAKE_INSTALL_LIBDIR@"
12+
PATHS "@CMAKE_CONF_LIBDIR@"
1313
NO_DEFAULT_PATH)
1414
find_library(onelibd ${lib}d
15-
PATHS "${@PROJECT_NAME@_DIR}/@RELATIVE_PATH_CMAKE_DIR_TO_PREFIX@/@CMAKE_INSTALL_LIBDIR@"
15+
PATHS "@CMAKE_CONF_LIBDIR@"
1616
NO_DEFAULT_PATH)
1717
if(onelib-NOTFOUND AND onelibd-NOTFOUND)
1818
message(FATAL_ERROR "Library '${lib}' in package @PKG_NAME@ is not installed properly")

0 commit comments

Comments
 (0)