xref: /freebsd/contrib/bmake/unit-tests/Makefile (revision 2c3632d1)
12c3632d1SSimon J. Gerraty# $Id: Makefile,v 1.92 2020/09/02 18:39:29 sjg Exp $
249caa483SSimon J. Gerraty#
32c3632d1SSimon J. Gerraty# $NetBSD: Makefile,v 1.130 2020/09/02 05:33:57 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.
372c3632d1SSimon J. GerratyTESTS+=		# archive	# broken on FreeBSD, enabled in t_make.sh
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
502c3632d1SSimon J. GerratyTESTS+=		cond-func
512c3632d1SSimon J. GerratyTESTS+=		cond-func-commands
522c3632d1SSimon J. GerratyTESTS+=		cond-func-defined
532c3632d1SSimon J. GerratyTESTS+=		cond-func-empty
542c3632d1SSimon J. GerratyTESTS+=		cond-func-exists
552c3632d1SSimon J. GerratyTESTS+=		cond-func-make
562c3632d1SSimon J. GerratyTESTS+=		cond-func-target
573841c287SSimon J. GerratyTESTS+=		cond-late
582c3632d1SSimon J. GerratyTESTS+=		cond-op
592c3632d1SSimon J. GerratyTESTS+=		cond-op-and
602c3632d1SSimon J. GerratyTESTS+=		cond-op-not
612c3632d1SSimon J. GerratyTESTS+=		cond-op-or
622c3632d1SSimon J. GerratyTESTS+=		cond-op-parentheses
633841c287SSimon J. GerratyTESTS+=		cond-short
642c3632d1SSimon J. GerratyTESTS+=		cond-token-number
652c3632d1SSimon J. GerratyTESTS+=		cond-token-plain
662c3632d1SSimon J. GerratyTESTS+=		cond-token-string
672c3632d1SSimon J. GerratyTESTS+=		cond-token-var
683841c287SSimon J. GerratyTESTS+=		cond1
693841c287SSimon J. GerratyTESTS+=		cond2
702c3632d1SSimon J. GerratyTESTS+=		counter
712c3632d1SSimon J. GerratyTESTS+=		dep
722c3632d1SSimon J. GerratyTESTS+=		dep-colon
732c3632d1SSimon J. GerratyTESTS+=		dep-double-colon
742c3632d1SSimon J. GerratyTESTS+=		dep-exclam
752c3632d1SSimon J. GerratyTESTS+=		dep-none
762c3632d1SSimon J. GerratyTESTS+=		dep-var
772c3632d1SSimon J. GerratyTESTS+=		dep-wildcards
782c3632d1SSimon J. GerratyTESTS+=		depsrc
792c3632d1SSimon J. GerratyTESTS+=		depsrc-exec
802c3632d1SSimon J. GerratyTESTS+=		depsrc-ignore
812c3632d1SSimon J. GerratyTESTS+=		depsrc-made
822c3632d1SSimon J. GerratyTESTS+=		depsrc-make
832c3632d1SSimon J. GerratyTESTS+=		depsrc-meta
842c3632d1SSimon J. GerratyTESTS+=		depsrc-nometa
852c3632d1SSimon J. GerratyTESTS+=		depsrc-nometa_cmp
862c3632d1SSimon J. GerratyTESTS+=		depsrc-nopath
872c3632d1SSimon J. GerratyTESTS+=		depsrc-notmain
882c3632d1SSimon J. GerratyTESTS+=		depsrc-optional
892c3632d1SSimon J. GerratyTESTS+=		depsrc-phony
902c3632d1SSimon J. GerratyTESTS+=		depsrc-precious
912c3632d1SSimon J. GerratyTESTS+=		depsrc-recursive
922c3632d1SSimon J. GerratyTESTS+=		depsrc-silent
932c3632d1SSimon J. GerratyTESTS+=		depsrc-use
942c3632d1SSimon J. GerratyTESTS+=		depsrc-usebefore
952c3632d1SSimon J. GerratyTESTS+=		depsrc-usebefore-double-colon
962c3632d1SSimon J. GerratyTESTS+=		depsrc-wait
972c3632d1SSimon J. GerratyTESTS+=		deptgt
982c3632d1SSimon J. GerratyTESTS+=		deptgt-begin
992c3632d1SSimon J. GerratyTESTS+=		deptgt-default
1002c3632d1SSimon J. GerratyTESTS+=		deptgt-delete_on_error
1012c3632d1SSimon J. GerratyTESTS+=		deptgt-end
1022c3632d1SSimon J. GerratyTESTS+=		deptgt-error
1032c3632d1SSimon J. GerratyTESTS+=		deptgt-ignore
1042c3632d1SSimon J. GerratyTESTS+=		deptgt-interrupt
1052c3632d1SSimon J. GerratyTESTS+=		deptgt-main
1062c3632d1SSimon J. GerratyTESTS+=		deptgt-makeflags
1072c3632d1SSimon J. GerratyTESTS+=		deptgt-no_parallel
1082c3632d1SSimon J. GerratyTESTS+=		deptgt-nopath
1092c3632d1SSimon J. GerratyTESTS+=		deptgt-notparallel
1102c3632d1SSimon J. GerratyTESTS+=		deptgt-objdir
1112c3632d1SSimon J. GerratyTESTS+=		deptgt-order
1122c3632d1SSimon J. GerratyTESTS+=		deptgt-path
1132c3632d1SSimon J. GerratyTESTS+=		deptgt-path-suffix
1142c3632d1SSimon J. GerratyTESTS+=		deptgt-phony
1152c3632d1SSimon J. GerratyTESTS+=		deptgt-precious
1162c3632d1SSimon J. GerratyTESTS+=		deptgt-shell
1172c3632d1SSimon J. GerratyTESTS+=		deptgt-silent
1182c3632d1SSimon J. GerratyTESTS+=		deptgt-stale
1192c3632d1SSimon J. GerratyTESTS+=		deptgt-suffixes
1202c3632d1SSimon J. GerratyTESTS+=		dir
1212c3632d1SSimon J. GerratyTESTS+=		dir-expand-path
1222c3632d1SSimon J. GerratyTESTS+=		directive
1232c3632d1SSimon J. GerratyTESTS+=		directive-elif
1242c3632d1SSimon J. GerratyTESTS+=		directive-elifdef
1252c3632d1SSimon J. GerratyTESTS+=		directive-elifmake
1262c3632d1SSimon J. GerratyTESTS+=		directive-elifndef
1272c3632d1SSimon J. GerratyTESTS+=		directive-elifnmake
1282c3632d1SSimon J. GerratyTESTS+=		directive-else
1292c3632d1SSimon J. GerratyTESTS+=		directive-endif
1302c3632d1SSimon J. GerratyTESTS+=		directive-error
1312c3632d1SSimon J. GerratyTESTS+=		directive-export
1322c3632d1SSimon J. GerratyTESTS+=		directive-export-env
1332c3632d1SSimon J. GerratyTESTS+=		directive-export-literal
1342c3632d1SSimon J. GerratyTESTS+=		directive-for
1352c3632d1SSimon J. GerratyTESTS+=		directive-for-generating-endif
1362c3632d1SSimon J. GerratyTESTS+=		directive-if
1372c3632d1SSimon J. GerratyTESTS+=		directive-ifdef
1382c3632d1SSimon J. GerratyTESTS+=		directive-ifmake
1392c3632d1SSimon J. GerratyTESTS+=		directive-ifndef
1402c3632d1SSimon J. GerratyTESTS+=		directive-ifnmake
1412c3632d1SSimon J. GerratyTESTS+=		directive-info
1422c3632d1SSimon J. GerratyTESTS+=		directive-undef
1432c3632d1SSimon J. GerratyTESTS+=		directive-unexport
1442c3632d1SSimon J. GerratyTESTS+=		directive-unexport-env
1452c3632d1SSimon J. GerratyTESTS+=		directive-warning
1462c3632d1SSimon J. GerratyTESTS+=		directives
1473841c287SSimon J. GerratyTESTS+=		dollar
1483841c287SSimon J. GerratyTESTS+=		doterror
1493841c287SSimon J. GerratyTESTS+=		dotwait
1502c3632d1SSimon J. GerratyTESTS+=		envfirst
1513841c287SSimon J. GerratyTESTS+=		error
1523841c287SSimon J. GerratyTESTS+=		# escape	# broken by reverting POSIX changes
1533841c287SSimon J. GerratyTESTS+=		export
1543841c287SSimon J. GerratyTESTS+=		export-all
1553841c287SSimon J. GerratyTESTS+=		export-env
1562c3632d1SSimon J. GerratyTESTS+=		export-variants
1573841c287SSimon J. GerratyTESTS+=		forloop
1583841c287SSimon J. GerratyTESTS+=		forsubst
1593841c287SSimon J. GerratyTESTS+=		hash
1602c3632d1SSimon J. GerratyTESTS+=		impsrc
1613841c287SSimon J. GerratyTESTS+=		include-main
1622c3632d1SSimon J. GerratyTESTS+=		lint
1632c3632d1SSimon J. GerratyTESTS+=		make-exported
1643841c287SSimon J. GerratyTESTS+=		misc
1653841c287SSimon J. GerratyTESTS+=		moderrs
1663841c287SSimon J. GerratyTESTS+=		modmatch
1673841c287SSimon J. GerratyTESTS+=		modmisc
1683841c287SSimon J. GerratyTESTS+=		modts
1693841c287SSimon J. GerratyTESTS+=		modword
1702c3632d1SSimon J. GerratyTESTS+=		opt
1712c3632d1SSimon J. GerratyTESTS+=		opt-backwards
1722c3632d1SSimon J. GerratyTESTS+=		opt-chdir
1732c3632d1SSimon J. GerratyTESTS+=		opt-debug
1742c3632d1SSimon J. GerratyTESTS+=		opt-debug-g1
1752c3632d1SSimon J. GerratyTESTS+=		opt-define
1762c3632d1SSimon J. GerratyTESTS+=		opt-env
1772c3632d1SSimon J. GerratyTESTS+=		opt-file
1782c3632d1SSimon J. GerratyTESTS+=		opt-ignore
1792c3632d1SSimon J. GerratyTESTS+=		opt-include-dir
1802c3632d1SSimon J. GerratyTESTS+=		opt-jobs
1812c3632d1SSimon J. GerratyTESTS+=		opt-jobs-internal
1822c3632d1SSimon J. GerratyTESTS+=		opt-keep-going
1832c3632d1SSimon J. GerratyTESTS+=		opt-m-include-dir
1842c3632d1SSimon J. GerratyTESTS+=		opt-no-action
1852c3632d1SSimon J. GerratyTESTS+=		opt-no-action-at-all
1862c3632d1SSimon J. GerratyTESTS+=		opt-query
1872c3632d1SSimon J. GerratyTESTS+=		opt-raw
1882c3632d1SSimon J. GerratyTESTS+=		opt-silent
1892c3632d1SSimon J. GerratyTESTS+=		opt-touch
1902c3632d1SSimon J. GerratyTESTS+=		opt-tracefile
1912c3632d1SSimon J. GerratyTESTS+=		opt-var-expanded
1922c3632d1SSimon J. GerratyTESTS+=		opt-var-literal
1932c3632d1SSimon J. GerratyTESTS+=		opt-warnings-as-errors
1942c3632d1SSimon J. GerratyTESTS+=		opt-where-am-i
1952c3632d1SSimon J. GerratyTESTS+=		opt-x-reduce-exported
1963841c287SSimon J. GerratyTESTS+=		order
1972c3632d1SSimon J. GerratyTESTS+=		phony-end
1983841c287SSimon J. GerratyTESTS+=		posix
1993841c287SSimon J. GerratyTESTS+=		# posix1	# broken by reverting POSIX changes
2003841c287SSimon J. GerratyTESTS+=		qequals
2012c3632d1SSimon J. GerratyTESTS+=		recursive
2022c3632d1SSimon J. GerratyTESTS+=		sh
2032c3632d1SSimon J. GerratyTESTS+=		sh-dots
2042c3632d1SSimon J. GerratyTESTS+=		sh-jobs
2052c3632d1SSimon J. GerratyTESTS+=		sh-jobs-error
2062c3632d1SSimon J. GerratyTESTS+=		sh-leading-at
2072c3632d1SSimon J. GerratyTESTS+=		sh-leading-hyphen
2082c3632d1SSimon J. GerratyTESTS+=		sh-leading-plus
2092c3632d1SSimon J. GerratyTESTS+=		sh-meta-chars
2102c3632d1SSimon J. GerratyTESTS+=		sh-multi-line
2112c3632d1SSimon J. GerratyTESTS+=		sh-single-line
2122c3632d1SSimon J. GerratyTESTS+=		# suffixes	# runs into an endless loop (try -dA)
2133841c287SSimon J. GerratyTESTS+=		sunshcmd
2143841c287SSimon J. GerratyTESTS+=		sysv
2153841c287SSimon J. GerratyTESTS+=		ternary
2163841c287SSimon J. GerratyTESTS+=		unexport
2173841c287SSimon J. GerratyTESTS+=		unexport-env
2182c3632d1SSimon J. GerratyTESTS+=		use-inference
2192c3632d1SSimon J. GerratyTESTS+=		var-class
2202c3632d1SSimon J. GerratyTESTS+=		var-class-cmdline
2212c3632d1SSimon J. GerratyTESTS+=		var-class-env
2222c3632d1SSimon J. GerratyTESTS+=		var-class-global
2232c3632d1SSimon J. GerratyTESTS+=		var-class-local
2242c3632d1SSimon J. GerratyTESTS+=		var-class-local-legacy
2252c3632d1SSimon J. GerratyTESTS+=		var-op
2262c3632d1SSimon J. GerratyTESTS+=		var-op-append
2272c3632d1SSimon J. GerratyTESTS+=		var-op-assign
2282c3632d1SSimon J. GerratyTESTS+=		var-op-default
2292c3632d1SSimon J. GerratyTESTS+=		var-op-expand
2302c3632d1SSimon J. GerratyTESTS+=		var-op-shell
2313841c287SSimon J. GerratyTESTS+=		varcmd
2322c3632d1SSimon J. GerratyTESTS+=		vardebug
2332c3632d1SSimon J. GerratyTESTS+=		varfind
2343841c287SSimon J. GerratyTESTS+=		varmisc
2352c3632d1SSimon J. GerratyTESTS+=		varmod
2362c3632d1SSimon J. GerratyTESTS+=		varmod-assign
2372c3632d1SSimon J. GerratyTESTS+=		varmod-defined
2383841c287SSimon J. GerratyTESTS+=		varmod-edge
2392c3632d1SSimon J. GerratyTESTS+=		varmod-exclam-shell
2402c3632d1SSimon J. GerratyTESTS+=		varmod-extension
2412c3632d1SSimon J. GerratyTESTS+=		varmod-gmtime
2422c3632d1SSimon J. GerratyTESTS+=		varmod-hash
2432c3632d1SSimon J. GerratyTESTS+=		varmod-head
2442c3632d1SSimon J. GerratyTESTS+=		varmod-ifelse
2452c3632d1SSimon J. GerratyTESTS+=		varmod-l-name-to-value
2462c3632d1SSimon J. GerratyTESTS+=		varmod-localtime
2472c3632d1SSimon J. GerratyTESTS+=		varmod-loop
2482c3632d1SSimon J. GerratyTESTS+=		varmod-match
2492c3632d1SSimon J. GerratyTESTS+=		varmod-match-escape
2502c3632d1SSimon J. GerratyTESTS+=		varmod-no-match
2512c3632d1SSimon J. GerratyTESTS+=		varmod-order
2522c3632d1SSimon J. GerratyTESTS+=		varmod-order-reverse
2532c3632d1SSimon J. GerratyTESTS+=		varmod-order-shuffle
2542c3632d1SSimon J. GerratyTESTS+=		varmod-path
2552c3632d1SSimon J. GerratyTESTS+=		varmod-quote
2562c3632d1SSimon J. GerratyTESTS+=		varmod-quote-dollar
2572c3632d1SSimon J. GerratyTESTS+=		varmod-range
2582c3632d1SSimon J. GerratyTESTS+=		varmod-remember
2592c3632d1SSimon J. GerratyTESTS+=		varmod-root
2602c3632d1SSimon J. GerratyTESTS+=		varmod-select-words
2612c3632d1SSimon J. GerratyTESTS+=		varmod-shell
2622c3632d1SSimon J. GerratyTESTS+=		varmod-subst
2632c3632d1SSimon J. GerratyTESTS+=		varmod-subst-regex
2642c3632d1SSimon J. GerratyTESTS+=		varmod-sysv
2652c3632d1SSimon J. GerratyTESTS+=		varmod-tail
2662c3632d1SSimon J. GerratyTESTS+=		varmod-to-abs
2672c3632d1SSimon J. GerratyTESTS+=		varmod-to-lower
2682c3632d1SSimon J. GerratyTESTS+=		varmod-to-many-words
2692c3632d1SSimon J. GerratyTESTS+=		varmod-to-one-word
2702c3632d1SSimon J. GerratyTESTS+=		varmod-to-separator
2712c3632d1SSimon J. GerratyTESTS+=		varmod-to-upper
2722c3632d1SSimon J. GerratyTESTS+=		varmod-undefined
2732c3632d1SSimon J. GerratyTESTS+=		varmod-unique
2742c3632d1SSimon J. GerratyTESTS+=		varname
2752c3632d1SSimon J. GerratyTESTS+=		varname-dollar
2762c3632d1SSimon J. GerratyTESTS+=		varname-dot-alltargets
2772c3632d1SSimon J. GerratyTESTS+=		varname-dot-curdir
2782c3632d1SSimon J. GerratyTESTS+=		varname-dot-includes
2792c3632d1SSimon J. GerratyTESTS+=		varname-dot-includedfromdir
2802c3632d1SSimon J. GerratyTESTS+=		varname-dot-includedfromfile
2812c3632d1SSimon J. GerratyTESTS+=		varname-dot-libs
2822c3632d1SSimon J. GerratyTESTS+=		varname-dot-make-dependfile
2832c3632d1SSimon J. GerratyTESTS+=		varname-dot-make-expand_variables
2842c3632d1SSimon J. GerratyTESTS+=		varname-dot-make-exported
2852c3632d1SSimon J. GerratyTESTS+=		varname-dot-make-jobs
2862c3632d1SSimon J. GerratyTESTS+=		varname-dot-make-jobs-prefix
2872c3632d1SSimon J. GerratyTESTS+=		varname-dot-make-level
2882c3632d1SSimon J. GerratyTESTS+=		varname-dot-make-makefile_preference
2892c3632d1SSimon J. GerratyTESTS+=		varname-dot-make-makefiles
2902c3632d1SSimon J. GerratyTESTS+=		varname-dot-make-meta-bailiwick
2912c3632d1SSimon J. GerratyTESTS+=		varname-dot-make-meta-created
2922c3632d1SSimon J. GerratyTESTS+=		varname-dot-make-meta-files
2932c3632d1SSimon J. GerratyTESTS+=		varname-dot-make-meta-ignore_filter
2942c3632d1SSimon J. GerratyTESTS+=		varname-dot-make-meta-ignore_paths
2952c3632d1SSimon J. GerratyTESTS+=		varname-dot-make-meta-ignore_patterns
2962c3632d1SSimon J. GerratyTESTS+=		varname-dot-make-meta-prefix
2972c3632d1SSimon J. GerratyTESTS+=		varname-dot-make-mode
2982c3632d1SSimon J. GerratyTESTS+=		varname-dot-make-path_filemon
2992c3632d1SSimon J. GerratyTESTS+=		varname-dot-make-pid
3002c3632d1SSimon J. GerratyTESTS+=		varname-dot-make-ppid
3012c3632d1SSimon J. GerratyTESTS+=		varname-dot-make-save_dollars
3022c3632d1SSimon J. GerratyTESTS+=		varname-dot-makeoverrides
3032c3632d1SSimon J. GerratyTESTS+=		varname-dot-newline
3042c3632d1SSimon J. GerratyTESTS+=		varname-dot-objdir
3052c3632d1SSimon J. GerratyTESTS+=		varname-dot-parsedir
3062c3632d1SSimon J. GerratyTESTS+=		varname-dot-parsefile
3072c3632d1SSimon J. GerratyTESTS+=		varname-dot-path
3082c3632d1SSimon J. GerratyTESTS+=		varname-dot-shell
3092c3632d1SSimon J. GerratyTESTS+=		varname-dot-targets
3102c3632d1SSimon J. GerratyTESTS+=		varname-empty
3112c3632d1SSimon J. GerratyTESTS+=		varname-make
3122c3632d1SSimon J. GerratyTESTS+=		varname-make_print_var_on_error
3132c3632d1SSimon J. GerratyTESTS+=		varname-makeflags
3142c3632d1SSimon J. GerratyTESTS+=		varname-pwd
3152c3632d1SSimon J. GerratyTESTS+=		varname-vpath
3162c3632d1SSimon J. GerratyTESTS+=		varparse-dynamic
3173841c287SSimon J. GerratyTESTS+=		varquote
3183841c287SSimon J. GerratyTESTS+=		varshell
3193841c287SSimon J. Gerraty
3202c3632d1SSimon J. Gerraty# Additional environment variables for some of the tests.
3212c3632d1SSimon J. Gerraty# The base environment is -i PATH="$PATH".
3222c3632d1SSimon J. GerratyENV.envfirst=		FROM_ENV=value-from-env
3232c3632d1SSimon J. GerratyENV.varmisc=		FROM_ENV=env
3242c3632d1SSimon J. GerratyENV.varmisc+=		FROM_ENV_BEFORE=env
3252c3632d1SSimon J. GerratyENV.varmisc+=		FROM_ENV_AFTER=env
3262c3632d1SSimon J. Gerraty
3272c3632d1SSimon J. Gerraty# Override make flags for some of the tests; default is -k.
3282c3632d1SSimon J. Gerraty# If possible, write ".MAKEFLAGS: -dv" in the test .mk file instead of
3292c3632d1SSimon J. Gerraty# settings FLAGS.test=-dv here, since that is closer to the test code.
3302c3632d1SSimon J. GerratyFLAGS.archive=		-dA
3312c3632d1SSimon J. GerratyFLAGS.counter=		-dv
3322c3632d1SSimon J. GerratyFLAGS.directive-ifmake=	first second
3333841c287SSimon J. GerratyFLAGS.doterror=		# none
3342c3632d1SSimon J. GerratyFLAGS.envfirst=		-e
3352c3632d1SSimon J. GerratyFLAGS.export=		# none
3362c3632d1SSimon J. GerratyFLAGS.lint=		-dL -k
3372c3632d1SSimon J. GerratyFLAGS.opt-debug-g1=	-dg1
3382c3632d1SSimon J. GerratyFLAGS.opt-ignore=	-i
3392c3632d1SSimon J. GerratyFLAGS.opt-keep-going=	-k
3402c3632d1SSimon J. GerratyFLAGS.opt-no-action=	-n
3412c3632d1SSimon J. GerratyFLAGS.opt-query=	-q
3422c3632d1SSimon J. GerratyFLAGS.opt-var-expanded=	-v VAR -v VALUE
3432c3632d1SSimon J. GerratyFLAGS.opt-var-literal=	-V VAR -V VALUE
3442c3632d1SSimon J. GerratyFLAGS.opt-warnings-as-errors= -W
3453841c287SSimon J. GerratyFLAGS.order=		-j1
3462c3632d1SSimon J. GerratyFLAGS.recursive=	-dL
3472c3632d1SSimon J. GerratyFLAGS.sh-leading-plus=	-n
3482c3632d1SSimon J. GerratyFLAGS.vardebug=		-k -dv FROM_CMDLINE=
3492c3632d1SSimon J. GerratyFLAGS.varmod-match-escape= -dv
3502c3632d1SSimon J. GerratyFLAGS.varname-dot-shell= -dpv
3512c3632d1SSimon J. GerratyFLAGS.varname-empty=	-dv '$${:U}=cmdline-u' '=cmline-plain'
3523841c287SSimon J. Gerraty
3533841c287SSimon J. Gerraty# Some tests need extra post-processing.
3542c3632d1SSimon J. GerratySED_CMDS.opt-debug-g1=	-e 's,${.CURDIR},CURDIR,'
3552c3632d1SSimon J. GerratySED_CMDS.opt-debug-g1+=	-e '/Global Variables:/,/Suffixes:/d'
3562c3632d1SSimon J. GerratySED_CMDS.sh-dots=	-e 's,^.*\.\.\.:.*,<normalized: ...: not found>,'
3572c3632d1SSimon J. GerratySED_CMDS.varmod-subst-regex+= \
3582c3632d1SSimon J. Gerraty			-e 's,\(Regex compilation error:\).*,\1 (details omitted),'
3592c3632d1SSimon J. GerratySED_CMDS.varmod-edge+=	-e 's, line [0-9]*:, line omitted:,'
3602c3632d1SSimon J. GerratySED_CMDS.varshell+=	-e 's,^${.SHELL:T}: ,,'
3613841c287SSimon J. GerratySED_CMDS.varshell+=	-e '/command/s,No such.*,not found,'
3622c3632d1SSimon J. GerratySED_CMDS.varname-dot-shell=	-e 's, = /.*, = (details omitted),'
3632c3632d1SSimon J. GerratySED_CMDS.varname-dot-shell+=	-e 's,"/[^"]*","(details omitted)",'
3642c3632d1SSimon J. GerratySED_CMDS.varname-dot-shell+=	-e 's,\[/[^]]*\],[(details omitted)],'
3652c3632d1SSimon J. Gerraty
3662c3632d1SSimon J. Gerraty# Some tests need an additional round of postprocessing.
3672c3632d1SSimon J. GerratyPOSTPROC.counter=	${TOOL_SED} -n -e '/:RELEVANT = yes/,/:RELEVANT = no/p'
3682c3632d1SSimon J. GerratyPOSTPROC.deptgt-suffixes= \
3692c3632d1SSimon J. Gerraty			${TOOL_SED} -n -e '/^\#\*\*\* Suffixes/,/^\#\*/p'
3702c3632d1SSimon J. GerratyPOSTPROC.vardebug=	${TOOL_SED} -n -e '/:RELEVANT = yes/,/:RELEVANT = no/p'
3712c3632d1SSimon J. GerratyPOSTPROC.varmod-match-escape= ${TOOL_SED} -n -e '/^Pattern/p'
3722c3632d1SSimon J. GerratyPOSTPROC.varname-dot-shell= \
3732c3632d1SSimon J. Gerraty			awk '/\.SHELL/ || /^ParseReadLine/'
3742c3632d1SSimon J. GerratyPOSTPROC.varname-empty=	${TOOL_SED} -n -e '/^Var_Set/p' -e '/^out:/p'
3752c3632d1SSimon J. Gerraty
3762c3632d1SSimon J. Gerraty# Some tests reuse other tests, which makes them unnecessarily fragile.
3772c3632d1SSimon J. Gerratyexport-all.rawout: export.mk
3782c3632d1SSimon J. Gerratyunexport.rawout: export.mk
3792c3632d1SSimon J. Gerratyunexport-env.rawout: export.mk
3803841c287SSimon J. Gerraty
3813841c287SSimon J. Gerraty# End of the configuration section.
38249caa483SSimon J. Gerraty
38349caa483SSimon J. Gerraty.MAIN: all
38449caa483SSimon J. Gerraty
3852c3632d1SSimon J. Gerraty.-include "Makefile.inc"
38649caa483SSimon J. Gerraty.-include "Makefile.config"
38749caa483SSimon J. Gerraty
38849caa483SSimon J. GerratyUNIT_TESTS:=	${.PARSEDIR}
38949caa483SSimon J. Gerraty.PATH: ${UNIT_TESTS}
39049caa483SSimon J. Gerraty
3913841c287SSimon J. GerratyOUTFILES=	${TESTS:=.out}
39249caa483SSimon J. Gerraty
39349caa483SSimon J. Gerratyall: ${OUTFILES}
39449caa483SSimon J. Gerraty
3952c3632d1SSimon J. GerratyCLEANFILES=		*.rawout *.out *.status *.tmp *.core *.tmp
39649caa483SSimon J. GerratyCLEANFILES+=		obj*.[och] lib*.a	# posix1.mk
39749caa483SSimon J. GerratyCLEANFILES+=		issue* .[ab]*		# suffixes.mk
3982c3632d1SSimon J. GerratyCLEANDIRS=		dir dummy		# posix1.mk
39949caa483SSimon J. Gerraty
40049caa483SSimon J. Gerratyclean:
40149caa483SSimon J. Gerraty	rm -f ${CLEANFILES}
4022c3632d1SSimon J. Gerraty	rm -rf ${CLEANDIRS}
40349caa483SSimon J. Gerraty
40449caa483SSimon J. GerratyTEST_MAKE?=	${.MAKE}
40549caa483SSimon J. GerratyTOOL_SED?=	sed
40649caa483SSimon J. GerratyTOOL_TR?=	tr
40749caa483SSimon J. GerratyTOOL_DIFF?=	diff
4083841c287SSimon J. GerratyDIFF_FLAGS?=	-u
40949caa483SSimon J. Gerraty
41049caa483SSimon J. Gerraty.if defined(.PARSEDIR)
41149caa483SSimon J. Gerraty# ensure consistent results from sort(1)
41249caa483SSimon J. GerratyLC_ALL=		C
41349caa483SSimon J. GerratyLANG=		C
41449caa483SSimon J. Gerraty.export LANG LC_ALL
41549caa483SSimon J. Gerraty.endif
41649caa483SSimon J. Gerraty
4172c3632d1SSimon J. Gerraty.if ${.MAKE.MODE:Unormal:Mmeta} != ""
4182c3632d1SSimon J. Gerraty# we don't need the noise
4192c3632d1SSimon J. Gerraty_MKMSG_TEST= :
4202c3632d1SSimon J. Gerraty.endif
4212c3632d1SSimon J. Gerraty
42249caa483SSimon J. Gerraty# the tests are actually done with sub-makes.
42349caa483SSimon J. Gerraty.SUFFIXES: .mk .rawout .out
42449caa483SSimon J. Gerraty.mk.rawout:
4252c3632d1SSimon J. Gerraty	@${_MKMSG_TEST:Uecho '#      test '} ${.PREFIX}
4262c3632d1SSimon J. Gerraty	@set -eu; \
4272c3632d1SSimon J. Gerraty	cd ${.OBJDIR}; \
4282c3632d1SSimon J. Gerraty	env -i PATH="$$PATH" ${ENV.${.TARGET:R}} \
4292c3632d1SSimon J. Gerraty	  ${TEST_MAKE} \
4302c3632d1SSimon J. Gerraty	    -r -C ${.CURDIR} -f ${.IMPSRC} \
4312c3632d1SSimon J. Gerraty	    ${FLAGS.${.TARGET:R}:U-k} \
4322c3632d1SSimon J. Gerraty	    > ${.TARGET}.tmp 2>&1 \
4332c3632d1SSimon J. Gerraty	&& status=$$? || status=$$?; \
4342c3632d1SSimon J. Gerraty	echo $$status > ${.TARGET:R}.status
43549caa483SSimon J. Gerraty	@mv ${.TARGET}.tmp ${.TARGET}
43649caa483SSimon J. Gerraty
4373841c287SSimon J. Gerraty# Post-process the test output so that the results can be compared.
4383841c287SSimon J. Gerraty#
4393841c287SSimon J. Gerraty# always pretend .MAKE was called 'make'
4403841c287SSimon J. Gerraty_SED_CMDS+=	-e 's,^${TEST_MAKE:T:S,.,\\.,g}[][0-9]*:,make:,'
4413841c287SSimon J. Gerraty_SED_CMDS+=	-e 's,${TEST_MAKE:S,.,\\.,g},make,'
4423841c287SSimon J. Gerraty# replace anything after 'stopped in' with unit-tests
4433841c287SSimon J. Gerraty_SED_CMDS+=	-e '/stopped/s, /.*, unit-tests,'
4443841c287SSimon J. Gerraty# strip ${.CURDIR}/ from the output
4453841c287SSimon J. Gerraty_SED_CMDS+=	-e 's,${.CURDIR:S,.,\\.,g}/,,g'
4463841c287SSimon J. Gerraty_SED_CMDS+=	-e 's,${UNIT_TESTS:S,.,\\.,g}/,,g'
4473841c287SSimon J. Gerraty
44849caa483SSimon J. Gerraty.rawout.out:
4493841c287SSimon J. Gerraty	@${TOOL_SED} ${_SED_CMDS} ${SED_CMDS.${.TARGET:R}} \
4502c3632d1SSimon J. Gerraty	  < ${.IMPSRC} > ${.TARGET}.tmp1
4512c3632d1SSimon J. Gerraty	@${POSTPROC.${.TARGET:R}:Ucat} < ${.TARGET}.tmp1 > ${.TARGET}.tmp2
4522c3632d1SSimon J. Gerraty	@rm ${.TARGET}.tmp1
4532c3632d1SSimon J. Gerraty	@echo "exit status `cat ${.TARGET:R}.status`" >> ${.TARGET}.tmp2
4542c3632d1SSimon J. Gerraty	@mv ${.TARGET}.tmp2 ${.TARGET}
45549caa483SSimon J. Gerraty
45649caa483SSimon J. Gerraty# Compare all output files
45749caa483SSimon J. Gerratytest:	${OUTFILES} .PHONY
45849caa483SSimon J. Gerraty	@failed= ; \
4593841c287SSimon J. Gerraty	for test in ${TESTS}; do \
46049caa483SSimon J. Gerraty	  ${TOOL_DIFF} ${DIFF_FLAGS} ${UNIT_TESTS}/$${test}.exp $${test}.out \
46149caa483SSimon J. Gerraty	  || failed="$${failed}$${failed:+ }$${test}" ; \
46249caa483SSimon J. Gerraty	done ; \
46349caa483SSimon J. Gerraty	if [ -n "$${failed}" ]; then \
46449caa483SSimon J. Gerraty	  echo "Failed tests: $${failed}" ; false ; \
46549caa483SSimon J. Gerraty	else \
46649caa483SSimon J. Gerraty	  echo "All tests passed" ; \
46749caa483SSimon J. Gerraty	fi
46849caa483SSimon J. Gerraty
46949caa483SSimon J. Gerratyaccept:
4703841c287SSimon J. Gerraty	@for test in ${TESTS}; do \
47149caa483SSimon J. Gerraty	  cmp -s ${UNIT_TESTS}/$${test}.exp $${test}.out \
47249caa483SSimon J. Gerraty	  || { echo "Replacing $${test}.exp" ; \
47349caa483SSimon J. Gerraty	       cp $${test}.out ${UNIT_TESTS}/$${test}.exp ; } \
47449caa483SSimon J. Gerraty	done
47549caa483SSimon J. Gerraty
47649caa483SSimon J. Gerraty.if exists(${TEST_MAKE})
4772c3632d1SSimon J. Gerraty${TESTS:=.rawout}: ${TEST_MAKE} ${.PARSEDIR}/Makefile
47849caa483SSimon J. Gerraty.endif
47949caa483SSimon J. Gerraty
48049caa483SSimon J. Gerraty.-include <obj.mk>
481