Pārlūkot izejas kodu

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
Dennis Klein 5 gadi atpakaļ
vecāks
revīzija
798c1c3192

+ 13 - 2
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"

+ 2 - 2
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'