summaryrefslogtreecommitdiffstats
path: root/Help/policy/CMP0053.rst
blob: 032b3e5c6341ca0edbfef98c3bbf1531dca20d69 (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
45
46
47
48
49
50
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 ``+``.
  Note that ``$`` is technically allowed in the ``NEW`` behavior, but is
  invalid for ``OLD`` behavior.  This is due to an oversight during the
  implementation of :policy:`CMP0053` and its use as a literal variable
  reference is discouraged for this reason.
  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.

.. include:: DEPRECATED.txt