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