1 1.26 christos # $NetBSD: bsd.test.mk,v 1.26 2019/01/21 21:11:54 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.26 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.26 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.26 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