xref: /netbsd-src/share/mk/bsd.test.mk (revision cb861154c176d3dcc8ff846f449e3c16a5f5edb5)
1# $NetBSD: bsd.test.mk,v 1.17 2011/03/27 14:22:02 plunky 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}
39CLEANFILES+=		${TESTS_SH}
40
41.  for _T in ${TESTS_SH}
42SCRIPTS+=		${_T}
43SCRIPTSDIR_${_T}=	${TESTSDIR}
44
45CLEANFILES+=		${_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"
64CLEANFILES+=	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.else
87cleandir:	cleantest
88cleantest:	.PHONY
89	rm -f ${CLEANFILES}
90.endif
91
92#
93# Definition of the "make test" target and supporting variables.
94#
95# This target, by necessity, can only work for native builds (i.e. a NetBSD
96# host building a release for the same system).  The target runs ATF, which is
97# not in the toolchain, and the tests execute code built for the target host.
98#
99# Due to the dependencies of the binaries built by the source tree and how they
100# are used by tests, it is highly possible for a execution of "make test" to
101# report bogus results unless the new binaries are put in place.
102#
103
104TESTS_PATH += ${DESTDIR}/bin ${DESTDIR}/sbin ${DESTDIR}/usr/bin ${DESTDIR}/usr/sbin
105TESTS_LD_LIBRARY_PATH += ${DESTDIR}/lib ${DESTDIR}/usr/lib
106
107TESTS_ENV += ATF_BUILD_CC=${DESTDIR}/usr/bin/cc
108TESTS_ENV += ATF_BUILD_CPP=${DESTDIR}/usr/bin/cpp
109TESTS_ENV += ATF_BUILD_CXX=${DESTDIR}/usr/bin/c++
110TESTS_ENV += ATF_CONFDIR=${DESTDIR}/etc
111TESTS_ENV += ATF_INCLUDEDIR=${DESTDIR}/usr/include
112TESTS_ENV += ATF_LIBDIR=${DESTDIR}/usr/lib
113TESTS_ENV += ATF_LIBEXECDIR=${DESTDIR}/usr/libexec
114TESTS_ENV += ATF_PKGDATADIR=${DESTDIR}/usr/share/atf
115TESTS_ENV += ATF_SHELL=${DESTDIR}/bin/sh
116TESTS_ENV += LD_LIBRARY_PATH=${TESTS_LD_LIBRARY_PATH:tW:S/ /:/g}
117TESTS_ENV += PATH=${TESTS_PATH:tW:S/ /:/g}
118
119_TESTS_FIFO = ${.OBJDIR}/atf-run.fifo
120_TESTS_LOG = ${.OBJDIR}/atf-run.log
121CLEANFILES += ${_TESTS_FIFO} ${_TESTS_LOG}
122
123.PHONY: test
124.if defined(TESTSDIR)
125.  if ${TESTSDIR} == ${TESTSBASE}
126# Forbid this case.  It is likely to cause false positives/negatives and it
127# does not cover all the tests (e.g. it misses testing software in external).
128test:
129	@echo "*** Sorry, you cannot use make test from src/tests.  Install the"
130	@echo "*** tests into their final location and run them from /usr/tests"
131	@false
132.  else
133test:
134	@echo "*** WARNING: make test is experimental"
135	@echo "***"
136	@echo "*** Using this test does not preclude you from running the tests"
137	@echo "*** installed in /usr/tests.  This test run may raise false"
138	@echo "*** positives and/or false negatives."
139	@echo
140	@set -e; \
141	cd ${DESTDIR}${TESTSDIR}; \
142	mkfifo ${_TESTS_FIFO}; \
143	cat ${_TESTS_FIFO} | tee ${_TESTS_LOG} | \
144	    ${TESTS_ENV} ${DESTDIR}/usr/bin/atf-report & \
145	${TESTS_ENV} ${DESTDIR}/usr/bin/atf-run >>${_TESTS_FIFO}; \
146	result=$${?}; \
147	wait; \
148	rm -f ${_TESTS_FIFO}; \
149	echo; \
150	echo "*** The verbatim output of atf-run has been saved to ${_TESTS_LOG}"; \
151	echo "*** Once again, note that "make test" is unsupported."; \
152	test $${result} -eq 0
153.  endif
154.else
155test:
156	@echo "*** No TESTSDIR defined; nothing to do."
157.endif
158