Home | History | Annotate | Line # | Download | only in unit-tests
Makefile revision 1.93
      1  1.93  rillig # $NetBSD: Makefile,v 1.93 2020/08/16 12:07:51 rillig Exp $
      2   1.1     sjg #
      3   1.1     sjg # Unit tests for make(1)
      4  1.60  rillig #
      5   1.1     sjg # The main targets are:
      6   1.1     sjg #
      7  1.60  rillig # all:
      8  1.60  rillig #	run all the tests
      9  1.60  rillig # test:
     10  1.60  rillig #	run 'all', and compare to expected results
     11  1.60  rillig # accept:
     12  1.60  rillig #	move generated output to expected results
     13  1.60  rillig #
     14  1.61  rillig # Settable variables
     15  1.61  rillig #
     16  1.61  rillig # TEST_MAKE
     17  1.61  rillig #	The make program to be tested.
     18  1.61  rillig #
     19  1.60  rillig #
     20  1.60  rillig # Adding a test case
     21  1.60  rillig #
     22  1.11     sjg # Each feature should get its own set of tests in its own suitably
     23  1.42     apb # named makefile (*.mk), with its own set of expected results (*.exp),
     24  1.61  rillig # and it should be added to the TESTS list.
     25  1.60  rillig #
     26  1.60  rillig # Any added files must also be added to src/distrib/sets/lists/tests/mi.
     27  1.78  rillig # To do that, just run "make sync-mi" in this directory.
     28  1.78  rillig #
     29  1.78  rillig # A few *.mk files are helper files for other tests (such as include-sub.mk)
     30  1.78  rillig # and are thus not added to TESTS.  Such files must be ignored in
     31  1.78  rillig # src/tests/usr.bin/make/t_make.sh.
     32  1.60  rillig #
     33   1.1     sjg 
     34  1.61  rillig # Each test is in a sub-makefile.
     35  1.61  rillig # Keep the list sorted.
     36  1.92  rillig # Any test that is commented out must be ignored in
     37  1.92  rillig # src/tests/usr.bin/make/t_make.sh as well.
     38  1.92  rillig TESTS+=		# archive	# broken on FreeBSD, enabled in t_make.sh
     39  1.75  rillig TESTS+=		cmdline
     40  1.61  rillig TESTS+=		comment
     41  1.93  rillig TESTS+=		cond-cmp-numeric
     42  1.93  rillig TESTS+=		cond-cmp-string
     43  1.93  rillig TESTS+=		cond-func-commands
     44  1.93  rillig TESTS+=		cond-func-defined
     45  1.93  rillig TESTS+=		cond-func-empty
     46  1.93  rillig TESTS+=		cond-func-exists
     47  1.93  rillig TESTS+=		cond-func-make
     48  1.93  rillig TESTS+=		cond-func-target
     49  1.61  rillig TESTS+=		cond-late
     50  1.93  rillig TESTS+=		cond-op
     51  1.93  rillig TESTS+=		cond-op-and
     52  1.93  rillig TESTS+=		cond-op-not
     53  1.93  rillig TESTS+=		cond-op-or
     54  1.93  rillig TESTS+=		cond-op-parentheses
     55  1.61  rillig TESTS+=		cond-short
     56  1.93  rillig TESTS+=		cond-token-number
     57  1.93  rillig TESTS+=		cond-token-plain
     58  1.93  rillig TESTS+=		cond-token-string
     59  1.93  rillig TESTS+=		cond-token-var
     60  1.61  rillig TESTS+=		cond1
     61  1.61  rillig TESTS+=		cond2
     62  1.81  rillig TESTS+=		counter
     63  1.93  rillig TESTS+=		dep
     64  1.93  rillig TESTS+=		dep-colon
     65  1.93  rillig TESTS+=		dep-double-colon
     66  1.93  rillig TESTS+=		dep-exclam
     67  1.93  rillig TESTS+=		dep-wildcards
     68  1.93  rillig TESTS+=		depsrc
     69  1.93  rillig TESTS+=		depsrc-exec
     70  1.93  rillig TESTS+=		depsrc-ignore
     71  1.93  rillig TESTS+=		depsrc-made
     72  1.93  rillig TESTS+=		depsrc-make
     73  1.93  rillig TESTS+=		depsrc-meta
     74  1.93  rillig TESTS+=		depsrc-nometa
     75  1.93  rillig TESTS+=		depsrc-nometa_cmp
     76  1.93  rillig TESTS+=		depsrc-nopath
     77  1.93  rillig TESTS+=		depsrc-notmain
     78  1.93  rillig TESTS+=		depsrc-optional
     79  1.93  rillig TESTS+=		depsrc-phony
     80  1.93  rillig TESTS+=		depsrc-precious
     81  1.93  rillig TESTS+=		depsrc-recursive
     82  1.93  rillig TESTS+=		depsrc-silent
     83  1.93  rillig TESTS+=		depsrc-use
     84  1.93  rillig TESTS+=		depsrc-usebefore
     85  1.93  rillig TESTS+=		depsrc-wait
     86  1.93  rillig TESTS+=		deptgt
     87  1.93  rillig TESTS+=		deptgt-begin
     88  1.93  rillig TESTS+=		deptgt-default
     89  1.93  rillig TESTS+=		deptgt-delete_on_error
     90  1.93  rillig TESTS+=		deptgt-end
     91  1.93  rillig TESTS+=		deptgt-error
     92  1.93  rillig TESTS+=		deptgt-ignore
     93  1.93  rillig TESTS+=		deptgt-interrupt
     94  1.93  rillig TESTS+=		deptgt-main
     95  1.93  rillig TESTS+=		deptgt-makeflags
     96  1.93  rillig TESTS+=		deptgt-no_parallel
     97  1.93  rillig TESTS+=		deptgt-nopath
     98  1.93  rillig TESTS+=		deptgt-notparallel
     99  1.93  rillig TESTS+=		deptgt-objdir
    100  1.93  rillig TESTS+=		deptgt-order
    101  1.93  rillig TESTS+=		deptgt-path
    102  1.93  rillig TESTS+=		deptgt-path-suffix
    103  1.93  rillig TESTS+=		deptgt-phony
    104  1.93  rillig TESTS+=		deptgt-precious
    105  1.93  rillig TESTS+=		deptgt-shell
    106  1.93  rillig TESTS+=		deptgt-silent
    107  1.93  rillig TESTS+=		deptgt-stale
    108  1.93  rillig TESTS+=		deptgt-suffixes
    109  1.77  rillig TESTS+=		dir
    110  1.93  rillig TESTS+=		directive
    111  1.93  rillig TESTS+=		directive-elif
    112  1.93  rillig TESTS+=		directive-elifdef
    113  1.93  rillig TESTS+=		directive-elifmake
    114  1.93  rillig TESTS+=		directive-elifndef
    115  1.93  rillig TESTS+=		directive-elifnmake
    116  1.93  rillig TESTS+=		directive-else
    117  1.93  rillig TESTS+=		directive-endif
    118  1.93  rillig TESTS+=		directive-error
    119  1.93  rillig TESTS+=		directive-export
    120  1.93  rillig TESTS+=		directive-export-env
    121  1.93  rillig TESTS+=		directive-export-literal
    122  1.93  rillig TESTS+=		directive-if
    123  1.93  rillig TESTS+=		directive-ifdef
    124  1.93  rillig TESTS+=		directive-ifmake
    125  1.93  rillig TESTS+=		directive-ifndef
    126  1.93  rillig TESTS+=		directive-ifnmake
    127  1.93  rillig TESTS+=		directive-info
    128  1.93  rillig TESTS+=		directive-undef
    129  1.93  rillig TESTS+=		directive-unexport
    130  1.93  rillig TESTS+=		directive-unexport-env
    131  1.93  rillig TESTS+=		directive-warning
    132  1.70  rillig TESTS+=		directives
    133  1.61  rillig TESTS+=		dollar
    134  1.61  rillig TESTS+=		doterror
    135  1.61  rillig TESTS+=		dotwait
    136  1.64  rillig TESTS+=		envfirst
    137  1.61  rillig TESTS+=		error
    138  1.63     sjg TESTS+=		# escape	# broken by reverting POSIX changes
    139  1.61  rillig TESTS+=		export
    140  1.61  rillig TESTS+=		export-all
    141  1.61  rillig TESTS+=		export-env
    142  1.89  rillig TESTS+=		export-variants
    143  1.61  rillig TESTS+=		forloop
    144  1.61  rillig TESTS+=		forsubst
    145  1.61  rillig TESTS+=		hash
    146  1.86  rillig TESTS+=		impsrc
    147  1.61  rillig TESTS+=		include-main
    148  1.83  rillig TESTS+=		lint
    149  1.90  rillig TESTS+=		make-exported
    150  1.61  rillig TESTS+=		misc
    151  1.61  rillig TESTS+=		moderrs
    152  1.61  rillig TESTS+=		modmatch
    153  1.61  rillig TESTS+=		modmisc
    154  1.61  rillig TESTS+=		modorder
    155  1.61  rillig TESTS+=		modts
    156  1.61  rillig TESTS+=		modword
    157  1.93  rillig TESTS+=		opt
    158  1.93  rillig TESTS+=		opt-backwards
    159  1.93  rillig TESTS+=		opt-chdir
    160  1.93  rillig TESTS+=		opt-debug
    161  1.93  rillig TESTS+=		opt-define
    162  1.93  rillig TESTS+=		opt-env
    163  1.93  rillig TESTS+=		opt-file
    164  1.93  rillig TESTS+=		opt-ignore
    165  1.93  rillig TESTS+=		opt-include-dir
    166  1.93  rillig TESTS+=		opt-jobs
    167  1.93  rillig TESTS+=		opt-jobs-internal
    168  1.93  rillig TESTS+=		opt-keep-going
    169  1.93  rillig TESTS+=		opt-m-include-dir
    170  1.93  rillig TESTS+=		opt-no-action
    171  1.93  rillig TESTS+=		opt-no-action-at-all
    172  1.93  rillig TESTS+=		opt-query
    173  1.93  rillig TESTS+=		opt-raw
    174  1.93  rillig TESTS+=		opt-silent
    175  1.93  rillig TESTS+=		opt-touch
    176  1.93  rillig TESTS+=		opt-tracefile
    177  1.93  rillig TESTS+=		opt-var-expanded
    178  1.93  rillig TESTS+=		opt-var-literal
    179  1.93  rillig TESTS+=		opt-warnings-as-errors
    180  1.93  rillig TESTS+=		opt-where-am-i
    181  1.93  rillig TESTS+=		opt-x-reduce-exported
    182  1.61  rillig TESTS+=		order
    183  1.88  rillig TESTS+=		phony-end
    184  1.61  rillig TESTS+=		posix
    185  1.63     sjg TESTS+=		# posix1	# broken by reverting POSIX changes
    186  1.61  rillig TESTS+=		qequals
    187  1.84  rillig TESTS+=		recursive
    188  1.93  rillig TESTS+=		sh
    189  1.93  rillig TESTS+=		sh-jobs
    190  1.93  rillig TESTS+=		sh-jobs-error
    191  1.93  rillig TESTS+=		sh-leading-at
    192  1.93  rillig TESTS+=		sh-leading-hyphen
    193  1.93  rillig TESTS+=		sh-leading-plus
    194  1.93  rillig TESTS+=		sh-meta-chars
    195  1.93  rillig TESTS+=		sh-multi-line
    196  1.93  rillig TESTS+=		sh-single-line
    197  1.88  rillig TESTS+=		# suffixes	# runs into an endless loop (try -dA)
    198  1.61  rillig TESTS+=		sunshcmd
    199  1.61  rillig TESTS+=		sysv
    200  1.61  rillig TESTS+=		ternary
    201  1.61  rillig TESTS+=		unexport
    202  1.61  rillig TESTS+=		unexport-env
    203  1.91  rillig TESTS+=		use-inference
    204  1.93  rillig TESTS+=		var-class
    205  1.93  rillig TESTS+=		var-class-cmdline
    206  1.93  rillig TESTS+=		var-class-env
    207  1.93  rillig TESTS+=		var-class-global
    208  1.93  rillig TESTS+=		var-class-local
    209  1.93  rillig TESTS+=		var-class-local-legacy
    210  1.93  rillig TESTS+=		var-op
    211  1.93  rillig TESTS+=		var-op-append
    212  1.93  rillig TESTS+=		var-op-assign
    213  1.93  rillig TESTS+=		var-op-default
    214  1.93  rillig TESTS+=		var-op-expand
    215  1.93  rillig TESTS+=		var-op-shell
    216  1.61  rillig TESTS+=		varcmd
    217  1.64  rillig TESTS+=		vardebug
    218  1.64  rillig TESTS+=		varfind
    219  1.61  rillig TESTS+=		varmisc
    220  1.93  rillig TESTS+=		varmod
    221  1.93  rillig TESTS+=		varmod-assign
    222  1.93  rillig TESTS+=		varmod-defined
    223  1.61  rillig TESTS+=		varmod-edge
    224  1.93  rillig TESTS+=		varmod-exclam-shell
    225  1.93  rillig TESTS+=		varmod-extension
    226  1.93  rillig TESTS+=		varmod-gmtime
    227  1.93  rillig TESTS+=		varmod-hash
    228  1.93  rillig TESTS+=		varmod-head
    229  1.93  rillig TESTS+=		varmod-ifelse
    230  1.93  rillig TESTS+=		varmod-l-name-to-value
    231  1.93  rillig TESTS+=		varmod-localtime
    232  1.93  rillig TESTS+=		varmod-loop
    233  1.93  rillig TESTS+=		varmod-match
    234  1.93  rillig TESTS+=		varmod-no-match
    235  1.93  rillig TESTS+=		varmod-order
    236  1.93  rillig TESTS+=		varmod-order-reverse
    237  1.93  rillig TESTS+=		varmod-order-shuffle
    238  1.93  rillig TESTS+=		varmod-path
    239  1.93  rillig TESTS+=		varmod-quote
    240  1.93  rillig TESTS+=		varmod-quote-dollar
    241  1.93  rillig TESTS+=		varmod-range
    242  1.93  rillig TESTS+=		varmod-remember
    243  1.93  rillig TESTS+=		varmod-root
    244  1.93  rillig TESTS+=		varmod-select-words
    245  1.93  rillig TESTS+=		varmod-shell
    246  1.93  rillig TESTS+=		varmod-subst
    247  1.93  rillig TESTS+=		varmod-subst-regex
    248  1.93  rillig TESTS+=		varmod-sysv
    249  1.93  rillig TESTS+=		varmod-tail
    250  1.93  rillig TESTS+=		varmod-to-abs
    251  1.93  rillig TESTS+=		varmod-to-lower
    252  1.93  rillig TESTS+=		varmod-to-many-words
    253  1.93  rillig TESTS+=		varmod-to-one-word
    254  1.93  rillig TESTS+=		varmod-to-separator
    255  1.93  rillig TESTS+=		varmod-to-upper
    256  1.93  rillig TESTS+=		varmod-undefined
    257  1.93  rillig TESTS+=		varmod-unique
    258  1.93  rillig TESTS+=		varname
    259  1.93  rillig TESTS+=		varname-dollar
    260  1.93  rillig TESTS+=		varname-dot-alltargets
    261  1.93  rillig TESTS+=		varname-dot-curdir
    262  1.93  rillig TESTS+=		varname-dot-includedfromdir
    263  1.93  rillig TESTS+=		varname-dot-includedfromfile
    264  1.93  rillig TESTS+=		varname-dot-make-dependfile
    265  1.93  rillig TESTS+=		varname-dot-make-expand_variables
    266  1.93  rillig TESTS+=		varname-dot-make-exported
    267  1.93  rillig TESTS+=		varname-dot-make-jobs
    268  1.93  rillig TESTS+=		varname-dot-make-jobs-prefix
    269  1.93  rillig TESTS+=		varname-dot-make-level
    270  1.93  rillig TESTS+=		varname-dot-make-makefile_preference
    271  1.93  rillig TESTS+=		varname-dot-make-makefiles
    272  1.93  rillig TESTS+=		varname-dot-make-meta-bailiwick
    273  1.93  rillig TESTS+=		varname-dot-make-meta-created
    274  1.93  rillig TESTS+=		varname-dot-make-meta-files
    275  1.93  rillig TESTS+=		varname-dot-make-meta-ignore_filter
    276  1.93  rillig TESTS+=		varname-dot-make-meta-ignore_paths
    277  1.93  rillig TESTS+=		varname-dot-make-meta-ignore_patterns
    278  1.93  rillig TESTS+=		varname-dot-make-meta-prefix
    279  1.93  rillig TESTS+=		varname-dot-make-mode
    280  1.93  rillig TESTS+=		varname-dot-make-path_filemon
    281  1.93  rillig TESTS+=		varname-dot-make-pid
    282  1.93  rillig TESTS+=		varname-dot-make-ppid
    283  1.93  rillig TESTS+=		varname-dot-make-save_dollars
    284  1.93  rillig TESTS+=		varname-dot-makeoverrides
    285  1.93  rillig TESTS+=		varname-dot-newline
    286  1.93  rillig TESTS+=		varname-dot-objdir
    287  1.93  rillig TESTS+=		varname-dot-parsedir
    288  1.93  rillig TESTS+=		varname-dot-parsefile
    289  1.93  rillig TESTS+=		varname-dot-path
    290  1.93  rillig TESTS+=		varname-dot-targets
    291  1.93  rillig TESTS+=		varname-make
    292  1.93  rillig TESTS+=		varname-make_print_var_on_error
    293  1.93  rillig TESTS+=		varname-makeflags
    294  1.93  rillig TESTS+=		varname-pwd
    295  1.93  rillig TESTS+=		varname-vpath
    296  1.66  rillig TESTS+=		varparse-dynamic
    297  1.61  rillig TESTS+=		varquote
    298  1.61  rillig TESTS+=		varshell
    299  1.61  rillig 
    300  1.64  rillig # Override environment variables for some of the tests.
    301  1.82  rillig ENV.counter=		-i
    302  1.64  rillig ENV.envfirst=		FROM_ENV=value-from-env
    303  1.69  rillig ENV.export=		-i PATH=${PATH:Q}
    304  1.89  rillig ENV.export-variants=	-i PATH=${PATH:Q}
    305  1.83  rillig ENV.lint=		-i
    306  1.90  rillig ENV.make-exported=	-i PATH=${PATH:Q}
    307  1.84  rillig ENV.recursive=		-i
    308  1.65  rillig ENV.varmisc=		FROM_ENV=env
    309  1.65  rillig ENV.varmisc+=		FROM_ENV_BEFORE=env
    310  1.65  rillig ENV.varmisc+=		FROM_ENV_AFTER=env
    311  1.64  rillig 
    312  1.64  rillig # Override make flags for some of the tests; default is -k.
    313  1.82  rillig FLAGS.counter=		-r -dv
    314  1.61  rillig FLAGS.doterror=		# none
    315  1.68  rillig FLAGS.envfirst=		-e
    316  1.71     sjg FLAGS.export=		-r
    317  1.83  rillig FLAGS.lint=		-dL -k
    318  1.61  rillig FLAGS.order=		-j1
    319  1.85     sjg FLAGS.recursive=	-dL -r
    320  1.64  rillig FLAGS.vardebug=		-k -dv FROM_CMDLINE=
    321  1.61  rillig 
    322  1.61  rillig # Some tests need extra post-processing.
    323  1.80  rillig SED_CMDS.moderrs+=	-e 's,\(Regex compilation error:\).*,\1 (details omitted),'
    324  1.80  rillig SED_CMDS.modmisc+=	-e 's,\(Regex compilation error:\).*,\1 (details omitted),'
    325  1.79  rillig SED_CMDS.varmod-edge+=	-e 's, line [0-9]*:, line omitted:,'
    326  1.61  rillig SED_CMDS.varshell+=	-e 's,^[a-z]*sh: ,,'
    327  1.61  rillig SED_CMDS.varshell+=	-e '/command/s,No such.*,not found,'
    328  1.61  rillig 
    329  1.64  rillig # Some tests need an additional round of postprocessing.
    330  1.81  rillig POSTPROC.counter=	${TOOL_SED} -n -e '/:RELEVANT = yes/,/:RELEVANT = no/p'
    331  1.64  rillig POSTPROC.vardebug=	${TOOL_SED} -n -e '/:RELEVANT = yes/,/:RELEVANT = no/p'
    332  1.64  rillig 
    333  1.89  rillig export-all.rawout: export.mk
    334  1.89  rillig unexport.rawout: export.mk
    335  1.89  rillig unexport-env.rawout: export.mk
    336  1.89  rillig 
    337  1.61  rillig # End of the configuration section.
    338  1.61  rillig 
    339   1.1     sjg .MAIN: all
    340   1.1     sjg 
    341  1.61  rillig UNIT_TESTS:=	${.PARSEDIR}
    342  1.44     apb .PATH: ${UNIT_TESTS}
    343   1.7     sjg 
    344  1.61  rillig OUTFILES=	${TESTS:=.out}
    345  1.42     apb 
    346  1.42     apb all: ${OUTFILES}
    347   1.9     sjg 
    348  1.61  rillig CLEANFILES+=		*.rawout *.out *.status *.tmp *.core *.tmp
    349  1.61  rillig CLEANFILES+=		obj*.[och] lib*.a	# posix1.mk
    350  1.61  rillig CLEANFILES+=		issue* .[ab]*		# suffixes.mk
    351  1.61  rillig CLEANRECURSIVE+=	dir dummy		# posix1.mk
    352  1.48     apb 
    353   1.1     sjg clean:
    354  1.48     apb 	rm -f ${CLEANFILES}
    355  1.48     apb .if !empty(CLEANRECURSIVE)
    356  1.48     apb 	rm -rf ${CLEANRECURSIVE}
    357  1.48     apb .endif
    358   1.1     sjg 
    359  1.61  rillig TEST_MAKE?=	${.MAKE}
    360  1.61  rillig TOOL_SED?=	sed
    361   1.1     sjg 
    362  1.28     sjg # ensure consistent results from sort(1)
    363  1.61  rillig LC_ALL=		C
    364  1.61  rillig LANG=		C
    365  1.29     sjg .export LANG LC_ALL
    366  1.28     sjg 
    367  1.42     apb # the tests are actually done with sub-makes.
    368  1.42     apb .SUFFIXES: .mk .rawout .out
    369  1.42     apb .mk.rawout:
    370  1.64  rillig 	@echo testing ${.IMPSRC}
    371  1.64  rillig 	@set -eu; \
    372  1.64  rillig 	cd ${.OBJDIR}; \
    373  1.73     sjg 	env ${ENV.${.TARGET:R}} ${TEST_MAKE} -C ${.CURDIR} \
    374  1.64  rillig 	  ${FLAGS.${.TARGET:R}:U-k} -f ${.IMPSRC} \
    375  1.64  rillig 	  > ${.TARGET}.tmp 2>&1 \
    376  1.64  rillig 	&& status=$$? || status=$$?; \
    377  1.64  rillig 	echo $$status > ${.TARGET:R}.status
    378  1.42     apb 	@mv ${.TARGET}.tmp ${.TARGET}
    379  1.42     apb 
    380  1.62  rillig # Post-process the test output so that the results can be compared.
    381  1.62  rillig #
    382  1.62  rillig # always pretend .MAKE was called 'make'
    383  1.61  rillig _SED_CMDS+=	-e 's,^${TEST_MAKE:T:S,.,\\.,g}[][0-9]*:,make:,'
    384  1.61  rillig _SED_CMDS+=	-e 's,${TEST_MAKE:S,.,\\.,g},make,'
    385  1.62  rillig # replace anything after 'stopped in' with unit-tests
    386  1.61  rillig _SED_CMDS+=	-e '/stopped/s, /.*, unit-tests,'
    387  1.62  rillig # strip ${.CURDIR}/ from the output
    388  1.61  rillig _SED_CMDS+=	-e 's,${.CURDIR:S,.,\\.,g}/,,g'
    389  1.61  rillig _SED_CMDS+=	-e 's,${UNIT_TESTS:S,.,\\.,g}/,,g'
    390  1.61  rillig 
    391  1.42     apb .rawout.out:
    392  1.42     apb 	@echo postprocess ${.TARGET}
    393  1.61  rillig 	@${TOOL_SED} ${_SED_CMDS} ${SED_CMDS.${.TARGET:R}} \
    394  1.64  rillig 	  < ${.IMPSRC} > ${.TARGET}.tmp1
    395  1.74     sjg 	@${POSTPROC.${.TARGET:R}:Ucat} < ${.TARGET}.tmp1 > ${.TARGET}.tmp2
    396  1.64  rillig 	@rm ${.TARGET}.tmp1
    397  1.64  rillig 	@echo "exit status `cat ${.TARGET:R}.status`" >> ${.TARGET}.tmp2
    398  1.64  rillig 	@mv ${.TARGET}.tmp2 ${.TARGET}
    399  1.42     apb 
    400  1.42     apb # Compare all output files
    401  1.42     apb test:	${OUTFILES} .PHONY
    402  1.42     apb 	@failed= ; \
    403  1.61  rillig 	for test in ${TESTS}; do \
    404  1.42     apb 	  diff -u ${UNIT_TESTS}/$${test}.exp $${test}.out \
    405  1.42     apb 	  || failed="$${failed}$${failed:+ }$${test}" ; \
    406  1.42     apb 	done ; \
    407  1.42     apb 	if [ -n "$${failed}" ]; then \
    408  1.42     apb 	  echo "Failed tests: $${failed}" ; false ; \
    409  1.42     apb 	else \
    410  1.42     apb 	  echo "All tests passed" ; \
    411  1.42     apb 	fi
    412   1.1     sjg 
    413   1.1     sjg accept:
    414  1.61  rillig 	@for test in ${TESTS}; do \
    415  1.42     apb 	  cmp -s ${UNIT_TESTS}/$${test}.exp $${test}.out \
    416  1.42     apb 	  || { echo "Replacing $${test}.exp" ; \
    417  1.42     apb 	       cp $${test}.out ${UNIT_TESTS}/$${test}.exp ; } \
    418  1.42     apb 	done
    419   1.1     sjg 
    420  1.78  rillig SYNC_MI_AWK= \
    421  1.78  rillig 	BEGIN {								\
    422  1.78  rillig 	  testsdir = "usr.bin/make/unit-tests";				\
    423  1.78  rillig 	  linestart = "./usr/tests/" testsdir;				\
    424  1.78  rillig 	  fmt = linestart "/%s\ttests-usr.bin-tests\tcompattestfile,atf\\n"; \
    425  1.78  rillig 	  cmd = "cd " testsdir " && ls *.exp *.mk | xargs printf '" fmt "'" \
    426  1.78  rillig 	}								\
    427  1.78  rillig 	function startswith(s, prefix) {				\
    428  1.78  rillig 	  return substr(s, 1, length(prefix)) == prefix;		\
    429  1.78  rillig 	}								\
    430  1.78  rillig 	startswith($$1, linestart) && $$1 ~ /\.(exp|mk)$$/ { next }	\
    431  1.78  rillig 	{ print $$0 }							\
    432  1.78  rillig 	$$1 == linestart "/Makefile" { system(cmd) }
    433  1.78  rillig 
    434  1.78  rillig sync-mi:
    435  1.78  rillig 	@set -eu;							\
    436  1.78  rillig 	cd "${MAKEFILE:tA:H}/../../..";					\
    437  1.78  rillig 	mi="distrib/sets/lists/tests/mi";				\
    438  1.78  rillig 	awk ${SYNC_MI_AWK:Q} < "$$mi" > "$$mi.$@";			\
    439  1.78  rillig 	mv -f "$$mi.$@" "$$mi";						\
    440  1.78  rillig 	cvs diff "$$mi" || true
    441  1.78  rillig 
    442  1.50     sjg .if exists(${TEST_MAKE})
    443  1.61  rillig ${TESTS:=.rawout}: ${TEST_MAKE}
    444  1.50     sjg .endif
    445  1.50     sjg 
    446  1.42     apb .-include <bsd.obj.mk>
    447