summaryrefslogtreecommitdiffstats
path: root/Help/policy/CMP0177.rst
blob: 3eca9f3b3124f294bc104a80b7bbc604a7429895 (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
CMP0177
-------

.. versionadded:: 3.31

:command:`install` ``DESTINATION`` paths are normalized.

The :command:`install` command has a number of different forms, and most of
them take a ``DESTINATION`` keyword, some in more than one place.
CMake 3.30 and earlier used the value given after the ``DESTINATION`` keyword
as provided with no transformations.  The :command:`install(EXPORT)` form
assumes the path contains no ``..`` or ``.`` path components when computing
a path relative to the ``DESTINATION``, and if the project provided a path
that violated that assumption, the computed path would be incorrect.

CMake 3.31 normalizes all ``DESTINATION`` values given in any form of the
:command:`install` command, except for the ``INCLUDES DESTINATION`` of the
:command:`install(TARGETS)` form.  The normalization performed is the same
as for the :command:`cmake_path` command (see :ref:`Normalization`).

The ``OLD`` behavior of this policy performs no translation on the
``DESTINATION`` values of any :command:`install` command.  They are used
exactly as provided.  If a destination path contains ``..`` or ``.`` path
components, :command:`install(EXPORT)` will use the same wrong paths as
CMake 3.30 and earlier.

The ``NEW`` behavior will normalize all ``DESTINATION`` values except for
``INCLUDES DESTINATION``.  If a destination path contains a generator
expression, it will be wrapped in a ``$<PATH:CMAKE_PATH,NORMALIZE,...>``
generator expression.

This policy was introduced in CMake version 3.31.
It may be set by :command:`cmake_policy` or :command:`cmake_minimum_required`.
If it is not set, CMake will warn if it detects a path that would be different
if normalized, and uses ``OLD`` behavior.  If a destination path contains a
generator expression, no such warning will be issued regardless of the value.

.. include:: DEPRECATED.txt