Home | History | Annotate | Line # | Download | only in mk
bsd.test.mk revision 1.11
      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