sh-flags.mk revision 1.2 1 1.2 rillig # $NetBSD: sh-flags.mk,v 1.2 2020/12/10 17:55:30 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.1 rillig .for opt-silent in no yes
46 1.1 rillig # Only 'no', not 'yes', since that would add uncontrollable output from
47 1.1 rillig # reading /etc/profile or similar files.
48 1.1 rillig .for opt-xtrace in no
49 1.1 rillig
50 1.1 rillig target= opt-
51 1.1 rillig target+= ${letter.ignerr.${opt-ignerr}:U_}
52 1.1 rillig target+= ${letter.jobs.${opt-jobs}:U_}
53 1.1 rillig target+= ${letter.loud.${opt-loud}:U_}
54 1.1 rillig target+= ${letter.no-action.${opt-no-action}:U_}
55 1.1 rillig target+= ${letter.silent.${opt-silent}:U_}
56 1.1 rillig target+= ${letter.xtrace.${opt-xtrace}:U_}
57 1.1 rillig
58 1.1 rillig .for target in ${target:ts}
59 1.1 rillig
60 1.1 rillig MAKE_CMD.${target}= ${MAKE}
61 1.1 rillig MAKE_CMD.${target}+= ${opt-ignerr.${opt-ignerr}}
62 1.1 rillig MAKE_CMD.${target}+= ${opt-jobs.${opt-jobs}}
63 1.1 rillig MAKE_CMD.${target}+= ${opt-loud.${opt-loud}}
64 1.1 rillig MAKE_CMD.${target}+= ${opt-no-action.${opt-no-action}}
65 1.1 rillig MAKE_CMD.${target}+= ${opt-silent.${opt-silent}}
66 1.1 rillig MAKE_CMD.${target}+= ${opt-xtrace.${opt-xtrace}}
67 1.1 rillig MAKE_CMD.${target}+= -f ${MAKEFILE}
68 1.1 rillig MAKE_CMD.${target}+= OPT_TARGET=${target}
69 1.1 rillig MAKE_CMD.${target}+= ${target}
70 1.1 rillig
71 1.1 rillig all: ${target}
72 1.1 rillig ${target}: .PHONY
73 1.1 rillig @${MAKE_CMD.${target}:M*}
74 1.1 rillig
75 1.1 rillig .endfor
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 .endif
83 1.1 rillig
84 1.1 rillig SILENT.yes= @
85 1.1 rillig ALWAYS.yes= +
86 1.2 rillig IGNERR.yes= -
87 1.1 rillig
88 1.1 rillig .if defined(OPT_TARGET)
89 1.1 rillig .for tgt-always in no yes
90 1.1 rillig .for tgt-ignerr in no yes
91 1.1 rillig .for tgt-silent in no yes
92 1.1 rillig .for cmd-always in no yes
93 1.1 rillig .for cmd-ignerr in no yes
94 1.1 rillig .for cmd-silent in no yes
95 1.1 rillig
96 1.1 rillig target= ${OPT_TARGET}-tgt-
97 1.1 rillig target+= ${letter.always.${tgt-always}:U_}
98 1.1 rillig target+= ${letter.ignerr.${tgt-ignerr}:U_}
99 1.1 rillig target+= ${letter.silent.${tgt-silent}:U_}
100 1.1 rillig target+= -cmd-
101 1.1 rillig target+= ${letter.always.${cmd-always}:U_}
102 1.1 rillig target+= ${letter.ignerr.${cmd-ignerr}:U_}
103 1.1 rillig target+= ${letter.silent.${cmd-silent}:U_}
104 1.1 rillig
105 1.1 rillig .for target in ${target:ts}
106 1.2 rillig
107 1.1 rillig ${OPT_TARGET}: .WAIT ${target} .WAIT
108 1.1 rillig .if ${tgt-always} == yes
109 1.1 rillig ${target}: .MAKE
110 1.1 rillig .endif
111 1.1 rillig .if ${tgt-ignerr} == yes
112 1.1 rillig ${target}: .IGNORE
113 1.1 rillig .endif
114 1.1 rillig .if ${tgt-silent} == yes
115 1.1 rillig ${target}: .SILENT
116 1.1 rillig .endif
117 1.2 rillig
118 1.2 rillig RUNFLAGS.${target}= ${SILENT.${cmd-silent}}${ALWAYS.${cmd-always}}${IGNERR.${cmd-ignerr}}
119 1.2 rillig .if ${OPT_TARGET:M*i*} || ${tgt-ignerr} == yes || ${cmd-ignerr} == yes
120 1.2 rillig CMD.${target}= echo running; false
121 1.2 rillig .else
122 1.2 rillig CMD.${target}= echo running
123 1.2 rillig .endif
124 1.2 rillig
125 1.1 rillig ${target}: .PHONY
126 1.2 rillig @+echo hide-from-output
127 1.1 rillig @+echo hide-from-output ${target}
128 1.2 rillig ${RUNFLAGS.${target}} ${CMD.${target}}
129 1.1 rillig .endfor
130 1.1 rillig
131 1.1 rillig .endfor
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 .endif
138