[BACK]Return to bsd.regress.mk CVS log [TXT][DIR] Up to [local] / src / share / mk

File: [local] / src / share / mk / bsd.regress.mk (download)

Revision 1.25, Fri Dec 9 09:30:54 2022 UTC (17 months, 4 weeks ago) by tb
Branch: MAIN
CVS Tags: OPENBSD_7_3_BASE, OPENBSD_7_3
Changes since 1.24: +3 -1 lines

Allow overriding default run-regress-* targets

Overriding a default run-regress-* target with custom commands is already
possible and done by many tests. The fact that it currently works depends
on behavior in the BUGs section of make.1, however. The fix is not to add
commands if the target is already defined with commands.

tested by anton
correct fix from espie, ok anton

# $OpenBSD: bsd.regress.mk,v 1.25 2022/12/09 09:30:54 tb Exp $
# Documented in bsd.regress.mk(5)

# No man pages for regression tests.
NOMAN=

# No installation.
install:

# If REGRESS_TARGETS is defined and PROG is not defined, set NOPROG
.if defined(REGRESS_TARGETS) && !defined(PROG) && !defined(PROGS)
NOPROG=
.endif

.include <bsd.prog.mk>

.MAIN: all
all: regress

# XXX - Need full path to REGRESS_LOG, otherwise there will be much pain.
REGRESS_LOG?=/dev/null
REGRESS_SKIP_TARGETS?=
REGRESS_SKIP_SLOW?=no
REGRESS_FAIL_EARLY?=no

.if ! ${REGRESS_LOG:M/*}
ERRORS += "Fatal: REGRESS_LOG=${REGRESS_LOG} is not an absolute path"
.endif

_REGRESS_NAME=${.CURDIR:S/${BSDSRCDIR}\/regress\///}
_REGRESS_TMP?=/dev/null
_REGRESS_OUT= | tee -a ${REGRESS_LOG} ${_REGRESS_TMP} 2>&1 > /dev/null

.for p in ${PROG} ${PROGS}
run-regress-$p: $p
. if !commands(run-regress-$p)
	./$p
. endif
.PHONY: run-regress-$p
.endfor

.if (defined(PROG) || defined(PROGS)) && !defined(REGRESS_TARGETS)
REGRESS_TARGETS=	${PROG:S/^/run-regress-/} ${PROGS:S/^/run-regress-/}
.  if defined(REGRESS_SKIP)
REGRESS_SKIP_TARGETS=	${PROG:S/^/run-regress-/} ${PROGS:S/^/run-regress-/}
.  endif
.endif

.if defined(REGRESS_SLOW_TARGETS) && ${REGRESS_SKIP_SLOW:L} != no
REGRESS_SKIP_TARGETS+=${REGRESS_SLOW_TARGETS}
.endif

.if ${REGRESS_FAIL_EARLY:L} != no
_REGRESS_FAILED = false
.else
_REGRESS_FAILED = true
.endif

.if defined(REGRESS_ROOT_TARGETS)
_ROOTUSER!=id -g
SUDO?=
.  if (${_ROOTUSER} != 0) && empty(SUDO)
REGRESS_SKIP_TARGETS+=${REGRESS_ROOT_TARGETS}
.  endif
.endif

REGRESS_EXPECTED_FAILURES?=
REGRESS_SETUP?=
REGRESS_SETUP_ONCE?=
REGRESS_CLEANUP?=

.if !empty(REGRESS_SETUP)
${REGRESS_TARGETS}: ${REGRESS_SETUP}
.endif

.if !empty(REGRESS_SETUP_ONCE)
CLEANFILES+=${REGRESS_SETUP_ONCE:S/^/stamp-/}
${REGRESS_TARGETS}: ${REGRESS_SETUP_ONCE:S/^/stamp-/}
${REGRESS_SETUP_ONCE:S/^/stamp-/}: .SILENT
	echo '==== ${@:S/^stamp-//} ===='
	${MAKE} -C ${.CURDIR} ${@:S/^stamp-//}
	date >$@
	echo
.endif

regress: .SILENT
.if !empty(REGRESS_SETUP_ONCE)
	rm -f ${REGRESS_SETUP_ONCE:S/^/stamp-/}
	${MAKE} -C ${.CURDIR} ${REGRESS_SETUP_ONCE:S/^/stamp-/}
.endif
.for RT in ${REGRESS_TARGETS}
	echo '==== ${RT} ===='
.  if ${REGRESS_SKIP_TARGETS:M${RT}}
	echo -n "SKIP " ${_REGRESS_OUT}
	echo SKIPPED
.  elif ${REGRESS_EXPECTED_FAILURES:M${RT}}
	if ${MAKE} -C ${.CURDIR} ${RT}; then \
	    echo -n "XPASS " ${_REGRESS_OUT} ; \
	    echo UNEXPECTED_PASS; \
	    ${_REGRESS_FAILED}; \
	else \
	    echo -n "XFAIL " ${_REGRESS_OUT} ; \
	    echo EXPECTED_FAIL; \
	fi
.  else
	if ${MAKE} -C ${.CURDIR} ${RT}; then \
	    echo -n "SUCCESS " ${_REGRESS_OUT} ; \
	else \
	    echo -n "FAIL " ${_REGRESS_OUT} ; \
	    echo FAILED ; \
	    ${_REGRESS_FAILED}; \
	fi
.  endif
	echo ${_REGRESS_NAME}/${RT:S/^run-regress-//} ${_REGRESS_OUT}
	echo
.endfor
.for RT in ${REGRESS_CLEANUP}
	echo '==== ${RT} ===='
	${MAKE} -C ${.CURDIR} ${RT}
	echo
.endfor
	rm -f ${REGRESS_SETUP_ONCE:S/^/stamp-/}

.if defined(ERRORS)
.BEGIN:
.  for _m in ${ERRORS}
	@echo 1>&2 ${_m}
.  endfor
.  if !empty(ERRORS:M"Fatal\:*") || !empty(ERRORS:M'Fatal\:*')
	@exit 1
.  endif
.endif

.PHONY: regress