xref: /freebsd/share/mk/atf.test.mk (revision ec6682ed6c1d7304521bad39a1ad7ceae76aaca3)
150c5d27bSSimon J. Gerraty#
2f5fd950eSJulio Merino# You must include bsd.test.mk instead of this file from your Makefile.
3f5fd950eSJulio Merino#
4d4a14c85SRui Paulo# Logic to build and install ATF test programs; i.e. test programs linked
5d4a14c85SRui Paulo# against the ATF libraries.
650c5d27bSSimon J. Gerraty
7f5fd950eSJulio Merino.if !target(__<bsd.test.mk>__)
8f5fd950eSJulio Merino.error atf.test.mk cannot be included directly.
9f5fd950eSJulio Merino.endif
1050c5d27bSSimon J. Gerraty
11d4a14c85SRui Paulo# List of C, C++ and shell test programs to build.
12d4a14c85SRui Paulo#
13d4a14c85SRui Paulo# Programs listed here are built using PROGS, PROGS_CXX and SCRIPTS,
14d4a14c85SRui Paulo# respectively, from bsd.prog.mk.  However, the build rules are tweaked to
15d4a14c85SRui Paulo# require the ATF libraries.
16d4a14c85SRui Paulo#
17d4a14c85SRui 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
19d4a14c85SRui Paulo# manpage.
20d4a14c85SRui PauloATF_TESTS_C?=
21d4a14c85SRui PauloATF_TESTS_CXX?=
22d4a14c85SRui PauloATF_TESTS_SH?=
232fae26bdSAlan SomersATF_TESTS_KSH93?=
248eb2bee6SAlexander V. ChernikovATF_TESTS_PYTEST?=
2550c5d27bSSimon J. Gerraty
26d4a14c85SRui Paulo.if !empty(ATF_TESTS_C)
27d4a14c85SRui PauloPROGS+= ${ATF_TESTS_C}
2825b6a535SRui Paulo_TESTS+= ${ATF_TESTS_C}
29d4a14c85SRui Paulo.for _T in ${ATF_TESTS_C}
30d4a14c85SRui PauloBINDIR.${_T}= ${TESTSDIR}
31d4a14c85SRui PauloMAN.${_T}?= # empty
3250c5d27bSSimon J. GerratySRCS.${_T}?= ${_T}.c
3350c5d27bSSimon J. GerratyDPADD.${_T}+= ${LIBATF_C}
34eb1fef65SEnji Cooper.if empty(LDFLAGS:M-static) && empty(LDFLAGS.${_T}:M-static)
355551c573SBaptiste DaroussinLDADD.${_T}+= ${LDADD_atf_c}
36eb1fef65SEnji Cooper.else
37eb1fef65SEnji CooperLDADD.${_T}+= ${LIBATF_C}
38eb1fef65SEnji Cooper.endif
3925b6a535SRui PauloTEST_INTERFACE.${_T}= atf
4050c5d27bSSimon J. Gerraty.endfor
4150c5d27bSSimon J. Gerraty.endif
4250c5d27bSSimon J. Gerraty
43d4a14c85SRui Paulo.if !empty(ATF_TESTS_CXX)
44d4a14c85SRui PauloPROGS_CXX+= ${ATF_TESTS_CXX}
4525b6a535SRui Paulo_TESTS+= ${ATF_TESTS_CXX}
46d4a14c85SRui Paulo.for _T in ${ATF_TESTS_CXX}
47d4a14c85SRui PauloBINDIR.${_T}= ${TESTSDIR}
48d4a14c85SRui PauloMAN.${_T}?= # empty
4950c5d27bSSimon J. GerratySRCS.${_T}?= ${_T}${CXX_SUFFIX:U.cc}
5050c5d27bSSimon J. GerratyDPADD.${_T}+= ${LIBATF_CXX} ${LIBATF_C}
51eb1fef65SEnji Cooper.if empty(LDFLAGS:M-static) && empty(LDFLAGS.${_T}:M-static)
525551c573SBaptiste DaroussinLDADD.${_T}+= ${LDADD_atf_cxx} ${LDADD_atf_c}
53eb1fef65SEnji Cooper.else
54eb1fef65SEnji CooperLDADD.${_T}+= ${LIBATF_CXX} ${LIBATF_C}
55eb1fef65SEnji Cooper.endif
5625b6a535SRui PauloTEST_INTERFACE.${_T}= atf
5750c5d27bSSimon J. Gerraty.endfor
582c3f47a7SDimitry Andric# Silence warnings about usage of deprecated std::auto_ptr
592c3f47a7SDimitry AndricCXXWARNFLAGS+=	-Wno-deprecated-declarations
6050c5d27bSSimon J. Gerraty.endif
6150c5d27bSSimon J. Gerraty
62d4a14c85SRui Paulo.if !empty(ATF_TESTS_SH)
63d4a14c85SRui PauloSCRIPTS+= ${ATF_TESTS_SH}
6425b6a535SRui Paulo_TESTS+= ${ATF_TESTS_SH}
65d4a14c85SRui Paulo.for _T in ${ATF_TESTS_SH}
66d4a14c85SRui PauloSCRIPTSDIR_${_T}= ${TESTSDIR}
6725b6a535SRui PauloTEST_INTERFACE.${_T}= atf
6850c5d27bSSimon J. GerratyCLEANFILES+= ${_T} ${_T}.tmp
69a845d427SJulio Merino# TODO(jmmv): It seems to me that this SED and SRC functionality should
70a845d427SJulio Merino# exist in bsd.prog.mk along the support for SCRIPTS.  Move it there if
71a845d427SJulio Merino# this proves to be useful within the tests.
72a845d427SJulio MerinoATF_TESTS_SH_SED_${_T}?= # empty
73d4a14c85SRui PauloATF_TESTS_SH_SRC_${_T}?= ${_T}.sh
74d4a14c85SRui Paulo${_T}: ${ATF_TESTS_SH_SRC_${_T}}
758c7ec47aSJulio Merino	echo '#! /usr/libexec/atf-sh' > ${.TARGET}.tmp
76db572ab6SEnji Cooper.if empty(ATF_TESTS_SH_SED_${_T})
77db572ab6SEnji Cooper	cat ${.ALLSRC:N*Makefile*} >>${.TARGET}.tmp
78db572ab6SEnji Cooper.else
7964dc0245SJulio Merino	cat ${.ALLSRC:N*Makefile*} \
8064dc0245SJulio Merino	    | sed ${ATF_TESTS_SH_SED_${_T}} >>${.TARGET}.tmp
81db572ab6SEnji Cooper.endif
8250c5d27bSSimon J. Gerraty	chmod +x ${.TARGET}.tmp
8350c5d27bSSimon J. Gerraty	mv ${.TARGET}.tmp ${.TARGET}
8450c5d27bSSimon J. Gerraty.endfor
8550c5d27bSSimon J. Gerraty.endif
862fae26bdSAlan Somers
872fae26bdSAlan Somers.if !empty(ATF_TESTS_KSH93)
882fae26bdSAlan SomersSCRIPTS+= ${ATF_TESTS_KSH93}
892fae26bdSAlan Somers_TESTS+= ${ATF_TESTS_KSH93}
902fae26bdSAlan Somers.for _T in ${ATF_TESTS_KSH93}
912fae26bdSAlan SomersSCRIPTSDIR_${_T}= ${TESTSDIR}
922fae26bdSAlan SomersTEST_INTERFACE.${_T}= atf
93b8f7774eSAlan SomersTEST_METADATA.${_T}+= required_programs="ksh93"
942fae26bdSAlan SomersCLEANFILES+= ${_T} ${_T}.tmp
952fae26bdSAlan Somers# TODO(jmmv): It seems to me that this SED and SRC functionality should
962fae26bdSAlan Somers# exist in bsd.prog.mk along the support for SCRIPTS.  Move it there if
972fae26bdSAlan Somers# this proves to be useful within the tests.
982fae26bdSAlan SomersATF_TESTS_KSH93_SED_${_T}?= # empty
992fae26bdSAlan SomersATF_TESTS_KSH93_SRC_${_T}?= ${_T}.sh
1002fae26bdSAlan Somers${_T}: ${ATF_TESTS_KSH93_SRC_${_T}}
1012fae26bdSAlan Somers	echo '#! /usr/libexec/atf-sh -s/usr/local/bin/ksh93' > ${.TARGET}.tmp
1022fae26bdSAlan Somers.if empty(ATF_TESTS_KSH93_SED_${_T})
1032fae26bdSAlan Somers	cat ${.ALLSRC:N*Makefile*} >>${.TARGET}.tmp
1042fae26bdSAlan Somers.else
1052fae26bdSAlan Somers	cat ${.ALLSRC:N*Makefile*} \
1062fae26bdSAlan Somers	    | sed ${ATF_TESTS_KSH93_SED_${_T}} >>${.TARGET}.tmp
1072fae26bdSAlan Somers.endif
1082fae26bdSAlan Somers	chmod +x ${.TARGET}.tmp
1092fae26bdSAlan Somers	mv ${.TARGET}.tmp ${.TARGET}
1102fae26bdSAlan Somers.endfor
1112fae26bdSAlan Somers.endif
1128eb2bee6SAlexander V. Chernikov
1138eb2bee6SAlexander V. Chernikov.if !empty(ATF_TESTS_PYTEST)
114e8f03576SMark Johnston# bsd.prog.mk SCRIPTS interface removes file extension unless
115e8f03576SMark Johnston# SCRIPTSNAME is set, which is not possible to do here.
116e8f03576SMark Johnston# Workaround this by appending another extension (.xtmp) to the
117e8f03576SMark Johnston# file name. Use separate loop to avoid dealing with explicitly
118e8f03576SMark Johnston# stating expansion for each and every variable.
119e8f03576SMark Johnston#
120e8f03576SMark Johnston# ATF_TESTS_PYTEST -> contains list of files as is (test_something.py ..)
121e8f03576SMark Johnston# _ATF_TESTS_PYTEST -> (test_something.py.xtmp ..)
122e8f03576SMark Johnston#
123e8f03576SMark Johnston# Former array is iterated to construct Kyuafile, where original file
124e8f03576SMark Johnston#  names need to be written.
125e8f03576SMark Johnston# Latter array is iterated to enable bsd.prog.mk scripts framework -
126e8f03576SMark Johnston#  namely, installing scripts without .xtmp prefix. Note: this allows to
127e8f03576SMark Johnston#  not bother about the fact that make target needs to be different from
128e8f03576SMark Johnston#  the source file.
129e8f03576SMark Johnston_TESTS+= ${ATF_TESTS_PYTEST}
130e8f03576SMark Johnston_ATF_TESTS_PYTEST=
1318eb2bee6SAlexander V. Chernikov.for _T in ${ATF_TESTS_PYTEST}
132e8f03576SMark Johnston_ATF_TESTS_PYTEST += ${_T}.xtmp
1338eb2bee6SAlexander V. ChernikovTEST_INTERFACE.${_T}= atf
1348eb2bee6SAlexander V. ChernikovTEST_METADATA.${_T}+= required_programs="pytest"
135e8f03576SMark Johnston.endfor
136e8f03576SMark Johnston
137e8f03576SMark JohnstonSCRIPTS+= ${_ATF_TESTS_PYTEST}
138e8f03576SMark Johnston.for _T in ${_ATF_TESTS_PYTEST}
139e8f03576SMark JohnstonSCRIPTSDIR_${_T}= ${TESTSDIR}
1408eb2bee6SAlexander V. ChernikovCLEANFILES+= ${_T} ${_T}.tmp
1418eb2bee6SAlexander V. Chernikov# TODO(jmmv): It seems to me that this SED and SRC functionality should
1428eb2bee6SAlexander V. Chernikov# exist in bsd.prog.mk along the support for SCRIPTS.  Move it there if
1438eb2bee6SAlexander V. Chernikov# this proves to be useful within the tests.
1448eb2bee6SAlexander V. ChernikovATF_TESTS_PYTEST_SED_${_T}?= # empty
145e8f03576SMark JohnstonATF_TESTS_PYTEST_SRC_${_T}?= ${.CURDIR}/${_T:S,.xtmp$,,}
146*ec6682edSKristof Provost${_T}: ${_T:S/.xtmp//}
147924226fbSAlexander V. Chernikov	echo "#! /usr/libexec/atf_pytest_wrapper -P ${TESTSBASE}" > ${.TARGET}.tmp
1488eb2bee6SAlexander V. Chernikov.if empty(ATF_TESTS_PYTEST_SED_${_T})
1498eb2bee6SAlexander V. Chernikov	cat ${ATF_TESTS_PYTEST_SRC_${_T}}  >>${.TARGET}.tmp
1508eb2bee6SAlexander V. Chernikov.else
1518eb2bee6SAlexander V. Chernikov	cat ${ATF_TESTS_PYTEST_SRC_${_T}} \
1528eb2bee6SAlexander V. Chernikov	    | sed ${ATF_TESTS_PYTEST_SED_${_T}} >>${.TARGET}.tmp
1538eb2bee6SAlexander V. Chernikov.endif
1548eb2bee6SAlexander V. Chernikov	chmod +x ${.TARGET}.tmp
1558eb2bee6SAlexander V. Chernikov	mv ${.TARGET}.tmp ${.TARGET}
1568eb2bee6SAlexander V. Chernikov.endfor
1578eb2bee6SAlexander V. Chernikov.endif
158