xref: /freebsd/share/mk/plain.test.mk (revision 44f736c385f6b8d451feb9d6543220e8e61abcaa)
16532e7bfSRui Paulo#
2f5fd950eSJulio Merino# You must include bsd.test.mk instead of this file from your Makefile.
3f5fd950eSJulio Merino#
46532e7bfSRui Paulo# Logic to build and install plain test programs.  A plain test programs it not
56532e7bfSRui Paulo# supposed to use any specific testing framework: all it does is run some code
66532e7bfSRui Paulo# and report the test's pass or fail status via a 0 or 1 exit code.
76532e7bfSRui Paulo
8f5fd950eSJulio Merino.if !target(__<bsd.test.mk>__)
9f5fd950eSJulio Merino.error plain.test.mk cannot be included directly.
10f5fd950eSJulio Merino.endif
116532e7bfSRui Paulo
126532e7bfSRui Paulo# List of C, C++ and shell test programs to build.
136532e7bfSRui Paulo#
146532e7bfSRui Paulo# Programs listed here are built according to the semantics of bsd.prog.mk for
156532e7bfSRui Paulo# PROGS, PROGS_CXX and SCRIPTS, respectively.
166532e7bfSRui Paulo#
176532e7bfSRui Paulo# Test programs registered in this manner are set to be installed into TESTSDIR
18f324fafcSEitan Adler# (which should be overridden by the Makefile) and are not required to provide a
196532e7bfSRui Paulo# manpage.
206532e7bfSRui PauloPLAIN_TESTS_C?=
216532e7bfSRui PauloPLAIN_TESTS_CXX?=
226532e7bfSRui PauloPLAIN_TESTS_SH?=
236532e7bfSRui Paulo
246532e7bfSRui Paulo.if !empty(PLAIN_TESTS_C)
256532e7bfSRui PauloPROGS+= ${PLAIN_TESTS_C}
266532e7bfSRui Paulo_TESTS+= ${PLAIN_TESTS_C}
276532e7bfSRui Paulo.for _T in ${PLAIN_TESTS_C}
286532e7bfSRui PauloBINDIR.${_T}= ${TESTSDIR}
296532e7bfSRui PauloMAN.${_T}?= # empty
30a2b5b37cSJulio MerinoSRCS.${_T}?= ${_T}.c
316532e7bfSRui PauloTEST_INTERFACE.${_T}= plain
326532e7bfSRui Paulo.endfor
336532e7bfSRui Paulo.endif
346532e7bfSRui Paulo
356532e7bfSRui Paulo.if !empty(PLAIN_TESTS_CXX)
366532e7bfSRui PauloPROGS_CXX+= ${PLAIN_TESTS_CXX}
376532e7bfSRui Paulo_TESTS+= ${PLAIN_TESTS_CXX}
386532e7bfSRui Paulo.for _T in ${PLAIN_TESTS_CXX}
396532e7bfSRui PauloBINDIR.${_T}= ${TESTSDIR}
406532e7bfSRui PauloMAN.${_T}?= # empty
41a2b5b37cSJulio MerinoSRCS.${_T}?= ${_T}.cc
426532e7bfSRui PauloTEST_INTERFACE.${_T}= plain
436532e7bfSRui Paulo.endfor
446532e7bfSRui Paulo.endif
456532e7bfSRui Paulo
46*44f736c3SKyle Evans.if !empty(PLAIN_TESTS_PORCH)
47*44f736c3SKyle EvansSCRIPTS+= ${PLAIN_TESTS_PORCH:S/$/.orch/}
48*44f736c3SKyle Evans_TESTS+= ${PLAIN_TESTS_PORCH}
49*44f736c3SKyle Evans.for _T in ${PLAIN_TESTS_PORCH}
50*44f736c3SKyle EvansSCRIPTSDIR_${_T}.orch= ${TESTSDIR}
51*44f736c3SKyle Evans
52*44f736c3SKyle EvansTEST_INTERFACE.${_T}= plain
53*44f736c3SKyle EvansTEST_METADATA.${_T}+=	required_programs="porch"
54*44f736c3SKyle Evans.endfor
55*44f736c3SKyle Evans.endif
56*44f736c3SKyle Evans
576532e7bfSRui Paulo.if !empty(PLAIN_TESTS_SH)
586532e7bfSRui PauloSCRIPTS+= ${PLAIN_TESTS_SH}
596532e7bfSRui Paulo_TESTS+= ${PLAIN_TESTS_SH}
606532e7bfSRui Paulo.for _T in ${PLAIN_TESTS_SH}
616532e7bfSRui PauloSCRIPTSDIR_${_T}= ${TESTSDIR}
626532e7bfSRui PauloTEST_INTERFACE.${_T}= plain
639e684a3aSJulio MerinoCLEANFILES+= ${_T} ${_T}.tmp
649e684a3aSJulio Merino# TODO(jmmv): It seems to me that this SED and SRC functionality should
659e684a3aSJulio Merino# exist in bsd.prog.mk along the support for SCRIPTS.  Move it there if
669e684a3aSJulio Merino# this proves to be useful within the tests.
679e684a3aSJulio MerinoPLAIN_TESTS_SH_SED_${_T}?= # empty
689e684a3aSJulio MerinoPLAIN_TESTS_SH_SRC_${_T}?= ${_T}.sh
699e684a3aSJulio Merino${_T}: ${PLAIN_TESTS_SH_SRC_${_T}}
70db572ab6SEnji Cooper.if empty(PLAIN_TESTS_SH_SED_${_T})
71db572ab6SEnji Cooper	cat ${.ALLSRC:N*Makefile*} >${.TARGET}.tmp
72db572ab6SEnji Cooper.else
7364dc0245SJulio Merino	cat ${.ALLSRC:N*Makefile*} \
7464dc0245SJulio Merino	    | sed ${PLAIN_TESTS_SH_SED_${_T}} >${.TARGET}.tmp
75db572ab6SEnji Cooper.endif
769e684a3aSJulio Merino	chmod +x ${.TARGET}.tmp
779e684a3aSJulio Merino	mv ${.TARGET}.tmp ${.TARGET}
786532e7bfSRui Paulo.endfor
796532e7bfSRui Paulo.endif
80