sh-flags.mk revision 1.4 1 1.4 rillig # $NetBSD: sh-flags.mk,v 1.4 2020/12/12 12:19:18 rillig Exp $
2 1.1 rillig #
3 1.1 rillig # Tests for the effective RunFlags of a shell command (run/skip, echo/silent,
4 1.1 rillig # error check, trace), which are controlled by 12 different switches. These
5 1.1 rillig # switches interact in various non-obvious ways. To analyze the interactions,
6 1.1 rillig # this test runs each possible combination of these switches, for now.
7 1.1 rillig #
8 1.1 rillig # As soon as an interaction of switches is identified as obvious and expected,
9 1.1 rillig # this particular interaction may be removed from the test, to focus on the
10 1.1 rillig # remaining ones.
11 1.1 rillig #
12 1.1 rillig # See also:
13 1.1 rillig # Compat_RunCommand
14 1.1 rillig # JobPrintSpecials
15 1.1 rillig
16 1.1 rillig all: .PHONY
17 1.1 rillig
18 1.1 rillig opt-ignerr.yes= -i
19 1.1 rillig opt-jobs.yes= -j1
20 1.1 rillig opt-loud.no= -d0 # side effect: make stdout unbuffered
21 1.1 rillig opt-loud.yes= -dl # side effect: make stdout unbuffered
22 1.1 rillig opt-no-action.yes= -n
23 1.1 rillig opt-silent.yes= -s
24 1.1 rillig opt-xtrace.yes= -dx
25 1.1 rillig tgt-always.yes= .MAKE
26 1.1 rillig tgt-ignerr.yes= .IGNORE
27 1.1 rillig tgt-silent.yes= .SILENT
28 1.1 rillig cmd-always.yes= +
29 1.1 rillig cmd-ignerr.yes= -
30 1.1 rillig cmd-silent.yes= @
31 1.1 rillig
32 1.1 rillig letter.always.yes= a
33 1.1 rillig letter.ignerr.yes= i
34 1.1 rillig letter.jobs.yes= j
35 1.1 rillig letter.loud.yes= l
36 1.1 rillig letter.no-action.yes= n
37 1.1 rillig letter.silent.yes= s
38 1.1 rillig letter.xtrace.yes= x
39 1.1 rillig
40 1.1 rillig .if !defined(OPT_TARGET)
41 1.1 rillig .for opt-ignerr in no yes
42 1.1 rillig .for opt-jobs in no yes
43 1.1 rillig .for opt-loud in no yes
44 1.1 rillig .for opt-no-action in no yes
45 1.4 rillig # Only 'no', not 'yes', since job->echo is based trivially on opts.silent.
46 1.4 rillig .for opt-silent in no
47 1.1 rillig # Only 'no', not 'yes', since that would add uncontrollable output from
48 1.1 rillig # reading /etc/profile or similar files.
49 1.1 rillig .for opt-xtrace in no
50 1.1 rillig
51 1.1 rillig target= opt-
52 1.1 rillig target+= ${letter.ignerr.${opt-ignerr}:U_}
53 1.1 rillig target+= ${letter.jobs.${opt-jobs}:U_}
54 1.1 rillig target+= ${letter.loud.${opt-loud}:U_}
55 1.1 rillig target+= ${letter.no-action.${opt-no-action}:U_}
56 1.1 rillig target+= ${letter.silent.${opt-silent}:U_}
57 1.1 rillig target+= ${letter.xtrace.${opt-xtrace}:U_}
58 1.1 rillig
59 1.1 rillig .for target in ${target:ts}
60 1.1 rillig
61 1.1 rillig MAKE_CMD.${target}= ${MAKE}
62 1.1 rillig MAKE_CMD.${target}+= ${opt-ignerr.${opt-ignerr}}
63 1.1 rillig MAKE_CMD.${target}+= ${opt-jobs.${opt-jobs}}
64 1.1 rillig MAKE_CMD.${target}+= ${opt-loud.${opt-loud}}
65 1.1 rillig MAKE_CMD.${target}+= ${opt-no-action.${opt-no-action}}
66 1.1 rillig MAKE_CMD.${target}+= ${opt-silent.${opt-silent}}
67 1.1 rillig MAKE_CMD.${target}+= ${opt-xtrace.${opt-xtrace}}
68 1.1 rillig MAKE_CMD.${target}+= -f ${MAKEFILE}
69 1.1 rillig MAKE_CMD.${target}+= OPT_TARGET=${target}
70 1.1 rillig MAKE_CMD.${target}+= ${target}
71 1.1 rillig
72 1.1 rillig all: ${target}
73 1.1 rillig ${target}: .PHONY
74 1.1 rillig @${MAKE_CMD.${target}:M*}
75 1.1 rillig
76 1.1 rillig .endfor
77 1.1 rillig .endfor
78 1.1 rillig .endfor
79 1.1 rillig .endfor
80 1.1 rillig .endfor
81 1.1 rillig .endfor
82 1.1 rillig .endfor
83 1.1 rillig .endif
84 1.1 rillig
85 1.1 rillig SILENT.yes= @
86 1.1 rillig ALWAYS.yes= +
87 1.2 rillig IGNERR.yes= -
88 1.1 rillig
89 1.1 rillig .if defined(OPT_TARGET)
90 1.1 rillig .for tgt-always in no yes
91 1.1 rillig .for tgt-ignerr in no yes
92 1.1 rillig .for tgt-silent in no yes
93 1.1 rillig .for cmd-always in no yes
94 1.1 rillig .for cmd-ignerr in no yes
95 1.1 rillig .for cmd-silent in no yes
96 1.1 rillig
97 1.1 rillig target= ${OPT_TARGET}-tgt-
98 1.1 rillig target+= ${letter.always.${tgt-always}:U_}
99 1.1 rillig target+= ${letter.ignerr.${tgt-ignerr}:U_}
100 1.1 rillig target+= ${letter.silent.${tgt-silent}:U_}
101 1.1 rillig target+= -cmd-
102 1.1 rillig target+= ${letter.always.${cmd-always}:U_}
103 1.1 rillig target+= ${letter.ignerr.${cmd-ignerr}:U_}
104 1.1 rillig target+= ${letter.silent.${cmd-silent}:U_}
105 1.1 rillig
106 1.1 rillig .for target in ${target:ts}
107 1.2 rillig
108 1.1 rillig ${OPT_TARGET}: .WAIT ${target} .WAIT
109 1.1 rillig .if ${tgt-always} == yes
110 1.1 rillig ${target}: .MAKE
111 1.1 rillig .endif
112 1.1 rillig .if ${tgt-ignerr} == yes
113 1.1 rillig ${target}: .IGNORE
114 1.1 rillig .endif
115 1.4 rillig .if ${tgt-silent} == yes
116 1.1 rillig ${target}: .SILENT
117 1.1 rillig .endif
118 1.2 rillig
119 1.2 rillig RUNFLAGS.${target}= ${SILENT.${cmd-silent}}${ALWAYS.${cmd-always}}${IGNERR.${cmd-ignerr}}
120 1.2 rillig .if ${OPT_TARGET:M*i*} || ${tgt-ignerr} == yes || ${cmd-ignerr} == yes
121 1.2 rillig CMD.${target}= echo running; false
122 1.2 rillig .else
123 1.2 rillig CMD.${target}= echo running
124 1.2 rillig .endif
125 1.2 rillig
126 1.1 rillig ${target}: .PHONY
127 1.2 rillig @+echo hide-from-output
128 1.1 rillig @+echo hide-from-output ${target}
129 1.2 rillig ${RUNFLAGS.${target}} ${CMD.${target}}
130 1.1 rillig .endfor
131 1.1 rillig
132 1.1 rillig .endfor
133 1.1 rillig .endfor
134 1.1 rillig .endfor
135 1.1 rillig .endfor
136 1.1 rillig .endfor
137 1.1 rillig .endfor
138 1.1 rillig .endif
139