GNUInstallDirs: Change special path defaults to absolute

Add policy `CMP0192` for compatibility.

Closes: #25852
Signed-off-by: Cristian Le <git@lecris.dev>
This commit is contained in:
Cristian Le
2025-03-27 20:16:08 +01:00
committed by Brad King
parent 7566a477f7
commit 4ed399ccfb
15 changed files with 161 additions and 31 deletions

View File

@@ -98,6 +98,7 @@ Policies Introduced by CMake 4.1
.. toctree::
:maxdepth: 1
CMP0192: GNUInstallDirs uses absolute SYSCONFDIR, LOCALSTATEDIR, and RUNSTATEDIR in special prefixes. </policy/CMP0192>
CMP0191: The FindCABLE module is removed. </policy/CMP0191>
CMP0190: FindPython enforce consistency in cross-compiling mode. </policy/CMP0190>
CMP0189: TARGET_PROPERTY evaluates LINK_LIBRARIES properties transitively. </policy/CMP0189>

41
Help/policy/CMP0192.rst Normal file
View File

@@ -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 <GNUInstallDirs 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_<dir>``
variables, for ``<dir>`` 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_<dir>`` variables.
CMake 4.1 and above prefer to default ``CMAKE_INSTALL_<dir>`` variables to
absolute paths, for ``<dir>`` 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_<dir>``
variables to relative paths. The ``NEW`` behavior for this policy is to
default ``CMAKE_INSTALL_<dir>`` variables to absolute paths, for ``<dir>``
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_<dir>`` 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

View File

@@ -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`.