Home | History | Annotate | Line # | Download | only in mk
bsd.test.mk revision 1.9
      1  1.9      jmmv # $NetBSD: bsd.test.mk,v 1.9 2010/06/18 10:10:57 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.7      jmmv .if defined(TESTS_C)
     11  1.7      jmmv PROGS+=		${TESTS_C}
     12  1.7      jmmv LDADD+=		-latf-c
     13  1.7      jmmv .  for _T in ${TESTS_C}
     14  1.7      jmmv BINDIR.${_T}=	${TESTSDIR}
     15  1.7      jmmv MAN.${_T}?=	# empty
     16  1.7      jmmv _TESTS+=	${_T}
     17  1.7      jmmv .  endfor
     18  1.7      jmmv .endif
     19  1.7      jmmv 
     20  1.1      jmmv .if defined(TESTS_CXX)
     21  1.1      jmmv PROGS_CXX+=	${TESTS_CXX}
     22  1.7      jmmv LDADD+=		-latf-c++ -latf-c
     23  1.1      jmmv .  for _T in ${TESTS_CXX}
     24  1.1      jmmv BINDIR.${_T}=	${TESTSDIR}
     25  1.1      jmmv MAN.${_T}?=	# empty
     26  1.1      jmmv _TESTS+=	${_T}
     27  1.1      jmmv .  endfor
     28  1.1      jmmv .endif
     29  1.1      jmmv 
     30  1.1      jmmv .if defined(TESTS_SH)
     31  1.1      jmmv 
     32  1.1      jmmv .  for _T in ${TESTS_SH}
     33  1.1      jmmv SCRIPTS+=		${_T}
     34  1.1      jmmv SCRIPTSDIR_${_T}=	${TESTSDIR}
     35  1.1      jmmv 
     36  1.1      jmmv _TESTS+=		${_T}
     37  1.1      jmmv CLEANFILES+=		${_T} ${_T}.tmp
     38  1.1      jmmv 
     39  1.1      jmmv TESTS_SH_SRC_${_T}?=	${_T}.sh
     40  1.8      jmmv ${_T}: ${TESTS_SH_SRC_${_T}}
     41  1.1      jmmv 	${_MKTARGET_BUILD}
     42  1.8      jmmv 	echo '#! /usr/bin/atf-sh' >${.TARGET}.tmp
     43  1.8      jmmv 	cat ${.ALLSRC} >>${.TARGET}.tmp
     44  1.8      jmmv 	chmod +x ${.TARGET}.tmp
     45  1.1      jmmv 	mv ${.TARGET}.tmp ${.TARGET}
     46  1.1      jmmv .  endfor
     47  1.1      jmmv .endif
     48  1.1      jmmv 
     49  1.5      jmmv .if !defined(NOATFFILE)
     50  1.1      jmmv FILES+=			Atffile
     51  1.1      jmmv FILESDIR_Atffile=	${TESTSDIR}
     52  1.1      jmmv .include <bsd.files.mk>
     53  1.5      jmmv .endif
     54  1.1      jmmv 
     55  1.7      jmmv .if !empty(SCRIPTS) || !empty(PROGS) || !empty(PROGS_CXX)
     56  1.1      jmmv .  include <bsd.prog.mk>
     57  1.1      jmmv .endif
     58  1.9      jmmv 
     59  1.9      jmmv #
     60  1.9      jmmv # Definition of the "make test" target and supporting variables.
     61  1.9      jmmv #
     62  1.9      jmmv # This target, by necessity, can only work for native builds (i.e. a NetBSD
     63  1.9      jmmv # host building a release for the same system).  The target runs ATF, which is
     64  1.9      jmmv # not in the toolchain, and the tests execute code built for the target host.
     65  1.9      jmmv #
     66  1.9      jmmv # Due to the dependencies of the binaries built by the source tree and how they
     67  1.9      jmmv # are used by tests, it is highly possible for a execution of "make test" to
     68  1.9      jmmv # report bogus results unless the new binaries are put in place.
     69  1.9      jmmv #
     70  1.9      jmmv 
     71  1.9      jmmv TESTS_PATH += ${DESTDIR}/bin ${DESTDIR}/sbin ${DESTDIR}/usr/bin ${DESTDIR}/usr/sbin
     72  1.9      jmmv TESTS_LD_LIBRARY_PATH += ${DESTDIR}/lib ${DESTDIR}/usr/lib
     73  1.9      jmmv 
     74  1.9      jmmv TESTS_ENV += LD_LIBRARY_PATH=${TESTS_LD_LIBRARY_PATH:tW:S/ /:/g}
     75  1.9      jmmv TESTS_ENV += PATH=${TESTS_PATH:tW:S/ /:/g}
     76  1.9      jmmv 
     77  1.9      jmmv _TESTS_FIFO = ${.OBJDIR}/atf-run.fifo
     78  1.9      jmmv _TESTS_LOG = ${.OBJDIR}/atf-run.log
     79  1.9      jmmv CLEANFILES += ${_TESTS_FIFO} ${_TESTS_LOG}
     80  1.9      jmmv 
     81  1.9      jmmv .PHONY: test
     82  1.9      jmmv .if ${TESTSDIR} == ${TESTSBASE}
     83  1.9      jmmv # Forbid this case.  It is likely to cause false positives/negatives and it
     84  1.9      jmmv # does not cover all the tests (e.g. it misses testing software in external).
     85  1.9      jmmv test:
     86  1.9      jmmv 	@echo "*** Sorry, you cannot use make test from src/tests.  Install the"
     87  1.9      jmmv 	@echo "*** tests into their final location and run them from /usr/tests"
     88  1.9      jmmv 	@false
     89  1.9      jmmv .else
     90  1.9      jmmv test:
     91  1.9      jmmv 	@echo "*** WARNING: make test is experimental"
     92  1.9      jmmv 	@echo "***"
     93  1.9      jmmv 	@echo "*** Using this test does not preclude you from running the tests"
     94  1.9      jmmv 	@echo "*** installed in /usr/tests.  This test run may raise false"
     95  1.9      jmmv 	@echo "*** positives and/or false negatives."
     96  1.9      jmmv 	@echo
     97  1.9      jmmv 	@cd ${DESTDIR}${TESTSDIR}; \
     98  1.9      jmmv 	mkfifo ${_TESTS_FIFO}; \
     99  1.9      jmmv 	cat ${_TESTS_FIFO} | tee ${_TESTS_LOG} | \
    100  1.9      jmmv 	    ${TESTS_ENV} ${DESTDIR}/usr/bin/atf-report & \
    101  1.9      jmmv 	${TESTS_ENV} ${DESTDIR}/usr/bin/atf-run >>${_TESTS_FIFO}; \
    102  1.9      jmmv 	result=$${?}; \
    103  1.9      jmmv 	wait; \
    104  1.9      jmmv 	rm -f ${_TESTS_FIFO}; \
    105  1.9      jmmv 	echo; \
    106  1.9      jmmv 	echo "*** The verbatim output of atf-run has been saved to ${_TESTS_LOG}"; \
    107  1.9      jmmv 	echo "*** Once again, note that "make test" is unsupported."; \
    108  1.9      jmmv 	test $${result} -eq 0
    109  1.9      jmmv .endif
    110