From: DRC Date: Fri, 9 Dec 2016 16:21:29 +0000 (-0600) Subject: Build: More GNUInstallDirs improvements X-Git-Tag: 1.5.90~85 X-Git-Url: https://granicus.if.org/sourcecode?a=commitdiff_plain;h=6530203fddc1836952d05d2e82402f9014fe2605;p=libjpeg-turbo Build: More GNUInstallDirs improvements These improvements enable build systems to use GNUInstallDirs to define custom directory variables. - The set_dir() macro was renamed to GNUInstallDirs_set_install_dir(), in keeping with the module's established macro naming convention. - Rather than detecting whether the prefix has changed, the new GNUInstallDirs_set_install_dir() macro instead examines whether the default for the variable in question has changed. This allows for more flexibility, since build systems may decide to change the defaults based on factors other than the prefix. It also enables the macro to work properly outside of the module. - The module now performs directory variable substitution within the body of GNUInstallDirs_get_absolute_install_dir(). - The JAVADIR variable is no longer included in GNUInstallDirs. That directory is not part of the GNU spec, and it turns out that various operating systems use different conventions for the location of Java classes. Instead, the variable is now implemented in our build system as a demonstration of the aforementioned GNUInstallDirs enhancements. --- diff --git a/CMakeLists.txt b/CMakeLists.txt index 5f31172..dae1971 100644 --- a/CMakeLists.txt +++ b/CMakeLists.txt @@ -107,17 +107,21 @@ include(cmakescripts/GNUInstallDirs.cmake) set(CMAKE_INSTALL_RPATH ${CMAKE_INSTALL_FULL_LIBDIR}) -set(DIRLIST "BINDIR;DATAROOTDIR;DOCDIR;INCLUDEDIR;LIBDIR") -if(UNIX) - list(APPEND DIRLIST "MANDIR") -endif() -foreach(var ${DIRLIST}) +macro(report_directory var) if(CMAKE_INSTALL_${var} STREQUAL CMAKE_INSTALL_FULL_${var}) message(STATUS "CMAKE_INSTALL_${var} = ${CMAKE_INSTALL_${var}}") else() message(STATUS "CMAKE_INSTALL_${var} = ${CMAKE_INSTALL_${var}} (${CMAKE_INSTALL_FULL_${var}})") endif() mark_as_advanced(CLEAR CMAKE_INSTALL_${var}) +endmacro() + +set(DIRLIST "BINDIR;DATAROOTDIR;DOCDIR;INCLUDEDIR;LIBDIR") +if(UNIX) + list(APPEND DIRLIST "MANDIR") +endif() +foreach(dir ${DIRLIST}) + report_directory(${dir}) endforeach() diff --git a/cmakescripts/GNUInstallDirs.cmake b/cmakescripts/GNUInstallDirs.cmake index 096d4e5..ef564bb 100644 --- a/cmakescripts/GNUInstallDirs.cmake +++ b/cmakescripts/GNUInstallDirs.cmake @@ -162,7 +162,7 @@ # Installation directories # -macro(set_dir var docstring) +macro(GNUInstallDirs_set_install_dir var docstring) # If CMAKE_INSTALL_PREFIX changes and CMAKE_INSTALL_*DIR is still set to the # default value, then modify it accordingly. This presumes that the default # value may change based on the prefix. @@ -171,9 +171,9 @@ macro(set_dir var docstring) if(NOT DEFINED CMAKE_INSTALL_${var}) set(_GNUInstallDirs_CMAKE_INSTALL_DEFAULT_${var} 1 CACHE INTERNAL "CMAKE_INSTALL_${var} has default value") - elseif(DEFINED _GNUInstallDirs_LAST_CMAKE_INSTALL_PREFIX AND - NOT "${_GNUInstallDirs_LAST_CMAKE_INSTALL_PREFIX}" STREQUAL - "${CMAKE_INSTALL_PREFIX}" AND + elseif(DEFINED _GNUInstallDirs_CMAKE_INSTALL_LAST_DEFAULT_${var} AND + NOT "${_GNUInstallDirs_CMAKE_INSTALL_LAST_DEFAULT_${var}}" STREQUAL + "${CMAKE_INSTALL_DEFAULT_${var}}" AND _GNUInstallDirs_CMAKE_INSTALL_DEFAULT_${var} AND "${_GNUInstallDirs_CMAKE_INSTALL_LAST_${var}}" STREQUAL "${CMAKE_INSTALL_${var}}") @@ -191,41 +191,45 @@ macro(set_dir var docstring) # Save for next run set(_GNUInstallDirs_CMAKE_INSTALL_LAST_${var} "${CMAKE_INSTALL_${var}}" CACHE INTERNAL "CMAKE_INSTALL_${var} during last run") + set(_GNUInstallDirs_CMAKE_INSTALL_LAST_DEFAULT_${var} + "${CMAKE_INSTALL_DEFAULT_${var}}" CACHE INTERNAL + "CMAKE_INSTALL_DEFAULT_${var} during last run") endmacro() if(NOT DEFINED CMAKE_INSTALL_DEFAULT_BINDIR) set(CMAKE_INSTALL_DEFAULT_BINDIR "bin") endif() -set_dir(BINDIR "Directory into which user executables should be installed") +GNUInstallDirs_set_install_dir(BINDIR + "Directory into which user executables should be installed") if(NOT DEFINED CMAKE_INSTALL_DEFAULT_SBINDIR) set(CMAKE_INSTALL_DEFAULT_SBINDIR "sbin") endif() -set_dir(SBINDIR +GNUInstallDirs_set_install_dir(SBINDIR "Directory into which system admin executables should be installed") if(NOT DEFINED CMAKE_INSTALL_DEFAULT_LIBEXECDIR) set(CMAKE_INSTALL_DEFAULT_LIBEXECDIR "libexec") endif() -set_dir(LIBEXECDIR +GNUInstallDirs_set_install_dir(LIBEXECDIR "Directory under which executables run by other programs should be installed") if(NOT DEFINED CMAKE_INSTALL_DEFAULT_SYSCONFDIR) set(CMAKE_INSTALL_DEFAULT_SYSCONFDIR "etc") endif() -set_dir(SYSCONFDIR +GNUInstallDirs_set_install_dir(SYSCONFDIR "Directory into which machine-specific read-only ASCII data and configuration files should be installed") if(NOT DEFINED CMAKE_INSTALL_DEFAULT_SHAREDSTATEDIR) set(CMAKE_INSTALL_DEFAULT_SHAREDSTATEDIR "com") endif() -set_dir(SHAREDSTATEDIR +GNUInstallDirs_set_install_dir(SHAREDSTATEDIR "Directory into which architecture-independent run-time-modifiable data files should be installed") if(NOT DEFINED CMAKE_INSTALL_DEFAULT_LOCALSTATEDIR) set(CMAKE_INSTALL_DEFAULT_LOCALSTATEDIR "var") endif() -set_dir(LOCALSTATEDIR +GNUInstallDirs_set_install_dir(LOCALSTATEDIR "Directory into which machine-specific run-time-modifiable data files should be installed") if(NOT DEFINED CMAKE_INSTALL_DEFAULT_LIBDIR) @@ -260,24 +264,25 @@ if(NOT DEFINED CMAKE_INSTALL_DEFAULT_LIBDIR) endif() endif() endif() -set_dir(LIBDIR +GNUInstallDirs_set_install_dir(LIBDIR "Directory into which object files and object code libraries should be installed") if(NOT DEFINED CMAKE_INSTALL_DEFAULT_INCLUDEDIR) set(CMAKE_INSTALL_DEFAULT_INCLUDEDIR "include") endif() -set_dir(INCLUDEDIR "Directory into which C header files should be installed") +GNUInstallDirs_set_install_dir(INCLUDEDIR + "Directory into which C header files should be installed") if(NOT DEFINED CMAKE_INSTALL_DEFAULT_OLDINCLUDEDIR) set(CMAKE_INSTALL_DEFAULT_OLDINCLUDEDIR "/usr/include") endif() -set_dir(OLDINCLUDEDIR +GNUInstallDirs_set_install_dir(OLDINCLUDEDIR PATH "Directory into which C header files for non-GCC compilers should be installed") if(NOT DEFINED CMAKE_INSTALL_DEFAULT_DATAROOTDIR) set(CMAKE_INSTALL_DEFAULT_DATAROOTDIR "share") endif() -set_dir(DATAROOTDIR +GNUInstallDirs_set_install_dir(DATAROOTDIR "The root of the directory tree for read-only architecture-independent data files") #----------------------------------------------------------------------------- @@ -288,7 +293,7 @@ set_dir(DATAROOTDIR if(NOT DEFINED CMAKE_INSTALL_DEFAULT_DATADIR) set(CMAKE_INSTALL_DEFAULT_DATADIR "") endif() -set_dir(DATADIR +GNUInstallDirs_set_install_dir(DATADIR "The directory under which read-only architecture-independent data files should be installed") if(NOT DEFINED CMAKE_INSTALL_DEFAULT_INFODIR) @@ -298,7 +303,7 @@ if(NOT DEFINED CMAKE_INSTALL_DEFAULT_INFODIR) set(CMAKE_INSTALL_DEFAULT_INFODIR "/info") endif() endif() -set_dir(INFODIR +GNUInstallDirs_set_install_dir(INFODIR "The directory into which info documentation files should be installed") if(NOT DEFINED CMAKE_INSTALL_DEFAULT_MANDIR) @@ -308,61 +313,23 @@ if(NOT DEFINED CMAKE_INSTALL_DEFAULT_MANDIR) set(CMAKE_INSTALL_DEFAULT_MANDIR "/man") endif() endif() -set_dir(MANDIR "The directory under which man pages should be installed") +GNUInstallDirs_set_install_dir(MANDIR + "The directory under which man pages should be installed") if(NOT DEFINED CMAKE_INSTALL_DEFAULT_LOCALEDIR) set(CMAKE_INSTALL_DEFAULT_LOCALEDIR "/locale") endif() -set_dir(LOCALEDIR +GNUInstallDirs_set_install_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}") endif() -set_dir(DOCDIR +GNUInstallDirs_set_install_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") -endif() -set_dir(JAVADIR "The directory into which Java classes should be installed") - -# 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 @@ -379,10 +346,18 @@ mark_as_advanced( CMAKE_INSTALL_LOCALEDIR CMAKE_INSTALL_MANDIR CMAKE_INSTALL_DOCDIR - CMAKE_INSTALL_JAVADIR ) macro(GNUInstallDirs_get_absolute_install_dir absvar var) + string(REGEX REPLACE "[<>]" "@" ${var} "${${var}}") + # Handle the specific case of an empty CMAKE_INSTALL_DATAROOTDIR + if(NOT CMAKE_INSTALL_DATAROOTDIR AND + ${var} MATCHES "\@CMAKE_INSTALL_DATAROOTDIR\@/") + string(CONFIGURE "${${var}}" ${var} @ONLY) + string(REGEX REPLACE "^/" "" ${var} "${${var}}") + else() + string(CONFIGURE "${${var}}" ${var} @ONLY) + endif() if(NOT IS_ABSOLUTE "${${var}}") # Handle special cases: # - CMAKE_INSTALL_PREFIX == / @@ -436,7 +411,6 @@ foreach(dir LOCALEDIR MANDIR DOCDIR - JAVADIR ) GNUInstallDirs_get_absolute_install_dir(CMAKE_INSTALL_FULL_${dir} CMAKE_INSTALL_${dir}) endforeach() diff --git a/java/CMakeLists.txt b/java/CMakeLists.txt index e3819d4..3641a1c 100644 --- a/java/CMakeLists.txt +++ b/java/CMakeLists.txt @@ -55,10 +55,15 @@ if(MSYS) set(CMAKE_HOST_SYSTEM_NAME ${CMAKE_HOST_SYSTEM_NAME}) endif() -if(CMAKE_INSTALL_JAVADIR STREQUAL CMAKE_INSTALL_FULL_JAVADIR) - message(STATUS "CMAKE_INSTALL_JAVADIR = ${CMAKE_INSTALL_JAVADIR}") -else() - message(STATUS "CMAKE_INSTALL_JAVADIR = ${CMAKE_INSTALL_JAVADIR} (${CMAKE_INSTALL_FULL_JAVADIR})") +if(NOT DEFINED CMAKE_INSTALL_DEFAULT_JAVADIR) + set(CMAKE_INSTALL_DEFAULT_JAVADIR "/java") endif() +GNUInstallDirs_set_install_dir(JAVADIR + "The directory into which Java classes should be installed") +GNUInstallDirs_get_absolute_install_dir(CMAKE_INSTALL_FULL_JAVADIR + CMAKE_INSTALL_JAVADIR) +set(CMAKE_INSTALL_JAVADIR ${CMAKE_INSTALL_JAVADIR} PARENT_SCOPE) +set(CMAKE_INSTALL_FULL_JAVADIR ${CMAKE_INSTALL_FULL_JAVADIR} PARENT_SCOPE) +report_directory(JAVADIR) install_jar(turbojpeg-java ${CMAKE_INSTALL_JAVADIR}) mark_as_advanced(CLEAR CMAKE_INSTALL_JAVADIR)