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