cmdline.mk revision 1.5 1 # $NetBSD: cmdline.mk,v 1.5 2024/04/23 22:51:28 rillig Exp $
2 #
3 # Tests for command line parsing and related special variables.
4
5 TMPBASE?= ${TMPDIR:U/tmp/uid${.MAKE.UID}}
6 SUB1= a7b41170-53f8-4cc2-bc5c-e4c3dd93ec45 # just a random UUID
7 SUB2= 6a8899d2-d227-4b55-9b6b-f3c8eeb83fd5 # just a random UUID
8 MAKE_CMD= env TMPBASE=${TMPBASE}/${SUB1} ${.MAKE} -f ${MAKEFILE} -r
9 DIR2= ${TMPBASE}/${SUB2}
10 DIR12= ${TMPBASE}/${SUB1}/${SUB2}
11
12 all: prepare-dirs
13 all: makeobjdir-direct makeobjdir-indirect
14 all: space-and-comment
15
16 prepare-dirs:
17 @rm -rf ${DIR2} ${DIR12}
18 @mkdir -p ${DIR2} ${DIR12}
19
20 # The .OBJDIR can be set via the MAKEOBJDIR command line variable.
21 # It must be a command line variable; an environment variable would not work.
22 makeobjdir-direct:
23 @echo $@:
24 @${MAKE_CMD} MAKEOBJDIR=${DIR2} show-objdir
25
26 # The .OBJDIR can be set via the MAKEOBJDIR command line variable,
27 # and expressions based on that variable can contain the usual modifiers.
28 # Since the .OBJDIR=MAKEOBJDIR assignment happens very early,
29 # the SUB2 variable in the modifier is not defined yet and is therefore empty.
30 # The SUB1 in the resulting path comes from the environment variable TMPBASE,
31 # see MAKE_CMD.
32 makeobjdir-indirect:
33 @echo $@:
34 @${MAKE_CMD} MAKEOBJDIR='$${TMPBASE}/$${SUB2}' show-objdir
35
36 show-objdir:
37 @echo $@: ${.OBJDIR:Q}
38
39
40 # Variable assignments in the command line are handled differently from
41 # variable assignments in makefiles. In the command line, trailing whitespace
42 # is preserved, and the '#' does not start a comment. This is because the
43 # low-level parsing from ParseRawLine does not take place.
44 #
45 # Preserving '#' and trailing whitespace has the benefit that when passing
46 # such values to sub-makes via MAKEFLAGS, no special encoding is needed.
47 # Leading whitespace in the variable value is discarded though, which makes
48 # the behavior inconsistent.
49 space-and-comment: .PHONY
50 @echo $@:
51
52 @env -i \
53 ${MAKE} -r -f /dev/null ' VAR= value # no comment ' -v VAR \
54 | sed 's,$$,$$,'
55
56 @env -i MAKEFLAGS="' VAR= value # no comment '" \
57 ${MAKE} -r -f /dev/null -v VAR \
58 | sed 's,$$,$$,'
59