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