bsd.regress.mk revision 1.14
1# $OpenBSD: bsd.regress.mk,v 1.14 2018/01/15 20:38:47 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)
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_REGRESS_NAME=${.CURDIR:S/${BSDSRCDIR}\/regress\///}
27_REGRESS_TMP?=/dev/null
28_REGRESS_OUT= | tee -a ${REGRESS_LOG} ${_REGRESS_TMP} 2>&1 > /dev/null
29
30.if defined(PROG) && !empty(PROG)
31run-regress-${PROG}: ${PROG}
32	./${PROG}
33.endif
34
35.if defined(PROG) && !defined(REGRESS_TARGETS)
36REGRESS_TARGETS=run-regress-${PROG}
37.  if defined(REGRESS_SKIP)
38REGRESS_SKIP_TARGETS=run-regress-${PROG}
39.  endif
40.endif
41
42.if defined(REGRESS_SLOW_TARGETS) && ${REGRESS_SKIP_SLOW} != no
43REGRESS_SKIP_TARGETS+=${REGRESS_SLOW_TARGETS}
44.endif
45
46.if ${REGRESS_FAIL_EARLY} != no
47_SKIP_FAIL=
48.else
49_SKIP_FAIL=-
50.endif
51
52.if defined(REGRESS_ROOT_TARGETS)
53_ROOTUSER!=id -g
54SUDO?=
55.  if (${_ROOTUSER} != 0) && empty(SUDO)
56REGRESS_SKIP_TARGETS+=${REGRESS_ROOT_TARGETS}
57.  endif
58.endif
59
60.if defined(ERRORS)
61.BEGIN:
62.  for _m in ${ERRORS}
63	@echo 1>&2 ${_m}
64.  endfor
65.  if !empty(ERRORS:M"Fatal\:*") || !empty(ERRORS:M'Fatal\:*')
66	@exit 1
67.  endif
68.endif 
69
70regress: .SILENT
71.if ! ${REGRESS_LOG:M/*}
72	echo =========================================================
73	echo REGRESS_LOG must contain an absolute path to the log-file.
74	echo It currently points to: ${REGRESS_LOG}
75	echo =========================================================
76	exit 1
77.endif
78.for RT in ${REGRESS_TARGETS} 
79.  if ${REGRESS_SKIP_TARGETS:M${RT}}
80	@echo -n "SKIP " ${_REGRESS_OUT}
81.  else
82# XXX - we need a better method to see if a test fails due to timeout or just
83#       normal failure.
84.   if !defined(REGRESS_MAXTIME)
85	${_SKIP_FAIL}if cd ${.CURDIR} && ${MAKE} ${RT}; then \
86	    echo -n "SUCCESS " ${_REGRESS_OUT} ; \
87	else \
88	    echo -n "FAIL " ${_REGRESS_OUT} ; \
89	    echo FAILED ; \
90	    false; \
91	fi
92.   else
93	${_SKIP_FAIL}if cd ${.CURDIR} && \
94	    (ulimit -t ${REGRESS_MAXTIME} ; ${MAKE} ${RT}); then \
95	    echo -n "SUCCESS " ${_REGRESS_OUT} ; \
96	else \
97	    echo -n "FAIL (possible timeout) " ${_REGRESS_OUT} ; \
98	    echo FAILED ; \
99	    false; \
100	fi
101.   endif
102.  endif
103	@echo ${_REGRESS_NAME}/${RT:S/^run-regress-//} ${_REGRESS_OUT}
104.endfor
105
106.PHONY: regress
107