varname-dot-make-level.mk revision 1.5 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
7 all: level_1 set-env
8
9 level_1: .PHONY
10 @printf 'level 1: variable %s, env %s\n' ${.MAKE.LEVEL} "$$${.MAKE.LEVEL.ENV}"
11 @${MAKE} -f ${MAKEFILE} level_2
12
13 level_2: .PHONY
14 @printf 'level 2: variable %s, env %s\n' ${.MAKE.LEVEL} "$$${.MAKE.LEVEL.ENV}"
15 @${MAKE} -f ${MAKEFILE} level_3
16
17 level_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
28 set-env:
29 @${MAKE} -f /dev/null .MAKE.LEVEL.ENV=MAKELEVEL
30