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