1151497Sru#
2151497Sru# You must include bsd.test.mk instead of this file from your Makefile.
3151497Sru#
4151497Sru# Logic to build and install ATF test programs; i.e. test programs linked
5151497Sru# against the ATF libraries.
6151497Sru
7151497Sru.if !target(__<bsd.test.mk>__)
8151497Sru.error atf.test.mk cannot be included directly.
9151497Sru.endif
10151497Sru
11151497Sru# List of C, C++ and shell test programs to build.
12151497Sru#
13151497Sru# Programs listed here are built using PROGS, PROGS_CXX and SCRIPTS,
14151497Sru# respectively, from bsd.prog.mk.  However, the build rules are tweaked to
15151497Sru# require the ATF libraries.
16151497Sru#
17151497Sru# Test programs registered in this manner are set to be installed into TESTSDIR
18151497Sru# (which should be overridden by the Makefile) and are not required to provide a
19151497Sru# manpage.
20151497SruATF_TESTS_C?=
21151497SruATF_TESTS_CXX?=
22151497SruATF_TESTS_SH?=
23151497SruATF_TESTS_KSH93?=
24151497SruATF_TESTS_PYTEST?=
25151497Sru
26151497Sru.if !empty(ATF_TESTS_C)
27151497SruPROGS+= ${ATF_TESTS_C}
28151497Sru_TESTS+= ${ATF_TESTS_C}
29151497Sru.for _T in ${ATF_TESTS_C}
30151497SruBINDIR.${_T}= ${TESTSDIR}
31151497SruMAN.${_T}?= # empty
32151497SruSRCS.${_T}?= ${_T}.c
33151497SruDPADD.${_T}+= ${LIBATF_C}
34151497Sru.if empty(LDFLAGS:M-static) && empty(LDFLAGS.${_T}:M-static)
35151497SruLDADD.${_T}+= ${LDADD_atf_c}
36151497Sru.else
37151497SruLDADD.${_T}+= ${LIBATF_C}
38151497Sru.endif
39151497SruTEST_INTERFACE.${_T}= atf
40151497Sru.endfor
41151497Sru.endif
42151497Sru
43151497Sru.if !empty(ATF_TESTS_CXX)
44151497SruPROGS_CXX+= ${ATF_TESTS_CXX}
45151497Sru_TESTS+= ${ATF_TESTS_CXX}
46151497Sru.for _T in ${ATF_TESTS_CXX}
47151497SruBINDIR.${_T}= ${TESTSDIR}
48151497SruMAN.${_T}?= # empty
49151497SruSRCS.${_T}?= ${_T}${CXX_SUFFIX:U.cc}
50151497SruDPADD.${_T}+= ${LIBATF_CXX} ${LIBATF_C}
51151497Sru.if empty(LDFLAGS:M-static) && empty(LDFLAGS.${_T}:M-static)
52151497SruLDADD.${_T}+= ${LDADD_atf_cxx} ${LDADD_atf_c}
53151497Sru.else
54151497SruLDADD.${_T}+= ${LIBATF_CXX} ${LIBATF_C}
55151497Sru.endif
56151497SruTEST_INTERFACE.${_T}= atf
57151497Sru.endfor
58151497Sru# Silence warnings about usage of deprecated std::auto_ptr
59151497SruCXXWARNFLAGS+=	-Wno-deprecated-declarations
60151497Sru.endif
61151497Sru
62151497Sru.if !empty(ATF_TESTS_SH)
63151497SruSCRIPTS+= ${ATF_TESTS_SH}
64151497Sru_TESTS+= ${ATF_TESTS_SH}
65151497Sru.for _T in ${ATF_TESTS_SH}
66151497SruSCRIPTSDIR_${_T}= ${TESTSDIR}
67151497SruTEST_INTERFACE.${_T}= atf
68151497SruCLEANFILES+= ${_T} ${_T}.tmp
69151497Sru# TODO(jmmv): It seems to me that this SED and SRC functionality should
70151497Sru# exist in bsd.prog.mk along the support for SCRIPTS.  Move it there if
71151497Sru# this proves to be useful within the tests.
72151497SruATF_TESTS_SH_SED_${_T}?= # empty
73151497SruATF_TESTS_SH_SRC_${_T}?= ${_T}.sh
74151497Sru${_T}: ${ATF_TESTS_SH_SRC_${_T}}
75151497Sru	echo '#! /usr/libexec/atf-sh' > ${.TARGET}.tmp
76151497Sru.if empty(ATF_TESTS_SH_SED_${_T})
77151497Sru	cat ${.ALLSRC:N*Makefile*} >>${.TARGET}.tmp
78151497Sru.else
79151497Sru	cat ${.ALLSRC:N*Makefile*} \
80151497Sru	    | sed ${ATF_TESTS_SH_SED_${_T}} >>${.TARGET}.tmp
81151497Sru.endif
82151497Sru	chmod +x ${.TARGET}.tmp
83151497Sru	mv ${.TARGET}.tmp ${.TARGET}
84151497Sru.endfor
85151497Sru.endif
86151497Sru
87151497Sru.if !empty(ATF_TESTS_KSH93)
88151497SruSCRIPTS+= ${ATF_TESTS_KSH93}
89151497Sru_TESTS+= ${ATF_TESTS_KSH93}
90151497Sru.for _T in ${ATF_TESTS_KSH93}
91151497SruSCRIPTSDIR_${_T}= ${TESTSDIR}
92151497SruTEST_INTERFACE.${_T}= atf
93151497SruTEST_METADATA.${_T}+= required_programs="ksh93"
94151497SruCLEANFILES+= ${_T} ${_T}.tmp
95151497Sru# TODO(jmmv): It seems to me that this SED and SRC functionality should
96151497Sru# exist in bsd.prog.mk along the support for SCRIPTS.  Move it there if
97151497Sru# this proves to be useful within the tests.
98151497SruATF_TESTS_KSH93_SED_${_T}?= # empty
99151497SruATF_TESTS_KSH93_SRC_${_T}?= ${_T}.sh
100151497Sru${_T}: ${ATF_TESTS_KSH93_SRC_${_T}}
101151497Sru	echo '#! /usr/libexec/atf-sh -s/usr/local/bin/ksh93' > ${.TARGET}.tmp
102151497Sru.if empty(ATF_TESTS_KSH93_SED_${_T})
103151497Sru	cat ${.ALLSRC:N*Makefile*} >>${.TARGET}.tmp
104151497Sru.else
105151497Sru	cat ${.ALLSRC:N*Makefile*} \
106151497Sru	    | sed ${ATF_TESTS_KSH93_SED_${_T}} >>${.TARGET}.tmp
107151497Sru.endif
108151497Sru	chmod +x ${.TARGET}.tmp
109151497Sru	mv ${.TARGET}.tmp ${.TARGET}
110151497Sru.endfor
111151497Sru.endif
112151497Sru
113151497Sru.if !empty(ATF_TESTS_PYTEST)
114151497Sru# bsd.prog.mk SCRIPTS interface removes file extension unless
115151497Sru# SCRIPTSNAME is set, which is not possible to do here.
116151497Sru# Workaround this by appending another extension (.xtmp) to the
117151497Sru# file name. Use separate loop to avoid dealing with explicitly
118151497Sru# stating expansion for each and every variable.
119151497Sru#
120151497Sru# ATF_TESTS_PYTEST -> contains list of files as is (test_something.py ..)
121151497Sru# _ATF_TESTS_PYTEST -> (test_something.py.xtmp ..)
122151497Sru#
123151497Sru# Former array is iterated to construct Kyuafile, where original file
124151497Sru#  names need to be written.
125151497Sru# Latter array is iterated to enable bsd.prog.mk scripts framework -
126151497Sru#  namely, installing scripts without .xtmp prefix. Note: this allows to
127151497Sru#  not bother about the fact that make target needs to be different from
128151497Sru#  the source file.
129151497Sru_TESTS+= ${ATF_TESTS_PYTEST}
130151497Sru_ATF_TESTS_PYTEST=
131151497Sru.for _T in ${ATF_TESTS_PYTEST}
132151497Sru_ATF_TESTS_PYTEST += ${_T}.xtmp
133151497SruTEST_INTERFACE.${_T}= atf
134151497SruTEST_METADATA.${_T}+= required_programs="pytest"
135151497Sru.endfor
136151497Sru
137151497SruSCRIPTS+= ${_ATF_TESTS_PYTEST}
138151497Sru.for _T in ${_ATF_TESTS_PYTEST}
139151497SruSCRIPTSDIR_${_T}= ${TESTSDIR}
140151497SruCLEANFILES+= ${_T} ${_T}.tmp
141151497Sru# TODO(jmmv): It seems to me that this SED and SRC functionality should
142151497Sru# exist in bsd.prog.mk along the support for SCRIPTS.  Move it there if
143151497Sru# this proves to be useful within the tests.
144151497SruATF_TESTS_PYTEST_SED_${_T}?= # empty
145151497SruATF_TESTS_PYTEST_SRC_${_T}?= ${.CURDIR}/${_T:S,.xtmp$,,}
146151497Sru${_T}: ${_T:S/.xtmp//}
147151497Sru	echo "#! /usr/libexec/atf_pytest_wrapper -P ${TESTSBASE}" > ${.TARGET}.tmp
148151497Sru.if empty(ATF_TESTS_PYTEST_SED_${_T})
149151497Sru	cat ${ATF_TESTS_PYTEST_SRC_${_T}}  >>${.TARGET}.tmp
150151497Sru.else
151151497Sru	cat ${ATF_TESTS_PYTEST_SRC_${_T}} \
152151497Sru	    | sed ${ATF_TESTS_PYTEST_SED_${_T}} >>${.TARGET}.tmp
153151497Sru.endif
154151497Sru	chmod +x ${.TARGET}.tmp
155151497Sru	mv ${.TARGET}.tmp ${.TARGET}
156151497Sru.endfor
157151497Sru.endif
158151497Sru