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: explain and extend tests...
details: https://anonhg.NetBSD.org/src/rev/8956aef5dc91
branches: trunk
changeset: 376589:8956aef5dc91
user: rillig <rillig%NetBSD.org@localhost>
date: Fri Jun 23 06:11:06 2023 +0000
description:
tests/make: explain and extend tests for expansion in .for loops
diffstat:
usr.bin/make/unit-tests/directive-for-escape.exp | 79 +++++++++++++++--------
usr.bin/make/unit-tests/directive-for-escape.mk | 46 +++++++++++--
2 files changed, 89 insertions(+), 36 deletions(-)
diffs (205 lines):
diff -r b0052737b416 -r 8956aef5dc91 usr.bin/make/unit-tests/directive-for-escape.exp
--- a/usr.bin/make/unit-tests/directive-for-escape.exp Fri Jun 23 06:08:56 2023 +0000
+++ b/usr.bin/make/unit-tests/directive-for-escape.exp Fri Jun 23 06:11:06 2023 +0000
@@ -25,6 +25,22 @@ For: loop body with i = $(V:=-with-modif
. info ${:U$(V:=-with-modifier)}
make: "directive-for-escape.mk" line 45: value-with-modifier
For: end for 1
+For: loop body with i = $:
+. info ${:U\$}
+make: "directive-for-escape.mk" line 60: $
+For: loop body with i = ${V}:
+. info ${:U${V}}
+make: "directive-for-escape.mk" line 60: value
+For: loop body with i = ${V:=-with-modifier}:
+. info ${:U${V:=-with-modifier}}
+make: "directive-for-escape.mk" line 60: value-with-modifier
+For: loop body with i = $(V):
+. info ${:U$(V)}
+make: "directive-for-escape.mk" line 60: value
+For: loop body with i = $(V:=-with-modifier):
+. info ${:U$(V:=-with-modifier)}
+make: "directive-for-escape.mk" line 60: value-with-modifier
+For: end for 1
For: loop body with i = ${UNDEF:U\$\$:
# ${:U\${UNDEF\:U\\$\\$}
For: loop body with i = {{}}:
@@ -34,24 +50,24 @@ For: loop body with i = end}:
For: end for 1
For: loop body with i = ${UNDEF:U\$\$:
. info ${:U\${UNDEF\:U\\$\\$}
-make: "directive-for-escape.mk" line 99: ${UNDEF:U\backslash$
+make: "directive-for-escape.mk" line 115: ${UNDEF:U\backslash$
For: loop body with i = {{}}:
. info ${:U{{\}\}}
-make: "directive-for-escape.mk" line 99: {{}}
+make: "directive-for-escape.mk" line 115: {{}}
For: loop body with i = end}:
. info ${:Uend\}}
-make: "directive-for-escape.mk" line 99: end}
+make: "directive-for-escape.mk" line 115: end}
For: end for 1
For: loop body with i = begin<${UNDEF:Ufallback:N{{{}}}}>end:
. info ${:Ubegin<${UNDEF:Ufallback:N{{{}}}}>end}
-make: "directive-for-escape.mk" line 120: begin<fallback>end
+make: "directive-for-escape.mk" line 136: begin<fallback>end
For: end for 1
For: loop body with i = $:
. info ${:U\$}
-make: "directive-for-escape.mk" line 129: $
-make: "directive-for-escape.mk" line 138: invalid character ':' in .for loop variable name
+make: "directive-for-escape.mk" line 145: $
+make: "directive-for-escape.mk" line 154: invalid character ':' in .for loop variable name
For: end for 1
-make: "directive-for-escape.mk" line 148: invalid character '}' in .for loop variable name
+make: "directive-for-escape.mk" line 164: invalid character '}' in .for loop variable name
For: end for 1
For: end for 1
For: loop body with i = inner:
@@ -65,45 +81,45 @@ For: loop body with i = inner:
. info . $${i2}: ${i2}
. info . $${i,}: ${i,}
. info . adjacent: ${:Uinner}${:Uinner}${:Uinner:M*}${:Uinner}
-make: "directive-for-escape.mk" line 157: . $i: inner
-make: "directive-for-escape.mk" line 158: . ${i}: inner
-make: "directive-for-escape.mk" line 159: . ${i:M*}: inner
-make: "directive-for-escape.mk" line 160: . $(i): inner
-make: "directive-for-escape.mk" line 161: . $(i:M*): inner
-make: "directive-for-escape.mk" line 162: . ${i${:U}}: outer
-make: "directive-for-escape.mk" line 163: . ${i\}}: inner}
-make: "directive-for-escape.mk" line 164: . ${i2}: two
-make: "directive-for-escape.mk" line 165: . ${i,}: comma
-make: "directive-for-escape.mk" line 166: . adjacent: innerinnerinnerinner
-make: "directive-for-escape.mk" line 185: invalid character '$' in .for loop variable name
+make: "directive-for-escape.mk" line 173: . $i: inner
+make: "directive-for-escape.mk" line 174: . ${i}: inner
+make: "directive-for-escape.mk" line 175: . ${i:M*}: inner
+make: "directive-for-escape.mk" line 176: . $(i): inner
+make: "directive-for-escape.mk" line 177: . $(i:M*): inner
+make: "directive-for-escape.mk" line 178: . ${i${:U}}: outer
+make: "directive-for-escape.mk" line 179: . ${i\}}: inner}
+make: "directive-for-escape.mk" line 180: . ${i2}: two
+make: "directive-for-escape.mk" line 181: . ${i,}: comma
+make: "directive-for-escape.mk" line 182: . adjacent: innerinnerinnerinner
+make: "directive-for-escape.mk" line 201: invalid character '$' in .for loop variable name
For: end for 1
-make: "directive-for-escape.mk" line 197: eight and no cents.
+make: "directive-for-escape.mk" line 213: eight and no cents.
For: end for 1
-make: "directive-for-escape.mk" line 210: newline in .for value
-make: "directive-for-escape.mk" line 210: newline in .for value
+make: "directive-for-escape.mk" line 226: newline in .for value
+make: "directive-for-escape.mk" line 226: newline in .for value
For: loop body with i = "
":
. info short: ${:U" "}
. info long: ${:U" "}
-make: "directive-for-escape.mk" line 211: short: " "
-make: "directive-for-escape.mk" line 212: long: " "
+make: "directive-for-escape.mk" line 227: short: " "
+make: "directive-for-escape.mk" line 228: long: " "
For: end for 1
For: loop body with i = "
":
For: end for 1
-Parse_PushInput: .for loop in directive-for-escape.mk, line 228
-make: "directive-for-escape.mk" line 228: newline in .for value
- in .for loop from directive-for-escape.mk:228 with i = "
+Parse_PushInput: .for loop in directive-for-escape.mk, line 244
+make: "directive-for-escape.mk" line 244: newline in .for value
+ in .for loop from directive-for-escape.mk:244 with i = "
"
For: loop body with i = "
":
: ${:U" "}
SetFilenameVars: ${.PARSEDIR} = <some-dir> ${.PARSEFILE} = `directive-for-escape.mk'
-Parsing line 229: : ${:U" "}
+Parsing line 245: : ${:U" "}
ParseDependency(: " ")
-ParseEOF: returning to file directive-for-escape.mk, line 231
+ParseEOF: returning to file directive-for-escape.mk, line 247
SetFilenameVars: ${.PARSEDIR} = <some-dir> ${.PARSEFILE} = `directive-for-escape.mk'
-Parsing line 231: .MAKEFLAGS: -d0
+Parsing line 247: .MAKEFLAGS: -d0
ParseDependency(.MAKEFLAGS: -d0)
For: end for 1
For: loop body with i = #:
@@ -143,6 +159,11 @@ For: loop body with i = ))):
# ${:U)))}
For: loop body with i = }}}:
# ${:U\}\}\}}
+For: end for 1
+For: loop body with , = 1:
+# $$i $i
+# VAR= $$i $i ${a:S,from${:U1}to,}
+VAR= $$i $i ${a:S,from${:U1}to,}
make: Fatal errors encountered -- cannot continue
make: stopped in unit-tests
exit status 1
diff -r b0052737b416 -r 8956aef5dc91 usr.bin/make/unit-tests/directive-for-escape.mk
--- a/usr.bin/make/unit-tests/directive-for-escape.mk Fri Jun 23 06:08:56 2023 +0000
+++ b/usr.bin/make/unit-tests/directive-for-escape.mk Fri Jun 23 06:11:06 2023 +0000
@@ -1,4 +1,4 @@
-# $NetBSD: directive-for-escape.mk,v 1.20 2023/06/01 20:56:35 rillig Exp $
+# $NetBSD: directive-for-escape.mk,v 1.21 2023/06/23 06:11:06 rillig Exp $
#
# Test escaping of special characters in the iteration values of a .for loop.
# These values get expanded later using the :U variable modifier, and this
@@ -44,12 +44,28 @@ VALUES= $$ $${V} $${V:=-with-modifier}
.for i in ${VALUES}
. info $i
.endfor
-# expect-2: $
-# expect-3: value
-# expect-4: value-with-modifier
+# expect: . info ${:U\$}
+# expect-3: $
+# expect: . info ${:U${V}}
+# expect-5: value
+# expect: . info ${:U${V:=-with-modifier}}
+# expect-7: value-with-modifier
+# expect: . info ${:U$(V)}
+# expect-9: value
+# expect: . info ${:U$(V:=-with-modifier)}
+# expect-11: value-with-modifier
+#
+# Providing the loop items directly has the same effect.
+.for i in $$ $${V} $${V:=-with-modifier} $$(V) $$(V:=-with-modifier)
+. info $i
+.endfor
+# expect: . info ${:U\$}
+# expect-3: $
+# expect: . info ${:U${V}}
# expect-5: value
# expect-6: value-with-modifier
-
+# expect-7: value
+# expect-8: value-with-modifier
# Try to cover the code for nested '{}' in ExprLen, without success.
#
@@ -256,6 +272,22 @@ closing-brace= } # guard against an
.for i in ((( {{{ ))) }}}
# $i
.endfor
-.MAKEFLAGS: -d0
+
-all:
+# When generating the body of a .for loop, recognizing the expressions is done
+# using simple heuristics. These can go wrong in ambiguous cases like this.
+# The variable name ',' is unusual as it is not a pronounceable name, but the
+# same principle applies for other names as well. In this case, the text '$,'
+# is replaced with the expression '${:U1}', even though the text does not
+# represent an expression.
+.for , in 1
+# $$i $i
+# VAR= $$i $i ${a:S,from$,to,}
+VAR= $$i $i ${a:S,from$,to,}
+.endfor
+# expect: # $$i $i
+# expect: # VAR= $$i $i ${a:S,from${:U1}to,}
+# expect: VAR= $$i $i ${a:S,from${:U1}to,}
+#
+# When the above variable is evaluated, make will complain about the
+# unfinished modifier ':S', as it is missing a comma.
Home |
Main Index |
Thread Index |
Old Index