From c8358fcbd99b97e0616f79af0ce496d371264c59 Mon Sep 17 00:00:00 2001 From: DRC Date: Thu, 8 Dec 2016 14:43:59 -0600 Subject: [PATCH] Build: Various improvements to install/pkg system - GNUInstallDirs: any directory variable can now reference any other directory variable by including its name in angle brackets (<>). - Changed the documentation of the directory variables in BUILDING.md accordingly. This commit also includes some formatting tweaks to that section (using boldface for directory names, as is our convention.) - Changed the package scripts such that they use CMAKE_INSTALL_DATAROOTDIR rather than CMAKE_INSTALL_DATADIR. - We no longer override the install dir. defaults on Windows unless performing an official build. It may be useful, for instance, to use the GNU defaults when installing into an MSYS environment. --- BUILDING.md | 15 +++++---- CMakeLists.txt | 10 +++--- cmakescripts/GNUInstallDirs.cmake | 55 +++++++++++++++++++++---------- release/makedpkg.in | 6 ++-- release/rpm.spec.in | 8 ++--- release/uninstall.in | 6 ++-- 6 files changed, 59 insertions(+), 41 deletions(-) diff --git a/BUILDING.md b/BUILDING.md index 43cd69f..0fc37a1 100644 --- a/BUILDING.md +++ b/BUILDING.md @@ -641,8 +641,8 @@ Un*x The default value of `CMAKE_INSTALL_PREFIX` causes the libjpeg-turbo files to be installed with a directory structure resembling that of the official libjpeg-turbo binary packages. Changing the value of `CMAKE_INSTALL_PREFIX` -(for instance, to "/usr/local") causes the libjpeg-turbo files to be installed -with a directory structure that conforms to GNU standards. +(for instance, to **/usr/local**) causes the libjpeg-turbo files to be +installed with a directory structure that conforms to GNU standards. The `CMAKE_INSTALL_BINDIR`, `CMAKE_INSTALL_DATAROOTDIR`, `CMAKE_INSTALL_DOCDIR`, `CMAKE_INSTALL_INCLUDEDIR`, `CMAKE_INSTALL_JAVADIR`, @@ -650,11 +650,12 @@ The `CMAKE_INSTALL_BINDIR`, `CMAKE_INSTALL_DATAROOTDIR`, finer degree of control over where specific files in the libjpeg-turbo distribution should be installed. These directory variables can either be specified as absolute paths or as paths relative to `CMAKE_INSTALL_PREFIX` (for -instance, setting `CMAKE_INSTALL_DOCDIR=doc` would cause the documentation to -be installed in `${CMAKE_INSTALL_PREFIX}/doc`.) If `CMAKE_INSTALL_DOCDIR`, -`CMAKE_INSTALL_JAVADIR`, or `CMAKE_INSTALL_MANDIR` contains the special string -``, then that string is automatically replaced by the value of -`CMAKE_INSTALL_DATAROOTDIR`. +instance, setting `CMAKE_INSTALL_DOCDIR` to **doc** would cause the +documentation to be installed in **${CMAKE\_INSTALL\_PREFIX}/doc**.) If a +directory variable contains the name of another directory variable in angle +brackets, then its final value will depend on the final value of that other +variable. For instance, the default value of `CMAKE_INSTALL_MANDIR` is +**\/man**. NOTE: If setting one of these directory variables to a relative path using the CMake command line, you must specify that the variable is of type `PATH`. diff --git a/CMakeLists.txt b/CMakeLists.txt index d0b0068..5f31172 100644 --- a/CMakeLists.txt +++ b/CMakeLists.txt @@ -90,13 +90,11 @@ message(STATUS "CMAKE_INSTALL_PREFIX = ${CMAKE_INSTALL_PREFIX}") # When the prefix is /opt/${CMAKE_PROJECT_NAME}, we assume that an "official" # build is being created, and thus we install things into specific locations. -if(CMAKE_INSTALL_PREFIX STREQUAL "${CMAKE_INSTALL_DEFAULT_PREFIX}" OR NOT UNIX) +if(CMAKE_INSTALL_PREFIX STREQUAL "${CMAKE_INSTALL_DEFAULT_PREFIX}") set(CMAKE_INSTALL_DEFAULT_DATAROOTDIR "") - set(CMAKE_INSTALL_DEFAULT_DOCDIR "/doc") - set(CMAKE_INSTALL_DEFAULT_JAVADIR "/classes") -endif() -if(CMAKE_INSTALL_PREFIX STREQUAL "${CMAKE_INSTALL_DEFAULT_PREFIX}" AND UNIX) - if(NOT APPLE) + set(CMAKE_INSTALL_DEFAULT_DOCDIR "/doc") + set(CMAKE_INSTALL_DEFAULT_JAVADIR "/classes") + if(UNIX AND NOT APPLE) if(BITS EQUAL 64) set(CMAKE_INSTALL_DEFAULT_LIBDIR "lib64") else() diff --git a/cmakescripts/GNUInstallDirs.cmake b/cmakescripts/GNUInstallDirs.cmake index 6ef626e..096d4e5 100644 --- a/cmakescripts/GNUInstallDirs.cmake +++ b/cmakescripts/GNUInstallDirs.cmake @@ -286,7 +286,7 @@ set_dir(DATAROOTDIR # not set explicitly. This auto-updates the defaults as DATAROOTDIR changes. if(NOT DEFINED CMAKE_INSTALL_DEFAULT_DATADIR) - set(CMAKE_INSTALL_DEFAULT_DATADIR "") + set(CMAKE_INSTALL_DEFAULT_DATADIR "") endif() set_dir(DATADIR "The directory under which read-only architecture-independent data files should be installed") @@ -295,7 +295,7 @@ if(NOT DEFINED CMAKE_INSTALL_DEFAULT_INFODIR) if(CMAKE_SYSTEM_NAME MATCHES "^(.*BSD|DragonFly)$") set(CMAKE_INSTALL_DEFAULT_INFODIR "info") else() - set(CMAKE_INSTALL_DEFAULT_INFODIR "/info") + set(CMAKE_INSTALL_DEFAULT_INFODIR "/info") endif() endif() set_dir(INFODIR @@ -305,45 +305,64 @@ if(NOT DEFINED CMAKE_INSTALL_DEFAULT_MANDIR) if(CMAKE_SYSTEM_NAME MATCHES "^(.*BSD|DragonFly)$") set(CMAKE_INSTALL_DEFAULT_MANDIR "man") else() - set(CMAKE_INSTALL_DEFAULT_MANDIR "/man") + set(CMAKE_INSTALL_DEFAULT_MANDIR "/man") endif() endif() set_dir(MANDIR "The directory under which man pages should be installed") if(NOT DEFINED CMAKE_INSTALL_DEFAULT_LOCALEDIR) - set(CMAKE_INSTALL_DEFAULT_LOCALEDIR "/locale") + set(CMAKE_INSTALL_DEFAULT_LOCALEDIR "/locale") endif() set_dir(LOCALEDIR "The directory under which locale-specific message catalogs should be installed") if(NOT DEFINED CMAKE_INSTALL_DEFAULT_DOCDIR) - set(CMAKE_INSTALL_DEFAULT_DOCDIR "/doc/${PROJECT_NAME}") + set(CMAKE_INSTALL_DEFAULT_DOCDIR "/doc/${PROJECT_NAME}") endif() set_dir(DOCDIR "The directory into which documentation files (other than info files) should be installed") if(NOT DEFINED CMAKE_INSTALL_DEFAULT_JAVADIR) - set(CMAKE_INSTALL_DEFAULT_JAVADIR "/java") + set(CMAKE_INSTALL_DEFAULT_JAVADIR "/java") endif() set_dir(JAVADIR "The directory into which Java classes should be installed") -string(REGEX REPLACE "" "${CMAKE_INSTALL_DATAROOTDIR}" - CMAKE_INSTALL_DATADIR "${CMAKE_INSTALL_DATADIR}") -foreach(var INFODIR MANDIR LOCALEDIR DOCDIR JAVADIR) - if(NOT CMAKE_INSTALL_DATAROOTDIR) - string(REGEX REPLACE "/" "${CMAKE_INSTALL_DATAROOTDIR}" - CMAKE_INSTALL_${var} "${CMAKE_INSTALL_${var}}") - else() - string(REGEX REPLACE "" "${CMAKE_INSTALL_DATAROOTDIR}" - CMAKE_INSTALL_${var} "${CMAKE_INSTALL_${var}}") - endif() -endforeach() - # Save for next run set(_GNUInstallDirs_LAST_CMAKE_INSTALL_PREFIX "${CMAKE_INSTALL_PREFIX}" CACHE INTERNAL "CMAKE_INSTALL_PREFIX during last run") #----------------------------------------------------------------------------- +foreach(dir + BINDIR + SBINDIR + LIBEXECDIR + SYSCONFDIR + SHAREDSTATEDIR + LOCALSTATEDIR + LIBDIR + INCLUDEDIR + OLDINCLUDEDIR + DATAROOTDIR + DATADIR + INFODIR + LOCALEDIR + MANDIR + DOCDIR + JAVADIR + ) + string(REGEX REPLACE "[<>]" "@" CMAKE_INSTALL_${dir} + "${CMAKE_INSTALL_${dir}}") + # Handle the specific case of an empty CMAKE_INSTALL_DATAROOTDIR + if(NOT CMAKE_INSTALL_DATAROOTDIR AND + CMAKE_INSTALL_${dir} MATCHES "\@CMAKE_INSTALL_DATAROOTDIR\@/") + string(CONFIGURE "${CMAKE_INSTALL_${dir}}" CMAKE_INSTALL_${dir} @ONLY) + string(REGEX REPLACE "^/" "" CMAKE_INSTALL_${dir} + "${CMAKE_INSTALL_${dir}}") + else() + string(CONFIGURE "${CMAKE_INSTALL_${dir}}" CMAKE_INSTALL_${dir} @ONLY) + endif() +endforeach() + mark_as_advanced( CMAKE_INSTALL_BINDIR CMAKE_INSTALL_SBINDIR diff --git a/release/makedpkg.in b/release/makedpkg.in index 96314c6..47d5050 100644 --- a/release/makedpkg.in +++ b/release/makedpkg.in @@ -65,8 +65,8 @@ makedeb() if [ $SUPPLEMENT = 1 ]; then make install DESTDIR=$TMPDIR rm -rf $TMPDIR$BINDIR - if [ "$DATADIR" != "$PREFIX" ]; then - rm -rf $TMPDIR$DATADIR + if [ "$DATAROOTDIR" != "$PREFIX" ]; then + rm -rf $TMPDIR$DATAROOTDIR fi if [ "$JAVADIR" != "" ]; then rm -rf $TMPDIR$JAVADIR @@ -98,7 +98,7 @@ VERSION=@VERSION@ DEBARCH=@DEBARCH@ PREFIX=@CMAKE_INSTALL_PREFIX@ BINDIR=@CMAKE_INSTALL_FULL_BINDIR@ -DATADIR=@CMAKE_INSTALL_FULL_DATADIR@ +DATAROOTDIR=@CMAKE_INSTALL_FULL_DATAROOTDIR@ DOCDIR=@CMAKE_INSTALL_FULL_DOCDIR@ INCLUDEDIR=@CMAKE_INSTALL_FULL_INCLUDEDIR@ JAVADIR=@CMAKE_INSTALL_FULL_JAVADIR@ diff --git a/release/rpm.spec.in b/release/rpm.spec.in index 00a1654..36b0c51 100644 --- a/release/rpm.spec.in +++ b/release/rpm.spec.in @@ -1,6 +1,6 @@ %define _prefix @CMAKE_INSTALL_PREFIX@ %define _bindir @CMAKE_INSTALL_FULL_BINDIR@ -%define _datadir @CMAKE_INSTALL_FULL_DATADIR@ +%define _datarootdir @CMAKE_INSTALL_FULL_DATAROOTDIR@ %define _docdir %{_defaultdocdir}/%{name}-%{version} %define _includedir @CMAKE_INSTALL_FULL_INCLUDEDIR@ %define _javadir @CMAKE_INSTALL_FULL_JAVADIR@ @@ -57,7 +57,7 @@ broader range of users and developers. #-->cmake -G"Unix Makefiles" -DCMAKE_BUILD_TYPE=@CMAKE_BUILD_TYPE@ \ #--> -DBUILD=%{release} \ #--> -DCMAKE_INSTALL_BINDIR=%{_bindir} \ -#--> -DCMAKE_INSTALL_DATADIR=%{_datadir} \ +#--> -DCMAKE_INSTALL_DATAROOTDIR=%{_datarootdir} \ #--> -DCMAKE_INSTALL_DOCDIR=%{_docdir} \ #--> -DCMAKE_INSTALL_INCLUDEDIR=%{_includedir} \ #--> -DCMAKE_INSTALL_JAVADIR=%{_javadir} \ @@ -188,8 +188,8 @@ rm -rf $RPM_BUILD_ROOT %{_mandir}/man1/jpegtran.1* %{_mandir}/man1/rdjpgcom.1* %{_mandir}/man1/wrjpgcom.1* -%if "%{_prefix}" != "%{_datadir}" - %dir %{_datadir} +%if "%{_prefix}" != "%{_datarootdir}" + %dir %{_datarootdir} %endif %if "%{_with_java}" == "1" %dir %{_javadir} diff --git a/release/uninstall.in b/release/uninstall.in index caf2578..353b2a6 100644 --- a/release/uninstall.in +++ b/release/uninstall.in @@ -58,7 +58,7 @@ popd echo Removing package directories ... PREFIX=@CMAKE_INSTALL_PREFIX@ BINDIR=@CMAKE_INSTALL_FULL_BINDIR@ -DATADIR=@CMAKE_INSTALL_FULL_DATADIR@ +DATAROOTDIR=@CMAKE_INSTALL_FULL_DATAROOTDIR@ INCLUDEDIR=@CMAKE_INSTALL_FULL_INCLUDEDIR@ JAVADIR=@CMAKE_INSTALL_FULL_JAVADIR@ LIBDIR=@CMAKE_INSTALL_FULL_LIBDIR@ @@ -93,8 +93,8 @@ fi if [ -d $JAVADIR ]; then rmdir $JAVADIR 2>&1 || EXITSTATUS=-1 fi -if [ -d $DATADIR -a "$DATADIR" != "$PREFIX" ]; then - rmdir $DATADIR 2>&1 || EXITSTATUS=-1 +if [ -d $DATAROOTDIR -a "$DATAROOTDIR" != "$PREFIX" ]; then + rmdir $DATAROOTDIR 2>&1 || EXITSTATUS=-1 fi if [ "$PREFIX" = "@CMAKE_INSTALL_DEFAULT_PREFIX@" -a -h "$PREFIX/doc" ]; then rm $PREFIX/doc 2>&1 || EXITSTATUS=-1 -- 2.50.1