From 9d4f70cfe99626f82f9c8dcbf45f07709e3511b2 Mon Sep 17 00:00:00 2001 From: Thomas Bracht Laumann Jespersen Date: Fri, 15 Jul 2022 06:19:53 +0200 Subject: [PATCH] Handle CMAKE_INSTALL_xxx being absolute paths for .pc file generation In some cases the CMAKE_INSTAL_{BIN,MAN,DOC,LIB,INCLUDE}DIR variables may turn out to be absolute paths in which case prepending ${prefix} in the pkg-config .pc files will result in incorrect values. For .pc file generation, figure out if these variables are absolute and omit the prefix in the configured file when so. See: https://github.com/OSGeo/PROJ/commit/ab25e4b7ed9544e668282dcd293cfaaa2e56dbdf --- CMakeLists.txt | 15 ++++++++++++++- src/lib/openjp2/libopenjp2.pc.cmake.in | 10 +++++----- src/lib/openjpip/libopenjpip.pc.cmake.in | 10 +++++----- 3 files changed, 24 insertions(+), 11 deletions(-) diff --git a/CMakeLists.txt b/CMakeLists.txt index 05da91e7..fcf4709d 100644 --- a/CMakeLists.txt +++ b/CMakeLists.txt @@ -327,7 +327,20 @@ else() option(BUILD_PKGCONFIG_FILES "Build and install pkg-config files" OFF) endif() if(BUILD_PKGCONFIG_FILES) -# install in lib and not share (CMAKE_INSTALL_LIBDIR takes care of it for multi-arch) + macro(set_variable_from_rel_or_absolute_path var root rel_or_abs_path) + if(IS_ABSOLUTE "${rel_or_abs_path}") + set(${var} "${rel_or_abs_path}") + else() + set(${var} "${root}/${rel_or_abs_path}") + endif() + endmacro() + set_variable_from_rel_or_absolute_path("bindir" "\\\${prefix}" "${CMAKE_INSTALL_BINDIR}") + set_variable_from_rel_or_absolute_path("mandir" "\\\${prefix}" "${CMAKE_INSTALL_MANDIR}") + set_variable_from_rel_or_absolute_path("docdir" "\\\${prefix}" "${CMAKE_INSTALL_DOCDIR}") + set_variable_from_rel_or_absolute_path("libdir" "\\\${prefix}" "${CMAKE_INSTALL_LIBDIR}") + set_variable_from_rel_or_absolute_path("includedir" "\\\${prefix}" "${CMAKE_INSTALL_INCLUDEDIR}/${OPENJPEG_INSTALL_SUBDIR}") + + # install in lib and not share (CMAKE_INSTALL_LIBDIR takes care of it for multi-arch) configure_file(${CMAKE_CURRENT_SOURCE_DIR}/src/lib/openjp2/libopenjp2.pc.cmake.in ${CMAKE_CURRENT_BINARY_DIR}/libopenjp2.pc @ONLY) install( FILES ${CMAKE_CURRENT_BINARY_DIR}/libopenjp2.pc DESTINATION diff --git a/src/lib/openjp2/libopenjp2.pc.cmake.in b/src/lib/openjp2/libopenjp2.pc.cmake.in index c90be433..2ade312b 100644 --- a/src/lib/openjp2/libopenjp2.pc.cmake.in +++ b/src/lib/openjp2/libopenjp2.pc.cmake.in @@ -1,9 +1,9 @@ prefix=@CMAKE_INSTALL_PREFIX@ -bindir=${prefix}/@CMAKE_INSTALL_BINDIR@ -mandir=${prefix}/@CMAKE_INSTALL_MANDIR@ -docdir=${prefix}/@CMAKE_INSTALL_DOCDIR@ -libdir=${prefix}/@CMAKE_INSTALL_LIBDIR@ -includedir=${prefix}/@CMAKE_INSTALL_INCLUDEDIR@/@OPENJPEG_INSTALL_SUBDIR@ +bindir=@bindir@ +mandir=@mandir@ +docdir=@docdir@ +libdir=@libdir@ +includedir=@includedir@ Name: openjp2 Description: JPEG2000 library (Part 1 and 2) diff --git a/src/lib/openjpip/libopenjpip.pc.cmake.in b/src/lib/openjpip/libopenjpip.pc.cmake.in index 8bc809d4..fc97ef04 100644 --- a/src/lib/openjpip/libopenjpip.pc.cmake.in +++ b/src/lib/openjpip/libopenjpip.pc.cmake.in @@ -1,9 +1,9 @@ prefix=@CMAKE_INSTALL_PREFIX@ -bindir=${prefix}/@CMAKE_INSTALL_BINDIR@ -mandir=${prefix}/@CMAKE_INSTALL_MANDIR@ -docdir=${prefix}/@CMAKE_INSTALL_DOCDIR@ -libdir=${prefix}/@CMAKE_INSTALL_LIBDIR@ -includedir=${prefix}/@CMAKE_INSTALL_INCLUDEDIR@/@OPENJPEG_INSTALL_SUBDIR@ +bindir=@bindir@ +mandir=@mandir@ +docdir=@docdir@ +libdir=@libdir@ +includedir=@includedir@ Name: openjpip Description: JPEG2000 Interactivity tools, APIs and protocols (Part 9)