1# $NetBSD: bsd.test.mk,v 1.18 2011/05/14 17:47:28 jmmv Exp $ 2# 3 4.include <bsd.init.mk> 5 6_TESTS:= # empty 7 8.if defined(TESTS_SUBDIRS) 9SUBDIR+= ${TESTS_SUBDIRS} 10_TESTS:= ${TESTS_SUBDIRS:N.WAIT} 11.endif 12 13.include <bsd.subdir.mk> 14 15.if defined(TESTS_C) 16_TESTS+= ${TESTS_C} 17PROGS+= ${TESTS_C} 18LDADD+= -latf-c 19DPADD+= ${LIBATF_C} 20. for _T in ${TESTS_C} 21BINDIR.${_T}= ${TESTSDIR} 22MAN.${_T}?= # empty 23. endfor 24.endif 25 26.if defined(TESTS_CXX) 27_TESTS+= ${TESTS_CXX} 28PROGS_CXX+= ${TESTS_CXX} 29LDADD+= -latf-c++ -latf-c 30DPADD+= ${LIBATF_CXX} ${LIBATF_C} 31. for _T in ${TESTS_CXX} 32BINDIR.${_T}= ${TESTSDIR} 33MAN.${_T}?= # empty 34. endfor 35.endif 36 37.if defined(TESTS_SH) 38_TESTS+= ${TESTS_SH} 39CLEANDIRFILES+= ${TESTS_SH} 40 41. for _T in ${TESTS_SH} 42SCRIPTS+= ${_T} 43SCRIPTSDIR_${_T}= ${TESTSDIR} 44 45CLEANDIRFILES+= ${_T}.tmp 46 47TESTS_SH_SRC_${_T}?= ${_T}.sh 48${_T}: ${TESTS_SH_SRC_${_T}} 49 ${_MKTARGET_BUILD} 50 echo '#! /usr/bin/atf-sh' >${.TARGET}.tmp 51 cat ${.ALLSRC} >>${.TARGET}.tmp 52 chmod +x ${.TARGET}.tmp 53 mv ${.TARGET}.tmp ${.TARGET} 54. endfor 55.endif 56 57ATFFILE?= auto 58 59.if ${ATFFILE:tl} != "no" 60FILES+= Atffile 61FILESDIR_Atffile= ${TESTSDIR} 62 63. if ${ATFFILE:tl} == "auto" 64CLEANDIRFILES+= Atffile Atffile.tmp 65 66realall: Atffile 67Atffile: Makefile 68 ${_MKTARGET_CREATE} 69 @{ echo 'Content-Type: application/X-atf-atffile; version="1"'; \ 70 echo; \ 71 echo '# Automatically generated by bsd.test.mk.'; \ 72 echo; \ 73 echo 'prop: test-suite = "NetBSD"'; \ 74 echo; \ 75 for tp in ${_TESTS}; do \ 76 echo "tp: $${tp}"; \ 77 done; } >Atffile.tmp 78 @mv Atffile.tmp Atffile 79. endif 80 81.include <bsd.files.mk> 82.endif 83 84.if !empty(SCRIPTS) || !empty(PROGS) || !empty(PROGS_CXX) 85. include <bsd.prog.mk> 86.endif 87 88# 89# Definition of the "make test" target and supporting variables. 90# 91# This target, by necessity, can only work for native builds (i.e. a NetBSD 92# host building a release for the same system). The target runs ATF, which is 93# not in the toolchain, and the tests execute code built for the target host. 94# 95# Due to the dependencies of the binaries built by the source tree and how they 96# are used by tests, it is highly possible for a execution of "make test" to 97# report bogus results unless the new binaries are put in place. 98# 99 100TESTS_PATH += ${DESTDIR}/bin ${DESTDIR}/sbin ${DESTDIR}/usr/bin ${DESTDIR}/usr/sbin 101TESTS_LD_LIBRARY_PATH += ${DESTDIR}/lib ${DESTDIR}/usr/lib 102 103TESTS_ENV += ATF_BUILD_CC=${DESTDIR}/usr/bin/cc 104TESTS_ENV += ATF_BUILD_CPP=${DESTDIR}/usr/bin/cpp 105TESTS_ENV += ATF_BUILD_CXX=${DESTDIR}/usr/bin/c++ 106TESTS_ENV += ATF_CONFDIR=${DESTDIR}/etc 107TESTS_ENV += ATF_INCLUDEDIR=${DESTDIR}/usr/include 108TESTS_ENV += ATF_LIBDIR=${DESTDIR}/usr/lib 109TESTS_ENV += ATF_LIBEXECDIR=${DESTDIR}/usr/libexec 110TESTS_ENV += ATF_PKGDATADIR=${DESTDIR}/usr/share/atf 111TESTS_ENV += ATF_SHELL=${DESTDIR}/bin/sh 112TESTS_ENV += LD_LIBRARY_PATH=${TESTS_LD_LIBRARY_PATH:tW:S/ /:/g} 113TESTS_ENV += PATH=${TESTS_PATH:tW:S/ /:/g} 114 115_TESTS_FIFO = ${.OBJDIR}/atf-run.fifo 116_TESTS_LOG = ${.OBJDIR}/atf-run.log 117CLEANDIRFILES += ${_TESTS_FIFO} ${_TESTS_LOG} 118 119.PHONY: test 120.if defined(TESTSDIR) 121. if ${TESTSDIR} == ${TESTSBASE} 122# Forbid this case. It is likely to cause false positives/negatives and it 123# does not cover all the tests (e.g. it misses testing software in external). 124test: 125 @echo "*** Sorry, you cannot use make test from src/tests. Install the" 126 @echo "*** tests into their final location and run them from /usr/tests" 127 @false 128. else 129test: 130 @echo "*** WARNING: make test is experimental" 131 @echo "***" 132 @echo "*** Using this test does not preclude you from running the tests" 133 @echo "*** installed in /usr/tests. This test run may raise false" 134 @echo "*** positives and/or false negatives." 135 @echo 136 @set -e; \ 137 cd ${DESTDIR}${TESTSDIR}; \ 138 rm -f ${_TESTS_FIFO}; \ 139 mkfifo ${_TESTS_FIFO}; \ 140 cat ${_TESTS_FIFO} | tee ${_TESTS_LOG} | \ 141 ${TESTS_ENV} ${DESTDIR}/usr/bin/atf-report & \ 142 ${TESTS_ENV} ${DESTDIR}/usr/bin/atf-run >>${_TESTS_FIFO}; \ 143 result=$${?}; \ 144 wait; \ 145 rm -f ${_TESTS_FIFO}; \ 146 echo; \ 147 echo "*** The verbatim output of atf-run has been saved to ${_TESTS_LOG}"; \ 148 echo "*** Once again, note that "make test" is unsupported."; \ 149 test $${result} -eq 0 150. endif 151.else 152test: 153 @echo "*** No TESTSDIR defined; nothing to do." 154.endif 155 156##### Pull in related .mk logic 157.include <bsd.clean.mk> 158