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()