xref: /freebsd/sys/contrib/openzfs/tests/unit/Makefile.am (revision d9497217456002b0ddad3cd319570d0b098daa29)
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