Module Name: src Committed By: rillig Date: Thu Sep 3 19:50:15 UTC 2020
Modified Files: src/usr.bin/make/unit-tests: dep-var.exp dep-var.mk Log Message: make(1): add test for expansion of indirect variables in dependencies To generate a diff of this commit: cvs rdiff -u -r1.2 -r1.3 src/usr.bin/make/unit-tests/dep-var.exp \ src/usr.bin/make/unit-tests/dep-var.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/dep-var.exp diff -u src/usr.bin/make/unit-tests/dep-var.exp:1.2 src/usr.bin/make/unit-tests/dep-var.exp:1.3 --- src/usr.bin/make/unit-tests/dep-var.exp:1.2 Thu Sep 3 19:10:56 2020 +++ src/usr.bin/make/unit-tests/dep-var.exp Thu Sep 3 19:50:14 2020 @@ -1,3 +1,4 @@ def2 a-def2-b +1-2-NDIRECT_2-2-1 exit status 0 Index: src/usr.bin/make/unit-tests/dep-var.mk diff -u src/usr.bin/make/unit-tests/dep-var.mk:1.2 src/usr.bin/make/unit-tests/dep-var.mk:1.3 --- src/usr.bin/make/unit-tests/dep-var.mk:1.2 Thu Sep 3 19:10:56 2020 +++ src/usr.bin/make/unit-tests/dep-var.mk Thu Sep 3 19:50:14 2020 @@ -1,4 +1,4 @@ -# $NetBSD: dep-var.mk,v 1.2 2020/09/03 19:10:56 rillig Exp $ +# $NetBSD: dep-var.mk,v 1.3 2020/09/03 19:50:14 rillig Exp $ # # Tests for variable references in dependency declarations. # @@ -26,8 +26,40 @@ all: $${DEF2} a-$${DEF2}-b # The variable expression ${UNDEF3} simply expands to an empty string. all: $${UNDEF3} +# Try out how many levels of indirection are really expanded in dependency +# lines. +# +# The first level of indirection is the $$ in the dependency line. +# When the dependency line is parsed, it is resolved to the string +# "${INDIRECT_1}". At this point, the dollar is just an ordinary character, +# waiting to be expanded at some later point. +# +# Later, in SuffExpandChildren, that expression is expanded again by calling +# Var_Parse, and this time, the result is the string "1-2-${INDIRECT_2}-2-1". +# +# This string is not expanded anymore by Var_Parse. But there is another +# effect. Now DirExpandCurly comes into play and expands the curly braces +# in this filename pattern, resulting in the string "1-2-$INDIRECT_2-2-1". +# As of 2020-09-03, the test dir.mk contains further details on this topic. +# +# Finally, this string is assigned to the local ${.TARGET} variable. This +# variable is expanded when the shell command is generated. At that point, +# the $I is expanded. Since the variable I is not defined, it expands to +# the empty string. This way, the final output is the string +# "1-2-NDIRECT_2-2-1", which differs from the actual name of the target. +# For exactly this reason, it is not recommended to use dollar signs in +# target names. +# +# The number of actual expansions is way more than one might expect, +# therefore this feature is probably not widely used. +# +all: 1-$${INDIRECT_1}-1 +INDIRECT_1= 2-$${INDIRECT_2}-2 +INDIRECT_2= 3-$${INDIRECT_3}-3 +INDIRECT_3= indirect + UNDEF1= undef1 DEF2= def2 -undef1 def2 a-def2-b: - @echo ${.TARGET} +undef1 def2 a-def2-b 1-2-$$INDIRECT_2-2-1: + @echo ${.TARGET:Q}