diff options
Diffstat (limited to 'unit-tests/var-recursive.mk')
-rw-r--r-- | unit-tests/var-recursive.mk | 49 |
1 files changed, 49 insertions, 0 deletions
diff --git a/unit-tests/var-recursive.mk b/unit-tests/var-recursive.mk new file mode 100644 index 000000000000..da1fb696d655 --- /dev/null +++ b/unit-tests/var-recursive.mk @@ -0,0 +1,49 @@ +# $NetBSD: var-recursive.mk,v 1.2 2020/10/31 13:45:00 rillig Exp $ +# +# Tests for variable expressions that refer to themselves and thus +# cannot be evaluated. + +TESTS= direct indirect conditional short + +# Since make exits immediately when it detects a recursive expression, +# the actual tests are run in sub-makes. +TEST?= # none +.if ${TEST} == "" +all: +.for test in ${TESTS} + @${.MAKE} -f ${MAKEFILE} TEST=${test} || : +.endfor + +.elif ${TEST} == direct + +DIRECT= ${DIRECT} # Defining a recursive variable is not yet an error. +. info still there # Therefore this line is printed. +. info ${DIRECT} # But expanding the variable is an error. + +.elif ${TEST} == indirect + +# The chain of variables that refer to each other may be long. +INDIRECT1= ${INDIRECT2} +INDIRECT2= ${INDIRECT1} +. info ${INDIRECT1} + +.elif ${TEST} == conditional + +# The variable refers to itself, but only in the branch of a condition that +# is never satisfied and is thus not evaluated. +CONDITIONAL= ${1:?ok:${CONDITIONAL}} +. info ${CONDITIONAL} + +.elif ${TEST} == short + +# Short variable names can be expanded using the short-hand $V notation, +# which takes a different code path in Var_Parse for parsing the variable +# name. Ensure that these are checked as well. +V= $V +. info $V + +.else +. error Unknown test "${TEST}" +.endif + +all: |