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