bsd.regress.mk revision 1.26
1# $OpenBSD: bsd.regress.mk,v 1.26 2023/09/15 07:13:35 tb 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?=yes
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. if !commands(run-regress-$p)
37	./$p
38. endif
39.PHONY: run-regress-$p
40.endfor
41
42.if (defined(PROG) || defined(PROGS)) && !defined(REGRESS_TARGETS)
43REGRESS_TARGETS=	${PROG:S/^/run-regress-/} ${PROGS:S/^/run-regress-/}
44.  if defined(REGRESS_SKIP)
45REGRESS_SKIP_TARGETS=	${PROG:S/^/run-regress-/} ${PROGS:S/^/run-regress-/}
46.  endif
47.endif
48
49.if defined(REGRESS_SLOW_TARGETS) && ${REGRESS_SKIP_SLOW:L} != no
50REGRESS_SKIP_TARGETS+=${REGRESS_SLOW_TARGETS}
51.endif
52
53.if ${REGRESS_FAIL_EARLY:L} != no
54_REGRESS_FAILED = false
55.else
56_REGRESS_FAILED = true
57.endif
58
59.if defined(REGRESS_ROOT_TARGETS)
60_ROOTUSER!=id -g
61SUDO?=
62.  if (${_ROOTUSER} != 0) && empty(SUDO)
63REGRESS_SKIP_TARGETS+=${REGRESS_ROOT_TARGETS}
64.  endif
65.endif
66
67REGRESS_EXPECTED_FAILURES?=
68REGRESS_SETUP?=
69REGRESS_SETUP_ONCE?=
70REGRESS_CLEANUP?=
71
72.if !empty(REGRESS_SETUP)
73${REGRESS_TARGETS}: ${REGRESS_SETUP}
74.endif
75
76.if !empty(REGRESS_SETUP_ONCE)
77CLEANFILES+=${REGRESS_SETUP_ONCE:S/^/stamp-/}
78${REGRESS_TARGETS}: ${REGRESS_SETUP_ONCE:S/^/stamp-/}
79${REGRESS_SETUP_ONCE:S/^/stamp-/}: .SILENT
80	echo '==== ${@:S/^stamp-//} ===='
81	${MAKE} -C ${.CURDIR} ${@:S/^stamp-//}
82	date >$@
83	echo
84.endif
85
86regress: .SILENT
87.if !empty(REGRESS_SETUP_ONCE)
88	rm -f ${REGRESS_SETUP_ONCE:S/^/stamp-/}
89	${MAKE} -C ${.CURDIR} ${REGRESS_SETUP_ONCE:S/^/stamp-/}
90.endif
91.for RT in ${REGRESS_TARGETS}
92	echo '==== ${RT} ===='
93.  if ${REGRESS_SKIP_TARGETS:M${RT}}
94	echo -n "SKIP " ${_REGRESS_OUT}
95	echo SKIPPED
96.  elif ${REGRESS_EXPECTED_FAILURES:M${RT}}
97	if ${MAKE} -C ${.CURDIR} ${RT}; then \
98	    echo -n "XPASS " ${_REGRESS_OUT} ; \
99	    echo UNEXPECTED_PASS; \
100	    ${_REGRESS_FAILED}; \
101	else \
102	    echo -n "XFAIL " ${_REGRESS_OUT} ; \
103	    echo EXPECTED_FAIL; \
104	fi
105.  else
106	if ${MAKE} -C ${.CURDIR} ${RT}; then \
107	    echo -n "SUCCESS " ${_REGRESS_OUT} ; \
108	else \
109	    echo -n "FAIL " ${_REGRESS_OUT} ; \
110	    echo FAILED ; \
111	    ${_REGRESS_FAILED}; \
112	fi
113.  endif
114	echo ${_REGRESS_NAME}/${RT:S/^run-regress-//} ${_REGRESS_OUT}
115	echo
116.endfor
117.for RT in ${REGRESS_CLEANUP}
118	echo '==== ${RT} ===='
119	${MAKE} -C ${.CURDIR} ${RT}
120	echo
121.endfor
122	rm -f ${REGRESS_SETUP_ONCE:S/^/stamp-/}
123
124.if defined(ERRORS)
125.BEGIN:
126.  for _m in ${ERRORS}
127	@echo 1>&2 ${_m}
128.  endfor
129.  if !empty(ERRORS:M"Fatal\:*") || !empty(ERRORS:M'Fatal\:*')
130	@exit 1
131.  endif
132.endif
133
134.PHONY: regress
135