139 lines
3.4 KiB
Makefile
139 lines
3.4 KiB
Makefile
|
# $NetBSD: sh-flags.mk,v 1.4 2020/12/12 12:19:18 rillig Exp $
|
||
|
#
|
||
|
# Tests for the effective RunFlags of a shell command (run/skip, echo/silent,
|
||
|
# error check, trace), which are controlled by 12 different switches. These
|
||
|
# switches interact in various non-obvious ways. To analyze the interactions,
|
||
|
# this test runs each possible combination of these switches, for now.
|
||
|
#
|
||
|
# As soon as an interaction of switches is identified as obvious and expected,
|
||
|
# this particular interaction may be removed from the test, to focus on the
|
||
|
# remaining ones.
|
||
|
#
|
||
|
# See also:
|
||
|
# Compat_RunCommand
|
||
|
# JobPrintSpecials
|
||
|
|
||
|
all: .PHONY
|
||
|
|
||
|
opt-ignerr.yes= -i
|
||
|
opt-jobs.yes= -j1
|
||
|
opt-loud.no= -d0 # side effect: make stdout unbuffered
|
||
|
opt-loud.yes= -dl # side effect: make stdout unbuffered
|
||
|
opt-no-action.yes= -n
|
||
|
opt-silent.yes= -s
|
||
|
opt-xtrace.yes= -dx
|
||
|
tgt-always.yes= .MAKE
|
||
|
tgt-ignerr.yes= .IGNORE
|
||
|
tgt-silent.yes= .SILENT
|
||
|
cmd-always.yes= +
|
||
|
cmd-ignerr.yes= -
|
||
|
cmd-silent.yes= @
|
||
|
|
||
|
letter.always.yes= a
|
||
|
letter.ignerr.yes= i
|
||
|
letter.jobs.yes= j
|
||
|
letter.loud.yes= l
|
||
|
letter.no-action.yes= n
|
||
|
letter.silent.yes= s
|
||
|
letter.xtrace.yes= x
|
||
|
|
||
|
.if !defined(OPT_TARGET)
|
||
|
.for opt-ignerr in no yes
|
||
|
.for opt-jobs in no yes
|
||
|
.for opt-loud in no yes
|
||
|
.for opt-no-action in no yes
|
||
|
# Only 'no', not 'yes', since job->echo is based trivially on opts.silent.
|
||
|
.for opt-silent in no
|
||
|
# Only 'no', not 'yes', since that would add uncontrollable output from
|
||
|
# reading /etc/profile or similar files.
|
||
|
.for opt-xtrace in no
|
||
|
|
||
|
target= opt-
|
||
|
target+= ${letter.ignerr.${opt-ignerr}:U_}
|
||
|
target+= ${letter.jobs.${opt-jobs}:U_}
|
||
|
target+= ${letter.loud.${opt-loud}:U_}
|
||
|
target+= ${letter.no-action.${opt-no-action}:U_}
|
||
|
target+= ${letter.silent.${opt-silent}:U_}
|
||
|
target+= ${letter.xtrace.${opt-xtrace}:U_}
|
||
|
|
||
|
.for target in ${target:ts}
|
||
|
|
||
|
MAKE_CMD.${target}= ${MAKE}
|
||
|
MAKE_CMD.${target}+= ${opt-ignerr.${opt-ignerr}}
|
||
|
MAKE_CMD.${target}+= ${opt-jobs.${opt-jobs}}
|
||
|
MAKE_CMD.${target}+= ${opt-loud.${opt-loud}}
|
||
|
MAKE_CMD.${target}+= ${opt-no-action.${opt-no-action}}
|
||
|
MAKE_CMD.${target}+= ${opt-silent.${opt-silent}}
|
||
|
MAKE_CMD.${target}+= ${opt-xtrace.${opt-xtrace}}
|
||
|
MAKE_CMD.${target}+= -f ${MAKEFILE}
|
||
|
MAKE_CMD.${target}+= OPT_TARGET=${target}
|
||
|
MAKE_CMD.${target}+= ${target}
|
||
|
|
||
|
all: ${target}
|
||
|
${target}: .PHONY
|
||
|
@${MAKE_CMD.${target}:M*}
|
||
|
|
||
|
.endfor
|
||
|
.endfor
|
||
|
.endfor
|
||
|
.endfor
|
||
|
.endfor
|
||
|
.endfor
|
||
|
.endfor
|
||
|
.endif
|
||
|
|
||
|
SILENT.yes= @
|
||
|
ALWAYS.yes= +
|
||
|
IGNERR.yes= -
|
||
|
|
||
|
.if defined(OPT_TARGET)
|
||
|
.for tgt-always in no yes
|
||
|
.for tgt-ignerr in no yes
|
||
|
.for tgt-silent in no yes
|
||
|
.for cmd-always in no yes
|
||
|
.for cmd-ignerr in no yes
|
||
|
.for cmd-silent in no yes
|
||
|
|
||
|
target= ${OPT_TARGET}-tgt-
|
||
|
target+= ${letter.always.${tgt-always}:U_}
|
||
|
target+= ${letter.ignerr.${tgt-ignerr}:U_}
|
||
|
target+= ${letter.silent.${tgt-silent}:U_}
|
||
|
target+= -cmd-
|
||
|
target+= ${letter.always.${cmd-always}:U_}
|
||
|
target+= ${letter.ignerr.${cmd-ignerr}:U_}
|
||
|
target+= ${letter.silent.${cmd-silent}:U_}
|
||
|
|
||
|
.for target in ${target:ts}
|
||
|
|
||
|
${OPT_TARGET}: .WAIT ${target} .WAIT
|
||
|
.if ${tgt-always} == yes
|
||
|
${target}: .MAKE
|
||
|
.endif
|
||
|
.if ${tgt-ignerr} == yes
|
||
|
${target}: .IGNORE
|
||
|
.endif
|
||
|
.if ${tgt-silent} == yes
|
||
|
${target}: .SILENT
|
||
|
.endif
|
||
|
|
||
|
RUNFLAGS.${target}= ${SILENT.${cmd-silent}}${ALWAYS.${cmd-always}}${IGNERR.${cmd-ignerr}}
|
||
|
.if ${OPT_TARGET:M*i*} || ${tgt-ignerr} == yes || ${cmd-ignerr} == yes
|
||
|
CMD.${target}= echo running; false
|
||
|
.else
|
||
|
CMD.${target}= echo running
|
||
|
.endif
|
||
|
|
||
|
${target}: .PHONY
|
||
|
@+echo hide-from-output
|
||
|
@+echo hide-from-output ${target}
|
||
|
${RUNFLAGS.${target}} ${CMD.${target}}
|
||
|
.endfor
|
||
|
|
||
|
.endfor
|
||
|
.endfor
|
||
|
.endfor
|
||
|
.endfor
|
||
|
.endfor
|
||
|
.endfor
|
||
|
.endif
|