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