1# $OpenBSD: bsd.regress.mk,v 1.24 2021/08/31 23:33:05 bluhm 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) && !defined(PROGS)
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.for p in ${PROG} ${PROGS}
35run-regress-$p: $p
36	./$p
37.PHONY: run-regress-$p
38.endfor
39
40.if (defined(PROG) || defined(PROGS)) && !defined(REGRESS_TARGETS)
41REGRESS_TARGETS=	${PROG:S/^/run-regress-/} ${PROGS:S/^/run-regress-/}
42.  if defined(REGRESS_SKIP)
43REGRESS_SKIP_TARGETS=	${PROG:S/^/run-regress-/} ${PROGS:S/^/run-regress-/}
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	echo '==== ${@:S/^stamp-//} ===='
79	${MAKE} -C ${.CURDIR} ${@:S/^stamp-//}
80	date >$@
81	echo
82.endif
83
84regress: .SILENT
85.if !empty(REGRESS_SETUP_ONCE)
86	rm -f ${REGRESS_SETUP_ONCE:S/^/stamp-/}
87	${MAKE} -C ${.CURDIR} ${REGRESS_SETUP_ONCE:S/^/stamp-/}
88.endif
89.for RT in ${REGRESS_TARGETS}
90	echo '==== ${RT} ===='
91.  if ${REGRESS_SKIP_TARGETS:M${RT}}
92	echo -n "SKIP " ${_REGRESS_OUT}
93	echo SKIPPED
94.  elif ${REGRESS_EXPECTED_FAILURES:M${RT}}
95	if ${MAKE} -C ${.CURDIR} ${RT}; then \
96	    echo -n "XPASS " ${_REGRESS_OUT} ; \
97	    echo UNEXPECTED_PASS; \
98	    ${_REGRESS_FAILED}; \
99	else \
100	    echo -n "XFAIL " ${_REGRESS_OUT} ; \
101	    echo EXPECTED_FAIL; \
102	fi
103.  else
104	if ${MAKE} -C ${.CURDIR} ${RT}; then \
105	    echo -n "SUCCESS " ${_REGRESS_OUT} ; \
106	else \
107	    echo -n "FAIL " ${_REGRESS_OUT} ; \
108	    echo FAILED ; \
109	    ${_REGRESS_FAILED}; \
110	fi
111.  endif
112	echo ${_REGRESS_NAME}/${RT:S/^run-regress-//} ${_REGRESS_OUT}
113	echo
114.endfor
115.for RT in ${REGRESS_CLEANUP}
116	echo '==== ${RT} ===='
117	${MAKE} -C ${.CURDIR} ${RT}
118	echo
119.endfor
120	rm -f ${REGRESS_SETUP_ONCE:S/^/stamp-/}
121
122.if defined(ERRORS)
123.BEGIN:
124.  for _m in ${ERRORS}
125	@echo 1>&2 ${_m}
126.  endfor
127.  if !empty(ERRORS:M"Fatal\:*") || !empty(ERRORS:M'Fatal\:*')
128	@exit 1
129.  endif
130.endif
131
132.PHONY: regress
133