xref: /freebsd/contrib/bmake/unit-tests/counter.mk (revision c6989859ae9388eeb46a24fe88f9b8d07101c710)
1# $NetBSD: counter.mk,v 1.1 2020/08/02 14:53:02 rillig Exp $
2#
3# Demonstrates that it is not easily possible to let make count
4# the number of times a variable is actually accessed.
5#
6# As of 2020-08-02, the counter ends up at having 4 words, even
7# though the NEXT variable is only accessed 3 times.  This is
8# surprising.
9#
10# A hint to this surprising behavior is that the variables don't
11# get fully expanded.  For example, A does not simply contain the
12# value "1" but an additional unexpanded ${COUNTER:...} before it.
13
14RELEVANT=	yes (load-time part)	# just to filter the output
15
16COUNTER=	# zero
17
18NEXT=		${COUNTER::=${COUNTER} a}${COUNTER:[#]}
19
20# This variable is first set to empty and then expanded.
21# See parse.c, function Parse_DoVar, keyword "!Var_Exists".
22A:=		${NEXT}
23B:=		${NEXT}
24C:=		${NEXT}
25
26RELEVANT=	no
27
28all:
29	@: ${RELEVANT::=yes (run-time part)}
30	@echo A=${A:Q} B=${B:Q} C=${C:Q} COUNTER=${COUNTER:[#]:Q}
31	@: ${RELEVANT::=no}
32