xref: /freebsd/contrib/bmake/unit-tests/Makefile (revision 956e45f6)
1956e45f6SSimon J. Gerraty# $Id: Makefile,v 1.107 2020/11/02 00:40:25 sjg Exp $
249caa483SSimon J. Gerraty#
3956e45f6SSimon J. Gerraty# $NetBSD: Makefile,v 1.181 2020/11/01 19:02:22 rillig Exp $
449caa483SSimon J. Gerraty#
549caa483SSimon J. Gerraty# Unit tests for make(1)
63841c287SSimon J. Gerraty#
749caa483SSimon J. Gerraty# The main targets are:
849caa483SSimon J. Gerraty#
93841c287SSimon J. Gerraty# all:
103841c287SSimon J. Gerraty#	run all the tests
113841c287SSimon J. Gerraty# test:
123841c287SSimon J. Gerraty#	run 'all', and compare to expected results
133841c287SSimon J. Gerraty# accept:
143841c287SSimon J. Gerraty#	move generated output to expected results
1549caa483SSimon J. Gerraty#
163841c287SSimon J. Gerraty# Settable variables
173841c287SSimon J. Gerraty#
183841c287SSimon J. Gerraty# TEST_MAKE
193841c287SSimon J. Gerraty#	The make program to be tested.
203841c287SSimon J. Gerraty#
213841c287SSimon J. Gerraty#
223841c287SSimon J. Gerraty# Adding a test case
233841c287SSimon J. Gerraty#
2449caa483SSimon J. Gerraty# Each feature should get its own set of tests in its own suitably
2549caa483SSimon J. Gerraty# named makefile (*.mk), with its own set of expected results (*.exp),
263841c287SSimon J. Gerraty# and it should be added to the TESTS list.
2749caa483SSimon J. Gerraty#
282c3632d1SSimon J. Gerraty# A few *.mk files are helper files for other tests (such as include-sub.mk)
292c3632d1SSimon J. Gerraty# and are thus not added to TESTS.  Such files must be ignored in
302c3632d1SSimon J. Gerraty# src/tests/usr.bin/make/t_make.sh.
313841c287SSimon J. Gerraty#
323841c287SSimon J. Gerraty
333841c287SSimon J. Gerraty# Each test is in a sub-makefile.
343841c287SSimon J. Gerraty# Keep the list sorted.
352c3632d1SSimon J. Gerraty# Any test that is commented out must be ignored in
362c3632d1SSimon J. Gerraty# src/tests/usr.bin/make/t_make.sh as well.
37956e45f6SSimon J. Gerraty#TESTS+=		archive
382c3632d1SSimon J. GerratyTESTS+=		archive-suffix
392c3632d1SSimon J. GerratyTESTS+=		cmd-interrupt
402c3632d1SSimon J. GerratyTESTS+=		cmdline
413841c287SSimon J. GerratyTESTS+=		comment
422c3632d1SSimon J. GerratyTESTS+=		cond-cmp-numeric
432c3632d1SSimon J. GerratyTESTS+=		cond-cmp-numeric-eq
442c3632d1SSimon J. GerratyTESTS+=		cond-cmp-numeric-ge
452c3632d1SSimon J. GerratyTESTS+=		cond-cmp-numeric-gt
462c3632d1SSimon J. GerratyTESTS+=		cond-cmp-numeric-le
472c3632d1SSimon J. GerratyTESTS+=		cond-cmp-numeric-lt
482c3632d1SSimon J. GerratyTESTS+=		cond-cmp-numeric-ne
492c3632d1SSimon J. GerratyTESTS+=		cond-cmp-string
50956e45f6SSimon J. GerratyTESTS+=		cond-cmp-unary
512c3632d1SSimon J. GerratyTESTS+=		cond-func
522c3632d1SSimon J. GerratyTESTS+=		cond-func-commands
532c3632d1SSimon J. GerratyTESTS+=		cond-func-defined
542c3632d1SSimon J. GerratyTESTS+=		cond-func-empty
552c3632d1SSimon J. GerratyTESTS+=		cond-func-exists
562c3632d1SSimon J. GerratyTESTS+=		cond-func-make
572c3632d1SSimon J. GerratyTESTS+=		cond-func-target
583841c287SSimon J. GerratyTESTS+=		cond-late
592c3632d1SSimon J. GerratyTESTS+=		cond-op
602c3632d1SSimon J. GerratyTESTS+=		cond-op-and
612c3632d1SSimon J. GerratyTESTS+=		cond-op-not
622c3632d1SSimon J. GerratyTESTS+=		cond-op-or
632c3632d1SSimon J. GerratyTESTS+=		cond-op-parentheses
643841c287SSimon J. GerratyTESTS+=		cond-short
652c3632d1SSimon J. GerratyTESTS+=		cond-token-number
662c3632d1SSimon J. GerratyTESTS+=		cond-token-plain
672c3632d1SSimon J. GerratyTESTS+=		cond-token-string
682c3632d1SSimon J. GerratyTESTS+=		cond-token-var
69956e45f6SSimon J. GerratyTESTS+=		cond-undef-lint
703841c287SSimon J. GerratyTESTS+=		cond1
712c3632d1SSimon J. GerratyTESTS+=		counter
72956e45f6SSimon J. GerratyTESTS+=		counter-append
732c3632d1SSimon J. GerratyTESTS+=		dep
742c3632d1SSimon J. GerratyTESTS+=		dep-colon
75956e45f6SSimon J. GerratyTESTS+=		dep-colon-bug-cross-file
762c3632d1SSimon J. GerratyTESTS+=		dep-double-colon
77956e45f6SSimon J. GerratyTESTS+=		dep-double-colon-indep
782c3632d1SSimon J. GerratyTESTS+=		dep-exclam
792c3632d1SSimon J. GerratyTESTS+=		dep-none
80956e45f6SSimon J. GerratyTESTS+=		dep-percent
812c3632d1SSimon J. GerratyTESTS+=		dep-var
822c3632d1SSimon J. GerratyTESTS+=		dep-wildcards
832c3632d1SSimon J. GerratyTESTS+=		depsrc
84956e45f6SSimon J. GerratyTESTS+=		depsrc-end
852c3632d1SSimon J. GerratyTESTS+=		depsrc-exec
862c3632d1SSimon J. GerratyTESTS+=		depsrc-ignore
872c3632d1SSimon J. GerratyTESTS+=		depsrc-made
882c3632d1SSimon J. GerratyTESTS+=		depsrc-make
892c3632d1SSimon J. GerratyTESTS+=		depsrc-meta
902c3632d1SSimon J. GerratyTESTS+=		depsrc-nometa
912c3632d1SSimon J. GerratyTESTS+=		depsrc-nometa_cmp
922c3632d1SSimon J. GerratyTESTS+=		depsrc-nopath
932c3632d1SSimon J. GerratyTESTS+=		depsrc-notmain
942c3632d1SSimon J. GerratyTESTS+=		depsrc-optional
952c3632d1SSimon J. GerratyTESTS+=		depsrc-phony
962c3632d1SSimon J. GerratyTESTS+=		depsrc-precious
972c3632d1SSimon J. GerratyTESTS+=		depsrc-recursive
982c3632d1SSimon J. GerratyTESTS+=		depsrc-silent
992c3632d1SSimon J. GerratyTESTS+=		depsrc-use
1002c3632d1SSimon J. GerratyTESTS+=		depsrc-usebefore
1012c3632d1SSimon J. GerratyTESTS+=		depsrc-usebefore-double-colon
1022c3632d1SSimon J. GerratyTESTS+=		depsrc-wait
1032c3632d1SSimon J. GerratyTESTS+=		deptgt
1042c3632d1SSimon J. GerratyTESTS+=		deptgt-begin
1052c3632d1SSimon J. GerratyTESTS+=		deptgt-default
1062c3632d1SSimon J. GerratyTESTS+=		deptgt-delete_on_error
1072c3632d1SSimon J. GerratyTESTS+=		deptgt-end
108956e45f6SSimon J. GerratyTESTS+=		deptgt-end-jobs
1092c3632d1SSimon J. GerratyTESTS+=		deptgt-error
1102c3632d1SSimon J. GerratyTESTS+=		deptgt-ignore
1112c3632d1SSimon J. GerratyTESTS+=		deptgt-interrupt
1122c3632d1SSimon J. GerratyTESTS+=		deptgt-main
1132c3632d1SSimon J. GerratyTESTS+=		deptgt-makeflags
1142c3632d1SSimon J. GerratyTESTS+=		deptgt-no_parallel
1152c3632d1SSimon J. GerratyTESTS+=		deptgt-nopath
1162c3632d1SSimon J. GerratyTESTS+=		deptgt-notparallel
1172c3632d1SSimon J. GerratyTESTS+=		deptgt-objdir
1182c3632d1SSimon J. GerratyTESTS+=		deptgt-order
1192c3632d1SSimon J. GerratyTESTS+=		deptgt-path
1202c3632d1SSimon J. GerratyTESTS+=		deptgt-path-suffix
1212c3632d1SSimon J. GerratyTESTS+=		deptgt-phony
1222c3632d1SSimon J. GerratyTESTS+=		deptgt-precious
1232c3632d1SSimon J. GerratyTESTS+=		deptgt-shell
1242c3632d1SSimon J. GerratyTESTS+=		deptgt-silent
1252c3632d1SSimon J. GerratyTESTS+=		deptgt-stale
1262c3632d1SSimon J. GerratyTESTS+=		deptgt-suffixes
1272c3632d1SSimon J. GerratyTESTS+=		dir
1282c3632d1SSimon J. GerratyTESTS+=		dir-expand-path
1292c3632d1SSimon J. GerratyTESTS+=		directive
130956e45f6SSimon J. GerratyTESTS+=		directive-dinclude
1312c3632d1SSimon J. GerratyTESTS+=		directive-elif
1322c3632d1SSimon J. GerratyTESTS+=		directive-elifdef
1332c3632d1SSimon J. GerratyTESTS+=		directive-elifmake
1342c3632d1SSimon J. GerratyTESTS+=		directive-elifndef
1352c3632d1SSimon J. GerratyTESTS+=		directive-elifnmake
1362c3632d1SSimon J. GerratyTESTS+=		directive-else
1372c3632d1SSimon J. GerratyTESTS+=		directive-endif
1382c3632d1SSimon J. GerratyTESTS+=		directive-error
1392c3632d1SSimon J. GerratyTESTS+=		directive-export
1402c3632d1SSimon J. GerratyTESTS+=		directive-export-env
141956e45f6SSimon J. GerratyTESTS+=		directive-export-gmake
1422c3632d1SSimon J. GerratyTESTS+=		directive-export-literal
1432c3632d1SSimon J. GerratyTESTS+=		directive-for
1442c3632d1SSimon J. GerratyTESTS+=		directive-for-generating-endif
145956e45f6SSimon J. GerratyTESTS+=		directive-hyphen-include
1462c3632d1SSimon J. GerratyTESTS+=		directive-if
1472c3632d1SSimon J. GerratyTESTS+=		directive-ifdef
1482c3632d1SSimon J. GerratyTESTS+=		directive-ifmake
1492c3632d1SSimon J. GerratyTESTS+=		directive-ifndef
1502c3632d1SSimon J. GerratyTESTS+=		directive-ifnmake
151956e45f6SSimon J. GerratyTESTS+=		directive-include
152956e45f6SSimon J. GerratyTESTS+=		directive-include-fatal
1532c3632d1SSimon J. GerratyTESTS+=		directive-info
154956e45f6SSimon J. GerratyTESTS+=		directive-sinclude
1552c3632d1SSimon J. GerratyTESTS+=		directive-undef
1562c3632d1SSimon J. GerratyTESTS+=		directive-unexport
1572c3632d1SSimon J. GerratyTESTS+=		directive-unexport-env
1582c3632d1SSimon J. GerratyTESTS+=		directive-warning
1592c3632d1SSimon J. GerratyTESTS+=		directives
1603841c287SSimon J. GerratyTESTS+=		dollar
1613841c287SSimon J. GerratyTESTS+=		doterror
1623841c287SSimon J. GerratyTESTS+=		dotwait
1632c3632d1SSimon J. GerratyTESTS+=		envfirst
1643841c287SSimon J. GerratyTESTS+=		error
1653841c287SSimon J. GerratyTESTS+=		# escape	# broken by reverting POSIX changes
1663841c287SSimon J. GerratyTESTS+=		export
1673841c287SSimon J. GerratyTESTS+=		export-all
1683841c287SSimon J. GerratyTESTS+=		export-env
1692c3632d1SSimon J. GerratyTESTS+=		export-variants
1703841c287SSimon J. GerratyTESTS+=		forloop
1713841c287SSimon J. GerratyTESTS+=		forsubst
172956e45f6SSimon J. GerratyTESTS+=		hanoi-include
1732c3632d1SSimon J. GerratyTESTS+=		impsrc
1743841c287SSimon J. GerratyTESTS+=		include-main
175956e45f6SSimon J. Gerraty#TESTS+=		job-output-long-lines
1762c3632d1SSimon J. GerratyTESTS+=		lint
1772c3632d1SSimon J. GerratyTESTS+=		make-exported
1783841c287SSimon J. GerratyTESTS+=		moderrs
1793841c287SSimon J. GerratyTESTS+=		modmatch
1803841c287SSimon J. GerratyTESTS+=		modmisc
1813841c287SSimon J. GerratyTESTS+=		modts
1823841c287SSimon J. GerratyTESTS+=		modword
1832c3632d1SSimon J. GerratyTESTS+=		opt
1842c3632d1SSimon J. GerratyTESTS+=		opt-backwards
1852c3632d1SSimon J. GerratyTESTS+=		opt-chdir
1862c3632d1SSimon J. GerratyTESTS+=		opt-debug
187956e45f6SSimon J. GerratyTESTS+=		opt-debug-all
188956e45f6SSimon J. GerratyTESTS+=		opt-debug-archive
189956e45f6SSimon J. GerratyTESTS+=		opt-debug-curdir
190956e45f6SSimon J. GerratyTESTS+=		opt-debug-cond
191956e45f6SSimon J. GerratyTESTS+=		opt-debug-dir
192956e45f6SSimon J. GerratyTESTS+=		opt-debug-errors
193956e45f6SSimon J. GerratyTESTS+=		opt-debug-file
194956e45f6SSimon J. GerratyTESTS+=		opt-debug-for
195956e45f6SSimon J. GerratyTESTS+=		opt-debug-graph1
196956e45f6SSimon J. GerratyTESTS+=		opt-debug-graph2
197956e45f6SSimon J. GerratyTESTS+=		opt-debug-graph3
198956e45f6SSimon J. GerratyTESTS+=		opt-debug-hash
199956e45f6SSimon J. Gerraty#TESTS+=		opt-debug-jobs
200956e45f6SSimon J. GerratyTESTS+=		opt-debug-lint
201956e45f6SSimon J. GerratyTESTS+=		opt-debug-loud
202956e45f6SSimon J. GerratyTESTS+=		opt-debug-meta
203956e45f6SSimon J. GerratyTESTS+=		opt-debug-making
204956e45f6SSimon J. GerratyTESTS+=		opt-debug-no-rm
205956e45f6SSimon J. GerratyTESTS+=		opt-debug-parse
206956e45f6SSimon J. GerratyTESTS+=		opt-debug-suff
207956e45f6SSimon J. GerratyTESTS+=		opt-debug-targets
208956e45f6SSimon J. GerratyTESTS+=		opt-debug-varraw
209956e45f6SSimon J. GerratyTESTS+=		opt-debug-var
210956e45f6SSimon J. GerratyTESTS+=		opt-debug-x-trace
2112c3632d1SSimon J. GerratyTESTS+=		opt-define
2122c3632d1SSimon J. GerratyTESTS+=		opt-env
2132c3632d1SSimon J. GerratyTESTS+=		opt-file
2142c3632d1SSimon J. GerratyTESTS+=		opt-ignore
2152c3632d1SSimon J. GerratyTESTS+=		opt-include-dir
2162c3632d1SSimon J. GerratyTESTS+=		opt-jobs
2172c3632d1SSimon J. GerratyTESTS+=		opt-jobs-internal
2182c3632d1SSimon J. GerratyTESTS+=		opt-keep-going
2192c3632d1SSimon J. GerratyTESTS+=		opt-m-include-dir
2202c3632d1SSimon J. GerratyTESTS+=		opt-no-action
2212c3632d1SSimon J. GerratyTESTS+=		opt-no-action-at-all
2222c3632d1SSimon J. GerratyTESTS+=		opt-query
2232c3632d1SSimon J. GerratyTESTS+=		opt-raw
2242c3632d1SSimon J. GerratyTESTS+=		opt-silent
2252c3632d1SSimon J. GerratyTESTS+=		opt-touch
2262c3632d1SSimon J. GerratyTESTS+=		opt-tracefile
2272c3632d1SSimon J. GerratyTESTS+=		opt-var-expanded
2282c3632d1SSimon J. GerratyTESTS+=		opt-var-literal
2292c3632d1SSimon J. GerratyTESTS+=		opt-warnings-as-errors
2302c3632d1SSimon J. GerratyTESTS+=		opt-where-am-i
2312c3632d1SSimon J. GerratyTESTS+=		opt-x-reduce-exported
2323841c287SSimon J. GerratyTESTS+=		order
233956e45f6SSimon J. GerratyTESTS+=		parse-var
2342c3632d1SSimon J. GerratyTESTS+=		phony-end
2353841c287SSimon J. GerratyTESTS+=		posix
2363841c287SSimon J. GerratyTESTS+=		# posix1	# broken by reverting POSIX changes
2373841c287SSimon J. GerratyTESTS+=		qequals
2382c3632d1SSimon J. GerratyTESTS+=		recursive
2392c3632d1SSimon J. GerratyTESTS+=		sh
2402c3632d1SSimon J. GerratyTESTS+=		sh-dots
2412c3632d1SSimon J. GerratyTESTS+=		sh-jobs
2422c3632d1SSimon J. GerratyTESTS+=		sh-jobs-error
2432c3632d1SSimon J. GerratyTESTS+=		sh-leading-at
2442c3632d1SSimon J. GerratyTESTS+=		sh-leading-hyphen
2452c3632d1SSimon J. GerratyTESTS+=		sh-leading-plus
2462c3632d1SSimon J. GerratyTESTS+=		sh-meta-chars
2472c3632d1SSimon J. GerratyTESTS+=		sh-multi-line
2482c3632d1SSimon J. GerratyTESTS+=		sh-single-line
249956e45f6SSimon J. GerratyTESTS+=		shell-csh
250956e45f6SSimon J. GerratyTESTS+=		shell-custom
251956e45f6SSimon J. GerratyTESTS+=		shell-ksh
252956e45f6SSimon J. GerratyTESTS+=		shell-sh
253956e45f6SSimon J. GerratyTESTS+=		suff-add-later
254956e45f6SSimon J. GerratyTESTS+=		suff-clear-regular
255956e45f6SSimon J. GerratyTESTS+=		suff-clear-single
256956e45f6SSimon J. GerratyTESTS+=		suff-lookup
257956e45f6SSimon J. GerratyTESTS+=		suff-main
258956e45f6SSimon J. GerratyTESTS+=		suff-rebuild
259956e45f6SSimon J. GerratyTESTS+=		suff-transform-endless
260956e45f6SSimon J. GerratyTESTS+=		suff-transform-expand
261956e45f6SSimon J. GerratyTESTS+=		suff-transform-select
2623841c287SSimon J. GerratyTESTS+=		sunshcmd
2633841c287SSimon J. GerratyTESTS+=		ternary
2643841c287SSimon J. GerratyTESTS+=		unexport
2653841c287SSimon J. GerratyTESTS+=		unexport-env
2662c3632d1SSimon J. GerratyTESTS+=		use-inference
2672c3632d1SSimon J. GerratyTESTS+=		var-class
2682c3632d1SSimon J. GerratyTESTS+=		var-class-cmdline
2692c3632d1SSimon J. GerratyTESTS+=		var-class-env
2702c3632d1SSimon J. GerratyTESTS+=		var-class-global
2712c3632d1SSimon J. GerratyTESTS+=		var-class-local
2722c3632d1SSimon J. GerratyTESTS+=		var-class-local-legacy
2732c3632d1SSimon J. GerratyTESTS+=		var-op
2742c3632d1SSimon J. GerratyTESTS+=		var-op-append
2752c3632d1SSimon J. GerratyTESTS+=		var-op-assign
2762c3632d1SSimon J. GerratyTESTS+=		var-op-default
2772c3632d1SSimon J. GerratyTESTS+=		var-op-expand
2782c3632d1SSimon J. GerratyTESTS+=		var-op-shell
279956e45f6SSimon J. GerratyTESTS+=		var-op-sunsh
280956e45f6SSimon J. GerratyTESTS+=		var-recursive
2813841c287SSimon J. GerratyTESTS+=		varcmd
2822c3632d1SSimon J. GerratyTESTS+=		vardebug
2832c3632d1SSimon J. GerratyTESTS+=		varfind
2843841c287SSimon J. GerratyTESTS+=		varmisc
2852c3632d1SSimon J. GerratyTESTS+=		varmod
2862c3632d1SSimon J. GerratyTESTS+=		varmod-assign
2872c3632d1SSimon J. GerratyTESTS+=		varmod-defined
2883841c287SSimon J. GerratyTESTS+=		varmod-edge
2892c3632d1SSimon J. GerratyTESTS+=		varmod-exclam-shell
2902c3632d1SSimon J. GerratyTESTS+=		varmod-extension
2912c3632d1SSimon J. GerratyTESTS+=		varmod-gmtime
2922c3632d1SSimon J. GerratyTESTS+=		varmod-hash
2932c3632d1SSimon J. GerratyTESTS+=		varmod-head
2942c3632d1SSimon J. GerratyTESTS+=		varmod-ifelse
2952c3632d1SSimon J. GerratyTESTS+=		varmod-l-name-to-value
2962c3632d1SSimon J. GerratyTESTS+=		varmod-localtime
2972c3632d1SSimon J. GerratyTESTS+=		varmod-loop
2982c3632d1SSimon J. GerratyTESTS+=		varmod-match
2992c3632d1SSimon J. GerratyTESTS+=		varmod-match-escape
3002c3632d1SSimon J. GerratyTESTS+=		varmod-no-match
3012c3632d1SSimon J. GerratyTESTS+=		varmod-order
3022c3632d1SSimon J. GerratyTESTS+=		varmod-order-reverse
3032c3632d1SSimon J. GerratyTESTS+=		varmod-order-shuffle
3042c3632d1SSimon J. GerratyTESTS+=		varmod-path
3052c3632d1SSimon J. GerratyTESTS+=		varmod-quote
3062c3632d1SSimon J. GerratyTESTS+=		varmod-quote-dollar
3072c3632d1SSimon J. GerratyTESTS+=		varmod-range
3082c3632d1SSimon J. GerratyTESTS+=		varmod-remember
3092c3632d1SSimon J. GerratyTESTS+=		varmod-root
3102c3632d1SSimon J. GerratyTESTS+=		varmod-select-words
3112c3632d1SSimon J. GerratyTESTS+=		varmod-shell
3122c3632d1SSimon J. GerratyTESTS+=		varmod-subst
3132c3632d1SSimon J. GerratyTESTS+=		varmod-subst-regex
3142c3632d1SSimon J. GerratyTESTS+=		varmod-sysv
3152c3632d1SSimon J. GerratyTESTS+=		varmod-tail
3162c3632d1SSimon J. GerratyTESTS+=		varmod-to-abs
3172c3632d1SSimon J. GerratyTESTS+=		varmod-to-lower
3182c3632d1SSimon J. GerratyTESTS+=		varmod-to-many-words
3192c3632d1SSimon J. GerratyTESTS+=		varmod-to-one-word
3202c3632d1SSimon J. GerratyTESTS+=		varmod-to-separator
3212c3632d1SSimon J. GerratyTESTS+=		varmod-to-upper
3222c3632d1SSimon J. GerratyTESTS+=		varmod-undefined
3232c3632d1SSimon J. GerratyTESTS+=		varmod-unique
3242c3632d1SSimon J. GerratyTESTS+=		varname
3252c3632d1SSimon J. GerratyTESTS+=		varname-dollar
3262c3632d1SSimon J. GerratyTESTS+=		varname-dot-alltargets
3272c3632d1SSimon J. GerratyTESTS+=		varname-dot-curdir
3282c3632d1SSimon J. GerratyTESTS+=		varname-dot-includes
3292c3632d1SSimon J. GerratyTESTS+=		varname-dot-includedfromdir
3302c3632d1SSimon J. GerratyTESTS+=		varname-dot-includedfromfile
3312c3632d1SSimon J. GerratyTESTS+=		varname-dot-libs
3322c3632d1SSimon J. GerratyTESTS+=		varname-dot-make-dependfile
3332c3632d1SSimon J. GerratyTESTS+=		varname-dot-make-expand_variables
3342c3632d1SSimon J. GerratyTESTS+=		varname-dot-make-exported
3352c3632d1SSimon J. GerratyTESTS+=		varname-dot-make-jobs
3362c3632d1SSimon J. GerratyTESTS+=		varname-dot-make-jobs-prefix
3372c3632d1SSimon J. GerratyTESTS+=		varname-dot-make-level
3382c3632d1SSimon J. GerratyTESTS+=		varname-dot-make-makefile_preference
3392c3632d1SSimon J. GerratyTESTS+=		varname-dot-make-makefiles
3402c3632d1SSimon J. GerratyTESTS+=		varname-dot-make-meta-bailiwick
3412c3632d1SSimon J. GerratyTESTS+=		varname-dot-make-meta-created
3422c3632d1SSimon J. GerratyTESTS+=		varname-dot-make-meta-files
3432c3632d1SSimon J. GerratyTESTS+=		varname-dot-make-meta-ignore_filter
3442c3632d1SSimon J. GerratyTESTS+=		varname-dot-make-meta-ignore_paths
3452c3632d1SSimon J. GerratyTESTS+=		varname-dot-make-meta-ignore_patterns
3462c3632d1SSimon J. GerratyTESTS+=		varname-dot-make-meta-prefix
3472c3632d1SSimon J. GerratyTESTS+=		varname-dot-make-mode
3482c3632d1SSimon J. GerratyTESTS+=		varname-dot-make-path_filemon
3492c3632d1SSimon J. GerratyTESTS+=		varname-dot-make-pid
3502c3632d1SSimon J. GerratyTESTS+=		varname-dot-make-ppid
3512c3632d1SSimon J. GerratyTESTS+=		varname-dot-make-save_dollars
3522c3632d1SSimon J. GerratyTESTS+=		varname-dot-makeoverrides
3532c3632d1SSimon J. GerratyTESTS+=		varname-dot-newline
3542c3632d1SSimon J. GerratyTESTS+=		varname-dot-objdir
3552c3632d1SSimon J. GerratyTESTS+=		varname-dot-parsedir
3562c3632d1SSimon J. GerratyTESTS+=		varname-dot-parsefile
3572c3632d1SSimon J. GerratyTESTS+=		varname-dot-path
3582c3632d1SSimon J. GerratyTESTS+=		varname-dot-shell
3592c3632d1SSimon J. GerratyTESTS+=		varname-dot-targets
3602c3632d1SSimon J. GerratyTESTS+=		varname-empty
3612c3632d1SSimon J. GerratyTESTS+=		varname-make
3622c3632d1SSimon J. GerratyTESTS+=		varname-make_print_var_on_error
363956e45f6SSimon J. GerratyTESTS+=		varname-make_print_var_on_error-jobs
364956e45f6SSimon J. GerratyTESTS+=		varname-makefile
3652c3632d1SSimon J. GerratyTESTS+=		varname-makeflags
3662c3632d1SSimon J. GerratyTESTS+=		varname-pwd
3672c3632d1SSimon J. GerratyTESTS+=		varname-vpath
3682c3632d1SSimon J. GerratyTESTS+=		varparse-dynamic
369956e45f6SSimon J. GerratyTESTS+=		varparse-mod
370956e45f6SSimon J. GerratyTESTS+=		varparse-undef-partial
3713841c287SSimon J. GerratyTESTS+=		varquote
3723841c287SSimon J. GerratyTESTS+=		varshell
3733841c287SSimon J. Gerraty
3742c3632d1SSimon J. Gerraty# Additional environment variables for some of the tests.
3752c3632d1SSimon J. Gerraty# The base environment is -i PATH="$PATH".
3762c3632d1SSimon J. GerratyENV.envfirst=		FROM_ENV=value-from-env
3772c3632d1SSimon J. GerratyENV.varmisc=		FROM_ENV=env
3782c3632d1SSimon J. GerratyENV.varmisc+=		FROM_ENV_BEFORE=env
3792c3632d1SSimon J. GerratyENV.varmisc+=		FROM_ENV_AFTER=env
380956e45f6SSimon J. GerratyENV.varmod-localtime+=	TZ=Europe/Berlin
3812c3632d1SSimon J. Gerraty
3822c3632d1SSimon J. Gerraty# Override make flags for some of the tests; default is -k.
3832c3632d1SSimon J. Gerraty# If possible, write ".MAKEFLAGS: -dv" in the test .mk file instead of
3842c3632d1SSimon J. Gerraty# settings FLAGS.test=-dv here, since that is closer to the test code.
385956e45f6SSimon J. GerratyFLAGS.cond-func-make=	via-cmdline
3862c3632d1SSimon J. GerratyFLAGS.directive-ifmake=	first second
3873841c287SSimon J. GerratyFLAGS.doterror=		# none
3882c3632d1SSimon J. GerratyFLAGS.envfirst=		-e
3892c3632d1SSimon J. GerratyFLAGS.export=		# none
3902c3632d1SSimon J. GerratyFLAGS.opt-ignore=	-i
3912c3632d1SSimon J. GerratyFLAGS.opt-keep-going=	-k
3922c3632d1SSimon J. GerratyFLAGS.opt-no-action=	-n
3932c3632d1SSimon J. GerratyFLAGS.opt-query=	-q
3942c3632d1SSimon J. GerratyFLAGS.opt-var-expanded=	-v VAR -v VALUE
3952c3632d1SSimon J. GerratyFLAGS.opt-var-literal=	-V VAR -V VALUE
3962c3632d1SSimon J. GerratyFLAGS.opt-warnings-as-errors= -W
3973841c287SSimon J. GerratyFLAGS.order=		-j1
3982c3632d1SSimon J. GerratyFLAGS.recursive=	-dL
3992c3632d1SSimon J. GerratyFLAGS.sh-leading-plus=	-n
4002c3632d1SSimon J. GerratyFLAGS.varname-empty=	-dv '$${:U}=cmdline-u' '=cmline-plain'
4013841c287SSimon J. Gerraty
402956e45f6SSimon J. Gerraty# Some tests need extra postprocessing.
403956e45f6SSimon J. GerratySED_CMDS.export= \
404956e45f6SSimon J. Gerraty	-e '/^[^=_A-Za-z0-9]*=/d'
405956e45f6SSimon J. Gerraty# these all share the same requirement
406956e45f6SSimon J. Gerraty.for t in export-all export-env
407956e45f6SSimon J. GerratySED_CMDS.$t= ${SED_CMDS.export}
408956e45f6SSimon J. Gerraty.endfor
409956e45f6SSimon J. GerratySED_CMDS.job-output-long-lines= \
410956e45f6SSimon J. Gerraty	${:D Job separators on their own line are ok. } \
411956e45f6SSimon J. Gerraty	-e '/^--- job-[ab] ---$$/d' \
412956e45f6SSimon J. Gerraty	${:D Plain output lines are ok as well. } \
413956e45f6SSimon J. Gerraty	${:D They may come in multiples of 1024 or as 10000. } \
414956e45f6SSimon J. Gerraty	-e '/^aa*$$/d' \
415956e45f6SSimon J. Gerraty	-e '/^bb*$$/d' \
416956e45f6SSimon J. Gerraty	${:D The following lines should rather not occur since the job } \
417956e45f6SSimon J. Gerraty	${:D marker should always be at the beginning of the line. } \
418956e45f6SSimon J. Gerraty	-e '/^aa*--- job-b ---$$/d' \
419956e45f6SSimon J. Gerraty	-e '/^bb*--- job-a ---$$/d'
420956e45f6SSimon J. GerratySED_CMDS.opt-debug-graph1= \
421956e45f6SSimon J. Gerraty			-e 's,${.CURDIR},CURDIR,'
422956e45f6SSimon J. GerratySED_CMDS.opt-debug-graph1+= \
423956e45f6SSimon J. Gerraty			-e '/Global Variables:/,/Suffixes:/d'
4242c3632d1SSimon J. GerratySED_CMDS.sh-dots=	-e 's,^.*\.\.\.:.*,<normalized: ...: not found>,'
425956e45f6SSimon J. GerratySED_CMDS.opt-debug-jobs=	-e 's,([0-9][0-9]*),(<pid>),'
426956e45f6SSimon J. GerratySED_CMDS.opt-debug-jobs+=	-e 's,pid [0-9][0-9]*,pid <pid>,'
427956e45f6SSimon J. GerratySED_CMDS.opt-debug-jobs+=	-e 's,Process [0-9][0-9]*,Process <pid>,'
428956e45f6SSimon J. GerratySED_CMDS.opt-debug-jobs+=	-e 's,JobFinish: [0-9][0-9]*,JobFinish: <pid>,'
429956e45f6SSimon J. Gerraty# The "-q" may be there or not, see jobs.c, variable shells.
430956e45f6SSimon J. GerratySED_CMDS.opt-debug-jobs+=	-e 's,^\(.Command: sh\) -q,\1,'
4312c3632d1SSimon J. GerratySED_CMDS.varmod-subst-regex+= \
4322c3632d1SSimon J. Gerraty			-e 's,\(Regex compilation error:\).*,\1 (details omitted),'
4332c3632d1SSimon J. GerratySED_CMDS.varmod-edge+=	-e 's, line [0-9]*:, line omitted:,'
4342c3632d1SSimon J. GerratySED_CMDS.varshell+=	-e 's,^${.SHELL:T}: ,,'
4353841c287SSimon J. GerratySED_CMDS.varshell+=	-e '/command/s,No such.*,not found,'
436956e45f6SSimon J. GerratySED_CMDS.varname-dot-parsedir=	-e '/in some cases/ s,^make: "[^"]*,make: "<normalized>,'
437956e45f6SSimon J. GerratySED_CMDS.varname-dot-parsefile=	-e '/in some cases/ s,^make: "[^"]*,make: "<normalized>,'
438956e45f6SSimon J. GerratySED_CMDS.varname-dot-shell=	-e 's, = /[^ ]*, = (details omitted),g'
439956e45f6SSimon J. GerratySED_CMDS.varname-dot-shell+=	-e 's,"/[^" ]*","(details omitted)",g'
440956e45f6SSimon J. GerratySED_CMDS.varname-dot-shell+=	-e 's,\[/[^] ]*\],[(details omitted)],g'
4412c3632d1SSimon J. Gerraty
4422c3632d1SSimon J. Gerraty# Some tests need an additional round of postprocessing.
4432c3632d1SSimon J. GerratyPOSTPROC.deptgt-suffixes= \
4442c3632d1SSimon J. Gerraty			${TOOL_SED} -n -e '/^\#\*\*\* Suffixes/,/^\#\*/p'
445956e45f6SSimon J. GerratyPOSTPROC.varname=	${TOOL_SED} -n -e '/^MAGIC/p' -e '/^ORDER_/p'
4462c3632d1SSimon J. GerratyPOSTPROC.varname-empty=	${TOOL_SED} -n -e '/^Var_Set/p' -e '/^out:/p'
4472c3632d1SSimon J. Gerraty
4482c3632d1SSimon J. Gerraty# Some tests reuse other tests, which makes them unnecessarily fragile.
4492c3632d1SSimon J. Gerratyexport-all.rawout: export.mk
4502c3632d1SSimon J. Gerratyunexport.rawout: export.mk
4512c3632d1SSimon J. Gerratyunexport-env.rawout: export.mk
4523841c287SSimon J. Gerraty
4533841c287SSimon J. Gerraty# End of the configuration section.
45449caa483SSimon J. Gerraty
45549caa483SSimon J. Gerraty.MAIN: all
45649caa483SSimon J. Gerraty
4572c3632d1SSimon J. Gerraty.-include "Makefile.inc"
45849caa483SSimon J. Gerraty.-include "Makefile.config"
45949caa483SSimon J. Gerraty
46049caa483SSimon J. GerratyUNIT_TESTS:=	${.PARSEDIR}
46149caa483SSimon J. Gerraty.PATH: ${UNIT_TESTS}
46249caa483SSimon J. Gerraty
463956e45f6SSimon J. Gerraty.if ${USE_ABSOLUTE_TESTNAMES:Uno} == yes
464956e45f6SSimon J. GerratyOUTFILES=	${TESTS:@test@${.CURDIR:tA}/${test}.out@}
465956e45f6SSimon J. Gerraty.else
4663841c287SSimon J. GerratyOUTFILES=	${TESTS:=.out}
467956e45f6SSimon J. Gerraty.endif
46849caa483SSimon J. Gerraty
46949caa483SSimon J. Gerratyall: ${OUTFILES}
47049caa483SSimon J. Gerraty
4712c3632d1SSimon J. GerratyCLEANFILES=		*.rawout *.out *.status *.tmp *.core *.tmp
47249caa483SSimon J. GerratyCLEANFILES+=		obj*.[och] lib*.a	# posix1.mk
47349caa483SSimon J. GerratyCLEANFILES+=		issue* .[ab]*		# suffixes.mk
4742c3632d1SSimon J. GerratyCLEANDIRS=		dir dummy		# posix1.mk
47549caa483SSimon J. Gerraty
47649caa483SSimon J. Gerratyclean:
47749caa483SSimon J. Gerraty	rm -f ${CLEANFILES}
4782c3632d1SSimon J. Gerraty	rm -rf ${CLEANDIRS}
47949caa483SSimon J. Gerraty
48049caa483SSimon J. GerratyTEST_MAKE?=	${.MAKE}
48149caa483SSimon J. GerratyTOOL_SED?=	sed
48249caa483SSimon J. GerratyTOOL_TR?=	tr
48349caa483SSimon J. GerratyTOOL_DIFF?=	diff
4843841c287SSimon J. GerratyDIFF_FLAGS?=	-u
48549caa483SSimon J. Gerraty
48649caa483SSimon J. Gerraty.if defined(.PARSEDIR)
48749caa483SSimon J. Gerraty# ensure consistent results from sort(1)
48849caa483SSimon J. GerratyLC_ALL=		C
48949caa483SSimon J. GerratyLANG=		C
49049caa483SSimon J. Gerraty.export LANG LC_ALL
49149caa483SSimon J. Gerraty.endif
49249caa483SSimon J. Gerraty
4932c3632d1SSimon J. Gerraty.if ${.MAKE.MODE:Unormal:Mmeta} != ""
4942c3632d1SSimon J. Gerraty# we don't need the noise
4952c3632d1SSimon J. Gerraty_MKMSG_TEST= :
4962c3632d1SSimon J. Gerraty.endif
4972c3632d1SSimon J. Gerraty
498956e45f6SSimon J. GerratyMAKE_TEST_ENV?=	MALLOC_OPTIONS="JA"	# for jemalloc
499956e45f6SSimon J. Gerraty
500956e45f6SSimon J. Gerraty# Each test is run in a sub-make, to keep the tests for interfering with
501956e45f6SSimon J. Gerraty# each other, and because they use different environment variables and
502956e45f6SSimon J. Gerraty# command line options.
50349caa483SSimon J. Gerraty.SUFFIXES: .mk .rawout .out
50449caa483SSimon J. Gerraty.mk.rawout:
5052c3632d1SSimon J. Gerraty	@${_MKMSG_TEST:Uecho '#      test '} ${.PREFIX}
5062c3632d1SSimon J. Gerraty	@set -eu; \
5072c3632d1SSimon J. Gerraty	cd ${.OBJDIR}; \
508956e45f6SSimon J. Gerraty	env -i PATH="$$PATH" ${MAKE_TEST_ENV} ${ENV.${.PREFIX:T}} \
5092c3632d1SSimon J. Gerraty	  ${TEST_MAKE} \
5102c3632d1SSimon J. Gerraty	    -r -C ${.CURDIR} -f ${.IMPSRC} \
511956e45f6SSimon J. Gerraty	    ${FLAGS.${.PREFIX:T}:U-k} \
5122c3632d1SSimon J. Gerraty	    > ${.TARGET}.tmp 2>&1 \
5132c3632d1SSimon J. Gerraty	&& status=$$? || status=$$?; \
5142c3632d1SSimon J. Gerraty	echo $$status > ${.TARGET:R}.status
51549caa483SSimon J. Gerraty	@mv ${.TARGET}.tmp ${.TARGET}
51649caa483SSimon J. Gerraty
517956e45f6SSimon J. Gerraty# Postprocess the test output so that the results can be compared.
5183841c287SSimon J. Gerraty#
5193841c287SSimon J. Gerraty# always pretend .MAKE was called 'make'
5203841c287SSimon J. Gerraty_SED_CMDS+=	-e 's,^${TEST_MAKE:T:S,.,\\.,g}[][0-9]*:,make:,'
5213841c287SSimon J. Gerraty_SED_CMDS+=	-e 's,${TEST_MAKE:S,.,\\.,g},make,'
5223841c287SSimon J. Gerraty# replace anything after 'stopped in' with unit-tests
5233841c287SSimon J. Gerraty_SED_CMDS+=	-e '/stopped/s, /.*, unit-tests,'
5243841c287SSimon J. Gerraty# strip ${.CURDIR}/ from the output
5253841c287SSimon J. Gerraty_SED_CMDS+=	-e 's,${.CURDIR:S,.,\\.,g}/,,g'
5263841c287SSimon J. Gerraty_SED_CMDS+=	-e 's,${UNIT_TESTS:S,.,\\.,g}/,,g'
5273841c287SSimon J. Gerraty
52849caa483SSimon J. Gerraty.rawout.out:
529956e45f6SSimon J. Gerraty	@${TOOL_SED} ${_SED_CMDS} ${SED_CMDS.${.PREFIX:T}} \
5302c3632d1SSimon J. Gerraty	  < ${.IMPSRC} > ${.TARGET}.tmp1
531956e45f6SSimon J. Gerraty	@${POSTPROC.${.PREFIX:T}:Ucat} < ${.TARGET}.tmp1 > ${.TARGET}.tmp2
5322c3632d1SSimon J. Gerraty	@rm ${.TARGET}.tmp1
5332c3632d1SSimon J. Gerraty	@echo "exit status `cat ${.TARGET:R}.status`" >> ${.TARGET}.tmp2
5342c3632d1SSimon J. Gerraty	@mv ${.TARGET}.tmp2 ${.TARGET}
53549caa483SSimon J. Gerraty
53649caa483SSimon J. Gerraty# Compare all output files
53749caa483SSimon J. Gerratytest:	${OUTFILES} .PHONY
53849caa483SSimon J. Gerraty	@failed= ; \
5393841c287SSimon J. Gerraty	for test in ${TESTS}; do \
54049caa483SSimon J. Gerraty	  ${TOOL_DIFF} ${DIFF_FLAGS} ${UNIT_TESTS}/$${test}.exp $${test}.out \
54149caa483SSimon J. Gerraty	  || failed="$${failed}$${failed:+ }$${test}" ; \
54249caa483SSimon J. Gerraty	done ; \
54349caa483SSimon J. Gerraty	if [ -n "$${failed}" ]; then \
54449caa483SSimon J. Gerraty	  echo "Failed tests: $${failed}" ; false ; \
54549caa483SSimon J. Gerraty	else \
54649caa483SSimon J. Gerraty	  echo "All tests passed" ; \
54749caa483SSimon J. Gerraty	fi
54849caa483SSimon J. Gerraty
54949caa483SSimon J. Gerratyaccept:
5503841c287SSimon J. Gerraty	@for test in ${TESTS}; do \
55149caa483SSimon J. Gerraty	  cmp -s ${UNIT_TESTS}/$${test}.exp $${test}.out \
55249caa483SSimon J. Gerraty	  || { echo "Replacing $${test}.exp" ; \
55349caa483SSimon J. Gerraty	       cp $${test}.out ${UNIT_TESTS}/$${test}.exp ; } \
55449caa483SSimon J. Gerraty	done
55549caa483SSimon J. Gerraty
55649caa483SSimon J. Gerraty.if exists(${TEST_MAKE})
557956e45f6SSimon J. Gerraty${TESTS:=.rawout}: ${TEST_MAKE}
558956e45f6SSimon J. Gerraty# in meta mode, we *know* if a target script is impacted
559956e45f6SSimon J. Gerraty# by a makefile change.
560956e45f6SSimon J. Gerraty.if ${.MAKE.MODE:Unormal:Mmeta} == ""
561956e45f6SSimon J. Gerraty${TESTS:=.rawout}: ${.PARSEDIR}/Makefile
562956e45f6SSimon J. Gerraty.endif
56349caa483SSimon J. Gerraty.endif
56449caa483SSimon J. Gerraty
56549caa483SSimon J. Gerraty.-include <obj.mk>
566