Home | History | Annotate | Line # | Download | only in unit-tests
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