Module Name:    src
Committed By:   rillig
Date:           Wed May 10 13:03:06 UTC 2023

Modified Files:
        src/distrib/sets/lists/tests: mi
        src/usr.bin/make/unit-tests: Makefile directive-for.exp
            directive-for.mk
Removed Files:
        src/usr.bin/make/unit-tests: forloop.exp forloop.mk

Log Message:
tests/make: clean up tests for .for loops

Most of the tests from forloop.mk were already in directive-for.mk.


To generate a diff of this commit:
cvs rdiff -u -r1.1259 -r1.1260 src/distrib/sets/lists/tests/mi
cvs rdiff -u -r1.334 -r1.335 src/usr.bin/make/unit-tests/Makefile
cvs rdiff -u -r1.16 -r1.17 src/usr.bin/make/unit-tests/directive-for.exp
cvs rdiff -u -r1.19 -r1.20 src/usr.bin/make/unit-tests/directive-for.mk
cvs rdiff -u -r1.4 -r0 src/usr.bin/make/unit-tests/forloop.exp
cvs rdiff -u -r1.7 -r0 src/usr.bin/make/unit-tests/forloop.mk

Please note that diffs are not public domain; they are subject to the
copyright notices on the relevant files.

Modified files:

Index: src/distrib/sets/lists/tests/mi
diff -u src/distrib/sets/lists/tests/mi:1.1259 src/distrib/sets/lists/tests/mi:1.1260
--- src/distrib/sets/lists/tests/mi:1.1259	Tue May  9 20:14:28 2023
+++ src/distrib/sets/lists/tests/mi	Wed May 10 13:03:06 2023
@@ -1,4 +1,4 @@
-# $NetBSD: mi,v 1.1259 2023/05/09 20:14:28 sjg Exp $
+# $NetBSD: mi,v 1.1260 2023/05/10 13:03:06 rillig Exp $
 #
 # Note: don't delete entries from here - mark them as "obsolete" instead.
 #
@@ -5746,8 +5746,8 @@
 ./usr/tests/usr.bin/make/unit-tests/export-variants.mk				tests-usr.bin-tests	compattestfile,atf
 ./usr/tests/usr.bin/make/unit-tests/export.exp					tests-usr.bin-tests	compattestfile,atf
 ./usr/tests/usr.bin/make/unit-tests/export.mk					tests-usr.bin-tests	compattestfile,atf
-./usr/tests/usr.bin/make/unit-tests/forloop.exp					tests-usr.bin-tests	compattestfile,atf
-./usr/tests/usr.bin/make/unit-tests/forloop.mk					tests-usr.bin-tests	compattestfile,atf
+./usr/tests/usr.bin/make/unit-tests/forloop.exp					tests-obsolete		obsolete,atf
+./usr/tests/usr.bin/make/unit-tests/forloop.mk					tests-obsolete		obsolete,atf
 ./usr/tests/usr.bin/make/unit-tests/forsubst.exp				tests-usr.bin-tests	compattestfile,atf
 ./usr/tests/usr.bin/make/unit-tests/forsubst.mk					tests-usr.bin-tests	compattestfile,atf
 ./usr/tests/usr.bin/make/unit-tests/gnode-submake.exp				tests-usr.bin-tests	compattestfile,atf

Index: src/usr.bin/make/unit-tests/Makefile
diff -u src/usr.bin/make/unit-tests/Makefile:1.334 src/usr.bin/make/unit-tests/Makefile:1.335
--- src/usr.bin/make/unit-tests/Makefile:1.334	Tue May  9 20:14:27 2023
+++ src/usr.bin/make/unit-tests/Makefile	Wed May 10 13:03:06 2023
@@ -1,4 +1,4 @@
-# $NetBSD: Makefile,v 1.334 2023/05/09 20:14:27 sjg Exp $
+# $NetBSD: Makefile,v 1.335 2023/05/10 13:03:06 rillig Exp $
 #
 # Unit tests for make(1)
 #
@@ -212,7 +212,6 @@ TESTS+=		export
 TESTS+=		export-all
 TESTS+=		export-env
 TESTS+=		export-variants
-TESTS+=		forloop
 TESTS+=		forsubst
 TESTS+=		gnode-submake
 TESTS+=		hanoi-include

Index: src/usr.bin/make/unit-tests/directive-for.exp
diff -u src/usr.bin/make/unit-tests/directive-for.exp:1.16 src/usr.bin/make/unit-tests/directive-for.exp:1.17
--- src/usr.bin/make/unit-tests/directive-for.exp:1.16	Tue May  9 19:43:12 2023
+++ src/usr.bin/make/unit-tests/directive-for.exp	Wed May 10 13:03:06 2023
@@ -15,16 +15,16 @@ make: "directive-for.mk" line 148: )( )(
 make: "directive-for.mk" line 148: ][ ][ ][
 make: "directive-for.mk" line 148: }{ }{ }{
 make: "directive-for.mk" line 168: invalid character ':' in .for loop variable name
-make: "directive-for.mk" line 174: invalid character '$' in .for loop variable name
-make: "directive-for.mk" line 179: invalid character '$' in .for loop variable name
-make: "directive-for.mk" line 188: Unknown modifier "Z"
-make: "directive-for.mk" line 189: XXX: Not reached word1
-make: "directive-for.mk" line 189: XXX: Not reached word3
-make: "directive-for.mk" line 196: no iteration variables in for
-make: "directive-for.mk" line 222: 1 open conditional
-make: "directive-for.mk" line 238: for-less endfor
-make: "directive-for.mk" line 239: if-less endif
-make: "directive-for.mk" line 247: if-less endif
+make: "directive-for.mk" line 175: invalid character '$' in .for loop variable name
+make: "directive-for.mk" line 187: invalid character '$' in .for loop variable name
+make: "directive-for.mk" line 198: Unknown modifier "Z"
+make: "directive-for.mk" line 199: XXX: Not reached word1
+make: "directive-for.mk" line 199: XXX: Not reached word3
+make: "directive-for.mk" line 206: no iteration variables in for
+make: "directive-for.mk" line 232: 1 open conditional
+make: "directive-for.mk" line 248: for-less endfor
+make: "directive-for.mk" line 249: if-less endif
+make: "directive-for.mk" line 257: if-less endif
 For: new loop 2
 For: end for 2
 For: end for 1
@@ -35,6 +35,7 @@ For: loop body:
    endfor
 For: end for 1
 For: loop body:
+make: "directive-for.mk" line 305: newline-item=(a)
 make: Fatal errors encountered -- cannot continue
 make: stopped in unit-tests
 exit status 1

Index: src/usr.bin/make/unit-tests/directive-for.mk
diff -u src/usr.bin/make/unit-tests/directive-for.mk:1.19 src/usr.bin/make/unit-tests/directive-for.mk:1.20
--- src/usr.bin/make/unit-tests/directive-for.mk:1.19	Tue May  9 19:43:12 2023
+++ src/usr.bin/make/unit-tests/directive-for.mk	Wed May 10 13:03:06 2023
@@ -1,4 +1,4 @@
-# $NetBSD: directive-for.mk,v 1.19 2023/05/09 19:43:12 rillig Exp $
+# $NetBSD: directive-for.mk,v 1.20 2023/05/10 13:03:06 rillig Exp $
 #
 # Tests for the .for directive.
 #
@@ -60,7 +60,7 @@ WORDS+=	counted
 # A noticeable effect of this implementation technique is that the .for
 # iteration variables and the normal global variables live in separate
 # namespaces and do not influence each other.  The "scope" of the .for loop
-# variables is restricted to the current makefile, it does not each over to
+# variables is restricted to the current makefile, it does not reach over to
 # any included makefiles.
 var=	value before
 var2=	value before
@@ -160,24 +160,34 @@ EXPANSION${plus}=	value
 # expect-12: ][ ][ ][
 # expect-13: }{ }{ }{
 
-# As of 2020-10-25, the variable names may contain arbitrary characters,
-# except for whitespace.  This allows for creative side effects. Hopefully
-# nobody is misusing this "feature".
+# Before 2023-05-09, the variable names could contain arbitrary characters,
+# except for whitespace, allowing for creative side effects, as usual for
+# arbitrary code injection.
 var=	outer
 # expect+1: invalid character ':' in .for loop variable name
 .for var:Q in value "quoted"
 .  info <${var}> <${var:Q}> <${var:Q:Q}>
 .endfor
-# The short expression '$$' is preserved, the long expressions are
-# substituted.
+
+# Before 2023-05-09, when variable names could contain '$', the short
+# expression '$$' was preserved, the long expressions were substituted.
 # expect+1: invalid character '$' in .for loop variable name
 .for $ in value
 .  info <$$> <${$}> <$($)>
 .endfor
-# From https://gnats.netbsd.org/53146.
+
+
+# https://gnats.netbsd.org/53146 mentions the idea of using a dynamic
+# variable name in .for loops, based on some other variable.  The .for loops
+# are already tricky enough to understand in detail, even without this
+# possibility, therefore the variable names are restricted to using harmless
+# characters only.
+INDIRECT=	direct
 # expect+1: invalid character '$' in .for loop variable name
-.for $(FOO) in a b
-.  info <$(FOO)> <$(foo)> <$($(FOO))>
+.for $(INDIRECT) in value
+# If the variable name could be chosen dynamically, the iteration variable
+# might have been 'direct', thereby expanding the expression '${direct}'.
+.  info <$(INDIRECT)> <$(direct)> <$($(INDIRECT))>
 .endfor
 
 
@@ -286,3 +296,12 @@ var=	outer
 .    error
 .  endif
 .endfor
+
+
+# Since at least 1993, iteration stops at the first newline.
+# Back then, the .newline variable didn't exist, therefore it was unlikely
+# that a newline ever occurred.
+.for var in a${.newline}b${.newline}c
+.  info newline-item=(${var})
+.endfor
+# expect-2: newline-item=(a)

Reply via email to