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