]> granicus.if.org Git - libjpeg-turbo/commitdiff
Build: More GNUInstallDirs improvements
authorDRC <information@libjpeg-turbo.org>
Fri, 9 Dec 2016 16:21:29 +0000 (10:21 -0600)
committerDRC <information@libjpeg-turbo.org>
Fri, 9 Dec 2016 18:09:08 +0000 (12:09 -0600)
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.

CMakeLists.txt
cmakescripts/GNUInstallDirs.cmake
java/CMakeLists.txt

index 5f31172aeed102e5855055c9d7212baf669a982a..dae19716fc6921ff51ae0c24e9f221963d9f77b2 100644 (file)
@@ -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()
 
 
index 096d4e5bb2f07ff77281ab3955837bddcf3f3971..ef564bb655d7326c963f315baa201c1ec41bf814 100644 (file)
 # 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 "<CMAKE_INSTALL_DATAROOTDIR>")
 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 "<CMAKE_INSTALL_DATAROOTDIR>/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 "<CMAKE_INSTALL_DATAROOTDIR>/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 "<CMAKE_INSTALL_DATAROOTDIR>/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 "<CMAKE_INSTALL_DATAROOTDIR>/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 "<CMAKE_INSTALL_DATAROOTDIR>/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()
index e3819d4e8d27924a6ef228dcb8d1039b13ed628b..3641a1c2114bc3fe8ccbf8013f6d36453419a1d9 100644 (file)
@@ -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 "<CMAKE_INSTALL_DATAROOTDIR>/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)