1259208Sjmmv# $FreeBSD$
2259208Sjmmv#
3264483Sjmmv# You must include bsd.test.mk instead of this file from your Makefile.
4264483Sjmmv#
5259208Sjmmv# Logic to build and install TAP-compliant test programs.
6259208Sjmmv#
7259208Sjmmv# This is provided to support existing tests in the FreeBSD source tree
8259208Sjmmv# (particularly those coming from tools/regression/) that comply with the
9259208Sjmmv# Test Anything Protocol.  It should not be used for new tests.
10259208Sjmmv
11264483Sjmmv.if !target(__<bsd.test.mk>__)
12264483Sjmmv.error tap.test.mk cannot be included directly.
13264483Sjmmv.endif
14259208Sjmmv
15259208Sjmmv# List of C, C++ and shell test programs to build.
16259208Sjmmv#
17259208Sjmmv# Programs listed here are built according to the semantics of bsd.prog.mk for
18259208Sjmmv# PROGS, PROGS_CXX and SCRIPTS, respectively.
19259208Sjmmv#
20259208Sjmmv# Test programs registered in this manner are set to be installed into TESTSDIR
21259208Sjmmv# (which should be overriden by the Makefile) and are not required to provide a
22259208Sjmmv# manpage.
23259208SjmmvTAP_TESTS_C?=
24259208SjmmvTAP_TESTS_CXX?=
25262852SjmmvTAP_TESTS_PERL?=
26259208SjmmvTAP_TESTS_SH?=
27259208Sjmmv
28262852Sjmmv# Perl interpreter to use for test programs written in this language.
29262852SjmmvTAP_PERL_INTERPRETER?= /usr/local/bin/perl
30262852Sjmmv
31259208Sjmmv.if !empty(TAP_TESTS_C)
32259208SjmmvPROGS+= ${TAP_TESTS_C}
33259208Sjmmv_TESTS+= ${TAP_TESTS_C}
34259208Sjmmv.for _T in ${TAP_TESTS_C}
35259208SjmmvBINDIR.${_T}= ${TESTSDIR}
36259208SjmmvMAN.${_T}?= # empty
37259208SjmmvSRCS.${_T}?= ${_T}.c
38259208SjmmvTEST_INTERFACE.${_T}= tap
39259208Sjmmv.endfor
40259208Sjmmv.endif
41259208Sjmmv
42259208Sjmmv.if !empty(TAP_TESTS_CXX)
43259208SjmmvPROGS_CXX+= ${TAP_TESTS_CXX}
44259208Sjmmv_TESTS+= ${TAP_TESTS_CXX}
45259208Sjmmv.for _T in ${TAP_TESTS_CXX}
46259208SjmmvBINDIR.${_T}= ${TESTSDIR}
47259208SjmmvMAN.${_T}?= # empty
48259208SjmmvSRCS.${_T}?= ${_T}.cc
49259208SjmmvTEST_INTERFACE.${_T}= tap
50259208Sjmmv.endfor
51259208Sjmmv.endif
52259208Sjmmv
53262852Sjmmv.if !empty(TAP_TESTS_PERL)
54262852SjmmvSCRIPTS+= ${TAP_TESTS_PERL}
55262852Sjmmv_TESTS+= ${TAP_TESTS_PERL}
56262852Sjmmv.for _T in ${TAP_TESTS_PERL}
57262852SjmmvSCRIPTSDIR_${_T}= ${TESTSDIR}
58262852SjmmvTEST_INTERFACE.${_T}= tap
59262852SjmmvTEST_METADATA.${_T}+= required_programs="${TAP_PERL_INTERPRETER}"
60262852SjmmvCLEANFILES+= ${_T} ${_T}.tmp
61262852Sjmmv# TODO(jmmv): It seems to me that this SED and SRC functionality should
62262852Sjmmv# exist in bsd.prog.mk along the support for SCRIPTS.  Move it there if
63262852Sjmmv# this proves to be useful within the tests.
64262852SjmmvTAP_TESTS_PERL_SED_${_T}?= # empty
65262852SjmmvTAP_TESTS_PERL_SRC_${_T}?= ${_T}.pl
66262852Sjmmv${_T}: ${TAP_TESTS_PERL_SRC_${_T}}
67262852Sjmmv	{ \
68262852Sjmmv	    echo '#! ${TAP_PERL_INTERPRETER}'; \
69271298Sngie	    cat ${.ALLSRC:N*Makefile*} | sed ${TAP_TESTS_PERL_SED_${_T}}; \
70262852Sjmmv	} >${.TARGET}.tmp
71262852Sjmmv	chmod +x ${.TARGET}.tmp
72262852Sjmmv	mv ${.TARGET}.tmp ${.TARGET}
73262852Sjmmv.endfor
74262852Sjmmv.endif
75262852Sjmmv
76259208Sjmmv.if !empty(TAP_TESTS_SH)
77259208SjmmvSCRIPTS+= ${TAP_TESTS_SH}
78259208Sjmmv_TESTS+= ${TAP_TESTS_SH}
79259208Sjmmv.for _T in ${TAP_TESTS_SH}
80259208SjmmvSCRIPTSDIR_${_T}= ${TESTSDIR}
81259208SjmmvTEST_INTERFACE.${_T}= tap
82259208SjmmvCLEANFILES+= ${_T} ${_T}.tmp
83259208Sjmmv# TODO(jmmv): It seems to me that this SED and SRC functionality should
84259208Sjmmv# exist in bsd.prog.mk along the support for SCRIPTS.  Move it there if
85259208Sjmmv# this proves to be useful within the tests.
86259208SjmmvTAP_TESTS_SH_SED_${_T}?= # empty
87259208SjmmvTAP_TESTS_SH_SRC_${_T}?= ${_T}.sh
88259208Sjmmv${_T}: ${TAP_TESTS_SH_SRC_${_T}}
89259208Sjmmv	cat ${.ALLSRC} | sed ${TAP_TESTS_SH_SED_${_T}} >${.TARGET}.tmp
90259208Sjmmv	chmod +x ${.TARGET}.tmp
91259208Sjmmv	mv ${.TARGET}.tmp ${.TARGET}
92259208Sjmmv.endfor
93259208Sjmmv.endif
94