summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorDennis Klein <d.klein@gsi.de>2020-10-08 13:58:54 (GMT)
committerBrad King <brad.king@kitware.com>2020-10-08 15:10:41 (GMT)
commit798c1c319224c8b9ec6e4407e2c42375bd645235 (patch)
tree89fa12e3831e830953d5c905d89a9486020bde74
parent75bcd3cf54bc483b49dc4ed1d7ee9d36f5f58732 (diff)
downloadCMake-798c1c319224c8b9ec6e4407e2c42375bd645235.zip
CMake-798c1c319224c8b9ec6e4407e2c42375bd645235.tar.gz
CMake-798c1c319224c8b9ec6e4407e2c42375bd645235.tar.bz2
GNUInstallDirs: Comply with Debian Policy on LIBEXECDIR
If CMAKE_INSTALL_PREFIX is /usr, CMAKE_INSTALL_LIBEXECDIR shall return the same value as CMAKE_INSTALL_LIBDIR on Debian. While the FHS allows /usr/libexec for internal binaries (https://refspecs.linuxfoundation.org/FHS_3.0/fhs-3.0.html#usrlibexec) the Debian Policy Manual states an exception here (section 9.1.1 bullet point 4): https://www.debian.org/doc/debian-policy/ch-opersys#file-system-structure. Fixes: #21287
-rw-r--r--Modules/GNUInstallDirs.cmake15
-rw-r--r--Tests/RunCMake/GNUInstallDirs/Usr-Debian-stderr.txt4
2 files changed, 15 insertions, 4 deletions
diff --git a/Modules/GNUInstallDirs.cmake b/Modules/GNUInstallDirs.cmake
index 9ef22b9..13d067a 100644
--- a/Modules/GNUInstallDirs.cmake
+++ b/Modules/GNUInstallDirs.cmake
@@ -167,8 +167,6 @@ _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"
@@ -262,6 +260,19 @@ set(_GNUInstallDirs_LAST_CMAKE_INSTALL_PREFIX "${CMAKE_INSTALL_PREFIX}" CACHE IN
unset(_libdir_set)
unset(__LAST_LIBDIR_DEFAULT)
+if(CMAKE_SYSTEM_NAME MATCHES "^(Linux|kFreeBSD|GNU)$"
+ AND NOT CMAKE_CROSSCOMPILING
+ AND NOT EXISTS "/etc/arch-release"
+ AND EXISTS "/etc/debian_version" # is this a debian system ?
+ AND "${CMAKE_INSTALL_PREFIX}" MATCHES "^/usr/?$")
+ # see https://refspecs.linuxfoundation.org/FHS_3.0/fhs-3.0.html#usrlibexec
+ # and https://www.debian.org/doc/debian-policy/ch-opersys#file-system-structure (section 9.1.1 bullet point 4)
+ _GNUInstallDirs_cache_path(CMAKE_INSTALL_LIBEXECDIR "${CMAKE_INSTALL_LIBDIR}"
+ "Program executables (${CMAKE_INSTALL_LIBDIR})")
+else()
+ _GNUInstallDirs_cache_path(CMAKE_INSTALL_LIBEXECDIR "libexec"
+ "Program executables (libexec)")
+endif()
_GNUInstallDirs_cache_path(CMAKE_INSTALL_INCLUDEDIR "include"
"C header files (include)")
_GNUInstallDirs_cache_path(CMAKE_INSTALL_OLDINCLUDEDIR "/usr/include"
diff --git a/Tests/RunCMake/GNUInstallDirs/Usr-Debian-stderr.txt b/Tests/RunCMake/GNUInstallDirs/Usr-Debian-stderr.txt
index c38006c..89578ee 100644
--- a/Tests/RunCMake/GNUInstallDirs/Usr-Debian-stderr.txt
+++ b/Tests/RunCMake/GNUInstallDirs/Usr-Debian-stderr.txt
@@ -5,7 +5,7 @@ CMAKE_INSTALL_DOCDIR='share/doc/Usr'
CMAKE_INSTALL_INCLUDEDIR='include'
CMAKE_INSTALL_INFODIR='share/info'
CMAKE_INSTALL_LIBDIR='lib/arch'
-CMAKE_INSTALL_LIBEXECDIR='libexec'
+CMAKE_INSTALL_LIBEXECDIR='lib/arch'
CMAKE_INSTALL_LOCALEDIR='share/locale'
CMAKE_INSTALL_LOCALSTATEDIR='var'
CMAKE_INSTALL_RUNSTATEDIR='var/run'
@@ -20,7 +20,7 @@ CMAKE_INSTALL_FULL_DOCDIR='/usr/share/doc/Usr'
CMAKE_INSTALL_FULL_INCLUDEDIR='/usr/include'
CMAKE_INSTALL_FULL_INFODIR='/usr/share/info'
CMAKE_INSTALL_FULL_LIBDIR='/usr/lib/arch'
-CMAKE_INSTALL_FULL_LIBEXECDIR='/usr/libexec'
+CMAKE_INSTALL_FULL_LIBEXECDIR='/usr/lib/arch'
CMAKE_INSTALL_FULL_LOCALEDIR='/usr/share/locale'
CMAKE_INSTALL_FULL_LOCALSTATEDIR='/var'
CMAKE_INSTALL_FULL_RUNSTATEDIR='/var/run'