1# $NetBSD: vardebug.mk,v 1.8 2023/06/01 20:56:35 rillig Exp $
2#
3# Demonstrates the debugging output for var.c.
4
5.MAKEFLAGS: -dv FROM_CMDLINE=
6
7VAR=		added		# VarAdd
8VAR=		overwritten	# Var_Set
9.undef VAR			# Var_Delete (found)
10.undef VAR			# Var_Delete (not found)
11
12# The variable with the empty name cannot be set at all.
13${:U}=		empty name	# Var_Set
14${:U}+=		empty name	# Var_Append
15
16FROM_CMDLINE=	overwritten	# Var_Set (ignored)
17
18VAR=		1
19VAR+=		2
20VAR+=		3
21
22.if ${VAR:M[2]}			# ModifyWord_Match
23.endif
24.if ${VAR:N[2]}			# ModifyWord_NoMatch (no debug output)
25.endif
26
27.if ${VAR:S,2,two,}		# ParseModifierPart
28.endif
29
30.if ${VAR:Q}			# VarQuote
31.endif
32
33.if ${VAR:tu:tl:Q}		# ApplyModifiers
34.endif
35
36# ApplyModifiers, "Got ..."
37.if ${:Uvalue:${:UM*e}:Mvalu[e]}
38.endif
39
40.undef ${:UVAR}			# Var_Delete
41
42# When ApplyModifiers results in an error, this appears in the debug log
43# as "is error", without surrounding quotes.
44# expect+2: Malformed conditional (${:Uvariable:unknown})
45# expect+1: Unknown modifier "unknown"
46.if ${:Uvariable:unknown}
47.endif
48
49# XXX: The error message is "Malformed conditional", which is wrong.
50# The condition is syntactically fine, it just contains an undefined variable.
51#
52# There is a specialized error message for "Undefined variable", but as of
53# 2020-08-08, that is not covered by any unit tests.  It might even be
54# unreachable.
55# expect+1: Malformed conditional (${UNDEFINED})
56.if ${UNDEFINED}
57.endif
58
59# By default, .SHELL is not defined and thus can be set.  As soon as it is
60# accessed, it is initialized in the command line scope (during VarFind),
61# where it is set to read-only.  Assigning to it is ignored.
62.MAKEFLAGS: .SHELL=overwritten
63
64.MAKEFLAGS: -d0
65
66all:
67	@:
68