sh-flags.mk revision 1.1 1 1.1 rillig # $NetBSD: sh-flags.mk,v 1.1 2020/12/10 17:06:13 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.no= # none
85 1.1 rillig SILENT.yes= @
86 1.1 rillig ALWAYS.no= # none
87 1.1 rillig ALWAYS.yes= +
88 1.1 rillig IGNERR.no= echo running
89 1.1 rillig IGNERR.yes= -echo running; false
90 1.1 rillig
91 1.1 rillig .if defined(OPT_TARGET)
92 1.1 rillig .for tgt-always in no yes
93 1.1 rillig .for tgt-ignerr in no yes
94 1.1 rillig .for tgt-silent in no yes
95 1.1 rillig .for cmd-always in no yes
96 1.1 rillig .for cmd-ignerr in no yes
97 1.1 rillig .for cmd-silent in no yes
98 1.1 rillig
99 1.1 rillig target= ${OPT_TARGET}-tgt-
100 1.1 rillig target+= ${letter.always.${tgt-always}:U_}
101 1.1 rillig target+= ${letter.ignerr.${tgt-ignerr}:U_}
102 1.1 rillig target+= ${letter.silent.${tgt-silent}:U_}
103 1.1 rillig target+= -cmd-
104 1.1 rillig target+= ${letter.always.${cmd-always}:U_}
105 1.1 rillig target+= ${letter.ignerr.${cmd-ignerr}:U_}
106 1.1 rillig target+= ${letter.silent.${cmd-silent}:U_}
107 1.1 rillig
108 1.1 rillig .for target in ${target:ts}
109 1.1 rillig ${OPT_TARGET}: .WAIT ${target} .WAIT
110 1.1 rillig .if ${tgt-always} == yes
111 1.1 rillig ${target}: .MAKE
112 1.1 rillig .endif
113 1.1 rillig .if ${tgt-ignerr} == yes
114 1.1 rillig ${target}: .IGNORE
115 1.1 rillig .endif
116 1.1 rillig .if ${tgt-silent} == yes
117 1.1 rillig ${target}: .SILENT
118 1.1 rillig .endif
119 1.1 rillig ${target}: .PHONY
120 1.1 rillig @+echo hide-from-output ${target}
121 1.1 rillig ${SILENT.${cmd-silent}}${ALWAYS.${cmd-always}}${IGNERR.${cmd-ignerr}}
122 1.1 rillig @+echo hide-from-output
123 1.1 rillig .endfor
124 1.1 rillig
125 1.1 rillig .endfor
126 1.1 rillig .endfor
127 1.1 rillig .endfor
128 1.1 rillig .endfor
129 1.1 rillig .endfor
130 1.1 rillig .endfor
131 1.1 rillig .endif
132