| CMP0053 |
| ------- |
| |
| .. 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 :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 |