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