xref: /netbsd-src/usr.bin/make/unit-tests/varname-dot-make-level.mk (revision 5402018e3550115703df567fdf1d09d372ea7f98)
1# $NetBSD: varname-dot-make-level.mk,v 1.5 2024/11/23 22:59:51 rillig Exp $
2#
3# Tests for the special .MAKE.LEVEL variable, which informs about the
4# recursion level.  It is related to the environment variable MAKELEVEL,
5# even though they don't have the same value.
6
7all: level_1 set-env
8
9level_1: .PHONY
10	@printf 'level 1: variable %s, env %s\n' ${.MAKE.LEVEL} "$$${.MAKE.LEVEL.ENV}"
11	@${MAKE} -f ${MAKEFILE} level_2
12
13level_2: .PHONY
14	@printf 'level 2: variable %s, env %s\n' ${.MAKE.LEVEL} "$$${.MAKE.LEVEL.ENV}"
15	@${MAKE} -f ${MAKEFILE} level_3
16
17level_3: .PHONY
18	@printf 'level 3: variable %s, env %s\n' ${.MAKE.LEVEL} "$$${.MAKE.LEVEL.ENV}"
19
20# The .unexport-env directive clears the environment, except for the
21# MAKE_LEVEL variable.
22.if make(level_2)
23.unexport-env
24.endif
25
26
27# expect: make: Cannot override read-only global variable ".MAKE.LEVEL.ENV" with a command line variable
28set-env:
29	@${MAKE} -f /dev/null .MAKE.LEVEL.ENV=MAKELEVEL
30