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