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