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