summaryrefslogtreecommitdiffstats
path: root/Help/policy/CMP0053.rst
blob: bb0ff8b41d4d150640887b3276ef94fd314cbd52 (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
39
40
41
42
43
44
CMP0053
-------

Simplify variable reference and escape sequence evaluation.

CMake 3.1 introduced a much faster implementation of evaluation of the
:ref:`Variable References` and :ref:`Escape Sequences` documented in the
:manual:`cmake-language(7)` manual.  While the behavior is identical
to the legacy implementation in most cases, some corner cases were
cleaned up to simplify the behavior.  Specifically:

* Expansion of ``@VAR@`` reference syntax defined by the
  :command:`configure_file` and :command:`string(CONFIGURE)`
  commands is no longer performed in other contexts.

* Literal ``${VAR}`` reference syntax may contain only
  alphanumeric characters (``A-Z``, ``a-z``, ``0-9``) and
  the characters ``_``, ``.``, ``/``, ``-``, and ``+``.
  Variables with other characters in their name may still
  be referenced indirectly, e.g.

  .. code-block:: cmake

    set(varname "otherwise & disallowed $ characters")
    message("${${varname}}")

* The setting of policy :policy:`CMP0010` is not considered,
  so improper variable reference syntax is always an error.

* More characters are allowed to be escaped in variable names.
  Previously, only ``()#" \@^`` were valid characters to
  escape. Now any non-alphanumeric, non-semicolon, non-NUL
  character may be escaped following the ``escape_identity``
  production in the :ref:`Escape Sequences` section of the
  :manual:`cmake-language(7)` manual.

The ``OLD`` behavior for this policy is to honor the legacy behavior for
variable references and escape sequences.  The ``NEW`` behavior is to
use the simpler variable expansion and escape sequence evaluation rules.

This policy was introduced in CMake version 3.1.
CMake version |release| warns when the policy is not set and uses
``OLD`` behavior.  Use the :command:`cmake_policy` command to set
it to ``OLD`` or ``NEW`` explicitly.