File: CMP0053.rst

package info (click to toggle)
cmake 4.2.3-1
  • links: PTS, VCS
  • area: main
  • in suites: forky, sid
  • size: 152,336 kB
  • sloc: ansic: 403,896; cpp: 303,920; sh: 4,105; python: 3,583; yacc: 3,106; lex: 1,279; f90: 538; asm: 471; lisp: 375; cs: 270; java: 266; fortran: 239; objc: 215; perl: 213; xml: 198; makefile: 111; javascript: 83; pascal: 63; tcl: 55; php: 25; ruby: 22
file content (52 lines) | stat: -rw-r--r-- 2,130 bytes parent folder | download | duplicates (2)
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
51
52
CMP0053
-------

.. |REMOVED_IN_CMAKE_VERSION| replace:: 4.0
.. include:: include/REMOVED_PROLOGUE.rst

.. versionadded:: 3.1

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

.. |INTRODUCED_IN_CMAKE_VERSION| replace:: 3.1
.. |WARNED_OR_DID_NOT_WARN| replace:: warned
.. include:: include/REMOVED_EPILOGUE.rst