summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorAlex Richardson <arichardson@FreeBSD.org>2022-08-11 12:09:04 +0000
committerAlex Richardson <arichardson@FreeBSD.org>2022-08-11 12:13:18 +0000
commitc6ceb84c221b5094f1e8a4c0c247dee3fb5074e8 (patch)
tree671261fd48df2b6e8058f104b968909f4f337f7b
parentc7bccf0515892617af984328e96cff5b4a6cd6d3 (diff)
Make OpenJPEGConfig.cmake relocatable with CMake > 3.0
Using CMakePackageConfigHelpers, we can generate a relocatable OpenJPEGConfig.config, using the PATH_VARS feature to make CMAKE_INSTALL_LIBDIR relative to the installed location. This change is needed for me when cross-compiling since CMAKE_INSTALL_FULL_LIBDIR is a path inside the sysroot rather than an absolute path to the actual includes. Without this change poppler ends up passing a -I flag that does not exist. This includes fallback code for CMake 2.8, which adds a bit of complexity, since I'm not sure if raising the minimum to 3.0 (now over 8 years old) is acceptable.
-rw-r--r--CMakeLists.txt21
-rw-r--r--cmake/OpenJPEGConfig.cmake.in3
2 files changed, 18 insertions, 6 deletions
diff --git a/CMakeLists.txt b/CMakeLists.txt
index fcf4709d..292b2132 100644
--- a/CMakeLists.txt
+++ b/CMakeLists.txt
@@ -304,12 +304,23 @@ if(BUILD_TESTING)
endif()
#-----------------------------------------------------------------------------
-# install all targets referenced as OPENJPEGTargets
+# install all targets referenced as OPENJPEGTargets (relocatable with CMake 3.0+)
install(EXPORT OpenJPEGTargets DESTINATION ${OPENJPEG_INSTALL_PACKAGE_DIR})
-configure_file( ${${OPENJPEG_NAMESPACE}_SOURCE_DIR}/cmake/OpenJPEGConfig.cmake.in
- ${${OPENJPEG_NAMESPACE}_BINARY_DIR}/OpenJPEGConfig.cmake
- @ONLY
-)
+if (${CMAKE_VERSION} VERSION_LESS 3.0)
+ set(PACKAGE_INIT)
+ set(PACKAGE_CMAKE_INSTALL_INCLUDEDIR ${CMAKE_INSTALL_FULL_INCLUDEDIR})
+ configure_file( ${${OPENJPEG_NAMESPACE}_SOURCE_DIR}/cmake/OpenJPEGConfig.cmake.in
+ ${${OPENJPEG_NAMESPACE}_BINARY_DIR}/OpenJPEGConfig.cmake
+ @ONLY
+ )
+else()
+ include(CMakePackageConfigHelpers)
+ configure_package_config_file(${CMAKE_CURRENT_LIST_DIR}/cmake/OpenJPEGConfig.cmake.in
+ ${OPENJPEG_BINARY_DIR}/OpenJPEGConfig.cmake
+ INSTALL_DESTINATION ${OPENJPEG_INSTALL_PACKAGE_DIR}
+ PATH_VARS CMAKE_INSTALL_INCLUDEDIR)
+endif()
+
install( FILES ${OPENJPEG_BINARY_DIR}/OpenJPEGConfig.cmake
DESTINATION ${OPENJPEG_INSTALL_PACKAGE_DIR}
)
diff --git a/cmake/OpenJPEGConfig.cmake.in b/cmake/OpenJPEGConfig.cmake.in
index fccd0cc6..bb7b79c1 100644
--- a/cmake/OpenJPEGConfig.cmake.in
+++ b/cmake/OpenJPEGConfig.cmake.in
@@ -5,6 +5,7 @@
# This file is configured by OPENJPEG and used by the UseOPENJPEG.cmake
# module to load OPENJPEG's settings for an external project.
@OPENJPEG_CONFIG_INSTALL_ONLY@
+@PACKAGE_INIT@
# The OPENJPEG version number.
set(OPENJPEG_MAJOR_VERSION "@OPENJPEG_VERSION_MAJOR@")
set(OPENJPEG_MINOR_VERSION "@OPENJPEG_VERSION_MINOR@")
@@ -27,7 +28,7 @@ if(EXISTS ${SELF_DIR}/OpenJPEGTargets.cmake)
# This is an install tree
include(${SELF_DIR}/OpenJPEGTargets.cmake)
- set(INC_DIR "@CMAKE_INSTALL_FULL_INCLUDEDIR@/@OPENJPEG_INSTALL_SUBDIR@")
+ set(INC_DIR "@PACKAGE_CMAKE_INSTALL_INCLUDEDIR@/@OPENJPEG_INSTALL_SUBDIR@")
get_filename_component(OPENJPEG_INCLUDE_DIRS "${INC_DIR}" ABSOLUTE)
else()