Home | History | Annotate | Line # | Download | only in mk
bsd.test.mk revision 1.25.4.1
      1  1.25.4.1  christos # $NetBSD: bsd.test.mk,v 1.25.4.1 2019/06/10 22:05:42 christos Exp $
      2       1.1      jmmv #
      3       1.1      jmmv 
      4       1.4  drochner .include <bsd.init.mk>
      5       1.4  drochner 
      6      1.15      jmmv _TESTS:=	# empty
      7       1.1      jmmv 
      8      1.11      jmmv .if defined(TESTS_SUBDIRS)
      9      1.11      jmmv SUBDIR+=	${TESTS_SUBDIRS}
     10      1.11      jmmv .endif
     11      1.25       kre .if defined(TESTS_SUBDIR_INSTALL_ONLY)
     12      1.25       kre SUBDIR+=	${TESTS_SUBDIR_INSTALL_ONLY}
     13      1.25       kre .endif
     14      1.11      jmmv 
     15      1.11      jmmv .include <bsd.subdir.mk>
     16      1.11      jmmv 
     17       1.7      jmmv .if defined(TESTS_C)
     18      1.15      jmmv _TESTS+=	${TESTS_C}
     19       1.7      jmmv PROGS+=		${TESTS_C}
     20       1.7      jmmv .  for _T in ${TESTS_C}
     21       1.7      jmmv BINDIR.${_T}=	${TESTSDIR}
     22      1.20      jmmv LDADD.${_T}+=	-latf-c
     23      1.20      jmmv DPADD.${_T}+=	${LIBATF_C}
     24       1.7      jmmv MAN.${_T}?=	# empty
     25       1.7      jmmv .  endfor
     26       1.7      jmmv .endif
     27       1.7      jmmv 
     28       1.1      jmmv .if defined(TESTS_CXX)
     29      1.15      jmmv _TESTS+=	${TESTS_CXX}
     30       1.1      jmmv PROGS_CXX+=	${TESTS_CXX}
     31       1.1      jmmv .  for _T in ${TESTS_CXX}
     32       1.1      jmmv BINDIR.${_T}=	${TESTSDIR}
     33      1.20      jmmv LDADD.${_T}+=	-latf-c++ -latf-c
     34      1.20      jmmv DPADD.${_T}+=	${LIBATF_CXX} ${LIBATF_C}
     35       1.1      jmmv MAN.${_T}?=	# empty
     36       1.1      jmmv .  endfor
     37       1.1      jmmv .endif
     38       1.1      jmmv 
     39       1.1      jmmv .if defined(TESTS_SH)
     40      1.15      jmmv _TESTS+=		${TESTS_SH}
     41      1.19       apb CLEANDIRFILES+=		${TESTS_SH}
     42       1.1      jmmv 
     43       1.1      jmmv .  for _T in ${TESTS_SH}
     44       1.1      jmmv SCRIPTS+=		${_T}
     45       1.1      jmmv SCRIPTSDIR_${_T}=	${TESTSDIR}
     46       1.1      jmmv 
     47      1.19       apb CLEANDIRFILES+=		${_T}.tmp
     48       1.1      jmmv 
     49       1.1      jmmv TESTS_SH_SRC_${_T}?=	${_T}.sh
     50       1.8      jmmv ${_T}: ${TESTS_SH_SRC_${_T}}
     51       1.1      jmmv 	${_MKTARGET_BUILD}
     52       1.8      jmmv 	echo '#! /usr/bin/atf-sh' >${.TARGET}.tmp
     53       1.8      jmmv 	cat ${.ALLSRC} >>${.TARGET}.tmp
     54       1.8      jmmv 	chmod +x ${.TARGET}.tmp
     55  1.25.4.1  christos 	${MV} ${.TARGET}.tmp ${.TARGET}
     56       1.1      jmmv .  endfor
     57       1.1      jmmv .endif
     58       1.1      jmmv 
     59      1.11      jmmv ATFFILE?=	auto
     60      1.24      jmmv .if ${MKKYUA} != "no"
     61      1.24      jmmv KYUAFILE?=	${ATFFILE}
     62      1.24      jmmv .else
     63      1.24      jmmv KYUAFILE=	no
     64      1.24      jmmv .endif
     65      1.11      jmmv 
     66      1.22      jmmv # Additional list of 'tp' entries to add to the Atffile when ATFFILE=auto.
     67      1.23      jmmv # These entries must all correspond to subdirectories to descend into.
     68      1.23      jmmv #
     69      1.22      jmmv # This is useful in the cases where the tests in a single directory come
     70      1.22      jmmv # from various sources (e.g. src/tests and src/external/.../tests) and
     71      1.22      jmmv # the installation of some of those tests rely on MK* variables being set.
     72      1.23      jmmv ATFFILE_EXTRA_SUBDIRS?=
     73      1.22      jmmv 
     74      1.15      jmmv .if ${ATFFILE:tl} != "no"
     75       1.1      jmmv FILES+=			Atffile
     76       1.1      jmmv FILESDIR_Atffile=	${TESTSDIR}
     77      1.11      jmmv 
     78      1.15      jmmv .  if ${ATFFILE:tl} == "auto"
     79      1.19       apb CLEANDIRFILES+=	Atffile Atffile.tmp
     80      1.15      jmmv 
     81      1.11      jmmv realall: Atffile
     82      1.11      jmmv Atffile: Makefile
     83      1.11      jmmv 	${_MKTARGET_CREATE}
     84      1.11      jmmv 	@{ echo 'Content-Type: application/X-atf-atffile; version="1"'; \
     85      1.11      jmmv 	echo; \
     86      1.11      jmmv 	echo '# Automatically generated by bsd.test.mk.'; \
     87      1.11      jmmv 	echo; \
     88      1.11      jmmv 	echo 'prop: test-suite = "NetBSD"'; \
     89      1.11      jmmv 	echo; \
     90      1.23      jmmv 	for tp in ${TESTS_SUBDIRS:N.WAIT} ${_TESTS} ${ATFFILE_EXTRA_SUBDIRS}; \
     91      1.23      jmmv 	do \
     92      1.11      jmmv 	    echo "tp: $${tp}"; \
     93      1.11      jmmv 	done; } >Atffile.tmp
     94  1.25.4.1  christos 	@${MV} Atffile.tmp Atffile
     95      1.11      jmmv .  endif
     96      1.24      jmmv .endif
     97      1.24      jmmv 
     98      1.24      jmmv .if ${KYUAFILE:tl} != "no"
     99      1.24      jmmv FILES+=			Kyuafile
    100      1.24      jmmv FILESDIR_Kyuafile=	${TESTSDIR}
    101      1.24      jmmv 
    102      1.24      jmmv .  if ${KYUAFILE:tl} == "auto"
    103      1.24      jmmv CLEANDIRFILES+=	Kyuafile Kyuafile.tmp
    104      1.24      jmmv 
    105      1.24      jmmv realall: Kyuafile
    106      1.24      jmmv Kyuafile: Makefile
    107      1.24      jmmv 	${_MKTARGET_CREATE}
    108      1.24      jmmv 	@{ \
    109      1.24      jmmv 	    echo '-- Automatically generated by bsd.test.mk.'; \
    110      1.24      jmmv 	    echo; \
    111      1.24      jmmv 	    echo 'syntax(2)'; \
    112      1.24      jmmv 	    echo; \
    113      1.24      jmmv 	    echo 'test_suite("NetBSD")'; \
    114      1.24      jmmv 	    if [ -n "${_TESTS}" ]; then \
    115      1.24      jmmv 	        echo; \
    116      1.24      jmmv 	        for tp in ${_TESTS}; do \
    117      1.24      jmmv 	            echo "atf_test_program{name=\"$${tp}\"}"; \
    118      1.24      jmmv 	        done; \
    119      1.24      jmmv 	    fi; \
    120      1.24      jmmv 	    if [ -n "${TESTS_SUBDIRS:N.WAIT}" -o \
    121      1.24      jmmv 	         -n "${ATFFILE_EXTRA_SUBDIRS}" ]; then \
    122      1.24      jmmv 	        echo; \
    123      1.24      jmmv 	        for subdir in ${TESTS_SUBDIRS:N.WAIT} \
    124      1.24      jmmv 	                      ${ATFFILE_EXTRA_SUBDIRS}; do \
    125      1.24      jmmv 	            echo "include(\"$${subdir}/Kyuafile\")"; \
    126      1.24      jmmv 	        done; \
    127      1.24      jmmv 	    fi; \
    128      1.24      jmmv 	} >Kyuafile.tmp
    129  1.25.4.1  christos 	@${MV} Kyuafile.tmp Kyuafile
    130      1.24      jmmv .  endif
    131      1.24      jmmv .endif
    132      1.11      jmmv 
    133      1.24      jmmv .if ${ATFFILE:tl} != "no" || ${KYUAFILE:tl} != "no"
    134      1.24      jmmv .  include <bsd.files.mk>
    135       1.5      jmmv .endif
    136       1.1      jmmv 
    137       1.7      jmmv .if !empty(SCRIPTS) || !empty(PROGS) || !empty(PROGS_CXX)
    138       1.1      jmmv .  include <bsd.prog.mk>
    139       1.1      jmmv .endif
    140       1.9      jmmv 
    141       1.9      jmmv #
    142       1.9      jmmv # Definition of the "make test" target and supporting variables.
    143       1.9      jmmv #
    144       1.9      jmmv # This target, by necessity, can only work for native builds (i.e. a NetBSD
    145       1.9      jmmv # host building a release for the same system).  The target runs ATF, which is
    146       1.9      jmmv # not in the toolchain, and the tests execute code built for the target host.
    147       1.9      jmmv #
    148       1.9      jmmv # Due to the dependencies of the binaries built by the source tree and how they
    149       1.9      jmmv # are used by tests, it is highly possible for a execution of "make test" to
    150       1.9      jmmv # report bogus results unless the new binaries are put in place.
    151       1.9      jmmv #
    152       1.9      jmmv 
    153       1.9      jmmv TESTS_PATH += ${DESTDIR}/bin ${DESTDIR}/sbin ${DESTDIR}/usr/bin ${DESTDIR}/usr/sbin
    154       1.9      jmmv TESTS_LD_LIBRARY_PATH += ${DESTDIR}/lib ${DESTDIR}/usr/lib
    155       1.9      jmmv 
    156      1.14      jmmv TESTS_ENV += ATF_BUILD_CC=${DESTDIR}/usr/bin/cc
    157      1.14      jmmv TESTS_ENV += ATF_BUILD_CPP=${DESTDIR}/usr/bin/cpp
    158      1.14      jmmv TESTS_ENV += ATF_BUILD_CXX=${DESTDIR}/usr/bin/c++
    159      1.14      jmmv TESTS_ENV += ATF_CONFDIR=${DESTDIR}/etc
    160      1.14      jmmv TESTS_ENV += ATF_INCLUDEDIR=${DESTDIR}/usr/include
    161      1.14      jmmv TESTS_ENV += ATF_LIBDIR=${DESTDIR}/usr/lib
    162      1.14      jmmv TESTS_ENV += ATF_LIBEXECDIR=${DESTDIR}/usr/libexec
    163      1.14      jmmv TESTS_ENV += ATF_PKGDATADIR=${DESTDIR}/usr/share/atf
    164      1.14      jmmv TESTS_ENV += ATF_SHELL=${DESTDIR}/bin/sh
    165       1.9      jmmv TESTS_ENV += LD_LIBRARY_PATH=${TESTS_LD_LIBRARY_PATH:tW:S/ /:/g}
    166       1.9      jmmv TESTS_ENV += PATH=${TESTS_PATH:tW:S/ /:/g}
    167       1.9      jmmv 
    168       1.9      jmmv _TESTS_FIFO = ${.OBJDIR}/atf-run.fifo
    169       1.9      jmmv _TESTS_LOG = ${.OBJDIR}/atf-run.log
    170      1.19       apb CLEANDIRFILES += ${_TESTS_FIFO} ${_TESTS_LOG}
    171       1.9      jmmv 
    172       1.9      jmmv .PHONY: test
    173      1.10      jmmv .if defined(TESTSDIR)
    174      1.10      jmmv .  if ${TESTSDIR} == ${TESTSBASE}
    175       1.9      jmmv # Forbid this case.  It is likely to cause false positives/negatives and it
    176       1.9      jmmv # does not cover all the tests (e.g. it misses testing software in external).
    177       1.9      jmmv test:
    178       1.9      jmmv 	@echo "*** Sorry, you cannot use make test from src/tests.  Install the"
    179       1.9      jmmv 	@echo "*** tests into their final location and run them from /usr/tests"
    180       1.9      jmmv 	@false
    181      1.10      jmmv .  else
    182       1.9      jmmv test:
    183       1.9      jmmv 	@echo "*** WARNING: make test is experimental"
    184       1.9      jmmv 	@echo "***"
    185       1.9      jmmv 	@echo "*** Using this test does not preclude you from running the tests"
    186       1.9      jmmv 	@echo "*** installed in /usr/tests.  This test run may raise false"
    187       1.9      jmmv 	@echo "*** positives and/or false negatives."
    188       1.9      jmmv 	@echo
    189      1.10      jmmv 	@set -e; \
    190      1.10      jmmv 	cd ${DESTDIR}${TESTSDIR}; \
    191      1.18      jmmv 	rm -f ${_TESTS_FIFO}; \
    192       1.9      jmmv 	mkfifo ${_TESTS_FIFO}; \
    193       1.9      jmmv 	cat ${_TESTS_FIFO} | tee ${_TESTS_LOG} | \
    194       1.9      jmmv 	    ${TESTS_ENV} ${DESTDIR}/usr/bin/atf-report & \
    195      1.21      jmmv 	result=0; \
    196      1.21      jmmv 	${TESTS_ENV} ${DESTDIR}/usr/bin/atf-run >>${_TESTS_FIFO} || result=1; \
    197       1.9      jmmv 	wait; \
    198       1.9      jmmv 	rm -f ${_TESTS_FIFO}; \
    199       1.9      jmmv 	echo; \
    200       1.9      jmmv 	echo "*** The verbatim output of atf-run has been saved to ${_TESTS_LOG}"; \
    201       1.9      jmmv 	echo "*** Once again, note that "make test" is unsupported."; \
    202       1.9      jmmv 	test $${result} -eq 0
    203      1.10      jmmv .  endif
    204      1.10      jmmv .else
    205      1.10      jmmv test:
    206      1.10      jmmv 	@echo "*** No TESTSDIR defined; nothing to do."
    207       1.9      jmmv .endif
    208      1.19       apb 
    209      1.19       apb ##### Pull in related .mk logic
    210      1.19       apb .include <bsd.clean.mk>
    211