aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorBen Boeckel <mathstuf@users.noreply.github.com>2023-11-16 05:55:14 +0000
committerGitHub <noreply@github.com>2023-11-16 00:55:14 -0500
commitdc9b39596d986aeb061bd3debe52d30e2467dc48 (patch)
tree88154c65fc16013688d0ade9900868627440318d
parent9591cfb0b8dcf2aa213c8a44ac2c8b7eefa95342 (diff)
downloadpybind11-dc9b39596d986aeb061bd3debe52d30e2467dc48.tar.gz
pybind11.pc: use pcfiledir for relative destinations (#4830)
* pybind11.pc: use pcfiledir for relative destinations If the datarootdir is absolute, just use the absolute path directly. However, if it is relative, we can compute the prefix from the location of the `.pc` file itself. This allows the install to be relocatable. * chore: use 3.20's cmake_path if available * style: pre-commit fixes * Update CMakeLists.txt --------- Co-authored-by: Henry Schreiner <HenrySchreinerIII@gmail.com> Co-authored-by: pre-commit-ci[bot] <66853113+pre-commit-ci[bot]@users.noreply.github.com>
-rw-r--r--CMakeLists.txt16
1 files changed, 15 insertions, 1 deletions
diff --git a/CMakeLists.txt b/CMakeLists.txt
index d2c44dc4..7a1199dd 100644
--- a/CMakeLists.txt
+++ b/CMakeLists.txt
@@ -289,7 +289,21 @@ if(PYBIND11_INSTALL)
# pkg-config support
if(NOT prefix_for_pc_file)
- set(prefix_for_pc_file "${CMAKE_INSTALL_PREFIX}")
+ if(IS_ABSOLUTE "${CMAKE_INSTALL_DATAROOTDIR}")
+ set(prefix_for_pc_file "${CMAKE_INSTALL_PREFIX}")
+ else()
+ set(pc_datarootdir "${CMAKE_INSTALL_DATAROOTDIR}")
+ if(CMAKE_VERSION VERSION_LESS 3.20)
+ set(prefix_for_pc_file "\${pcfiledir}/..")
+ while(pc_datarootdir)
+ get_filename_component(pc_datarootdir "${pc_datarootdir}" DIRECTORY)
+ string(APPEND prefix_for_pc_file "/..")
+ endwhile()
+ else()
+ cmake_path(RELATIVE_PATH CMAKE_INSTALL_PREFIX BASE_DIRECTORY CMAKE_INSTALL_DATAROOTDIR
+ OUTPUT_VARIABLE prefix_for_pc_file)
+ endif()
+ endif()
endif()
join_paths(includedir_for_pc_file "\${prefix}" "${CMAKE_INSTALL_INCLUDEDIR}")
configure_file("${CMAKE_CURRENT_SOURCE_DIR}/tools/pybind11.pc.in"