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