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