Build: Make package cfg files/install relocatable This fully reverts c96e93b1f21ac4fb9521d5108cb16917717e4da7. Specifying a full path with install(TARGETS ...) causes the paths in the CMake package config files to be hard-coded, which effectively makes the package non-relocatable. Specifying a full path with other install() commands breaks the --prefix option to cmake --install. There is in fact no sane way to support blank install directories. Integrators who wish to install certain files into the main libjpeg-turbo install directory can set a particular CMAKE_INSTALL_*DIR variable to "<CMAKE_INSTALL_PREFIX>", with the understanding that doing so will break relocatability in the same way that c96e93b1f21ac4fb9521d5108cb16917717e4da7 did. This commit also tweaks the RPM spec so that RPMs built from a source RPM will contain relocatable CMake package config files.
diff --git a/CMakeLists.txt b/CMakeLists.txt index 60cdd4f..cdcadb1 100644 --- a/CMakeLists.txt +++ b/CMakeLists.txt
@@ -213,6 +213,13 @@ list(APPEND DIRLIST "MANDIR") endif() foreach(dir ${DIRLIST}) + # CMAKE_INSTALL_BINDIR, CMAKE_INSTALL_DOCDIR, CMAKE_INSTALL_INCLUDEDIR, + # CMAKE_INSTALL_LIBDIR, and CMAKE_INSTALL_MANDIR cannot be blank, because + # either CMake will fail to configure the build, or install() will attempt to + # install files to the root directory. + if(NOT dir STREQUAL "DATAROOTDIR" AND NOT CMAKE_INSTALL_${dir}) + message(FATAL_ERROR "CMAKE_INSTALL_${dir} cannot be blank") + endif() report_directory(${dir}) endforeach() @@ -1940,23 +1947,23 @@ if(WITH_TURBOJPEG) if(ENABLE_SHARED) install(TARGETS turbojpeg EXPORT ${CMAKE_PROJECT_NAME}Targets - INCLUDES DESTINATION ${CMAKE_INSTALL_FULL_INCLUDEDIR} - ARCHIVE DESTINATION ${CMAKE_INSTALL_FULL_LIBDIR} COMPONENT lib - LIBRARY DESTINATION ${CMAKE_INSTALL_FULL_LIBDIR} COMPONENT lib - RUNTIME DESTINATION ${CMAKE_INSTALL_FULL_BINDIR} COMPONENT bin) + INCLUDES DESTINATION ${CMAKE_INSTALL_INCLUDEDIR} + ARCHIVE DESTINATION ${CMAKE_INSTALL_LIBDIR} COMPONENT lib + LIBRARY DESTINATION ${CMAKE_INSTALL_LIBDIR} COMPONENT lib + RUNTIME DESTINATION ${CMAKE_INSTALL_BINDIR} COMPONENT bin) if(WITH_TOOLS) install(TARGETS tjbench - RUNTIME DESTINATION ${CMAKE_INSTALL_FULL_BINDIR} COMPONENT bin) + RUNTIME DESTINATION ${CMAKE_INSTALL_BINDIR} COMPONENT bin) endif() if(MSVC_LIKE AND CMAKE_C_LINKER_SUPPORTS_PDB) install(FILES "$<TARGET_PDB_FILE:turbojpeg>" - DESTINATION ${CMAKE_INSTALL_FULL_BINDIR} COMPONENT bin OPTIONAL) + DESTINATION ${CMAKE_INSTALL_BINDIR} COMPONENT bin OPTIONAL) endif() endif() if(ENABLE_STATIC) install(TARGETS turbojpeg-static EXPORT ${CMAKE_PROJECT_NAME}Targets - INCLUDES DESTINATION ${CMAKE_INSTALL_FULL_INCLUDEDIR} - ARCHIVE DESTINATION ${CMAKE_INSTALL_FULL_LIBDIR} COMPONENT lib) + INCLUDES DESTINATION ${CMAKE_INSTALL_INCLUDEDIR} + ARCHIVE DESTINATION ${CMAKE_INSTALL_LIBDIR} COMPONENT lib) if(NOT ENABLE_SHARED) if(GENERATOR_IS_MULTI_CONFIG) set(DIR "${CMAKE_CURRENT_BINARY_DIR}/\${CMAKE_INSTALL_CONFIG_NAME}") @@ -1965,19 +1972,19 @@ endif() if(WITH_TOOLS) install(PROGRAMS ${DIR}/tjbench-static${EXE} - DESTINATION ${CMAKE_INSTALL_FULL_BINDIR} COMPONENT bin + DESTINATION ${CMAKE_INSTALL_BINDIR} COMPONENT bin RENAME tjbench${EXE}) endif() endif() endif() install(FILES ${CMAKE_CURRENT_SOURCE_DIR}/src/turbojpeg.h - DESTINATION ${CMAKE_INSTALL_FULL_INCLUDEDIR} COMPONENT include) + DESTINATION ${CMAKE_INSTALL_INCLUDEDIR} COMPONENT include) endif() if(ENABLE_STATIC) install(TARGETS jpeg-static EXPORT ${CMAKE_PROJECT_NAME}Targets - INCLUDES DESTINATION ${CMAKE_INSTALL_FULL_INCLUDEDIR} - ARCHIVE DESTINATION ${CMAKE_INSTALL_FULL_LIBDIR} COMPONENT lib) + INCLUDES DESTINATION ${CMAKE_INSTALL_INCLUDEDIR} + ARCHIVE DESTINATION ${CMAKE_INSTALL_LIBDIR} COMPONENT lib) if(NOT ENABLE_SHARED) if(GENERATOR_IS_MULTI_CONFIG) set(DIR "${CMAKE_CURRENT_BINARY_DIR}/\${CMAKE_INSTALL_CONFIG_NAME}") @@ -1986,13 +1993,11 @@ endif() if(WITH_TOOLS) install(PROGRAMS ${DIR}/cjpeg-static${EXE} - DESTINATION ${CMAKE_INSTALL_FULL_BINDIR} COMPONENT bin - RENAME cjpeg${EXE}) + DESTINATION ${CMAKE_INSTALL_BINDIR} COMPONENT bin RENAME cjpeg${EXE}) install(PROGRAMS ${DIR}/djpeg-static${EXE} - DESTINATION ${CMAKE_INSTALL_FULL_BINDIR} COMPONENT bin - RENAME djpeg${EXE}) + DESTINATION ${CMAKE_INSTALL_BINDIR} COMPONENT bin RENAME djpeg${EXE}) install(PROGRAMS ${DIR}/jpegtran-static${EXE} - DESTINATION ${CMAKE_INSTALL_FULL_BINDIR} COMPONENT bin + DESTINATION ${CMAKE_INSTALL_BINDIR} COMPONENT bin RENAME jpegtran${EXE}) endif() endif() @@ -2000,7 +2005,7 @@ if(WITH_TOOLS) install(TARGETS rdjpgcom wrjpgcom - RUNTIME DESTINATION ${CMAKE_INSTALL_FULL_BINDIR} COMPONENT bin) + RUNTIME DESTINATION ${CMAKE_INSTALL_BINDIR} COMPONENT bin) endif() install(FILES ${CMAKE_CURRENT_SOURCE_DIR}/README.ijg @@ -2011,19 +2016,19 @@ ${CMAKE_CURRENT_SOURCE_DIR}/doc/usage.txt ${CMAKE_CURRENT_SOURCE_DIR}/doc/wizard.txt ${CMAKE_CURRENT_SOURCE_DIR}/LICENSE.md - DESTINATION ${CMAKE_INSTALL_FULL_DOCDIR} COMPONENT doc) + DESTINATION ${CMAKE_INSTALL_DOCDIR} COMPONENT doc) if(WITH_TURBOJPEG) install(FILES ${CMAKE_CURRENT_SOURCE_DIR}/src/tjcomp.c ${CMAKE_CURRENT_SOURCE_DIR}/src/tjdecomp.c ${CMAKE_CURRENT_SOURCE_DIR}/src/tjtran.c - DESTINATION ${CMAKE_INSTALL_FULL_DOCDIR} COMPONENT doc) + DESTINATION ${CMAKE_INSTALL_DOCDIR} COMPONENT doc) endif() if(WITH_JNA) install(FILES ${CMAKE_CURRENT_SOURCE_DIR}/jna/TJ.java ${CMAKE_CURRENT_SOURCE_DIR}/jna/TJComp.java ${CMAKE_CURRENT_SOURCE_DIR}/jna/TJDecomp.java ${CMAKE_CURRENT_SOURCE_DIR}/jna/TJTran.java - DESTINATION ${CMAKE_INSTALL_FULL_DOCDIR}/jna COMPONENT doc) + DESTINATION ${CMAKE_INSTALL_DOCDIR}/jna COMPONENT doc) endif() if(UNIX OR MINGW) @@ -2033,30 +2038,30 @@ ${CMAKE_CURRENT_SOURCE_DIR}/doc/jpegtran.1 ${CMAKE_CURRENT_SOURCE_DIR}/doc/rdjpgcom.1 ${CMAKE_CURRENT_SOURCE_DIR}/doc/wrjpgcom.1 - DESTINATION ${CMAKE_INSTALL_FULL_MANDIR}/man1 COMPONENT man) + DESTINATION ${CMAKE_INSTALL_MANDIR}/man1 COMPONENT man) endif() endif() install(FILES ${CMAKE_CURRENT_BINARY_DIR}/pkgscripts/libjpeg.pc - DESTINATION ${CMAKE_INSTALL_FULL_LIBDIR}/pkgconfig COMPONENT lib) + DESTINATION ${CMAKE_INSTALL_LIBDIR}/pkgconfig COMPONENT lib) if(WITH_TURBOJPEG) install(FILES ${CMAKE_CURRENT_BINARY_DIR}/pkgscripts/libturbojpeg.pc - DESTINATION ${CMAKE_INSTALL_FULL_LIBDIR}/pkgconfig COMPONENT lib) + DESTINATION ${CMAKE_INSTALL_LIBDIR}/pkgconfig COMPONENT lib) endif() install(FILES ${CMAKE_CURRENT_BINARY_DIR}/pkgscripts/${CMAKE_PROJECT_NAME}Config.cmake ${CMAKE_CURRENT_BINARY_DIR}/pkgscripts/${CMAKE_PROJECT_NAME}ConfigVersion.cmake - DESTINATION ${CMAKE_INSTALL_FULL_LIBDIR}/cmake/${CMAKE_PROJECT_NAME} + DESTINATION ${CMAKE_INSTALL_LIBDIR}/cmake/${CMAKE_PROJECT_NAME} COMPONENT lib) install(EXPORT ${CMAKE_PROJECT_NAME}Targets NAMESPACE ${CMAKE_PROJECT_NAME}:: - DESTINATION ${CMAKE_INSTALL_FULL_LIBDIR}/cmake/${CMAKE_PROJECT_NAME} + DESTINATION ${CMAKE_INSTALL_LIBDIR}/cmake/${CMAKE_PROJECT_NAME} COMPONENT lib) install(FILES ${CMAKE_CURRENT_BINARY_DIR}/jconfig.h ${CMAKE_CURRENT_SOURCE_DIR}/src/jerror.h ${CMAKE_CURRENT_SOURCE_DIR}/src/jmorecfg.h ${CMAKE_CURRENT_SOURCE_DIR}/src/jpeglib.h - DESTINATION ${CMAKE_INSTALL_FULL_INCLUDEDIR} COMPONENT include) + DESTINATION ${CMAKE_INSTALL_INCLUDEDIR} COMPONENT include) include(cmakescripts/BuildPackages.cmake)
diff --git a/ChangeLog.md b/ChangeLog.md index 42ba52e..a58ba9c 100644 --- a/ChangeLog.md +++ b/ChangeLog.md
@@ -1,7 +1,7 @@ 3.1.90 (3.2 beta1) ================== -### Significant changes relative to 3.1.4: +### Significant changes relative to 3.1.4.1: 1. The legacy GNU Assembler (GAS) implementation of the Arm Neon SIMD extensions has been removed. Arm builds of libjpeg-turbo must now use GCC 12 @@ -144,6 +144,16 @@ option in ImageMagick and the Offset filter/tool in Photoshop and GIMP. +3.1.4.1 +======= + +### Significant changes relative to 3.1.4: + +1. Fixed multiple issues, some long-standing and some that were regressions +introduced in 3.1.4, that made the CMake package config files non-relocatable +and broke the `--prefix` option to `cmake --install`. + + 3.1.4 =====
diff --git a/jna/CMakeLists.txt b/jna/CMakeLists.txt index c41c767..0321b7d 100644 --- a/jna/CMakeLists.txt +++ b/jna/CMakeLists.txt
@@ -43,7 +43,10 @@ CMAKE_INSTALL_JAVADIR) set(CMAKE_INSTALL_JAVADIR ${CMAKE_INSTALL_JAVADIR} PARENT_SCOPE) set(CMAKE_INSTALL_FULL_JAVADIR ${CMAKE_INSTALL_FULL_JAVADIR} PARENT_SCOPE) +if(NOT CMAKE_INSTALL_JAVADIR) + message(FATAL_ERROR "CMAKE_INSTALL_JAVADIR cannot be blank") +endif() report_directory(JAVADIR) -install_jar(turbojpeg-jna DESTINATION ${CMAKE_INSTALL_FULL_JAVADIR} +install_jar(turbojpeg-jna DESTINATION ${CMAKE_INSTALL_JAVADIR} COMPONENT java) mark_as_advanced(CLEAR CMAKE_INSTALL_JAVADIR)
diff --git a/release/rpm.spec.in b/release/rpm.spec.in index b7e5559..d25020f 100644 --- a/release/rpm.spec.in +++ b/release/rpm.spec.in
@@ -32,13 +32,16 @@ #-->%if 1 %if "%{_bits}" == "64" %define _libdir %{_exec_prefix}/lib64 +%define _rellibdir lib64 %else %if "%{_prefix}" == "/opt/libjpeg-turbo" %define _libdir %{_exec_prefix}/lib32 +%define _rellibdir lib32 %endif %endif #-->%else %define _libdir @CMAKE_INSTALL_FULL_LIBDIR@ +%define _rellibdir @CMAKE_INSTALL_LIBDIR@ #-->%endif %define __requires_exclude_from ^%{_libdir}/cmake/@CMAKE_PROJECT_NAME@/.*$ @@ -91,9 +94,9 @@ #--> -DCMAKE_INSTALL_BINDIR=%{_bindir} \ #--> -DCMAKE_INSTALL_DATAROOTDIR=%{_datarootdir} \ #--> -DCMAKE_INSTALL_DOCDIR=%{_docdir} \ -#--> -DCMAKE_INSTALL_INCLUDEDIR=%{_includedir} \ +#--> -DCMAKE_INSTALL_INCLUDEDIR=@CMAKE_INSTALL_INCLUDEDIR@ \ #--> -DCMAKE_INSTALL_JAVADIR=%{_javadir} \ -#--> -DCMAKE_INSTALL_LIBDIR=%{_libdir} \ +#--> -DCMAKE_INSTALL_LIBDIR=%{_rellibdir} \ #--> -DCMAKE_INSTALL_MANDIR=%{_mandir} \ #--> -DCMAKE_INSTALL_PREFIX=%{_prefix} \ #--> -DCMAKE_POSITION_INDEPENDENT_CODE=@CMAKE_POSITION_INDEPENDENT_CODE@ \
diff --git a/sharedlib/CMakeLists.txt b/sharedlib/CMakeLists.txt index bcd05d8..62e8ffc 100644 --- a/sharedlib/CMakeLists.txt +++ b/sharedlib/CMakeLists.txt
@@ -166,14 +166,14 @@ install(TARGETS jpeg EXPORT ${CMAKE_PROJECT_NAME}Targets INCLUDES DESTINATION ${CMAKE_INSTALL_INCLUDEDIR} - ARCHIVE DESTINATION ${CMAKE_INSTALL_FULL_LIBDIR} COMPONENT lib - LIBRARY DESTINATION ${CMAKE_INSTALL_FULL_LIBDIR} COMPONENT lib - RUNTIME DESTINATION ${CMAKE_INSTALL_FULL_BINDIR} COMPONENT bin) + ARCHIVE DESTINATION ${CMAKE_INSTALL_LIBDIR} COMPONENT lib + LIBRARY DESTINATION ${CMAKE_INSTALL_LIBDIR} COMPONENT lib + RUNTIME DESTINATION ${CMAKE_INSTALL_BINDIR} COMPONENT bin) if(WITH_TOOLS) install(TARGETS cjpeg djpeg jpegtran - RUNTIME DESTINATION ${CMAKE_INSTALL_FULL_BINDIR} COMPONENT bin) + RUNTIME DESTINATION ${CMAKE_INSTALL_BINDIR} COMPONENT bin) endif() if(MSVC_LIKE AND CMAKE_C_LINKER_SUPPORTS_PDB) install(FILES "$<TARGET_PDB_FILE:jpeg>" - DESTINATION ${CMAKE_INSTALL_FULL_BINDIR} COMPONENT bin OPTIONAL) + DESTINATION ${CMAKE_INSTALL_BINDIR} COMPONENT bin OPTIONAL) endif()