diff options
author | Ben Boeckel <mathstuf@users.noreply.github.com> | 2023-11-16 05:55:14 +0000 |
---|---|---|
committer | GitHub <noreply@github.com> | 2023-11-16 00:55:14 -0500 |
commit | dc9b39596d986aeb061bd3debe52d30e2467dc48 (patch) | |
tree | 88154c65fc16013688d0ade9900868627440318d | |
parent | 9591cfb0b8dcf2aa213c8a44ac2c8b7eefa95342 (diff) | |
download | pybind11-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.txt | 16 |
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" |