From 98f8e55b994cec115f7bf947cd1b837c332c2fc1 Mon Sep 17 00:00:00 2001 From: Cristian Le Date: Tue, 1 Apr 2025 10:31:34 +0200 Subject: GNUInstallDirs: Convert macros into functions Signed-off-by: Cristian Le --- Modules/GNUInstallDirs.cmake | 42 +++++++++++++++++++++++------------------- 1 file changed, 23 insertions(+), 19 deletions(-) diff --git a/Modules/GNUInstallDirs.cmake b/Modules/GNUInstallDirs.cmake index ff436bc..d9d291a 100644 --- a/Modules/GNUInstallDirs.cmake +++ b/Modules/GNUInstallDirs.cmake @@ -151,38 +151,42 @@ Macros this value through the variable ``${dir}``. #]=======================================================================] +cmake_policy(SET CMP0140 NEW) + # Convert a cache variable to PATH type -macro(_GNUInstallDirs_cache_convert_to_path var description) - get_property(_GNUInstallDirs_cache_type CACHE ${var} PROPERTY TYPE) - if(_GNUInstallDirs_cache_type STREQUAL "UNINITIALIZED") - file(TO_CMAKE_PATH "${${var}}" _GNUInstallDirs_cmakepath) +function(_GNUInstallDirs_cache_convert_to_path var description) + get_property(cache_type CACHE ${var} PROPERTY TYPE) + if(cache_type STREQUAL "UNINITIALIZED") + file(TO_CMAKE_PATH "${${var}}" cmakepath) set_property(CACHE ${var} PROPERTY TYPE PATH) - set_property(CACHE ${var} PROPERTY VALUE "${_GNUInstallDirs_cmakepath}") + set_property(CACHE ${var} PROPERTY VALUE "${cmakepath}") set_property(CACHE ${var} PROPERTY HELPSTRING "${description}") - unset(_GNUInstallDirs_cmakepath) endif() - unset(_GNUInstallDirs_cache_type) -endmacro() +endfunction() # Create a cache variable with default for a path. -macro(_GNUInstallDirs_cache_path var default description) - if(NOT DEFINED ${var}) - set(${var} "${default}" CACHE PATH "${description}") +function(_GNUInstallDirs_cache_path var default description) + set(cmake_install_var "${var}") + set(full_description "${description}") + if(NOT DEFINED ${cmake_install_var}) + set(${cmake_install_var} "${default}" CACHE PATH "${full_description}") endif() - _GNUInstallDirs_cache_convert_to_path("${var}" "${description}") -endmacro() + _GNUInstallDirs_cache_convert_to_path("${cmake_install_var}" "${full_description}") +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. -macro(_GNUInstallDirs_cache_path_fallback var default description) - if(NOT ${var}) - set(${var} "" CACHE PATH "${description}") - set(${var} "${default}") +function(_GNUInstallDirs_cache_path_fallback var default description) + set(cmake_install_var "${var}") + if(NOT ${cmake_install_var}) + set(${cmake_install_var} "" CACHE PATH "${description}") + set(${cmake_install_var} "${default}") endif() - _GNUInstallDirs_cache_convert_to_path("${var}" "${description}") -endmacro() + _GNUInstallDirs_cache_convert_to_path("${cmake_install_var}" "${description}") + return(PROPAGATE ${cmake_install_var}) +endfunction() # Installation directories # -- cgit v0.12 From b5f93020c62498b38cc4643e29a45ba3781afb3e Mon Sep 17 00:00:00 2001 From: Cristian Le Date: Thu, 3 Apr 2025 16:15:05 +0200 Subject: GNUInstallDirs: Simplify INFODIR and MANDIR init on BSD platforms These were using `_GNUInstallDirs_cache_path_fallback` but do not fall back to `DATAROOTDIR/{info,man}` on BSD platforms. Convert them to `_GNUInstallDirs_cache_path`. Signed-off-by: Cristian Le --- Modules/GNUInstallDirs.cmake | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/Modules/GNUInstallDirs.cmake b/Modules/GNUInstallDirs.cmake index d9d291a..6cabd33 100644 --- a/Modules/GNUInstallDirs.cmake +++ b/Modules/GNUInstallDirs.cmake @@ -336,7 +336,7 @@ _GNUInstallDirs_cache_path_fallback(CMAKE_INSTALL_DATADIR "${CMAKE_INSTALL_DATAR "Read-only architecture-independent data (DATAROOTDIR)") if(CMAKE_SYSTEM_NAME MATCHES "^(([^kF].*)?BSD|DragonFly)$") - _GNUInstallDirs_cache_path_fallback(CMAKE_INSTALL_INFODIR "info" + _GNUInstallDirs_cache_path(CMAKE_INSTALL_INFODIR "info" "Info documentation (info)") else() _GNUInstallDirs_cache_path_fallback(CMAKE_INSTALL_INFODIR "${CMAKE_INSTALL_DATAROOTDIR}/info" @@ -344,7 +344,7 @@ else() endif() if(CMAKE_SYSTEM_NAME MATCHES "^(([^k].*)?BSD|DragonFly)$" AND NOT CMAKE_SYSTEM_NAME MATCHES "^(FreeBSD)$") - _GNUInstallDirs_cache_path_fallback(CMAKE_INSTALL_MANDIR "man" + _GNUInstallDirs_cache_path(CMAKE_INSTALL_MANDIR "man" "Man documentation (man)") else() _GNUInstallDirs_cache_path_fallback(CMAKE_INSTALL_MANDIR "${CMAKE_INSTALL_DATAROOTDIR}/man" -- cgit v0.12 From 5cc1fdad4f902f6a913df7ec6f0604727c69d351 Mon Sep 17 00:00:00 2001 From: Cristian Le Date: Thu, 3 Apr 2025 16:15:05 +0200 Subject: GNUInstallDirs: Re-order definitions Signed-off-by: Cristian Le --- Modules/GNUInstallDirs.cmake | 32 +++++++++++++++----------------- 1 file changed, 15 insertions(+), 17 deletions(-) diff --git a/Modules/GNUInstallDirs.cmake b/Modules/GNUInstallDirs.cmake index 6cabd33..bf9a2c6 100644 --- a/Modules/GNUInstallDirs.cmake +++ b/Modules/GNUInstallDirs.cmake @@ -191,19 +191,6 @@ endfunction() # Installation directories # -_GNUInstallDirs_cache_path(CMAKE_INSTALL_BINDIR "bin" - "User executables (bin)") -_GNUInstallDirs_cache_path(CMAKE_INSTALL_SBINDIR "sbin" - "System admin executables (sbin)") -_GNUInstallDirs_cache_path(CMAKE_INSTALL_LIBEXECDIR "libexec" - "Program executables (libexec)") -_GNUInstallDirs_cache_path(CMAKE_INSTALL_SYSCONFDIR "etc" - "Read-only single-machine data (etc)") -_GNUInstallDirs_cache_path(CMAKE_INSTALL_SHAREDSTATEDIR "com" - "Modifiable architecture-independent data (com)") -_GNUInstallDirs_cache_path(CMAKE_INSTALL_LOCALSTATEDIR "var" - "Modifiable single-machine data (var)") - # 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 @@ -320,6 +307,19 @@ set(_GNUInstallDirs_LAST_CMAKE_INSTALL_PREFIX "${CMAKE_INSTALL_PREFIX}" CACHE IN unset(_libdir_set) unset(__LAST_LIBDIR_DEFAULT) +_GNUInstallDirs_cache_path(CMAKE_INSTALL_BINDIR "bin" + "User executables (bin)") +_GNUInstallDirs_cache_path(CMAKE_INSTALL_SBINDIR "sbin" + "System admin executables (sbin)") +_GNUInstallDirs_cache_path(CMAKE_INSTALL_LIBEXECDIR "libexec" + "Program executables (libexec)") +_GNUInstallDirs_cache_path(CMAKE_INSTALL_SYSCONFDIR "etc" + "Read-only single-machine data (etc)") +_GNUInstallDirs_cache_path(CMAKE_INSTALL_SHAREDSTATEDIR "com" + "Modifiable architecture-independent data (com)") +_GNUInstallDirs_cache_path(CMAKE_INSTALL_LOCALSTATEDIR "var" + "Modifiable single-machine data (var)") + _GNUInstallDirs_cache_path(CMAKE_INSTALL_INCLUDEDIR "include" "C header files (include)") _GNUInstallDirs_cache_path(CMAKE_INSTALL_OLDINCLUDEDIR "/usr/include" @@ -332,9 +332,6 @@ _GNUInstallDirs_cache_path(CMAKE_INSTALL_DATAROOTDIR "share" # the cache and store the defaults in local variables if the cache values are # not set explicitly. This auto-updates the defaults as DATAROOTDIR changes. -_GNUInstallDirs_cache_path_fallback(CMAKE_INSTALL_DATADIR "${CMAKE_INSTALL_DATAROOTDIR}" - "Read-only architecture-independent data (DATAROOTDIR)") - if(CMAKE_SYSTEM_NAME MATCHES "^(([^kF].*)?BSD|DragonFly)$") _GNUInstallDirs_cache_path(CMAKE_INSTALL_INFODIR "info" "Info documentation (info)") @@ -351,11 +348,12 @@ else() "Man documentation (DATAROOTDIR/man)") endif() +_GNUInstallDirs_cache_path_fallback(CMAKE_INSTALL_DATADIR "${CMAKE_INSTALL_DATAROOTDIR}" + "Read-only architecture-independent data (DATAROOTDIR)") _GNUInstallDirs_cache_path_fallback(CMAKE_INSTALL_LOCALEDIR "${CMAKE_INSTALL_DATAROOTDIR}/locale" "Locale-dependent data (DATAROOTDIR/locale)") _GNUInstallDirs_cache_path_fallback(CMAKE_INSTALL_DOCDIR "${CMAKE_INSTALL_DATAROOTDIR}/doc/${PROJECT_NAME}" "Documentation root (DATAROOTDIR/doc/PROJECT_NAME)") - _GNUInstallDirs_cache_path_fallback(CMAKE_INSTALL_RUNSTATEDIR "${CMAKE_INSTALL_LOCALSTATEDIR}/run" "Run-time variable data (LOCALSTATEDIR/run)") -- cgit v0.12 From 9f41a67fce2f41571fef49302da753c775098126 Mon Sep 17 00:00:00 2001 From: Cristian Le Date: Fri, 4 Apr 2025 15:13:33 +0200 Subject: GNUInstallDirs: Reduce duplication of CMAKE_INSTALL_ prefix Signed-off-by: Cristian Le --- Modules/GNUInstallDirs.cmake | 38 +++++++++++++++++++------------------- 1 file changed, 19 insertions(+), 19 deletions(-) diff --git a/Modules/GNUInstallDirs.cmake b/Modules/GNUInstallDirs.cmake index bf9a2c6..874b52e 100644 --- a/Modules/GNUInstallDirs.cmake +++ b/Modules/GNUInstallDirs.cmake @@ -167,7 +167,7 @@ endfunction() # Create a cache variable with default for a path. function(_GNUInstallDirs_cache_path var default description) - set(cmake_install_var "${var}") + set(cmake_install_var "CMAKE_INSTALL_${var}") set(full_description "${description}") if(NOT DEFINED ${cmake_install_var}) set(${cmake_install_var} "${default}" CACHE PATH "${full_description}") @@ -179,7 +179,7 @@ endfunction() # when unset; used for entries slaved to other entries such as # DATAROOTDIR. function(_GNUInstallDirs_cache_path_fallback var default description) - set(cmake_install_var "${var}") + set(cmake_install_var "CMAKE_INSTALL_${var}") if(NOT ${cmake_install_var}) set(${cmake_install_var} "" CACHE PATH "${description}") set(${cmake_install_var} "${default}") @@ -307,24 +307,24 @@ set(_GNUInstallDirs_LAST_CMAKE_INSTALL_PREFIX "${CMAKE_INSTALL_PREFIX}" CACHE IN unset(_libdir_set) unset(__LAST_LIBDIR_DEFAULT) -_GNUInstallDirs_cache_path(CMAKE_INSTALL_BINDIR "bin" +_GNUInstallDirs_cache_path(BINDIR "bin" "User executables (bin)") -_GNUInstallDirs_cache_path(CMAKE_INSTALL_SBINDIR "sbin" +_GNUInstallDirs_cache_path(SBINDIR "sbin" "System admin executables (sbin)") -_GNUInstallDirs_cache_path(CMAKE_INSTALL_LIBEXECDIR "libexec" +_GNUInstallDirs_cache_path(LIBEXECDIR "libexec" "Program executables (libexec)") -_GNUInstallDirs_cache_path(CMAKE_INSTALL_SYSCONFDIR "etc" +_GNUInstallDirs_cache_path(SYSCONFDIR "etc" "Read-only single-machine data (etc)") -_GNUInstallDirs_cache_path(CMAKE_INSTALL_SHAREDSTATEDIR "com" +_GNUInstallDirs_cache_path(SHAREDSTATEDIR "com" "Modifiable architecture-independent data (com)") -_GNUInstallDirs_cache_path(CMAKE_INSTALL_LOCALSTATEDIR "var" +_GNUInstallDirs_cache_path(LOCALSTATEDIR "var" "Modifiable single-machine data (var)") -_GNUInstallDirs_cache_path(CMAKE_INSTALL_INCLUDEDIR "include" +_GNUInstallDirs_cache_path(INCLUDEDIR "include" "C header files (include)") -_GNUInstallDirs_cache_path(CMAKE_INSTALL_OLDINCLUDEDIR "/usr/include" +_GNUInstallDirs_cache_path(OLDINCLUDEDIR "/usr/include" "C header files for non-gcc (/usr/include)") -_GNUInstallDirs_cache_path(CMAKE_INSTALL_DATAROOTDIR "share" +_GNUInstallDirs_cache_path(DATAROOTDIR "share" "Read-only architecture-independent data root (share)") #----------------------------------------------------------------------------- @@ -333,28 +333,28 @@ _GNUInstallDirs_cache_path(CMAKE_INSTALL_DATAROOTDIR "share" # not set explicitly. This auto-updates the defaults as DATAROOTDIR changes. if(CMAKE_SYSTEM_NAME MATCHES "^(([^kF].*)?BSD|DragonFly)$") - _GNUInstallDirs_cache_path(CMAKE_INSTALL_INFODIR "info" + _GNUInstallDirs_cache_path(INFODIR "info" "Info documentation (info)") else() - _GNUInstallDirs_cache_path_fallback(CMAKE_INSTALL_INFODIR "${CMAKE_INSTALL_DATAROOTDIR}/info" + _GNUInstallDirs_cache_path_fallback(INFODIR "${CMAKE_INSTALL_DATAROOTDIR}/info" "Info documentation (DATAROOTDIR/info)") endif() if(CMAKE_SYSTEM_NAME MATCHES "^(([^k].*)?BSD|DragonFly)$" AND NOT CMAKE_SYSTEM_NAME MATCHES "^(FreeBSD)$") - _GNUInstallDirs_cache_path(CMAKE_INSTALL_MANDIR "man" + _GNUInstallDirs_cache_path(MANDIR "man" "Man documentation (man)") else() - _GNUInstallDirs_cache_path_fallback(CMAKE_INSTALL_MANDIR "${CMAKE_INSTALL_DATAROOTDIR}/man" + _GNUInstallDirs_cache_path_fallback(MANDIR "${CMAKE_INSTALL_DATAROOTDIR}/man" "Man documentation (DATAROOTDIR/man)") endif() -_GNUInstallDirs_cache_path_fallback(CMAKE_INSTALL_DATADIR "${CMAKE_INSTALL_DATAROOTDIR}" +_GNUInstallDirs_cache_path_fallback(DATADIR "${CMAKE_INSTALL_DATAROOTDIR}" "Read-only architecture-independent data (DATAROOTDIR)") -_GNUInstallDirs_cache_path_fallback(CMAKE_INSTALL_LOCALEDIR "${CMAKE_INSTALL_DATAROOTDIR}/locale" +_GNUInstallDirs_cache_path_fallback(LOCALEDIR "${CMAKE_INSTALL_DATAROOTDIR}/locale" "Locale-dependent data (DATAROOTDIR/locale)") -_GNUInstallDirs_cache_path_fallback(CMAKE_INSTALL_DOCDIR "${CMAKE_INSTALL_DATAROOTDIR}/doc/${PROJECT_NAME}" +_GNUInstallDirs_cache_path_fallback(DOCDIR "${CMAKE_INSTALL_DATAROOTDIR}/doc/${PROJECT_NAME}" "Documentation root (DATAROOTDIR/doc/PROJECT_NAME)") -_GNUInstallDirs_cache_path_fallback(CMAKE_INSTALL_RUNSTATEDIR "${CMAKE_INSTALL_LOCALSTATEDIR}/run" +_GNUInstallDirs_cache_path_fallback(RUNSTATEDIR "${CMAKE_INSTALL_LOCALSTATEDIR}/run" "Run-time variable data (LOCALSTATEDIR/run)") #----------------------------------------------------------------------------- -- cgit v0.12 From 18e134195068da82bb79db61968a1b5ef811fe94 Mon Sep 17 00:00:00 2001 From: Cristian Le Date: Fri, 4 Apr 2025 15:02:28 +0200 Subject: 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 874b52e..e3fef90 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( -- cgit v0.12 From 0c9b6aa9e4b6c08d4a6f3032c9077123f0667348 Mon Sep 17 00:00:00 2001 From: Cristian Le Date: Fri, 4 Apr 2025 15:19:00 +0200 Subject: GNUInstallDirs: De-duplicate description of defaults Signed-off-by: Cristian Le --- Modules/GNUInstallDirs.cmake | 24 ++++++++++++------------ 1 file changed, 12 insertions(+), 12 deletions(-) diff --git a/Modules/GNUInstallDirs.cmake b/Modules/GNUInstallDirs.cmake index e3fef90..a6cb367 100644 --- a/Modules/GNUInstallDirs.cmake +++ b/Modules/GNUInstallDirs.cmake @@ -169,7 +169,7 @@ endfunction() function(_GNUInstallDirs_cache_path var description) set(cmake_install_var "CMAKE_INSTALL_${var}") set(default "${_GNUInstallDirs_${var}_DEFAULT}") - set(full_description "${description}") + set(full_description "${description} (${default})") if(NOT DEFINED ${cmake_install_var}) set(${cmake_install_var} "${default}" CACHE PATH "${full_description}") endif() @@ -322,24 +322,24 @@ unset(_libdir_set) unset(__LAST_LIBDIR_DEFAULT) _GNUInstallDirs_cache_path(BINDIR - "User executables (bin)") + "User executables") _GNUInstallDirs_cache_path(SBINDIR - "System admin executables (sbin)") + "System admin executables") _GNUInstallDirs_cache_path(LIBEXECDIR - "Program executables (libexec)") + "Program executables") _GNUInstallDirs_cache_path(SYSCONFDIR - "Read-only single-machine data (etc)") + "Read-only single-machine data") _GNUInstallDirs_cache_path(SHAREDSTATEDIR - "Modifiable architecture-independent data (com)") + "Modifiable architecture-independent data") _GNUInstallDirs_cache_path(LOCALSTATEDIR - "Modifiable single-machine data (var)") + "Modifiable single-machine data") _GNUInstallDirs_cache_path(INCLUDEDIR - "C header files (include)") + "C header files") _GNUInstallDirs_cache_path(OLDINCLUDEDIR - "C header files for non-gcc (/usr/include)") + "C header files for non-gcc") _GNUInstallDirs_cache_path(DATAROOTDIR - "Read-only architecture-independent data root (share)") + "Read-only architecture-independent data root") #----------------------------------------------------------------------------- # Values whose defaults are relative to DATAROOTDIR. Store empty values in @@ -349,7 +349,7 @@ _GNUInstallDirs_cache_path(DATAROOTDIR if(CMAKE_SYSTEM_NAME MATCHES "^(([^kF].*)?BSD|DragonFly)$") set(_GNUInstallDirs_INFODIR_DEFAULT "info") _GNUInstallDirs_cache_path(INFODIR - "Info documentation (info)") + "Info documentation") else() set(_GNUInstallDirs_INFODIR_DEFAULT "${CMAKE_INSTALL_DATAROOTDIR}/info") _GNUInstallDirs_cache_path_fallback(INFODIR @@ -359,7 +359,7 @@ endif() if(CMAKE_SYSTEM_NAME MATCHES "^(([^k].*)?BSD|DragonFly)$" AND NOT CMAKE_SYSTEM_NAME MATCHES "^(FreeBSD)$") set(_GNUInstallDirs_MANDIR_DEFAULT "man") _GNUInstallDirs_cache_path(MANDIR - "Man documentation (man)") + "Man documentation") else() set(_GNUInstallDirs_MANDIR_DEFAULT "${CMAKE_INSTALL_DATAROOTDIR}/man") _GNUInstallDirs_cache_path_fallback(MANDIR -- cgit v0.12 From 83f44bbf535bee2861f243c9679d592fb17e6b4d Mon Sep 17 00:00:00 2001 From: Cristian Le Date: Fri, 4 Apr 2025 15:32:52 +0200 Subject: GNUInstallDirs: Factor out helper to compute system type Factor a `_GNUInstallDirs_get_system_type_for_install` helper out of the `CMAKE_INSTALL_LIBDIR` logic. Signed-off-by: Cristian Le --- Modules/GNUInstallDirs.cmake | 61 +++++++++++++++++++++++++------------------- 1 file changed, 35 insertions(+), 26 deletions(-) diff --git a/Modules/GNUInstallDirs.cmake b/Modules/GNUInstallDirs.cmake index a6cb367..73e194c 100644 --- a/Modules/GNUInstallDirs.cmake +++ b/Modules/GNUInstallDirs.cmake @@ -190,6 +190,40 @@ function(_GNUInstallDirs_cache_path_fallback var description) return(PROPAGATE ${cmake_install_var}) endfunction() +# Other helpers +# Check what system we are on for LIBDIR formatting +function(_GNUInstallDirs_get_system_type_for_install out_var) + unset(${out_var}) + # Check if we are building for conda + if(DEFINED ENV{CONDA_BUILD} AND DEFINED ENV{PREFIX}) + set(conda_prefix "$ENV{PREFIX}") + cmake_path(ABSOLUTE_PATH conda_prefix NORMALIZE) + if("${CMAKE_INSTALL_PREFIX}" STREQUAL conda_prefix) + set(${out_var} "conda") + endif() + elseif(DEFINED ENV{CONDA_PREFIX}) + set(conda_prefix "$ENV{CONDA_PREFIX}") + cmake_path(ABSOLUTE_PATH conda_prefix NORMALIZE) + if("${CMAKE_INSTALL_PREFIX}" STREQUAL conda_prefix AND + NOT ("${CMAKE_INSTALL_PREFIX}" MATCHES "^/usr/?$" OR + "${CMAKE_INSTALL_PREFIX}" MATCHES "^/usr/local/?$")) + set(${out_var} "conda") + endif() + endif() + # If we didn't detect conda from the previous step, check + # for the linux variant + if(NOT ${out_var}) + if (EXISTS "/etc/alpine-release") + set(${out_var} "alpine") + elseif (EXISTS "/etc/arch-release") + set(${out_var} "arch linux") + elseif (EXISTS "/etc/debian_version") + set(${out_var} "debian") + endif() + endif() + return(PROPAGATE ${out_var}) +endfunction() + # Installation directories # @@ -259,32 +293,7 @@ if(NOT DEFINED CMAKE_INSTALL_LIBDIR OR (_libdir_set if(CMAKE_SYSTEM_NAME MATCHES "^(Linux|GNU)$" AND NOT CMAKE_CROSSCOMPILING) - unset(__system_type_for_install) - if(DEFINED ENV{CONDA_BUILD} AND DEFINED ENV{PREFIX}) - set(conda_prefix "$ENV{PREFIX}") - cmake_path(ABSOLUTE_PATH conda_prefix NORMALIZE) - if("${CMAKE_INSTALL_PREFIX}" STREQUAL conda_prefix) - set(__system_type_for_install "conda") - endif() - elseif(DEFINED ENV{CONDA_PREFIX}) - set(conda_prefix "$ENV{CONDA_PREFIX}") - cmake_path(ABSOLUTE_PATH conda_prefix NORMALIZE) - if("${CMAKE_INSTALL_PREFIX}" STREQUAL conda_prefix AND - NOT ("${CMAKE_INSTALL_PREFIX}" MATCHES "^/usr/?$" OR - "${CMAKE_INSTALL_PREFIX}" MATCHES "^/usr/local/?$")) - set(__system_type_for_install "conda") - endif() - endif() - if(NOT __system_type_for_install) - if (EXISTS "/etc/alpine-release") - set(__system_type_for_install "alpine") - elseif (EXISTS "/etc/arch-release") - set(__system_type_for_install "arch linux") - elseif (EXISTS "/etc/debian_version") - set(__system_type_for_install "debian") - endif() - endif() - + _GNUInstallDirs_get_system_type_for_install(__system_type_for_install) if(__system_type_for_install STREQUAL "debian") if(CMAKE_LIBRARY_ARCHITECTURE) if("${CMAKE_INSTALL_PREFIX}" MATCHES "^/usr/?$") -- cgit v0.12 From 9789f7d05e0c827c60d66cbcdfc4a7dccde77966 Mon Sep 17 00:00:00 2001 From: Cristian Le Date: Fri, 28 Mar 2025 14:56:23 +0100 Subject: GNUInstallDirs: Add internal helper to compute specific defaults Create an internal `_GNUInstallDirs__get_default` helper and generalize the logic used to update the `CMAKE_INSTALL_LIBDIR` default. Signed-off-by: Cristian Le --- Modules/GNUInstallDirs.cmake | 54 ++++++++++++++++++++++++++++++++++++++++++-- 1 file changed, 52 insertions(+), 2 deletions(-) diff --git a/Modules/GNUInstallDirs.cmake b/Modules/GNUInstallDirs.cmake index 73e194c..18179ea 100644 --- a/Modules/GNUInstallDirs.cmake +++ b/Modules/GNUInstallDirs.cmake @@ -169,6 +169,39 @@ endfunction() function(_GNUInstallDirs_cache_path var description) set(cmake_install_var "CMAKE_INSTALL_${var}") set(default "${_GNUInstallDirs_${var}_DEFAULT}") + # Check if we have a special way to calculate the defaults + if(COMMAND _GNUInstallDirs_${var}_get_default) + # Check if the current CMAKE_INSTALL_PREFIX is the same as before + set(install_prefix_is_same TRUE) + set(last_default "${default}") + if(NOT DEFINED _GNUInstallDirs_LAST_CMAKE_INSTALL_PREFIX + OR NOT _GNUInstallDirs_LAST_CMAKE_INSTALL_PREFIX STREQUAL CMAKE_INSTALL_PREFIX) + set(install_prefix_is_same FALSE) + # Recalculate what the last default would have been + cmake_language(CALL _GNUInstallDirs_${var}_get_default + last_default + "${_GNUInstallDirs_LAST_CMAKE_INSTALL_PREFIX}") + endif() + if(DEFINED CACHE{${cmake_install_var}} AND install_prefix_is_same) + # If the cache variable was already set from a previous run and the + # install prefix has not changed, we don't need to do anything + return() + else() + # Otherwise get the new default + cmake_language(CALL _GNUInstallDirs_${var}_get_default + default + "${CMAKE_INSTALL_PREFIX}") + # if the current value is the same as the cache value and the same as + # the old default, reset the value to the new default + if(${cmake_install_var} STREQUAL "$CACHE{${cmake_install_var}}" + AND ${cmake_install_var} STREQUAL last_default) + set(${cmake_install_var} "${default}" CACHE PATH "${full_description}" FORCE) + endif() + # Continue to normal flow + endif() + endif() + + # Normal flow set(full_description "${description} (${default})") if(NOT DEFINED ${cmake_install_var}) set(${cmake_install_var} "${default}" CACHE PATH "${full_description}") @@ -182,6 +215,12 @@ endfunction() function(_GNUInstallDirs_cache_path_fallback var description) set(cmake_install_var "CMAKE_INSTALL_${var}") set(default "${_GNUInstallDirs_${var}_DEFAULT}") + # Check if there is a more special way to handle the default + if(COMMAND _GNUInstallDirs_${var}_get_default) + cmake_language(CALL _GNUInstallDirs_${var}_get_default + default + "${CMAKE_INSTALL_PREFIX}") + endif() if(NOT ${cmake_install_var}) set(${cmake_install_var} "" CACHE PATH "${description}") set(${cmake_install_var} "${default}") @@ -239,6 +278,16 @@ set(_GNUInstallDirs_INCLUDEDIR_DEFAULT "include") set(_GNUInstallDirs_OLDINCLUDEDIR_DEFAULT "/usr/include") set(_GNUInstallDirs_DATAROOTDIR_DEFAULT "share") +# Define the special defaults handling +# Signature +# _GNUInstallDirs__get_default(out_var install_prefix) +# +# ``out_var`` +# Output variable with the calculated default +# +# ``install_prefix`` +# The CMAKE_INSTALL_PREFIX used to calculate the default + # 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 @@ -325,8 +374,6 @@ if(NOT DEFINED CMAKE_INSTALL_LIBDIR OR (_libdir_set endif() _GNUInstallDirs_cache_convert_to_path(CMAKE_INSTALL_LIBDIR "Object code libraries (lib)") -# Save for next run -set(_GNUInstallDirs_LAST_CMAKE_INSTALL_PREFIX "${CMAKE_INSTALL_PREFIX}" CACHE INTERNAL "CMAKE_INSTALL_PREFIX during last run") unset(_libdir_set) unset(__LAST_LIBDIR_DEFAULT) @@ -411,6 +458,9 @@ foreach(dir IN ITEMS unset(_GNUInstallDirs_${dir}_DEFAULT) endforeach() +# Save for next run +set(_GNUInstallDirs_LAST_CMAKE_INSTALL_PREFIX "${CMAKE_INSTALL_PREFIX}" CACHE INTERNAL "CMAKE_INSTALL_PREFIX during last run") + #----------------------------------------------------------------------------- mark_as_advanced( -- cgit v0.12 From 42dfcbf1a50d74defa88bbed313e869f8beacf41 Mon Sep 17 00:00:00 2001 From: Cristian Le Date: Thu, 27 Mar 2025 19:15:56 +0100 Subject: GNUInstallDirs: Refactor LIBDIR default calculation Implement via the `_GNUInstallDirs__get_default` helper. Signed-off-by: Cristian Le --- Modules/GNUInstallDirs.cmake | 79 ++++------------------- Tests/RunCMake/GNUInstallDirs/NoSystem-stderr.txt | 3 + 2 files changed, 17 insertions(+), 65 deletions(-) diff --git a/Modules/GNUInstallDirs.cmake b/Modules/GNUInstallDirs.cmake index 18179ea..56d9c43 100644 --- a/Modules/GNUInstallDirs.cmake +++ b/Modules/GNUInstallDirs.cmake @@ -288,32 +288,9 @@ set(_GNUInstallDirs_DATAROOTDIR_DEFAULT "share") # ``install_prefix`` # The CMAKE_INSTALL_PREFIX used to calculate the default -# 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 -# replaces the "if(NOT DEFINED CMAKE_INSTALL_XXX)" checks in all the -# other cases. -# If CMAKE_INSTALL_LIBDIR is defined, if _libdir_set is false, then the -# variable is a normal one, otherwise it is a cache one. -get_property(_libdir_set CACHE CMAKE_INSTALL_LIBDIR PROPERTY TYPE SET) -if(NOT DEFINED CMAKE_INSTALL_LIBDIR OR (_libdir_set - AND DEFINED _GNUInstallDirs_LAST_CMAKE_INSTALL_PREFIX - AND NOT "${_GNUInstallDirs_LAST_CMAKE_INSTALL_PREFIX}" STREQUAL "${CMAKE_INSTALL_PREFIX}")) - # If CMAKE_INSTALL_LIBDIR is not defined, it is always executed. - # Otherwise: - # * if _libdir_set is false it is not executed (meaning that it is - # not a cache variable) - # * if _GNUInstallDirs_LAST_CMAKE_INSTALL_PREFIX is not defined it is - # not executed - # * if _GNUInstallDirs_LAST_CMAKE_INSTALL_PREFIX and - # CMAKE_INSTALL_PREFIX are the same string it is not executed. - # _GNUInstallDirs_LAST_CMAKE_INSTALL_PREFIX is updated after the - # execution, of this part of code, therefore at the next inclusion - # of the file, CMAKE_INSTALL_LIBDIR is defined, and the 2 strings - # are equal, meaning that the if is not executed the code the - # second time. - - set(_LIBDIR_DEFAULT "lib") +function(_GNUInstallDirs_LIBDIR_get_default out_var install_prefix) + set(${out_var} "${_GNUInstallDirs_LIBDIR_DEFAULT}") + # Override this default 'lib' with 'lib64' iff: # - we are on Linux system but NOT cross-compiling # - we are NOT on debian @@ -324,58 +301,29 @@ if(NOT DEFINED CMAKE_INSTALL_LIBDIR OR (_libdir_set # CMAKE_LIBRARY_ARCHITECTURE is set (which contains e.g. "i386-linux-gnu" # and CMAKE_INSTALL_PREFIX is "/usr" # See http://wiki.debian.org/Multiarch - if(DEFINED _GNUInstallDirs_LAST_CMAKE_INSTALL_PREFIX) - set(__LAST_LIBDIR_DEFAULT "lib") - # __LAST_LIBDIR_DEFAULT is the default value that we compute from - # _GNUInstallDirs_LAST_CMAKE_INSTALL_PREFIX, not a cache entry for - # the value that was last used as the default. - # This value is used to figure out whether the user changed the - # CMAKE_INSTALL_LIBDIR value manually, or if the value was the - # default one. When CMAKE_INSTALL_PREFIX changes, the value is - # updated to the new default, unless the user explicitly changed it. - endif() if (NOT DEFINED CMAKE_SYSTEM_NAME OR NOT DEFINED CMAKE_SIZEOF_VOID_P) message(AUTHOR_WARNING "Unable to determine default CMAKE_INSTALL_LIBDIR directory because no target architecture is known. " "Please enable at least one language before including GNUInstallDirs.") endif() - - if(CMAKE_SYSTEM_NAME MATCHES "^(Linux|GNU)$" - AND NOT CMAKE_CROSSCOMPILING) - _GNUInstallDirs_get_system_type_for_install(__system_type_for_install) - if(__system_type_for_install STREQUAL "debian") + if(CMAKE_SYSTEM_NAME MATCHES "^(Linux|GNU)$" AND NOT CMAKE_CROSSCOMPILING) + _GNUInstallDirs_get_system_type_for_install(system_type) + if(system_type STREQUAL "debian") if(CMAKE_LIBRARY_ARCHITECTURE) - if("${CMAKE_INSTALL_PREFIX}" MATCHES "^/usr/?$") - set(_LIBDIR_DEFAULT "lib/${CMAKE_LIBRARY_ARCHITECTURE}") - endif() - if(DEFINED _GNUInstallDirs_LAST_CMAKE_INSTALL_PREFIX - AND "${_GNUInstallDirs_LAST_CMAKE_INSTALL_PREFIX}" MATCHES "^/usr/?$") - set(__LAST_LIBDIR_DEFAULT "lib/${CMAKE_LIBRARY_ARCHITECTURE}") + if("${install_prefix}" MATCHES "^/usr/?$") + set(${out_var} "lib/${CMAKE_LIBRARY_ARCHITECTURE}") endif() endif() - elseif(NOT DEFINED __system_type_for_install) + elseif(NOT DEFINED system_type) # not debian, alpine, arch, or conda so rely on CMAKE_SIZEOF_VOID_P: if("${CMAKE_SIZEOF_VOID_P}" EQUAL "8") - set(_LIBDIR_DEFAULT "lib64") - if(DEFINED _GNUInstallDirs_LAST_CMAKE_INSTALL_PREFIX) - set(__LAST_LIBDIR_DEFAULT "lib64") - endif() + set(${out_var} "lib64") endif() endif() endif() - unset(__system_type_for_install) - if(NOT DEFINED CMAKE_INSTALL_LIBDIR) - set(CMAKE_INSTALL_LIBDIR "${_LIBDIR_DEFAULT}" CACHE PATH "Object code libraries (${_LIBDIR_DEFAULT})") - elseif(DEFINED __LAST_LIBDIR_DEFAULT - AND "${__LAST_LIBDIR_DEFAULT}" STREQUAL "${CMAKE_INSTALL_LIBDIR}") - set_property(CACHE CMAKE_INSTALL_LIBDIR PROPERTY VALUE "${_LIBDIR_DEFAULT}") - endif() -endif() -_GNUInstallDirs_cache_convert_to_path(CMAKE_INSTALL_LIBDIR "Object code libraries (lib)") - -unset(_libdir_set) -unset(__LAST_LIBDIR_DEFAULT) + return(PROPAGATE ${out_var}) +endfunction() _GNUInstallDirs_cache_path(BINDIR "User executables") @@ -389,7 +337,8 @@ _GNUInstallDirs_cache_path(SHAREDSTATEDIR "Modifiable architecture-independent data") _GNUInstallDirs_cache_path(LOCALSTATEDIR "Modifiable single-machine data") - +_GNUInstallDirs_cache_path(LIBDIR + "Object code libraries") _GNUInstallDirs_cache_path(INCLUDEDIR "C header files") _GNUInstallDirs_cache_path(OLDINCLUDEDIR diff --git a/Tests/RunCMake/GNUInstallDirs/NoSystem-stderr.txt b/Tests/RunCMake/GNUInstallDirs/NoSystem-stderr.txt index 36f064c..33579fe 100644 --- a/Tests/RunCMake/GNUInstallDirs/NoSystem-stderr.txt +++ b/Tests/RunCMake/GNUInstallDirs/NoSystem-stderr.txt @@ -3,6 +3,9 @@ target architecture is known. Please enable at least one language before including GNUInstallDirs. Call Stack \(most recent call first\): + .*GNUInstallDirs.cmake:[0-9]+ \(_GNUInstallDirs_LIBDIR_get_default\) + .*GNUInstallDirs.cmake:[0-9]+ \(cmake_language\) + .*GNUInstallDirs.cmake:[0-9]+ \(_GNUInstallDirs_cache_path\) NoSystem.cmake:[0-9]+ \(include\) CMakeLists.txt:[0-9]+ \(include\) This warning is for project developers. Use -Wno-dev to suppress it.$ -- cgit v0.12 From 7566a477f7b2c9a8d72c2a8fcf4d91d39f834067 Mon Sep 17 00:00:00 2001 From: Cristian Le Date: Thu, 27 Mar 2025 19:57:42 +0100 Subject: GNUInstallDirs: Factor out helper for special absolute path logic Factor out part of `GNUInstallDirs_get_absolute_install_dir` into a dedicated `_GNUInstallDirs_special_absolute` helper. Signed-off-by: Cristian Le --- Modules/GNUInstallDirs.cmake | 46 +++++++++++++++++++++++++++----------------- 1 file changed, 28 insertions(+), 18 deletions(-) diff --git a/Modules/GNUInstallDirs.cmake b/Modules/GNUInstallDirs.cmake index 56d9c43..6992a88 100644 --- a/Modules/GNUInstallDirs.cmake +++ b/Modules/GNUInstallDirs.cmake @@ -263,6 +263,20 @@ function(_GNUInstallDirs_get_system_type_for_install out_var) return(PROPAGATE ${out_var}) endfunction() +# Special handler for `/`, `/usr`, `/opt/...` install prefixes +# Used for SYSCONFDIR, LOCALSTATEDIR and RUNSTATEDIR paths +function(_GNUInstallDirs_special_absolute out_var original_path install_prefix) + set(${out_var} "${original_path}") + + if(install_prefix MATCHES "^/usr/?$") + set(${out_var} "/${original_path}") + elseif(install_prefix MATCHES "^/opt/" AND NOT install_prefix MATCHES "^/opt/homebrew/") + set(${out_var} "/${original_path}/${install_prefix}") + endif() + + return(PROPAGATE ${out_var}) +endfunction() + # Installation directories # @@ -449,27 +463,23 @@ macro(GNUInstallDirs_get_absolute_install_dir absvar var) # - CMAKE_INSTALL_PREFIX == / # - CMAKE_INSTALL_PREFIX == /usr # - CMAKE_INSTALL_PREFIX == /opt/... - if("${CMAKE_INSTALL_PREFIX}" STREQUAL "/") - if("${GGAID_dir}" STREQUAL "SYSCONFDIR" OR "${GGAID_dir}" STREQUAL "LOCALSTATEDIR" OR "${GGAID_dir}" STREQUAL "RUNSTATEDIR") - set(${absvar} "/${${var}}") - else() - if (NOT "${${var}}" MATCHES "^usr/") - set(${var} "usr/${${var}}") + if("${GGAID_dir}" STREQUAL "SYSCONFDIR" OR "${GGAID_dir}" STREQUAL "LOCALSTATEDIR" OR "${GGAID_dir}" STREQUAL "RUNSTATEDIR") + _GNUInstallDirs_special_absolute(${absvar} "${${var}}" "${CMAKE_INSTALL_PREFIX}") + # If the CMAKE_INSTALL_PREFIX was not special, the output + # is still not absolute, so use the default logic. + if(NOT IS_ABSOLUTE "${${absvar}}") + # Make sure we account for any trailing `/` + if(CMAKE_INSTALL_PREFIX MATCHES "/$") + set(${absvar} "${CMAKE_INSTALL_PREFIX}${${var}}") + else() + set(${absvar} "${CMAKE_INSTALL_PREFIX}/${${var}}") endif() - set(${absvar} "/${${var}}") - endif() - elseif("${CMAKE_INSTALL_PREFIX}" MATCHES "^/usr/?$") - if("${GGAID_dir}" STREQUAL "SYSCONFDIR" OR "${GGAID_dir}" STREQUAL "LOCALSTATEDIR" OR "${GGAID_dir}" STREQUAL "RUNSTATEDIR") - set(${absvar} "/${${var}}") - else() - set(${absvar} "${CMAKE_INSTALL_PREFIX}/${${var}}") endif() - elseif("${CMAKE_INSTALL_PREFIX}" MATCHES "^/opt/" AND NOT "${CMAKE_INSTALL_PREFIX}" MATCHES "^/opt/homebrew/") - if("${GGAID_dir}" STREQUAL "SYSCONFDIR" OR "${GGAID_dir}" STREQUAL "LOCALSTATEDIR" OR "${GGAID_dir}" STREQUAL "RUNSTATEDIR") - set(${absvar} "/${${var}}${CMAKE_INSTALL_PREFIX}") - else() - set(${absvar} "${CMAKE_INSTALL_PREFIX}/${${var}}") + elseif("${CMAKE_INSTALL_PREFIX}" STREQUAL "/") + if (NOT "${${var}}" MATCHES "^usr/") + set(${var} "usr/${${var}}") endif() + set(${absvar} "/${${var}}") else() set(${absvar} "${CMAKE_INSTALL_PREFIX}/${${var}}") endif() -- cgit v0.12 From 4ed399ccfb17be71d170b0b0885c870a4d2db99d Mon Sep 17 00:00:00 2001 From: Cristian Le Date: Thu, 27 Mar 2025 20:16:08 +0100 Subject: GNUInstallDirs: Change special path defaults to absolute Add policy `CMP0192` for compatibility. Closes: #25852 Signed-off-by: Cristian Le --- Help/manual/cmake-policies.7.rst | 1 + Help/policy/CMP0192.rst | 41 +++++++++++ Help/release/dev/GNUInstallDirs-special-cases.rst | 7 ++ Modules/GNUInstallDirs.cmake | 86 ++++++++++++++++++++-- Source/cmPolicies.h | 6 +- Tests/RunCMake/GNUInstallDirs/CMakeLists.txt | 1 + Tests/RunCMake/GNUInstallDirs/GetAbs-stderr.txt | 2 +- Tests/RunCMake/GNUInstallDirs/Opt-BSD-stderr.txt | 6 +- .../RunCMake/GNUInstallDirs/Opt-Debian-stderr.txt | 6 +- .../RunCMake/GNUInstallDirs/Opt-FreeBSD-stderr.txt | 6 +- Tests/RunCMake/GNUInstallDirs/Opt-stderr.txt | 6 +- Tests/RunCMake/GNUInstallDirs/Usr-BSD-stderr.txt | 6 +- .../RunCMake/GNUInstallDirs/Usr-Debian-stderr.txt | 6 +- .../RunCMake/GNUInstallDirs/Usr-FreeBSD-stderr.txt | 6 +- Tests/RunCMake/GNUInstallDirs/Usr-stderr.txt | 6 +- 15 files changed, 161 insertions(+), 31 deletions(-) create mode 100644 Help/policy/CMP0192.rst create mode 100644 Help/release/dev/GNUInstallDirs-special-cases.rst diff --git a/Help/manual/cmake-policies.7.rst b/Help/manual/cmake-policies.7.rst index aec3d5e..8f28cf6 100644 --- a/Help/manual/cmake-policies.7.rst +++ b/Help/manual/cmake-policies.7.rst @@ -98,6 +98,7 @@ Policies Introduced by CMake 4.1 .. toctree:: :maxdepth: 1 + CMP0192: GNUInstallDirs uses absolute SYSCONFDIR, LOCALSTATEDIR, and RUNSTATEDIR in special prefixes. CMP0191: The FindCABLE module is removed. CMP0190: FindPython enforce consistency in cross-compiling mode. CMP0189: TARGET_PROPERTY evaluates LINK_LIBRARIES properties transitively. diff --git a/Help/policy/CMP0192.rst b/Help/policy/CMP0192.rst new file mode 100644 index 0000000..04c0330 --- /dev/null +++ b/Help/policy/CMP0192.rst @@ -0,0 +1,41 @@ +CMP0192 +------- + +.. versionadded:: 4.1 + +:module:`GNUInstallDirs` uses absolute ``SYSCONFDIR``, ``LOCALSTATEDIR``, +and ``RUNSTATEDIR`` in special prefixes. + +The :module:`GNUInstallDirs` module documents +:ref:`special cases ` +for ``SYSCONFDIR``, ``LOCALSTATEDIR``, and ``RUNSTATEDIR``. +When :variable:`CMAKE_INSTALL_PREFIX` is a special prefix, e.g., ``/usr``, +the absolute paths for these directories may be outside the prefix, e.g., +``/etc``, ``/var``, and ``/var/run``. + +In CMake 4.0 and below, the default values for the ``CMAKE_INSTALL_`` +variables, for ```` equal to ``SYSCONFDIR``, ``LOCALSTATEDIR``, and +``RUNSTATEDIR``, always used relative paths (``etc``, ``var``, ``var/run``), +and the special cases were implemented only when computing absolute paths +for the ``CMAKE_INSTALL_FULL_`` variables. +CMake 4.1 and above prefer to default ``CMAKE_INSTALL_`` variables to +absolute paths, for ```` equal to ``SYSCONFDIR``, ``LOCALSTATEDIR``, +and ``RUNSTATEDIR``, when :variable:`CMAKE_INSTALL_PREFIX` is a special +prefix. This policy provides compatibility for projects that have not +been updated to expect this behavior. + +The ``OLD`` behavior for this policy is to default ``CMAKE_INSTALL_`` +variables to relative paths. The ``NEW`` behavior for this policy is to +default ``CMAKE_INSTALL_`` variables to absolute paths, for ```` +equal to ``SYSCONFDIR``, ``LOCALSTATEDIR``, and ``RUNSTATEDIR``, when +:variable:`CMAKE_INSTALL_PREFIX` is a special prefix. + +This policy takes effect at the first call of ``include(GNUInstallDirs)``. +Subsequent calls of ``include(GNUInstallDirs)`` reuse cached +``CMAKE_INSTALL_`` values from the first call. + +.. |INTRODUCED_IN_CMAKE_VERSION| replace:: 4.1 +.. |WARNS_OR_DOES_NOT_WARN| replace:: does *not* warn +.. include:: STANDARD_ADVICE.txt + +.. include:: DEPRECATED.txt diff --git a/Help/release/dev/GNUInstallDirs-special-cases.rst b/Help/release/dev/GNUInstallDirs-special-cases.rst new file mode 100644 index 0000000..05c1a74 --- /dev/null +++ b/Help/release/dev/GNUInstallDirs-special-cases.rst @@ -0,0 +1,7 @@ +GNUInstallDirs-special-cases +---------------------------- + +* The :module:`GNUInstallDirs` module now prefers to default + ``SYSCONFDIR``, ``LOCALSTATEDIR``, and ``RUNSTATEDIR`` to + absolute paths when installing to special prefixes. + See policy :policy:`CMP0192`. diff --git a/Modules/GNUInstallDirs.cmake b/Modules/GNUInstallDirs.cmake index 6992a88..66a00d5 100644 --- a/Modules/GNUInstallDirs.cmake +++ b/Modules/GNUInstallDirs.cmake @@ -23,6 +23,7 @@ Inclusion of this module defines the following variables: the ``DESTINATION`` options of :command:`install` commands for the corresponding file type. It should be a path relative to the installation prefix so that it can be converted to an absolute path in a relocatable way. + However, there are some `special cases`_ as documented below. While absolute paths are allowed, they are not recommended as they do not work with the ``cmake --install`` command's @@ -36,8 +37,8 @@ Inclusion of this module defines the following variables: The absolute path generated from the corresponding ``CMAKE_INSTALL_`` value. If the value is not already an absolute path, an absolute path is constructed typically by prepending the value of the - :variable:`CMAKE_INSTALL_PREFIX` variable. However, there are some - `special cases`_ as documented below. + :variable:`CMAKE_INSTALL_PREFIX` variable, except in `special cases`_ + as documented below. These variables shouldn't be used in :command:`install` commands as they do not work with the ``cmake --install`` command's @@ -54,13 +55,29 @@ where ```` is one of: program executables (``libexec``) ``SYSCONFDIR`` read-only single-machine data (``etc``) + + .. versionchanged:: 4.1 + If the :variable:`CMAKE_INSTALL_PREFIX` falls into the + `special cases`_, the default paths for are the absolute + path variants as described there. See policy :policy:`CMP0192`. ``SHAREDSTATEDIR`` modifiable architecture-independent data (``com``) ``LOCALSTATEDIR`` modifiable single-machine data (``var``) + + .. versionchanged:: 4.1 + If the :variable:`CMAKE_INSTALL_PREFIX` falls into the + `special cases`_, the default paths for are the absolute + path variants as described there. See policy :policy:`CMP0192`. ``RUNSTATEDIR`` + run-time variable data (``LOCALSTATEDIR/run``) + .. versionadded:: 3.9 - run-time variable data (``LOCALSTATEDIR/run``) + + .. versionchanged:: 4.1 + If the :variable:`CMAKE_INSTALL_PREFIX` falls into the + `special cases`_, the default paths for are the absolute + path variants as described there. See policy :policy:`CMP0192`. ``LIBDIR`` object code libraries (``lib`` or ``lib64``) @@ -86,6 +103,14 @@ where ```` is one of: If the includer does not define a value the above-shown default will be used and the value will appear in the cache for editing by the user. +If a default value for the ``CMAKE_INSTALL_`` is used and the +:variable:`CMAKE_INSTALL_PREFIX` is changed, the new default value will +be used calculated on the new :variable:`CMAKE_INSTALL_PREFIX` value. +Using :option:`--prefix ` in ``cmake --install`` +will not alter these values. + +.. _`GNUInstallDirs special cases`: + Special Cases ^^^^^^^^^^^^^ @@ -109,21 +134,33 @@ The following values of :variable:`CMAKE_INSTALL_PREFIX` are special: For ```` equal to ``SYSCONFDIR``, ``LOCALSTATEDIR`` or ``RUNSTATEDIR``, the ``CMAKE_INSTALL_FULL_`` is computed by prepending just ``/`` to the value of ``CMAKE_INSTALL_`` - if it is not user-specified as an absolute path. + if it is not already an absolute path. For example, the ``SYSCONFDIR`` value ``etc`` becomes ``/etc``. This is required by the `GNU Coding Standards`_. + .. versionchanged:: 4.1 + The default values of ``CMAKE_INSTALL_`` for ```` equal + to ``SYSCONFDIR``, ``LOCALSTATEDIR`` and ``RUNSTATEDIR`` are the + absolute paths ``/etc``, ``/var`` and ``/var/run`` respectively. + See policy :policy:`CMP0192`. + ``/opt/...`` For ```` equal to ``SYSCONFDIR``, ``LOCALSTATEDIR`` or ``RUNSTATEDIR``, the ``CMAKE_INSTALL_FULL_`` is computed by *appending* the prefix to the value of ``CMAKE_INSTALL_`` - if it is not user-specified as an absolute path. + if it is not already an absolute path. For example, the ``SYSCONFDIR`` value ``etc`` becomes ``/etc/opt/...``. This is defined by the `Filesystem Hierarchy Standard`_. This behavior does not apply to paths under ``/opt/homebrew/...``. + .. versionchanged:: 4.1 + The default values of ``CMAKE_INSTALL_`` for ```` equal + to ``SYSCONFDIR``, ``LOCALSTATEDIR`` and ``RUNSTATEDIR`` are the + absolute paths ``/etc/opt/...``, ``/var/opt/...`` and + ``/var/run/opt/...`` respectively. See policy :policy:`CMP0192`. + .. _`Filesystem Hierarchy Standard`: https://refspecs.linuxfoundation.org/FHS_3.0/fhs/index.html Macros @@ -153,6 +190,11 @@ Macros cmake_policy(SET CMP0140 NEW) +# Note that even though we read the policy every time this file is `include` +# only the first occurrence has effect because it is used for the initialization +# of cache variables +cmake_policy(GET CMP0192 _GNUInstallDirs_CMP0192) + # Convert a cache variable to PATH type function(_GNUInstallDirs_cache_convert_to_path var description) @@ -339,6 +381,38 @@ function(_GNUInstallDirs_LIBDIR_get_default out_var install_prefix) return(PROPAGATE ${out_var}) endfunction() +function(_GNUInstallDirs_SYSCONFDIR_get_default out_var install_prefix) + if(_GNUInstallDirs_CMP0192 STREQUAL "NEW") + _GNUInstallDirs_special_absolute(${out_var} + "${_GNUInstallDirs_SYSCONFDIR_DEFAULT}" "${install_prefix}") + endif() + cmake_path(NORMAL_PATH ${out_var}) + return(PROPAGATE ${out_var}) +endfunction() +function(_GNUInstallDirs_LOCALSTATEDIR_get_default out_var install_prefix) + if(_GNUInstallDirs_CMP0192 STREQUAL "NEW") + _GNUInstallDirs_special_absolute(${out_var} + "${_GNUInstallDirs_LOCALSTATEDIR_DEFAULT}" "${install_prefix}") + endif() + cmake_path(NORMAL_PATH ${out_var}) + return(PROPAGATE ${out_var}) +endfunction() + +# Depends on current CMAKE_INSTALL_LOCALSTATEDIR value +function(_GNUInstallDirs_RUNSTATEDIR_get_default out_var install_prefix) + set(${out_var} "${_GNUInstallDirs_RUNSTATEDIR_DEFAULT}") + if(_GNUInstallDirs_CMP0192 STREQUAL "NEW") + # In the /opt/ case we want the install_prefix to be appended as + # LOCALSTATEDIR/run/PREFIX + if(install_prefix MATCHES "^/opt/" AND NOT install_prefix MATCHES "^/opt/homebrew/") + string(REPLACE "${install_prefix}" "/run${install_prefix}" + ${out_var} "${CMAKE_INSTALL_LOCALSTATEDIR}" + ) + endif() + endif() + return(PROPAGATE ${out_var}) +endfunction() + _GNUInstallDirs_cache_path(BINDIR "User executables") _GNUInstallDirs_cache_path(SBINDIR @@ -514,3 +588,5 @@ foreach(dir ) GNUInstallDirs_get_absolute_install_dir(CMAKE_INSTALL_FULL_${dir} CMAKE_INSTALL_${dir} ${dir}) endforeach() + +unset(_GNUInstallDirs_CMP0192) diff --git a/Source/cmPolicies.h b/Source/cmPolicies.h index b9f3945..c91fec6 100644 --- a/Source/cmPolicies.h +++ b/Source/cmPolicies.h @@ -570,7 +570,11 @@ class cmMakefile; SELECT(POLICY, CMP0190, \ "FindPython enforce consistency in cross-compiling mode.", 4, 1, 0, \ WARN) \ - SELECT(POLICY, CMP0191, "The FindCABLE module is removed.", 4, 1, 0, WARN) + SELECT(POLICY, CMP0191, "The FindCABLE module is removed.", 4, 1, 0, WARN) \ + SELECT(POLICY, CMP0192, \ + "GNUInstallDirs uses absolute SYSCONFDIR, LOCALSTATEDIR, and " \ + "RUNSTATEDIR in special prefixes.", \ + 4, 1, 0, WARN) #define CM_SELECT_ID(F, A1, A2, A3, A4, A5, A6) F(A1) #define CM_FOR_EACH_POLICY_ID(POLICY) \ diff --git a/Tests/RunCMake/GNUInstallDirs/CMakeLists.txt b/Tests/RunCMake/GNUInstallDirs/CMakeLists.txt index bf2ef15..0f0de84 100644 --- a/Tests/RunCMake/GNUInstallDirs/CMakeLists.txt +++ b/Tests/RunCMake/GNUInstallDirs/CMakeLists.txt @@ -1,3 +1,4 @@ cmake_minimum_required(VERSION 3.10) +cmake_policy(SET CMP0192 NEW) project(${RunCMake_TEST} NONE) include(${RunCMake_TEST}.cmake) diff --git a/Tests/RunCMake/GNUInstallDirs/GetAbs-stderr.txt b/Tests/RunCMake/GNUInstallDirs/GetAbs-stderr.txt index ec9a2dd..1c2f084 100644 --- a/Tests/RunCMake/GNUInstallDirs/GetAbs-stderr.txt +++ b/Tests/RunCMake/GNUInstallDirs/GetAbs-stderr.txt @@ -6,7 +6,7 @@ CMake Warning \(dev\) at [^ below. Call Stack \(most recent call first\): GetAbs.cmake:10 \(GNUInstallDirs_get_absolute_install_dir\) - CMakeLists.txt:3 \(include\) + CMakeLists.txt:4 \(include\) This warning is for project developers. Use -Wno-dev to suppress it. + PROJ2_FULL_BINDIR='/usr/bin'$ diff --git a/Tests/RunCMake/GNUInstallDirs/Opt-BSD-stderr.txt b/Tests/RunCMake/GNUInstallDirs/Opt-BSD-stderr.txt index 09ae303..74be111 100644 --- a/Tests/RunCMake/GNUInstallDirs/Opt-BSD-stderr.txt +++ b/Tests/RunCMake/GNUInstallDirs/Opt-BSD-stderr.txt @@ -7,12 +7,12 @@ CMAKE_INSTALL_INFODIR='info' CMAKE_INSTALL_LIBDIR='(lib|lib64)' CMAKE_INSTALL_LIBEXECDIR='libexec' CMAKE_INSTALL_LOCALEDIR='share/locale' -CMAKE_INSTALL_LOCALSTATEDIR='var' -CMAKE_INSTALL_RUNSTATEDIR='var/run' +CMAKE_INSTALL_LOCALSTATEDIR='/var/opt/Opt' +CMAKE_INSTALL_RUNSTATEDIR='/var/run/opt/Opt' CMAKE_INSTALL_MANDIR='man' CMAKE_INSTALL_SBINDIR='sbin' CMAKE_INSTALL_SHAREDSTATEDIR='com' -CMAKE_INSTALL_SYSCONFDIR='etc' +CMAKE_INSTALL_SYSCONFDIR='/etc/opt/Opt' CMAKE_INSTALL_FULL_BINDIR='/opt/Opt/bin' CMAKE_INSTALL_FULL_DATADIR='/opt/Opt/share' CMAKE_INSTALL_FULL_DATAROOTDIR='/opt/Opt/share' diff --git a/Tests/RunCMake/GNUInstallDirs/Opt-Debian-stderr.txt b/Tests/RunCMake/GNUInstallDirs/Opt-Debian-stderr.txt index 546fb5c..bb8f76a 100644 --- a/Tests/RunCMake/GNUInstallDirs/Opt-Debian-stderr.txt +++ b/Tests/RunCMake/GNUInstallDirs/Opt-Debian-stderr.txt @@ -7,12 +7,12 @@ CMAKE_INSTALL_INFODIR='share/info' CMAKE_INSTALL_LIBDIR='lib' CMAKE_INSTALL_LIBEXECDIR='libexec' CMAKE_INSTALL_LOCALEDIR='share/locale' -CMAKE_INSTALL_LOCALSTATEDIR='var' -CMAKE_INSTALL_RUNSTATEDIR='var/run' +CMAKE_INSTALL_LOCALSTATEDIR='/var/opt/Opt' +CMAKE_INSTALL_RUNSTATEDIR='/var/run/opt/Opt' CMAKE_INSTALL_MANDIR='share/man' CMAKE_INSTALL_SBINDIR='sbin' CMAKE_INSTALL_SHAREDSTATEDIR='com' -CMAKE_INSTALL_SYSCONFDIR='etc' +CMAKE_INSTALL_SYSCONFDIR='/etc/opt/Opt' CMAKE_INSTALL_FULL_BINDIR='/opt/Opt/bin' CMAKE_INSTALL_FULL_DATADIR='/opt/Opt/share' CMAKE_INSTALL_FULL_DATAROOTDIR='/opt/Opt/share' diff --git a/Tests/RunCMake/GNUInstallDirs/Opt-FreeBSD-stderr.txt b/Tests/RunCMake/GNUInstallDirs/Opt-FreeBSD-stderr.txt index 3e18410..e732f92 100644 --- a/Tests/RunCMake/GNUInstallDirs/Opt-FreeBSD-stderr.txt +++ b/Tests/RunCMake/GNUInstallDirs/Opt-FreeBSD-stderr.txt @@ -7,12 +7,12 @@ CMAKE_INSTALL_INFODIR='share/info' CMAKE_INSTALL_LIBDIR='(lib|lib64)' CMAKE_INSTALL_LIBEXECDIR='libexec' CMAKE_INSTALL_LOCALEDIR='share/locale' -CMAKE_INSTALL_LOCALSTATEDIR='var' -CMAKE_INSTALL_RUNSTATEDIR='var/run' +CMAKE_INSTALL_LOCALSTATEDIR='/var/opt/Opt' +CMAKE_INSTALL_RUNSTATEDIR='/var/run/opt/Opt' CMAKE_INSTALL_MANDIR='share/man' CMAKE_INSTALL_SBINDIR='sbin' CMAKE_INSTALL_SHAREDSTATEDIR='com' -CMAKE_INSTALL_SYSCONFDIR='etc' +CMAKE_INSTALL_SYSCONFDIR='/etc/opt/Opt' CMAKE_INSTALL_FULL_BINDIR='/opt/Opt/bin' CMAKE_INSTALL_FULL_DATADIR='/opt/Opt/share' CMAKE_INSTALL_FULL_DATAROOTDIR='/opt/Opt/share' diff --git a/Tests/RunCMake/GNUInstallDirs/Opt-stderr.txt b/Tests/RunCMake/GNUInstallDirs/Opt-stderr.txt index 3e18410..e732f92 100644 --- a/Tests/RunCMake/GNUInstallDirs/Opt-stderr.txt +++ b/Tests/RunCMake/GNUInstallDirs/Opt-stderr.txt @@ -7,12 +7,12 @@ CMAKE_INSTALL_INFODIR='share/info' CMAKE_INSTALL_LIBDIR='(lib|lib64)' CMAKE_INSTALL_LIBEXECDIR='libexec' CMAKE_INSTALL_LOCALEDIR='share/locale' -CMAKE_INSTALL_LOCALSTATEDIR='var' -CMAKE_INSTALL_RUNSTATEDIR='var/run' +CMAKE_INSTALL_LOCALSTATEDIR='/var/opt/Opt' +CMAKE_INSTALL_RUNSTATEDIR='/var/run/opt/Opt' CMAKE_INSTALL_MANDIR='share/man' CMAKE_INSTALL_SBINDIR='sbin' CMAKE_INSTALL_SHAREDSTATEDIR='com' -CMAKE_INSTALL_SYSCONFDIR='etc' +CMAKE_INSTALL_SYSCONFDIR='/etc/opt/Opt' CMAKE_INSTALL_FULL_BINDIR='/opt/Opt/bin' CMAKE_INSTALL_FULL_DATADIR='/opt/Opt/share' CMAKE_INSTALL_FULL_DATAROOTDIR='/opt/Opt/share' diff --git a/Tests/RunCMake/GNUInstallDirs/Usr-BSD-stderr.txt b/Tests/RunCMake/GNUInstallDirs/Usr-BSD-stderr.txt index 3d7b4c8..6a487f9 100644 --- a/Tests/RunCMake/GNUInstallDirs/Usr-BSD-stderr.txt +++ b/Tests/RunCMake/GNUInstallDirs/Usr-BSD-stderr.txt @@ -7,12 +7,12 @@ CMAKE_INSTALL_INFODIR='info' CMAKE_INSTALL_LIBDIR='(lib|lib64|lib/arch)' CMAKE_INSTALL_LIBEXECDIR='libexec' CMAKE_INSTALL_LOCALEDIR='share/locale' -CMAKE_INSTALL_LOCALSTATEDIR='var' -CMAKE_INSTALL_RUNSTATEDIR='var/run' +CMAKE_INSTALL_LOCALSTATEDIR='/var' +CMAKE_INSTALL_RUNSTATEDIR='/var/run' CMAKE_INSTALL_MANDIR='man' CMAKE_INSTALL_SBINDIR='sbin' CMAKE_INSTALL_SHAREDSTATEDIR='com' -CMAKE_INSTALL_SYSCONFDIR='etc' +CMAKE_INSTALL_SYSCONFDIR='/etc' CMAKE_INSTALL_FULL_BINDIR='/usr/bin' CMAKE_INSTALL_FULL_DATADIR='/usr/share' CMAKE_INSTALL_FULL_DATAROOTDIR='/usr/share' diff --git a/Tests/RunCMake/GNUInstallDirs/Usr-Debian-stderr.txt b/Tests/RunCMake/GNUInstallDirs/Usr-Debian-stderr.txt index c38006c..65f62b7 100644 --- a/Tests/RunCMake/GNUInstallDirs/Usr-Debian-stderr.txt +++ b/Tests/RunCMake/GNUInstallDirs/Usr-Debian-stderr.txt @@ -7,12 +7,12 @@ CMAKE_INSTALL_INFODIR='share/info' CMAKE_INSTALL_LIBDIR='lib/arch' CMAKE_INSTALL_LIBEXECDIR='libexec' CMAKE_INSTALL_LOCALEDIR='share/locale' -CMAKE_INSTALL_LOCALSTATEDIR='var' -CMAKE_INSTALL_RUNSTATEDIR='var/run' +CMAKE_INSTALL_LOCALSTATEDIR='/var' +CMAKE_INSTALL_RUNSTATEDIR='/var/run' CMAKE_INSTALL_MANDIR='share/man' CMAKE_INSTALL_SBINDIR='sbin' CMAKE_INSTALL_SHAREDSTATEDIR='com' -CMAKE_INSTALL_SYSCONFDIR='etc' +CMAKE_INSTALL_SYSCONFDIR='/etc' CMAKE_INSTALL_FULL_BINDIR='/usr/bin' CMAKE_INSTALL_FULL_DATADIR='/usr/share' CMAKE_INSTALL_FULL_DATAROOTDIR='/usr/share' diff --git a/Tests/RunCMake/GNUInstallDirs/Usr-FreeBSD-stderr.txt b/Tests/RunCMake/GNUInstallDirs/Usr-FreeBSD-stderr.txt index a591436..004b7db 100644 --- a/Tests/RunCMake/GNUInstallDirs/Usr-FreeBSD-stderr.txt +++ b/Tests/RunCMake/GNUInstallDirs/Usr-FreeBSD-stderr.txt @@ -7,12 +7,12 @@ CMAKE_INSTALL_INFODIR='share/info' CMAKE_INSTALL_LIBDIR='(lib|lib64|lib/arch)' CMAKE_INSTALL_LIBEXECDIR='libexec' CMAKE_INSTALL_LOCALEDIR='share/locale' -CMAKE_INSTALL_LOCALSTATEDIR='var' -CMAKE_INSTALL_RUNSTATEDIR='var/run' +CMAKE_INSTALL_LOCALSTATEDIR='/var' +CMAKE_INSTALL_RUNSTATEDIR='/var/run' CMAKE_INSTALL_MANDIR='share/man' CMAKE_INSTALL_SBINDIR='sbin' CMAKE_INSTALL_SHAREDSTATEDIR='com' -CMAKE_INSTALL_SYSCONFDIR='etc' +CMAKE_INSTALL_SYSCONFDIR='/etc' CMAKE_INSTALL_FULL_BINDIR='/usr/bin' CMAKE_INSTALL_FULL_DATADIR='/usr/share' CMAKE_INSTALL_FULL_DATAROOTDIR='/usr/share' diff --git a/Tests/RunCMake/GNUInstallDirs/Usr-stderr.txt b/Tests/RunCMake/GNUInstallDirs/Usr-stderr.txt index a591436..004b7db 100644 --- a/Tests/RunCMake/GNUInstallDirs/Usr-stderr.txt +++ b/Tests/RunCMake/GNUInstallDirs/Usr-stderr.txt @@ -7,12 +7,12 @@ CMAKE_INSTALL_INFODIR='share/info' CMAKE_INSTALL_LIBDIR='(lib|lib64|lib/arch)' CMAKE_INSTALL_LIBEXECDIR='libexec' CMAKE_INSTALL_LOCALEDIR='share/locale' -CMAKE_INSTALL_LOCALSTATEDIR='var' -CMAKE_INSTALL_RUNSTATEDIR='var/run' +CMAKE_INSTALL_LOCALSTATEDIR='/var' +CMAKE_INSTALL_RUNSTATEDIR='/var/run' CMAKE_INSTALL_MANDIR='share/man' CMAKE_INSTALL_SBINDIR='sbin' CMAKE_INSTALL_SHAREDSTATEDIR='com' -CMAKE_INSTALL_SYSCONFDIR='etc' +CMAKE_INSTALL_SYSCONFDIR='/etc' CMAKE_INSTALL_FULL_BINDIR='/usr/bin' CMAKE_INSTALL_FULL_DATADIR='/usr/share' CMAKE_INSTALL_FULL_DATAROOTDIR='/usr/share' -- cgit v0.12