opt-file.mk revision 1.6 1 1.6 rillig # $NetBSD: opt-file.mk,v 1.6 2020/12/06 20:33:44 rillig Exp $
2 1.1 rillig #
3 1.2 rillig # Tests for the -f command line option.
4 1.1 rillig
5 1.1 rillig # TODO: Implementation
6 1.1 rillig
7 1.4 rillig all: .PHONY
8 1.4 rillig all: file-ending-in-backslash
9 1.4 rillig all: file-containing-null-byte
10 1.3 rillig
11 1.3 rillig # Passing '-' as the filename reads from stdin. This is unusual but possible.
12 1.3 rillig #
13 1.3 rillig # In the unlikely case where a file ends in a backslash instead of a newline,
14 1.3 rillig # that backslash is trimmed. See ParseGetLine.
15 1.3 rillig file-ending-in-backslash: .PHONY
16 1.4 rillig @printf '%s' 'VAR=value\' \
17 1.4 rillig | ${MAKE} -r -f - -v VAR
18 1.4 rillig
19 1.4 rillig # If a file contains null bytes, the rest of the line is skipped, and parsing
20 1.5 rillig # continues in the next line. Throughout the history of make, the behavior
21 1.5 rillig # has changed several times, sometimes knowingly, sometimes by accident.
22 1.5 rillig #
23 1.5 rillig # echo 'VAR=value' | tr 'l' '\0' > zero-byte.in
24 1.5 rillig # printf '%s\n' 'all:' ': VAR=${VAR:Q}' >> zero-byte.in
25 1.5 rillig #
26 1.5 rillig # for year in $(seq 2003 2020); do
27 1.5 rillig # echo $year:
28 1.5 rillig # make-$year.01.01.00.00.00 -r -f zero-byte.in
29 1.5 rillig # echo "exit status $?"
30 1.5 rillig # echo
31 1.5 rillig # done 2>&1 \
32 1.5 rillig # | sed "s,$PWD/,.,"
33 1.5 rillig #
34 1.5 rillig # This program generated the following output:
35 1.5 rillig #
36 1.5 rillig # 2003 to 2007:
37 1.5 rillig # exit status 0
38 1.5 rillig #
39 1.5 rillig # 2008 to 2010:
40 1.5 rillig # make: "zero-byte.in" line 1: Zero byte read from file
41 1.5 rillig # make: Fatal errors encountered -- cannot continue
42 1.5 rillig #
43 1.5 rillig # make: stopped in .
44 1.5 rillig # exit status 1
45 1.5 rillig #
46 1.5 rillig # 2011 to 2013:
47 1.5 rillig # make: no target to make.
48 1.5 rillig #
49 1.5 rillig # make: stopped in .
50 1.5 rillig # exit status 2
51 1.5 rillig #
52 1.6 rillig # 2014 to 2020-12-06:
53 1.5 rillig # make: "zero-byte.in" line 1: warning: Zero byte read from file, skipping rest of line.
54 1.5 rillig # exit status 0
55 1.4 rillig #
56 1.6 rillig # Since 2020-12-07:
57 1.6 rillig # make: "zero-byte.in" line 1: Zero byte read from file
58 1.6 rillig # make: Fatal errors encountered -- cannot continue
59 1.6 rillig # make: stopped in .
60 1.6 rillig # exit status 1
61 1.4 rillig file-containing-null-byte: .PHONY
62 1.4 rillig @printf '%s\n' 'VAR=value' 'VAR2=VALUE2' \
63 1.4 rillig | tr 'l' '\0' \
64 1.4 rillig | ${MAKE} -r -f - -v VAR -v VAR2
65 1.3 rillig
66 1.1 rillig all:
67 1.6 rillig : Making ${.TARGET}
68