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