Book a Demo!
CoCalc Logo Icon
StoreFeaturesDocsShareSupportNewsAboutPoliciesSign UpSign In
freebsd
GitHub Repository: freebsd/freebsd-src
Path: blob/main/sys/contrib/openzfs/tests/unit/Makefile.am
289319 views
# SPDX-License-Identifier: CDDL-1.0

# libunit.la includes munit and any additional tools that apply to all tests
libunit_la_CFLAGS = $(AM_CFLAGS)

noinst_LTLIBRARIES += libunit.la
libunit_la_SOURCES = \
	%D%/mock_dmu.c \
	%D%/mock_dmu.h \
	%D%/munit.c \
	%D%/munit.h \
	%D%/unit.c \
	%D%/unit.h


# all test binaries
UNIT_TESTS = \
	%D%/test_zap
noinst_PROGRAMS = $(UNIT_TESTS)


%C%_test_zap_CFLAGS = $(AM_CFLAGS)

nodist_%C%_test_zap_SOURCES = \
	module/zfs/zap.c \
	module/zfs/zap_fat.c \
	module/zfs/zap_impl.c \
	module/zfs/zap_micro.c \
	module/zfs/zap_leaf.c \
	module/zfs/u8_textprep.c

%C%_test_zap_SOURCES = \
	%D%/test_zap.c

%C%_test_zap_LDADD = \
	libspl.la \
	libbtree.la \
	libunit.la


# test run and coverage targets below
PHONY += unit unit-coverage unit-coverage-html

_unit_run_%: %D%/%
	@echo "  UNITTEST $<" ; $< $(TOPT)

# note: any changes in switches to lcov or genhtml must be carefully checked
#       on 1.x and 2.x; the current option set is carefully chosen to allow
#       both to work sensibly

# .info is marked PRECIOUS, because its usually only created as an intermediate
# from one of the unit phony targets, but once it exists there's no point
# remaking it until and unless the test binary itself changes
.PRECIOUS: %D%/%.info
%D%/%.info: %D%/%
	@-${RM} $@
	@${LCOV} --quiet --quiet --zerocounters --directory $(top_srcdir)
	@echo "  UNITTEST $<" ; $< $(TOPT)
	@${LCOV} --quiet --quiet --capture  \
		--test-name $(notdir $<) \
		--directory $(top_srcdir) \
		--output-file $@ \
		--rc lcov_branch_coverage=1 \
		--rc geninfo_unexecuted_blocks=1 \
		$(addprefix --include $(abs_top_builddir)/, $(call \
		    $(join $(join nodist_%C%_, $(notdir $<)), _SOURCES))) \
		2>/dev/null

_unit_coverage_%: %D%/%.info
	@scripts/coverage_report.pl $<

_unit_coverage_html_%: %D%/%.info
	@-${RM} -r $(subst .info,_coverage, $<)
	@${GENHTML} --quiet -quiet \
		--rc lcov_branch_coverage=1 \
		--rc check_data_consistency=0 \
		--output-directory $(subst .info,_coverage, $<) \
		$< \
		2>/dev/null
	@echo "coverage results:" \
		"file://$(realpath %D%)/$(subst .info,_coverage,$(notdir $<))/index.html"

CLEAN_LOCAL += unit-clean-local
unit-clean-local:
	-${RM} -r %D%/*.info %D%/*_coverage/

_UNIT_ALL_TARGETS = $(notdir $(UNIT_TESTS))
_UNIT_FIND_TARGET = \
	$(foreach cmd, $(UNIT_TESTS), \
		$(if $(filter $(join test_, $(1)), $(notdir $(cmd))), \
			$(notdir $(cmd))))

_UNIT_TARGETS = $(if $(T), \
	$(call _UNIT_FIND_TARGET, $(T)), $(call _UNIT_ALL_TARGETS))

unit: $(addprefix _unit_run_, $(_UNIT_TARGETS))
	@$(if $^, true, echo "ERROR: couldn't find unit test: $(T)" && false)

if CODE_COVERAGE_ENABLED
unit-coverage: $(addprefix _unit_coverage_, $(_UNIT_TARGETS))
	@$(if $^, true, echo "ERROR: couldn't find unit test: $(T)" && false)
unit-coverage-html: $(addprefix _unit_coverage_html_, $(_UNIT_TARGETS))
	@$(if $^, true, echo "ERROR: couldn't find unit test: $(T)" && false)
else
unit-coverage:
	@echo "unit test coverage not enabled."
	@echo "re-run configure with --enable-code-coverage"
	@false
unit-coverage-html: unit-coverage
endif