Source-Changes-HG archive

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index][Old Index]

[src/trunk]: src/usr.bin/make/unit-tests tests/make: demonstrate that the mod...



details:   https://anonhg.NetBSD.org/src/rev/2ad277349a61
branches:  trunk
changeset: 960357:2ad277349a61
user:      rillig <rillig%NetBSD.org@localhost>
date:      Mon Mar 15 18:46:05 2021 +0000

description:
tests/make: demonstrate that the modifier '::=' expands the varname

diffstat:

 usr.bin/make/unit-tests/varmod-assign.exp |  17 +++++++++++++++++
 usr.bin/make/unit-tests/varmod-assign.mk  |  30 +++++++++++++++++++++++++++++-
 2 files changed, 46 insertions(+), 1 deletions(-)

diffs (65 lines):

diff -r e86fbe208d45 -r 2ad277349a61 usr.bin/make/unit-tests/varmod-assign.exp
--- a/usr.bin/make/unit-tests/varmod-assign.exp Mon Mar 15 18:44:04 2021 +0000
+++ b/usr.bin/make/unit-tests/varmod-assign.exp Mon Mar 15 18:46:05 2021 +0000
@@ -1,3 +1,20 @@
+Global:param = twice
+Global:VARNAME = VAR.$${param}
+Var_Parse: ${VARNAME} (eval)
+Global:VAR.${param} = initial-value
+Var_Parse: ${${VARNAME}::=assigned-value} (eval-defined)
+Var_Parse: ${VARNAME}::=assigned-value} (eval-defined)
+Applying ${VAR.${param}::...} to "initial-value" (eval-defined, none, regular)
+Modifier part: "assigned-value"
+Var_Parse: ${param} (eval)
+Global:VAR.twice = assigned-value
+Result of ${VAR.${param}::=assigned-value} is "" (eval-defined, none, regular)
+Var_Parse: $ for symmetry with the usual assignment operators. (eval)
+make: "varmod-assign.mk" line 139: FIXME: don't expand the variable name twice here, for symmetry with the usual assignment operators.
+Var_Parse: ${${VARNAME}} != "initial-value" (eval-defined)
+Var_Parse: ${VARNAME}} != "initial-value" (eval-defined)
+Global:.MAKEFLAGS =  -r -k -d v -d
+Global:.MAKEFLAGS =  -r -k -d v -d 0
 mod-assign: first=1.
 mod-assign: last=3.
 mod-assign: appended=1 2 3.
diff -r e86fbe208d45 -r 2ad277349a61 usr.bin/make/unit-tests/varmod-assign.mk
--- a/usr.bin/make/unit-tests/varmod-assign.mk  Mon Mar 15 18:44:04 2021 +0000
+++ b/usr.bin/make/unit-tests/varmod-assign.mk  Mon Mar 15 18:46:05 2021 +0000
@@ -1,4 +1,4 @@
-# $NetBSD: varmod-assign.mk,v 1.10 2021/02/14 12:14:37 rillig Exp $
+# $NetBSD: varmod-assign.mk,v 1.11 2021/03/15 18:46:05 rillig Exp $
 #
 # Tests for the obscure ::= variable modifiers, which perform variable
 # assignments during evaluation, just like the = operator in C.
@@ -114,3 +114,31 @@
 .if ${VAR} != "current}"
 .  error
 .endif
+
+
+# Before var.c 1.888 from 2021-03-15, an expression using the modifier '::='
+# expanded its variable name once too often during evaluation.  This was only
+# relevant for variable names containing a '$' sign in their actual name, not
+# the usual VAR.${param}.
+.MAKEFLAGS: -dv
+param=         twice
+VARNAME=       VAR.$${param}   # Indirect variable name because of the '$',
+                               # to avoid difficult escaping rules.
+
+${VARNAME}=    initial-value   # Sets 'VAR.${param}' to 'expanded'.
+.if defined(VAR.twice)         # At this point, the '$$' is not expanded.
+.  error
+.endif
+.if ${${VARNAME}::=assigned-value} # Here the variable name gets expanded once
+.  error                       # too often.
+.endif
+.if !defined(VAR.twice)
+.  error                       # FIXME: This is the unwanted current behavior.
+.else
+.  info                FIXME: don't expand the variable name twice here, $\
+               for symmetry with the usual assignment operators.
+.endif
+.if ${${VARNAME}} != "initial-value"
+.  error
+.endif
+.MAKEFLAGS: -d0



Home | Main Index | Thread Index | Old Index