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