xref: /openbsd/share/mk/bsd.regress.mk (revision 09467b48)
1# $OpenBSD: bsd.regress.mk,v 1.21 2019/06/17 17:20:24 espie Exp $
2# Documented in bsd.regress.mk(5)
3
4# No man pages for regression tests.
5NOMAN=
6
7# No installation.
8install:
9
10# If REGRESS_TARGETS is defined and PROG is not defined, set NOPROG
11.if defined(REGRESS_TARGETS) && !defined(PROG)
12NOPROG=
13.endif
14
15.include <bsd.prog.mk>
16
17.MAIN: all
18all: regress
19
20# XXX - Need full path to REGRESS_LOG, otherwise there will be much pain.
21REGRESS_LOG?=/dev/null
22REGRESS_SKIP_TARGETS?=
23REGRESS_SKIP_SLOW?=no
24REGRESS_FAIL_EARLY?=no
25
26.if ! ${REGRESS_LOG:M/*}
27ERRORS += "Fatal: REGRESS_LOG=${REGRESS_LOG} is not an absolute path"
28.endif
29
30_REGRESS_NAME=${.CURDIR:S/${BSDSRCDIR}\/regress\///}
31_REGRESS_TMP?=/dev/null
32_REGRESS_OUT= | tee -a ${REGRESS_LOG} ${_REGRESS_TMP} 2>&1 > /dev/null
33
34.if defined(PROG) && !empty(PROG)
35run-regress-${PROG}: ${PROG}
36	./${PROG}
37.PHONY: run-regress-${PROG}
38.endif
39
40.if defined(PROG) && !defined(REGRESS_TARGETS)
41REGRESS_TARGETS=run-regress-${PROG}
42.  if defined(REGRESS_SKIP)
43REGRESS_SKIP_TARGETS=run-regress-${PROG}
44.  endif
45.endif
46
47.if defined(REGRESS_SLOW_TARGETS) && ${REGRESS_SKIP_SLOW:L} != no
48REGRESS_SKIP_TARGETS+=${REGRESS_SLOW_TARGETS}
49.endif
50
51.if ${REGRESS_FAIL_EARLY:L} != no
52_REGRESS_FAILED = false
53.else
54_REGRESS_FAILED = true
55.endif
56
57.if defined(REGRESS_ROOT_TARGETS)
58_ROOTUSER!=id -g
59SUDO?=
60.  if (${_ROOTUSER} != 0) && empty(SUDO)
61REGRESS_SKIP_TARGETS+=${REGRESS_ROOT_TARGETS}
62.  endif
63.endif
64
65REGRESS_EXPECTED_FAILURES?=
66REGRESS_SETUP?=
67REGRESS_SETUP_ONCE?=
68REGRESS_CLEANUP?=
69
70.if !empty(REGRESS_SETUP)
71${REGRESS_TARGETS}: ${REGRESS_SETUP}
72.endif
73
74.if !empty(REGRESS_SETUP_ONCE)
75CLEANFILES+=${REGRESS_SETUP_ONCE:S/^/stamp-/}
76${REGRESS_TARGETS}: ${REGRESS_SETUP_ONCE:S/^/stamp-/}
77${REGRESS_SETUP_ONCE:S/^/stamp-/}: .SILENT
78	${MAKE} -C ${.CURDIR} ${@:S/^stamp-//}
79	date >$@
80.endif
81
82regress: .SILENT
83.if !empty(REGRESS_SETUP_ONCE)
84	rm -f ${REGRESS_SETUP_ONCE:S/^/stamp-/}
85.endif
86.for RT in ${REGRESS_TARGETS}
87.  if ${REGRESS_SKIP_TARGETS:M${RT}}
88	echo -n "SKIP " ${_REGRESS_OUT}
89	echo SKIPPED
90.  elif ${REGRESS_EXPECTED_FAILURES:M${RT}}
91	if ${MAKE} -C ${.CURDIR} ${RT}; then \
92	    echo -n "XPASS " ${_REGRESS_OUT} ; \
93	    echo UNEXPECTED_PASS; \
94	    ${_REGRESS_FAILED}; \
95	else \
96	    echo -n "XFAIL " ${_REGRESS_OUT} ; \
97	    echo EXPECTED_FAIL; \
98	fi
99.  else
100	if ${MAKE} -C ${.CURDIR} ${RT}; then \
101	    echo -n "SUCCESS " ${_REGRESS_OUT} ; \
102	else \
103	    echo -n "FAIL " ${_REGRESS_OUT} ; \
104	    echo FAILED ; \
105	    ${_REGRESS_FAILED}; \
106	fi
107.  endif
108	echo ${_REGRESS_NAME}/${RT:S/^run-regress-//} ${_REGRESS_OUT}
109.endfor
110.for RT in ${REGRESS_CLEANUP}
111	${MAKE} -C ${.CURDIR} ${RT}
112.endfor
113	rm -f ${REGRESS_SETUP_ONCE:S/^/stamp-/}
114
115.if defined(ERRORS)
116.BEGIN:
117.  for _m in ${ERRORS}
118	@echo 1>&2 ${_m}
119.  endfor
120.  if !empty(ERRORS:M"Fatal\:*") || !empty(ERRORS:M'Fatal\:*')
121	@exit 1
122.  endif
123.endif
124
125.PHONY: regress
126