1# $NetBSD: var-recursive.mk,v 1.2 2020/10/31 13:45:00 rillig Exp $
2#
3# Tests for variable expressions that refer to themselves and thus
4# cannot be evaluated.
5
6TESTS=	direct indirect conditional short
7
8# Since make exits immediately when it detects a recursive expression,
9# the actual tests are run in sub-makes.
10TEST?=	# none
11.if ${TEST} == ""
12all:
13.for test in ${TESTS}
14	@${.MAKE} -f ${MAKEFILE} TEST=${test} || :
15.endfor
16
17.elif ${TEST} == direct
18
19DIRECT=	${DIRECT}	# Defining a recursive variable is not yet an error.
20.  info still there	# Therefore this line is printed.
21.  info ${DIRECT}	# But expanding the variable is an error.
22
23.elif ${TEST} == indirect
24
25# The chain of variables that refer to each other may be long.
26INDIRECT1=	${INDIRECT2}
27INDIRECT2=	${INDIRECT1}
28.  info ${INDIRECT1}
29
30.elif ${TEST} == conditional
31
32# The variable refers to itself, but only in the branch of a condition that
33# is never satisfied and is thus not evaluated.
34CONDITIONAL=	${1:?ok:${CONDITIONAL}}
35.  info ${CONDITIONAL}
36
37.elif ${TEST} == short
38
39# Short variable names can be expanded using the short-hand $V notation,
40# which takes a different code path in Var_Parse for parsing the variable
41# name.  Ensure that these are checked as well.
42V=	$V
43.  info $V
44
45.else
46.  error Unknown test "${TEST}"
47.endif
48
49all:
50