xref: /freebsd/share/mk/tap.test.mk (revision dda5b39711dab90ae1c5624bdd6ff7453177df31)
1# $FreeBSD$
2#
3# Logic to build and install TAP-compliant test programs.
4#
5# This is provided to support existing tests in the FreeBSD source tree
6# (particularly those coming from tools/regression/) that comply with the
7# Test Anything Protocol.  It should not be used for new tests.
8
9.include <bsd.init.mk>
10
11# List of C, C++ and shell test programs to build.
12#
13# Programs listed here are built according to the semantics of bsd.prog.mk for
14# PROGS, PROGS_CXX and SCRIPTS, respectively.
15#
16# Test programs registered in this manner are set to be installed into TESTSDIR
17# (which should be overriden by the Makefile) and are not required to provide a
18# manpage.
19TAP_TESTS_C?=
20TAP_TESTS_CXX?=
21TAP_TESTS_PERL?=
22TAP_TESTS_SH?=
23
24# Perl interpreter to use for test programs written in this language.
25TAP_PERL_INTERPRETER?= /usr/local/bin/perl
26
27.if !empty(TAP_TESTS_C)
28PROGS+= ${TAP_TESTS_C}
29_TESTS+= ${TAP_TESTS_C}
30.for _T in ${TAP_TESTS_C}
31BINDIR.${_T}= ${TESTSDIR}
32MAN.${_T}?= # empty
33SRCS.${_T}?= ${_T}.c
34TEST_INTERFACE.${_T}= tap
35.endfor
36.endif
37
38.if !empty(TAP_TESTS_CXX)
39PROGS_CXX+= ${TAP_TESTS_CXX}
40_TESTS+= ${TAP_TESTS_CXX}
41.for _T in ${TAP_TESTS_CXX}
42BINDIR.${_T}= ${TESTSDIR}
43MAN.${_T}?= # empty
44SRCS.${_T}?= ${_T}.cc
45TEST_INTERFACE.${_T}= tap
46.endfor
47.endif
48
49.if !empty(TAP_TESTS_PERL)
50SCRIPTS+= ${TAP_TESTS_PERL}
51_TESTS+= ${TAP_TESTS_PERL}
52.for _T in ${TAP_TESTS_PERL}
53SCRIPTSDIR_${_T}= ${TESTSDIR}
54TEST_INTERFACE.${_T}= tap
55TEST_METADATA.${_T}+= required_programs="${TAP_PERL_INTERPRETER}"
56CLEANFILES+= ${_T} ${_T}.tmp
57# TODO(jmmv): It seems to me that this SED and SRC functionality should
58# exist in bsd.prog.mk along the support for SCRIPTS.  Move it there if
59# this proves to be useful within the tests.
60TAP_TESTS_PERL_SED_${_T}?= # empty
61TAP_TESTS_PERL_SRC_${_T}?= ${_T}.pl
62${_T}: ${TAP_TESTS_PERL_SRC_${_T}}
63	{ \
64	    echo '#! ${TAP_PERL_INTERPRETER}'; \
65	    cat ${.ALLSRC} | sed ${TAP_TESTS_PERL_SED_${_T}}; \
66	} >${.TARGET}.tmp
67	chmod +x ${.TARGET}.tmp
68	mv ${.TARGET}.tmp ${.TARGET}
69.endfor
70.endif
71
72.if !empty(TAP_TESTS_SH)
73SCRIPTS+= ${TAP_TESTS_SH}
74_TESTS+= ${TAP_TESTS_SH}
75.for _T in ${TAP_TESTS_SH}
76SCRIPTSDIR_${_T}= ${TESTSDIR}
77TEST_INTERFACE.${_T}= tap
78CLEANFILES+= ${_T} ${_T}.tmp
79# TODO(jmmv): It seems to me that this SED and SRC functionality should
80# exist in bsd.prog.mk along the support for SCRIPTS.  Move it there if
81# this proves to be useful within the tests.
82TAP_TESTS_SH_SED_${_T}?= # empty
83TAP_TESTS_SH_SRC_${_T}?= ${_T}.sh
84${_T}: ${TAP_TESTS_SH_SRC_${_T}}
85	cat ${.ALLSRC} | sed ${TAP_TESTS_SH_SED_${_T}} >${.TARGET}.tmp
86	chmod +x ${.TARGET}.tmp
87	mv ${.TARGET}.tmp ${.TARGET}
88.endfor
89.endif
90
91.include <bsd.test.mk>
92