1*d9497217SMartin Matuska# SPDX-License-Identifier: CDDL-1.0 2*d9497217SMartin Matuska 3*d9497217SMartin Matuska# libunit.la includes munit and any additional tools that apply to all tests 4*d9497217SMartin Matuskalibunit_la_CFLAGS = $(AM_CFLAGS) 5*d9497217SMartin Matuska 6*d9497217SMartin Matuskanoinst_LTLIBRARIES += libunit.la 7*d9497217SMartin Matuskalibunit_la_SOURCES = \ 8*d9497217SMartin Matuska %D%/mock_dmu.c \ 9*d9497217SMartin Matuska %D%/mock_dmu.h \ 10*d9497217SMartin Matuska %D%/munit.c \ 11*d9497217SMartin Matuska %D%/munit.h \ 12*d9497217SMartin Matuska %D%/unit.c \ 13*d9497217SMartin Matuska %D%/unit.h 14*d9497217SMartin Matuska 15*d9497217SMartin Matuska 16*d9497217SMartin Matuska# all test binaries 17*d9497217SMartin MatuskaUNIT_TESTS = \ 18*d9497217SMartin Matuska %D%/test_zap 19*d9497217SMartin Matuskanoinst_PROGRAMS = $(UNIT_TESTS) 20*d9497217SMartin Matuska 21*d9497217SMartin Matuska 22*d9497217SMartin Matuska%C%_test_zap_CFLAGS = $(AM_CFLAGS) 23*d9497217SMartin Matuska 24*d9497217SMartin Matuskanodist_%C%_test_zap_SOURCES = \ 25*d9497217SMartin Matuska module/zfs/zap.c \ 26*d9497217SMartin Matuska module/zfs/zap_fat.c \ 27*d9497217SMartin Matuska module/zfs/zap_impl.c \ 28*d9497217SMartin Matuska module/zfs/zap_micro.c \ 29*d9497217SMartin Matuska module/zfs/zap_leaf.c \ 30*d9497217SMartin Matuska module/zfs/u8_textprep.c 31*d9497217SMartin Matuska 32*d9497217SMartin Matuska%C%_test_zap_SOURCES = \ 33*d9497217SMartin Matuska %D%/test_zap.c 34*d9497217SMartin Matuska 35*d9497217SMartin Matuska%C%_test_zap_LDADD = \ 36*d9497217SMartin Matuska libspl.la \ 37*d9497217SMartin Matuska libbtree.la \ 38*d9497217SMartin Matuska libunit.la 39*d9497217SMartin Matuska 40*d9497217SMartin Matuska 41*d9497217SMartin Matuska# test run and coverage targets below 42*d9497217SMartin MatuskaPHONY += unit unit-coverage unit-coverage-html 43*d9497217SMartin Matuska 44*d9497217SMartin Matuska_unit_run_%: %D%/% 45*d9497217SMartin Matuska @echo " UNITTEST $<" ; $< $(TOPT) 46*d9497217SMartin Matuska 47*d9497217SMartin Matuska# note: any changes in switches to lcov or genhtml must be carefully checked 48*d9497217SMartin Matuska# on 1.x and 2.x; the current option set is carefully chosen to allow 49*d9497217SMartin Matuska# both to work sensibly 50*d9497217SMartin Matuska 51*d9497217SMartin Matuska# .info is marked PRECIOUS, because its usually only created as an intermediate 52*d9497217SMartin Matuska# from one of the unit phony targets, but once it exists there's no point 53*d9497217SMartin Matuska# remaking it until and unless the test binary itself changes 54*d9497217SMartin Matuska.PRECIOUS: %D%/%.info 55*d9497217SMartin Matuska%D%/%.info: %D%/% 56*d9497217SMartin Matuska @-${RM} $@ 57*d9497217SMartin Matuska @${LCOV} --quiet --quiet --zerocounters --directory $(top_srcdir) 58*d9497217SMartin Matuska @echo " UNITTEST $<" ; $< $(TOPT) 59*d9497217SMartin Matuska @${LCOV} --quiet --quiet --capture \ 60*d9497217SMartin Matuska --test-name $(notdir $<) \ 61*d9497217SMartin Matuska --directory $(top_srcdir) \ 62*d9497217SMartin Matuska --output-file $@ \ 63*d9497217SMartin Matuska --rc lcov_branch_coverage=1 \ 64*d9497217SMartin Matuska --rc geninfo_unexecuted_blocks=1 \ 65*d9497217SMartin Matuska $(addprefix --include $(abs_top_builddir)/, $(call \ 66*d9497217SMartin Matuska $(join $(join nodist_%C%_, $(notdir $<)), _SOURCES))) \ 67*d9497217SMartin Matuska 2>/dev/null 68*d9497217SMartin Matuska 69*d9497217SMartin Matuska_unit_coverage_%: %D%/%.info 70*d9497217SMartin Matuska @scripts/coverage_report.pl $< 71*d9497217SMartin Matuska 72*d9497217SMartin Matuska_unit_coverage_html_%: %D%/%.info 73*d9497217SMartin Matuska @-${RM} -r $(subst .info,_coverage, $<) 74*d9497217SMartin Matuska @${GENHTML} --quiet -quiet \ 75*d9497217SMartin Matuska --rc lcov_branch_coverage=1 \ 76*d9497217SMartin Matuska --rc check_data_consistency=0 \ 77*d9497217SMartin Matuska --output-directory $(subst .info,_coverage, $<) \ 78*d9497217SMartin Matuska $< \ 79*d9497217SMartin Matuska 2>/dev/null 80*d9497217SMartin Matuska @echo "coverage results:" \ 81*d9497217SMartin Matuska "file://$(realpath %D%)/$(subst .info,_coverage,$(notdir $<))/index.html" 82*d9497217SMartin Matuska 83*d9497217SMartin MatuskaCLEAN_LOCAL += unit-clean-local 84*d9497217SMartin Matuskaunit-clean-local: 85*d9497217SMartin Matuska -${RM} -r %D%/*.info %D%/*_coverage/ 86*d9497217SMartin Matuska 87*d9497217SMartin Matuska_UNIT_ALL_TARGETS = $(notdir $(UNIT_TESTS)) 88*d9497217SMartin Matuska_UNIT_FIND_TARGET = \ 89*d9497217SMartin Matuska $(foreach cmd, $(UNIT_TESTS), \ 90*d9497217SMartin Matuska $(if $(filter $(join test_, $(1)), $(notdir $(cmd))), \ 91*d9497217SMartin Matuska $(notdir $(cmd)))) 92*d9497217SMartin Matuska 93*d9497217SMartin Matuska_UNIT_TARGETS = $(if $(T), \ 94*d9497217SMartin Matuska $(call _UNIT_FIND_TARGET, $(T)), $(call _UNIT_ALL_TARGETS)) 95*d9497217SMartin Matuska 96*d9497217SMartin Matuskaunit: $(addprefix _unit_run_, $(_UNIT_TARGETS)) 97*d9497217SMartin Matuska @$(if $^, true, echo "ERROR: couldn't find unit test: $(T)" && false) 98*d9497217SMartin Matuska 99*d9497217SMartin Matuskaif CODE_COVERAGE_ENABLED 100*d9497217SMartin Matuskaunit-coverage: $(addprefix _unit_coverage_, $(_UNIT_TARGETS)) 101*d9497217SMartin Matuska @$(if $^, true, echo "ERROR: couldn't find unit test: $(T)" && false) 102*d9497217SMartin Matuskaunit-coverage-html: $(addprefix _unit_coverage_html_, $(_UNIT_TARGETS)) 103*d9497217SMartin Matuska @$(if $^, true, echo "ERROR: couldn't find unit test: $(T)" && false) 104*d9497217SMartin Matuskaelse 105*d9497217SMartin Matuskaunit-coverage: 106*d9497217SMartin Matuska @echo "unit test coverage not enabled." 107*d9497217SMartin Matuska @echo "re-run configure with --enable-code-coverage" 108*d9497217SMartin Matuska @false 109*d9497217SMartin Matuskaunit-coverage-html: unit-coverage 110*d9497217SMartin Matuskaendif 111