Module Name: src Committed By: rillig Date: Tue Nov 30 23:52:19 UTC 2021
Modified Files: src/usr.bin/make/unit-tests: var-op-expand.exp var-op-expand.mk varmisc.mk varmod-defined.mk varmod-loop-varname.exp varmod-loop-varname.mk varmod-loop.exp varmod-loop.mk varname-dot-make-save_dollars.mk Log Message: tests/make: test and document .MAKE.SAVE_DOLLARS and ':=' To generate a diff of this commit: cvs rdiff -u -r1.5 -r1.6 src/usr.bin/make/unit-tests/var-op-expand.exp cvs rdiff -u -r1.14 -r1.15 src/usr.bin/make/unit-tests/var-op-expand.mk cvs rdiff -u -r1.30 -r1.31 src/usr.bin/make/unit-tests/varmisc.mk cvs rdiff -u -r1.11 -r1.12 src/usr.bin/make/unit-tests/varmod-defined.mk cvs rdiff -u -r1.2 -r1.3 src/usr.bin/make/unit-tests/varmod-loop-varname.exp \ src/usr.bin/make/unit-tests/varmod-loop-varname.mk \ src/usr.bin/make/unit-tests/varname-dot-make-save_dollars.mk cvs rdiff -u -r1.10 -r1.11 src/usr.bin/make/unit-tests/varmod-loop.exp cvs rdiff -u -r1.15 -r1.16 src/usr.bin/make/unit-tests/varmod-loop.mk Please note that diffs are not public domain; they are subject to the copyright notices on the relevant files.
Modified files: Index: src/usr.bin/make/unit-tests/var-op-expand.exp diff -u src/usr.bin/make/unit-tests/var-op-expand.exp:1.5 src/usr.bin/make/unit-tests/var-op-expand.exp:1.6 --- src/usr.bin/make/unit-tests/var-op-expand.exp:1.5 Sat Nov 20 17:47:33 2021 +++ src/usr.bin/make/unit-tests/var-op-expand.exp Tue Nov 30 23:52:19 2021 @@ -1,7 +1,7 @@ -make: "var-op-expand.mk" line 259: Unknown modifier "s,value,replaced," -make: "var-op-expand.mk" line 262: warning: XXX Neither branch should be taken. -make: "var-op-expand.mk" line 267: Unknown modifier "s,value,replaced," +make: "var-op-expand.mk" line 265: Unknown modifier "s,value,replaced," make: "var-op-expand.mk" line 268: warning: XXX Neither branch should be taken. +make: "var-op-expand.mk" line 273: Unknown modifier "s,value,replaced," +make: "var-op-expand.mk" line 274: warning: XXX Neither branch should be taken. make: Fatal errors encountered -- cannot continue make: stopped in unit-tests exit status 1 Index: src/usr.bin/make/unit-tests/var-op-expand.mk diff -u src/usr.bin/make/unit-tests/var-op-expand.mk:1.14 src/usr.bin/make/unit-tests/var-op-expand.mk:1.15 --- src/usr.bin/make/unit-tests/var-op-expand.mk:1.14 Sat Nov 20 17:47:33 2021 +++ src/usr.bin/make/unit-tests/var-op-expand.mk Tue Nov 30 23:52:19 2021 @@ -1,8 +1,14 @@ -# $NetBSD: var-op-expand.mk,v 1.14 2021/11/20 17:47:33 rillig Exp $ +# $NetBSD: var-op-expand.mk,v 1.15 2021/11/30 23:52:19 rillig Exp $ # # Tests for the := variable assignment operator, which expands its # right-hand side. +# +# See also: +# varname-dot-make-save_dollars.mk +# Force the test results to be independent of the default value of this +# setting, which is 'yes' for NetBSD's usr.bin/make but 'no' for the bmake +# distribution and pkgsrc/devel/bmake. .MAKE.SAVE_DOLLARS:= yes # If the right-hand side does not contain a dollar sign, the ':=' assignment Index: src/usr.bin/make/unit-tests/varmisc.mk diff -u src/usr.bin/make/unit-tests/varmisc.mk:1.30 src/usr.bin/make/unit-tests/varmisc.mk:1.31 --- src/usr.bin/make/unit-tests/varmisc.mk:1.30 Thu Feb 4 21:42:47 2021 +++ src/usr.bin/make/unit-tests/varmisc.mk Tue Nov 30 23:52:19 2021 @@ -1,4 +1,4 @@ -# $NetBSD: varmisc.mk,v 1.30 2021/02/04 21:42:47 rillig Exp $ +# $NetBSD: varmisc.mk,v 1.31 2021/11/30 23:52:19 rillig Exp $ # # Miscellaneous variable tests. @@ -65,7 +65,7 @@ cmpv: @echo Literal=3.4.5 == ${3.4.5:L:${M_cmpv}} @echo We have ${${.TARGET:T}.only} -# catch misshandling of nested vars in .for loop +# catch mishandling of nested variables in .for loop MAN= MAN1= make.1 .for s in 1 2 @@ -77,12 +77,13 @@ MAN+= ${MAN$s} manok: @echo MAN=${MAN} +# Test parsing of boolean values. # begin .MAKE.SAVE_DOLLARS; see Var_SetWithFlags and ParseBoolean. SD_VALUES= 0 1 2 False True false true Yes No yes no On Off ON OFF on off SD_4_DOLLARS= $$$$ .for val in ${SD_VALUES} -.MAKE.SAVE_DOLLARS:= ${val} # Must be := since a simple = has no effect. +.MAKE.SAVE_DOLLARS:= ${val} # Must be := since a simple '=' has no effect. SD.${val}:= ${SD_4_DOLLARS} .endfor .MAKE.SAVE_DOLLARS:= yes @@ -91,6 +92,7 @@ save-dollars: .for val in ${SD_VALUES} @printf '%s: %-8s = %s\n' $@ ${val} ${SD.${val}:Q} .endfor +# end .MAKE.SAVE_DOLLARS # Appending to an undefined variable does not add a space in front. .undef APPENDED Index: src/usr.bin/make/unit-tests/varmod-defined.mk diff -u src/usr.bin/make/unit-tests/varmod-defined.mk:1.11 src/usr.bin/make/unit-tests/varmod-defined.mk:1.12 --- src/usr.bin/make/unit-tests/varmod-defined.mk:1.11 Sun Apr 11 13:35:56 2021 +++ src/usr.bin/make/unit-tests/varmod-defined.mk Tue Nov 30 23:52:19 2021 @@ -1,8 +1,11 @@ -# $NetBSD: varmod-defined.mk,v 1.11 2021/04/11 13:35:56 rillig Exp $ +# $NetBSD: varmod-defined.mk,v 1.12 2021/11/30 23:52:19 rillig Exp $ # # Tests for the :D variable modifier, which returns the given string # if the variable is defined. It is closely related to the :U modifier. +# Force the test results to be independent of the default value of this +# setting, which is 'yes' for NetBSD's usr.bin/make but 'no' for the bmake +# distribution and pkgsrc/devel/bmake. .MAKE.SAVE_DOLLARS= yes DEF= defined Index: src/usr.bin/make/unit-tests/varmod-loop-varname.exp diff -u src/usr.bin/make/unit-tests/varmod-loop-varname.exp:1.2 src/usr.bin/make/unit-tests/varmod-loop-varname.exp:1.3 --- src/usr.bin/make/unit-tests/varmod-loop-varname.exp:1.2 Sun Apr 4 13:35:26 2021 +++ src/usr.bin/make/unit-tests/varmod-loop-varname.exp Tue Nov 30 23:52:19 2021 @@ -1,11 +1,11 @@ -make: "varmod-loop-varname.mk" line 13: In the :@ modifier of "", the variable name "${:Ubar:S,b,v,}" must not contain a dollar. -make: "varmod-loop-varname.mk" line 13: Malformed conditional (${:Uone two three:@${:Ubar:S,b,v,}@+${var}+@} != "+one+ +two+ +three+") -make: "varmod-loop-varname.mk" line 80: In the :@ modifier of "1 2 3", the variable name "v$" must not contain a dollar. -make: "varmod-loop-varname.mk" line 80: Malformed conditional (${1 2 3:L:@v$@($v)@} != "(1) (2) (3)") -make: "varmod-loop-varname.mk" line 85: In the :@ modifier of "1 2 3", the variable name "v$$" must not contain a dollar. -make: "varmod-loop-varname.mk" line 85: Malformed conditional (${1 2 3:L:@v$$@($v)@} != "() () ()") -make: "varmod-loop-varname.mk" line 90: In the :@ modifier of "1 2 3", the variable name "v$$$" must not contain a dollar. -make: "varmod-loop-varname.mk" line 90: Malformed conditional (${1 2 3:L:@v$$$@($v)@} != "() () ()") +make: "varmod-loop-varname.mk" line 16: In the :@ modifier of "", the variable name "${:Ubar:S,b,v,}" must not contain a dollar. +make: "varmod-loop-varname.mk" line 16: Malformed conditional (${:Uone two three:@${:Ubar:S,b,v,}@+${var}+@} != "+one+ +two+ +three+") +make: "varmod-loop-varname.mk" line 83: In the :@ modifier of "1 2 3", the variable name "v$" must not contain a dollar. +make: "varmod-loop-varname.mk" line 83: Malformed conditional (${1 2 3:L:@v$@($v)@} != "(1) (2) (3)") +make: "varmod-loop-varname.mk" line 88: In the :@ modifier of "1 2 3", the variable name "v$$" must not contain a dollar. +make: "varmod-loop-varname.mk" line 88: Malformed conditional (${1 2 3:L:@v$$@($v)@} != "() () ()") +make: "varmod-loop-varname.mk" line 93: In the :@ modifier of "1 2 3", the variable name "v$$$" must not contain a dollar. +make: "varmod-loop-varname.mk" line 93: Malformed conditional (${1 2 3:L:@v$$$@($v)@} != "() () ()") make: Fatal errors encountered -- cannot continue make: stopped in unit-tests exit status 1 Index: src/usr.bin/make/unit-tests/varmod-loop-varname.mk diff -u src/usr.bin/make/unit-tests/varmod-loop-varname.mk:1.2 src/usr.bin/make/unit-tests/varmod-loop-varname.mk:1.3 --- src/usr.bin/make/unit-tests/varmod-loop-varname.mk:1.2 Sun Apr 4 13:35:26 2021 +++ src/usr.bin/make/unit-tests/varmod-loop-varname.mk Tue Nov 30 23:52:19 2021 @@ -1,8 +1,11 @@ -# $NetBSD: varmod-loop-varname.mk,v 1.2 2021/04/04 13:35:26 rillig Exp $ +# $NetBSD: varmod-loop-varname.mk,v 1.3 2021/11/30 23:52:19 rillig Exp $ # # Tests for the first part of the variable modifier ':@var@...@', which # contains the variable name to use during the loop. +# Force the test results to be independent of the default value of this +# setting, which is 'yes' for NetBSD's usr.bin/make but 'no' for the bmake +# distribution and pkgsrc/devel/bmake. .MAKE.SAVE_DOLLARS= yes Index: src/usr.bin/make/unit-tests/varname-dot-make-save_dollars.mk diff -u src/usr.bin/make/unit-tests/varname-dot-make-save_dollars.mk:1.2 src/usr.bin/make/unit-tests/varname-dot-make-save_dollars.mk:1.3 --- src/usr.bin/make/unit-tests/varname-dot-make-save_dollars.mk:1.2 Sun Aug 16 14:25:16 2020 +++ src/usr.bin/make/unit-tests/varname-dot-make-save_dollars.mk Tue Nov 30 23:52:19 2021 @@ -1,8 +1,59 @@ -# $NetBSD: varname-dot-make-save_dollars.mk,v 1.2 2020/08/16 14:25:16 rillig Exp $ +# $NetBSD: varname-dot-make-save_dollars.mk,v 1.3 2021/11/30 23:52:19 rillig Exp $ # -# Tests for the special .MAKE.SAVE_DOLLARS variable. +# Tests for the special .MAKE.SAVE_DOLLARS variable, which controls whether +# the assignment operator ':=' converts '$$' to a single '$' or keeps it +# as-is. +# +# See also: +# var-op-expand.mk +# varmisc.mk for the boolean values + +# Initially, the variable .MAKE.SAVE_DOLLARS is undefined. At this point the +# behavior of the assignment operator ':=' depends. NetBSD's usr.bin/make +# preserves the '$$' as-is, while the bmake distribution replaces '$$' with +# '$'. +.if ${.MAKE.SAVE_DOLLARS:Uundefined} != "undefined" +. error +.endif + + +# Even when dollars are preserved, it only applies to literal dollars, not +# those that come indirectly from other expressions. +.MAKE.SAVE_DOLLARS= yes +DOLLARS= $$$$$$$$ +VAR:= ${DOLLARS} +# The reduction from 8 '$' to 4 '$' happens when ${VAR} is evaluated in the +# condition; .MAKE.SAVE_DOLLARS only applies to the operator ':='. +.if ${VAR} != "\$\$\$\$" +. error +.endif + +# Dollars from the literal value are preserved now. +.MAKE.SAVE_DOLLARS= yes +VAR:= $$$$$$$$ +.if ${VAR} != "\$\$\$\$" +. error +.endif + +.MAKE.SAVE_DOLLARS= no +VAR:= $$$$$$$$ +.if ${VAR} != "\$\$" +. error +.endif + +# It's even possible to change the dollar interpretation in the middle of +# evaluating an expression, even though there is no practical need for it. +.MAKE.SAVE_DOLLARS= no +VAR:= $$$$-${.MAKE.SAVE_DOLLARS::=yes}-$$$$ +.if ${VAR} != "\$--\$\$" +. error +.endif -# TODO: Implementation +# The '$' from the ':U' expressions are indirect, therefore SAVE_DOLLARS +# doesn't apply to them. +VAR:= ${:U\$\$\$\$}-${.MAKE.SAVE_DOLLARS::=yes}-${:U\$\$\$\$} +.if ${VAR} != "\$\$--\$\$" +. error +.endif all: - @:; Index: src/usr.bin/make/unit-tests/varmod-loop.exp diff -u src/usr.bin/make/unit-tests/varmod-loop.exp:1.10 src/usr.bin/make/unit-tests/varmod-loop.exp:1.11 --- src/usr.bin/make/unit-tests/varmod-loop.exp:1.10 Sun Apr 4 13:20:52 2021 +++ src/usr.bin/make/unit-tests/varmod-loop.exp Tue Nov 30 23:52:19 2021 @@ -1,10 +1,10 @@ -ParseReadLine (75): 'USE_8_DOLLARS= ${:U1:@var@${8_DOLLARS}@} ${8_DOLLARS} $$$$$$$$' +ParseReadLine (78): 'USE_8_DOLLARS= ${:U1:@var@${8_DOLLARS}@} ${8_DOLLARS} $$$$$$$$' CondParser_Eval: ${USE_8_DOLLARS} != "\$\$\$\$ \$\$\$\$ \$\$\$\$" lhs = "$$$$ $$$$ $$$$", rhs = "$$$$ $$$$ $$$$", op = != -ParseReadLine (80): 'SUBST_CONTAINING_LOOP:= ${USE_8_DOLLARS}' +ParseReadLine (83): 'SUBST_CONTAINING_LOOP:= ${USE_8_DOLLARS}' CondParser_Eval: ${SUBST_CONTAINING_LOOP} != "\$\$ \$\$\$\$ \$\$\$\$" lhs = "$$ $$$$ $$$$", rhs = "$$ $$$$ $$$$", op = != -ParseReadLine (105): '.MAKEFLAGS: -d0' +ParseReadLine (108): '.MAKEFLAGS: -d0' ParseDependency(.MAKEFLAGS: -d0) :varname-overwriting-target: :x1y x2y x3y: :: mod-loop-dollar:1: Index: src/usr.bin/make/unit-tests/varmod-loop.mk diff -u src/usr.bin/make/unit-tests/varmod-loop.mk:1.15 src/usr.bin/make/unit-tests/varmod-loop.mk:1.16 --- src/usr.bin/make/unit-tests/varmod-loop.mk:1.15 Sun Apr 11 13:35:56 2021 +++ src/usr.bin/make/unit-tests/varmod-loop.mk Tue Nov 30 23:52:19 2021 @@ -1,7 +1,10 @@ -# $NetBSD: varmod-loop.mk,v 1.15 2021/04/11 13:35:56 rillig Exp $ +# $NetBSD: varmod-loop.mk,v 1.16 2021/11/30 23:52:19 rillig Exp $ # # Tests for the :@var@...${var}...@ variable modifier. +# Force the test results to be independent of the default value of this +# setting, which is 'yes' for NetBSD's usr.bin/make but 'no' for the bmake +# distribution and pkgsrc/devel/bmake. .MAKE.SAVE_DOLLARS= yes all: varname-overwriting-target