From 18e134195068da82bb79db61968a1b5ef811fe94 Mon Sep 17 00:00:00 2001 From: Cristian Le Date: Fri, 4 Apr 2025 15:02:28 +0200 Subject: [PATCH] GNUInstallDirs: Move defaults from arguments to variables Signed-off-by: Cristian Le --- Modules/GNUInstallDirs.cmake | 83 +++++++++++++++++++++++++++--------- 1 file changed, 64 insertions(+), 19 deletions(-) diff --git a/Modules/GNUInstallDirs.cmake b/Modules/GNUInstallDirs.cmake index 874b52e57e..e3fef90fde 100644 --- a/Modules/GNUInstallDirs.cmake +++ b/Modules/GNUInstallDirs.cmake @@ -166,8 +166,9 @@ function(_GNUInstallDirs_cache_convert_to_path var description) endfunction() # Create a cache variable with default for a path. -function(_GNUInstallDirs_cache_path var default description) +function(_GNUInstallDirs_cache_path var description) set(cmake_install_var "CMAKE_INSTALL_${var}") + set(default "${_GNUInstallDirs_${var}_DEFAULT}") set(full_description "${description}") if(NOT DEFINED ${cmake_install_var}) set(${cmake_install_var} "${default}" CACHE PATH "${full_description}") @@ -178,8 +179,9 @@ endfunction() # Create a cache variable with not default for a path, with a fallback # when unset; used for entries slaved to other entries such as # DATAROOTDIR. -function(_GNUInstallDirs_cache_path_fallback var default description) +function(_GNUInstallDirs_cache_path_fallback var description) set(cmake_install_var "CMAKE_INSTALL_${var}") + set(default "${_GNUInstallDirs_${var}_DEFAULT}") if(NOT ${cmake_install_var}) set(${cmake_install_var} "" CACHE PATH "${description}") set(${cmake_install_var} "${default}") @@ -191,6 +193,18 @@ endfunction() # Installation directories # +# Set the standard default values before any special handling +set(_GNUInstallDirs_BINDIR_DEFAULT "bin") +set(_GNUInstallDirs_SBINDIR_DEFAULT "sbin") +set(_GNUInstallDirs_LIBEXECDIR_DEFAULT "libexec") +set(_GNUInstallDirs_SYSCONFDIR_DEFAULT "etc") +set(_GNUInstallDirs_SHAREDSTATEDIR_DEFAULT "com") +set(_GNUInstallDirs_LOCALSTATEDIR_DEFAULT "var") +set(_GNUInstallDirs_LIBDIR_DEFAULT "lib") +set(_GNUInstallDirs_INCLUDEDIR_DEFAULT "include") +set(_GNUInstallDirs_OLDINCLUDEDIR_DEFAULT "/usr/include") +set(_GNUInstallDirs_DATAROOTDIR_DEFAULT "share") + # We check if the variable was manually set and not cached, in order to # allow projects to set the values as normal variables before including # GNUInstallDirs to avoid having the entries cached or user-editable. It @@ -307,24 +321,24 @@ set(_GNUInstallDirs_LAST_CMAKE_INSTALL_PREFIX "${CMAKE_INSTALL_PREFIX}" CACHE IN unset(_libdir_set) unset(__LAST_LIBDIR_DEFAULT) -_GNUInstallDirs_cache_path(BINDIR "bin" +_GNUInstallDirs_cache_path(BINDIR "User executables (bin)") -_GNUInstallDirs_cache_path(SBINDIR "sbin" +_GNUInstallDirs_cache_path(SBINDIR "System admin executables (sbin)") -_GNUInstallDirs_cache_path(LIBEXECDIR "libexec" +_GNUInstallDirs_cache_path(LIBEXECDIR "Program executables (libexec)") -_GNUInstallDirs_cache_path(SYSCONFDIR "etc" +_GNUInstallDirs_cache_path(SYSCONFDIR "Read-only single-machine data (etc)") -_GNUInstallDirs_cache_path(SHAREDSTATEDIR "com" +_GNUInstallDirs_cache_path(SHAREDSTATEDIR "Modifiable architecture-independent data (com)") -_GNUInstallDirs_cache_path(LOCALSTATEDIR "var" +_GNUInstallDirs_cache_path(LOCALSTATEDIR "Modifiable single-machine data (var)") -_GNUInstallDirs_cache_path(INCLUDEDIR "include" +_GNUInstallDirs_cache_path(INCLUDEDIR "C header files (include)") -_GNUInstallDirs_cache_path(OLDINCLUDEDIR "/usr/include" +_GNUInstallDirs_cache_path(OLDINCLUDEDIR "C header files for non-gcc (/usr/include)") -_GNUInstallDirs_cache_path(DATAROOTDIR "share" +_GNUInstallDirs_cache_path(DATAROOTDIR "Read-only architecture-independent data root (share)") #----------------------------------------------------------------------------- @@ -333,30 +347,61 @@ _GNUInstallDirs_cache_path(DATAROOTDIR "share" # not set explicitly. This auto-updates the defaults as DATAROOTDIR changes. if(CMAKE_SYSTEM_NAME MATCHES "^(([^kF].*)?BSD|DragonFly)$") - _GNUInstallDirs_cache_path(INFODIR "info" + set(_GNUInstallDirs_INFODIR_DEFAULT "info") + _GNUInstallDirs_cache_path(INFODIR "Info documentation (info)") else() - _GNUInstallDirs_cache_path_fallback(INFODIR "${CMAKE_INSTALL_DATAROOTDIR}/info" + set(_GNUInstallDirs_INFODIR_DEFAULT "${CMAKE_INSTALL_DATAROOTDIR}/info") + _GNUInstallDirs_cache_path_fallback(INFODIR "Info documentation (DATAROOTDIR/info)") endif() if(CMAKE_SYSTEM_NAME MATCHES "^(([^k].*)?BSD|DragonFly)$" AND NOT CMAKE_SYSTEM_NAME MATCHES "^(FreeBSD)$") - _GNUInstallDirs_cache_path(MANDIR "man" + set(_GNUInstallDirs_MANDIR_DEFAULT "man") + _GNUInstallDirs_cache_path(MANDIR "Man documentation (man)") else() - _GNUInstallDirs_cache_path_fallback(MANDIR "${CMAKE_INSTALL_DATAROOTDIR}/man" + set(_GNUInstallDirs_MANDIR_DEFAULT "${CMAKE_INSTALL_DATAROOTDIR}/man") + _GNUInstallDirs_cache_path_fallback(MANDIR "Man documentation (DATAROOTDIR/man)") endif() -_GNUInstallDirs_cache_path_fallback(DATADIR "${CMAKE_INSTALL_DATAROOTDIR}" +set(_GNUInstallDirs_DATADIR_DEFAULT "${CMAKE_INSTALL_DATAROOTDIR}") +set(_GNUInstallDirs_LOCALEDIR_DEFAULT "${CMAKE_INSTALL_DATAROOTDIR}/locale") +set(_GNUInstallDirs_DOCDIR_DEFAULT "${CMAKE_INSTALL_DATAROOTDIR}/doc/${PROJECT_NAME}") +set(_GNUInstallDirs_RUNSTATEDIR_DEFAULT "${CMAKE_INSTALL_LOCALSTATEDIR}/run") + +_GNUInstallDirs_cache_path_fallback(DATADIR "Read-only architecture-independent data (DATAROOTDIR)") -_GNUInstallDirs_cache_path_fallback(LOCALEDIR "${CMAKE_INSTALL_DATAROOTDIR}/locale" +_GNUInstallDirs_cache_path_fallback(LOCALEDIR "Locale-dependent data (DATAROOTDIR/locale)") -_GNUInstallDirs_cache_path_fallback(DOCDIR "${CMAKE_INSTALL_DATAROOTDIR}/doc/${PROJECT_NAME}" +_GNUInstallDirs_cache_path_fallback(DOCDIR "Documentation root (DATAROOTDIR/doc/PROJECT_NAME)") -_GNUInstallDirs_cache_path_fallback(RUNSTATEDIR "${CMAKE_INSTALL_LOCALSTATEDIR}/run" +_GNUInstallDirs_cache_path_fallback(RUNSTATEDIR "Run-time variable data (LOCALSTATEDIR/run)") +# Unset all the defaults used +foreach(dir IN ITEMS + BINDIR + SBINDIR + LIBEXECDIR + SYSCONFDIR + SHAREDSTATEDIR + LOCALSTATEDIR + LIBDIR + INCLUDEDIR + OLDINCLUDEDIR + DATAROOTDIR + DATADIR + INFODIR + MANDIR + LOCALEDIR + DOCDIR + RUNSTATEDIR +) + unset(_GNUInstallDirs_${dir}_DEFAULT) +endforeach() + #----------------------------------------------------------------------------- mark_as_advanced(