CMP0053: document that $ is a valid literal variable character

This was overlooked in the initial implementation of CMP0053. However,
an additional policy to reject it again is not worth it. Instead, add
tests and document the behavior.

Fixes: #17883
This commit is contained in:
Ben Boeckel 2018-10-11 18:08:03 -04:00 committed by Brad King
parent fd02538974
commit 82a4822610
8 changed files with 48 additions and 2 deletions

View File

@ -391,8 +391,9 @@ inside out, e.g. ``${outer_${inner_variable}_variable}``.
Literal variable references may consist of alphanumeric characters,
the characters ``/_.+-``, and `Escape Sequences`_. Nested references
may be used to evaluate variables of any name. (See also policy
:policy:`CMP0053` documentation for historical considerations.)
may be used to evaluate variables of any name. See also policy
:policy:`CMP0053` documentation for historical considerations and reasons why
the ``$`` is also technically permitted but is discouraged.
The `Variables`_ section documents the scope of variable names
and how their values are set.

View File

@ -16,6 +16,10 @@ cleaned up to simplify the behavior. Specifically:
* 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.

View File

@ -0,0 +1,2 @@
^-->value<--
-->value<--$

View File

@ -0,0 +1,6 @@
cmake_policy(SET CMP0053 NEW)
set($ value)
set(dollar $)
message("-->${${dollar}}<--")
message("-->${$}<--")

View File

@ -0,0 +1 @@
1

View File

@ -0,0 +1,24 @@
^CMake Deprecation Warning at CMP0053-Dollar-OLD.cmake:1 \(cmake_policy\):
The OLD behavior for policy CMP0053 will be removed from a future version
of CMake.
The cmake-policies\(7\) manual explains that the OLD behaviors of all
policies are deprecated and that a policy should be set to OLD only under
specific short-term circumstances. Projects should be ported to the NEW
behavior and not rely on setting a policy to OLD.
Call Stack \(most recent call first\):
CMakeLists.txt:3 \(include\)
+
-->value<--
CMake Error at CMP0053-Dollar-OLD.cmake:6 \(message\):
Syntax error in cmake code at
.*CMP0053-Dollar-OLD.cmake:6
when parsing string
-->\${\$}<--
syntax error, unexpected \$, expecting } \(7\)
Call Stack \(most recent call first\):
CMakeLists.txt:3 \(include\)$

View File

@ -0,0 +1,6 @@
cmake_policy(SET CMP0053 OLD)
set($ value)
set(dollar $)
message("-->${${dollar}}<--")
message("-->${$}<--")

View File

@ -111,6 +111,8 @@ run_cmake(CMP0053-NameWithNewlineQuoted)
run_cmake(CMP0053-NameWithCarriageReturnQuoted)
run_cmake(CMP0053-NameWithEscapedSpacesQuoted)
run_cmake(CMP0053-NameWithEscapedTabsQuoted)
run_cmake(CMP0053-Dollar-OLD)
run_cmake(CMP0053-Dollar-NEW)
# Variable special types
run_cmake(QueryCache)