1# $NetBSD: cmdline-undefined.mk,v 1.3 2023/06/01 20:56:35 rillig Exp $
2#
3# Tests for undefined variable expressions in the command line.
4
5all:
6	# When the command line is parsed, variable assignments using the
7	# '=' assignment operator do get their variable name expanded
8	# (which probably occurs rarely in practice, if at all), but their
9	# variable value is not expanded, as usual.
10	#
11	@echo 'The = assignment operator'
12	@${.MAKE} -f ${MAKEFILE} print-undefined \
13		CMDLINE='Undefined is $${UNDEFINED}.'
14	@echo
15
16	# The interesting case is using the ':=' assignment operator, which
17	# expands its right-hand side.  But only those variables that are
18	# defined.
19	@echo 'The := assignment operator'
20	@${.MAKE} -f ${MAKEFILE} print-undefined \
21		CMDLINE:='Undefined is $${UNDEFINED}.'
22	@echo
23
24.if make(print-undefined)
25
26.MAKEFLAGS: MAKEFLAGS_ASSIGN='Undefined is $${UNDEFINED}.'
27.MAKEFLAGS: MAKEFLAGS_SUBST:='Undefined is $${UNDEFINED}.'
28
29# expect+2: From the command line: Undefined is .
30# expect+1: From the command line: Undefined is .
31.info From the command line: ${CMDLINE}
32# expect+2: From .MAKEFLAGS '=': Undefined is .
33# expect+1: From .MAKEFLAGS '=': Undefined is .
34.info From .MAKEFLAGS '=': ${MAKEFLAGS_ASSIGN}
35# expect+2: From .MAKEFLAGS ':=': Undefined is .
36# expect+1: From .MAKEFLAGS ':=': Undefined is .
37.info From .MAKEFLAGS ':=': ${MAKEFLAGS_SUBST}
38
39UNDEFINED?=	now defined
40
41# expect+2: From the command line: Undefined is now defined.
42# expect+1: From the command line: Undefined is now defined.
43.info From the command line: ${CMDLINE}
44# expect+2: From .MAKEFLAGS '=': Undefined is now defined.
45# expect+1: From .MAKEFLAGS '=': Undefined is now defined.
46.info From .MAKEFLAGS '=': ${MAKEFLAGS_ASSIGN}
47# expect+2: From .MAKEFLAGS ':=': Undefined is now defined.
48# expect+1: From .MAKEFLAGS ':=': Undefined is now defined.
49.info From .MAKEFLAGS ':=': ${MAKEFLAGS_SUBST}
50
51print-undefined:
52.endif
53