xref: /freebsd/usr.bin/bmake/unit-tests/Makefile (revision db29cad8157b2f3afdb890831ddf73da0f4c01c0)
1d4d90f10SMarcel Moolenaar# This is a generated file, do NOT edit!
2d4d90f10SMarcel Moolenaar# See contrib/bmake/bsd.after-import.mk
3d4d90f10SMarcel Moolenaar#
4d4d90f10SMarcel Moolenaar# $FreeBSD$
5d4d90f10SMarcel Moolenaar
6d4d90f10SMarcel MoolenaarSRCTOP?= ${.CURDIR:H:H:H}
7d4d90f10SMarcel Moolenaar
8*db29cad8SSimon J. Gerraty# $Id: Makefile.in,v 1.46 2014/11/06 01:47:57 sjg Exp $
9d4d90f10SMarcel Moolenaar#
10*db29cad8SSimon J. Gerraty# $NetBSD: Makefile,v 1.51 2014/10/20 23:21:11 sjg Exp $
11d4d90f10SMarcel Moolenaar#
12d4d90f10SMarcel Moolenaar# Unit tests for make(1)
13d4d90f10SMarcel Moolenaar# The main targets are:
14d4d90f10SMarcel Moolenaar#
15d4d90f10SMarcel Moolenaar# all:	run all the tests
16*db29cad8SSimon J. Gerraty# test:	run 'all', and compare to expected results
17d4d90f10SMarcel Moolenaar# accept: move generated output to expected results
18d4d90f10SMarcel Moolenaar#
19d4d90f10SMarcel Moolenaar# Adding a test case.
20d4d90f10SMarcel Moolenaar# Each feature should get its own set of tests in its own suitably
21*db29cad8SSimon J. Gerraty# named makefile (*.mk), with its own set of expected results (*.exp),
22*db29cad8SSimon J. Gerraty# and it should be added to the TESTNAMES list.
23d4d90f10SMarcel Moolenaar#
24d4d90f10SMarcel Moolenaar
25d4d90f10SMarcel Moolenaarsrcdir= ${SRCTOP}/contrib/bmake/unit-tests
26d4d90f10SMarcel Moolenaar
27d4d90f10SMarcel Moolenaar.MAIN: all
28d4d90f10SMarcel Moolenaar
29d4d90f10SMarcel MoolenaarUNIT_TESTS:= ${srcdir}
30*db29cad8SSimon J. Gerraty.PATH: ${UNIT_TESTS}
31d4d90f10SMarcel Moolenaar
32*db29cad8SSimon J. Gerraty# Each test is in a sub-makefile.
33*db29cad8SSimon J. Gerraty# Keep the list sorted.
34*db29cad8SSimon J. GerratyTESTNAMES= \
35d4d90f10SMarcel Moolenaar	comment \
36d4d90f10SMarcel Moolenaar	cond1 \
37d4d90f10SMarcel Moolenaar	error \
38d4d90f10SMarcel Moolenaar	export \
39d4d90f10SMarcel Moolenaar	export-all \
401748de26SSimon J. Gerraty	export-env \
41d4d90f10SMarcel Moolenaar	doterror \
42d4d90f10SMarcel Moolenaar	dotwait \
43d4d90f10SMarcel Moolenaar	forloop \
44d4d90f10SMarcel Moolenaar	forsubst \
45d4d90f10SMarcel Moolenaar	hash \
46d4d90f10SMarcel Moolenaar	misc \
47d4d90f10SMarcel Moolenaar	moderrs \
48d4d90f10SMarcel Moolenaar	modmatch \
49d4d90f10SMarcel Moolenaar	modmisc \
50d4d90f10SMarcel Moolenaar	modorder \
51d4d90f10SMarcel Moolenaar	modts \
52d4d90f10SMarcel Moolenaar	modword \
5359a02420SSimon J. Gerraty	order \
54d4d90f10SMarcel Moolenaar	posix \
55d4d90f10SMarcel Moolenaar	qequals \
561bbe5942SSimon J. Gerraty	sunshcmd \
57d4d90f10SMarcel Moolenaar	sysv \
58d4d90f10SMarcel Moolenaar	ternary \
59d4d90f10SMarcel Moolenaar	unexport \
60d4d90f10SMarcel Moolenaar	unexport-env \
61*db29cad8SSimon J. Gerraty	varcmd \
62*db29cad8SSimon J. Gerraty	varmisc \
63*db29cad8SSimon J. Gerraty	varshell
64d4d90f10SMarcel Moolenaar
65*db29cad8SSimon J. Gerraty# these tests were broken by referting POSIX chanegs
66*db29cad8SSimon J. GerratySTRICT_POSIX_TESTS = \
67*db29cad8SSimon J. Gerraty	escape \
68*db29cad8SSimon J. Gerraty	impsrc \
69*db29cad8SSimon J. Gerraty	phony-end \
70*db29cad8SSimon J. Gerraty	posix1 \
71*db29cad8SSimon J. Gerraty	suffixes
72d4d90f10SMarcel Moolenaar
73*db29cad8SSimon J. Gerraty# Override make flags for certain tests
74d4d90f10SMarcel Moolenaarflags.doterror=
7559a02420SSimon J. Gerratyflags.order=-j1
76d4d90f10SMarcel Moolenaar
77*db29cad8SSimon J. GerratyOUTFILES= ${TESTNAMES:S/$/.out/}
78*db29cad8SSimon J. Gerraty
79*db29cad8SSimon J. Gerratyall: ${OUTFILES}
80*db29cad8SSimon J. Gerraty
81*db29cad8SSimon J. GerratyCLEANFILES += *.rawout *.out *.status *.tmp *.core *.tmp
82*db29cad8SSimon J. GerratyCLEANFILES += obj*.[och] lib*.a		# posix1.mk
83*db29cad8SSimon J. GerratyCLEANFILES += issue* .[ab]*		# suffixes.mk
84*db29cad8SSimon J. GerratyCLEANRECURSIVE += dir dummy		# posix1.mk
85d4d90f10SMarcel Moolenaar
86d4d90f10SMarcel Moolenaarclean:
87*db29cad8SSimon J. Gerraty	rm -f ${CLEANFILES}
88*db29cad8SSimon J. Gerraty.if !empty(CLEANRECURSIVE)
89*db29cad8SSimon J. Gerraty	rm -rf ${CLEANRECURSIVE}
90*db29cad8SSimon J. Gerraty.endif
91d4d90f10SMarcel Moolenaar
92d4d90f10SMarcel MoolenaarTEST_MAKE?= ${.MAKE}
93d4d90f10SMarcel MoolenaarTOOL_SED?= sed
94d4d90f10SMarcel MoolenaarTOOL_TR?= tr
95d4d90f10SMarcel MoolenaarTOOL_DIFF?= diff
96d4d90f10SMarcel MoolenaarDIFF_FLAGS?= -u
97d4d90f10SMarcel Moolenaar
984639b858SSimon J. Gerraty.if defined(.PARSEDIR)
99d4d90f10SMarcel Moolenaar# ensure consistent results from sort(1)
100d4d90f10SMarcel MoolenaarLC_ALL= C
101d4d90f10SMarcel MoolenaarLANG= C
102d4d90f10SMarcel Moolenaar.export LANG LC_ALL
1034639b858SSimon J. Gerraty.endif
104d4d90f10SMarcel Moolenaar
105*db29cad8SSimon J. Gerraty# some tests need extra post-processing
106*db29cad8SSimon J. GerratySED_CMDS.varshell = -e 's,^[a-z]*sh: ,,' \
107*db29cad8SSimon J. Gerraty	-e '/command/s,No such.*,not found,'
108*db29cad8SSimon J. Gerraty
109*db29cad8SSimon J. Gerraty# the tests are actually done with sub-makes.
110*db29cad8SSimon J. Gerraty.SUFFIXES: .mk .rawout .out
111*db29cad8SSimon J. Gerraty.mk.rawout:
112*db29cad8SSimon J. Gerraty	@echo ${TEST_MAKE} ${flags.${.TARGET:R}:U-k} -f ${.IMPSRC}
113*db29cad8SSimon J. Gerraty	-@cd ${.OBJDIR} && \
114*db29cad8SSimon J. Gerraty	{ ${TEST_MAKE} ${flags.${.TARGET:R}:U-k} -f ${.IMPSRC} \
115*db29cad8SSimon J. Gerraty	  2>&1 ; echo $$? >${.TARGET:R}.status ; } > ${.TARGET}.tmp
116*db29cad8SSimon J. Gerraty	@mv ${.TARGET}.tmp ${.TARGET}
117*db29cad8SSimon J. Gerraty
118d4d90f10SMarcel Moolenaar# We always pretend .MAKE was called 'make'
119d4d90f10SMarcel Moolenaar# and strip ${.CURDIR}/ from the output
120d4d90f10SMarcel Moolenaar# and replace anything after 'stopped in' with unit-tests
121d4d90f10SMarcel Moolenaar# so the results can be compared.
122*db29cad8SSimon J. Gerraty.rawout.out:
123*db29cad8SSimon J. Gerraty	@echo postprocess ${.TARGET}
124*db29cad8SSimon J. Gerraty	@${TOOL_SED} -e 's,^${TEST_MAKE:T:C/\./\\\./g}[][0-9]*:,make:,' \
125*db29cad8SSimon J. Gerraty	  -e 's,${TEST_MAKE:C/\./\\\./g},make,' \
126d4d90f10SMarcel Moolenaar	  -e '/stopped/s, /.*, unit-tests,' \
127d4d90f10SMarcel Moolenaar	  -e 's,${.CURDIR:C/\./\\\./g}/,,g' \
128*db29cad8SSimon J. Gerraty	  -e 's,${UNIT_TESTS:C/\./\\\./g}/,,g' ${SED_CMDS.${.TARGET:T:R}} \
129*db29cad8SSimon J. Gerraty	  < ${.IMPSRC} > ${.TARGET}.tmp
130*db29cad8SSimon J. Gerraty	@echo "exit status `cat ${.TARGET:R}.status`" >> ${.TARGET}.tmp
131*db29cad8SSimon J. Gerraty	@mv ${.TARGET}.tmp ${.TARGET}
132*db29cad8SSimon J. Gerraty
133*db29cad8SSimon J. Gerraty# Compare all output files
134*db29cad8SSimon J. Gerratytest:	${OUTFILES} .PHONY
135*db29cad8SSimon J. Gerraty	@failed= ; \
136*db29cad8SSimon J. Gerraty	for test in ${TESTNAMES}; do \
137*db29cad8SSimon J. Gerraty	  ${TOOL_DIFF} -u ${UNIT_TESTS}/$${test}.exp $${test}.out \
138*db29cad8SSimon J. Gerraty	  || failed="$${failed}$${failed:+ }$${test}" ; \
139*db29cad8SSimon J. Gerraty	done ; \
140*db29cad8SSimon J. Gerraty	if [ -n "$${failed}" ]; then \
141*db29cad8SSimon J. Gerraty	  echo "Failed tests: $${failed}" ; false ; \
142*db29cad8SSimon J. Gerraty	else \
143*db29cad8SSimon J. Gerraty	  echo "All tests passed" ; \
144*db29cad8SSimon J. Gerraty	fi
145d4d90f10SMarcel Moolenaar
146d4d90f10SMarcel Moolenaaraccept:
147*db29cad8SSimon J. Gerraty	@for test in ${TESTNAMES}; do \
148*db29cad8SSimon J. Gerraty	  cmp -s ${UNIT_TESTS}/$${test}.exp $${test}.out \
149*db29cad8SSimon J. Gerraty	  || { echo "Replacing $${test}.exp" ; \
150*db29cad8SSimon J. Gerraty	       cp $${test}.out ${UNIT_TESTS}/$${test}.exp ; } \
151*db29cad8SSimon J. Gerraty	done
152d4d90f10SMarcel Moolenaar
153*db29cad8SSimon J. Gerraty.if exists(${TEST_MAKE})
154*db29cad8SSimon J. Gerraty${TESTNAMES:S/$/.rawout/}: ${TEST_MAKE}
155*db29cad8SSimon J. Gerraty.endif
156*db29cad8SSimon J. Gerraty
157*db29cad8SSimon J. Gerraty.sinclude <bsd.obj.mk>
158