diff options
author | Dmitry V. Levin <ldv@altlinux.org> | 2021-01-12 08:00:00 +0000 |
---|---|---|
committer | Dmitry V. Levin <ldv@altlinux.org> | 2021-01-12 09:09:25 +0000 |
commit | 2a16a0fc7e353f8fcfc27a57710e008840297847 (patch) | |
tree | 79d54ce2a51409f081457ca836c7e966fec43acd /Makefile.am | |
parent | ada269939a17f973cb883a29d40e437ad39ca292 (diff) | |
download | elfutils-2a16a0fc7e353f8fcfc27a57710e008840297847.tar.gz |
Add coverage target
Implement a target for capturing code coverage using lcov.
It is available when elfutils is configured using --enable-gcov.
Tested with
autoreconf -if && ./configure --enable-maintainer-mode --enable-gcov &&
make && make check && make coverage
Signed-off-by: Dmitry V. Levin <ldv@altlinux.org>
Diffstat (limited to 'Makefile.am')
-rw-r--r-- | Makefile.am | 51 |
1 files changed, 51 insertions, 0 deletions
diff --git a/Makefile.am b/Makefile.am index 818e3599..9c47afa9 100644 --- a/Makefile.am +++ b/Makefile.am @@ -47,6 +47,57 @@ distcheck-hook: rpm: dist rpmbuild -ts --sign elfutils-@PACKAGE_VERSION@.tar.bz2 +if GCOV + +COVERAGE_OUTPUT_FILE = $(PACKAGE_NAME).lcov +COVERAGE_OUTPUT_DIRECTORY = coverage +COVERAGE_OUTPUT_INDEX_HTML = $(COVERAGE_OUTPUT_DIRECTORY)/index.html +COVERAGE_TITLE = $(PACKAGE_NAME)-$(PACKAGE_VERSION) + +COVERAGE_DIRS = $(filter-out tests,$(SUBDIRS)) +src_COVERAGE_DIRS = $(patsubst %,$(srcdir)/%,$(COVERAGE_DIRS)) +build_COVERAGE_DIRS = $(patsubst %,$(builddir)/%,$(COVERAGE_DIRS)) +all_COVERAGE_DIRS = $(sort $(src_COVERAGE_DIRS) $(build_COVERAGE_DIRS)) +LCOV_DIRS_ARGS = $(patsubst %,--directory=%,$(all_COVERAGE_DIRS)) + +CLEANFILES = $(COVERAGE_OUTPUT_FILE) + +.PHONY: coverage coverage-clean + +clean-local: coverage-clean +distclean-local: coverage-clean + +coverage-clean: + -rm -rf $(COVERAGE_OUTPUT_DIRECTORY) + +coverage: $(COVERAGE_OUTPUT_INDEX_HTML) + @echo 'file://$(abs_builddir)/$(COVERAGE_OUTPUT_INDEX_HTML)' + +$(COVERAGE_OUTPUT_INDEX_HTML): $(COVERAGE_OUTPUT_FILE) + LC_ALL=C $(GENHTML) \ + --legend \ + --show-details \ + --rc=genhtml_branch_coverage=1 \ + --title='$(COVERAGE_TITLE)' \ + --prefix='$(abspath $(abs_srcdir))' \ + --prefix='$(realpath $(abs_srcdir))' \ + --prefix='$(abspath $(abs_builddir)/..)' \ + --prefix='$(realpath $(abs_builddir)/..)' \ + --output-directory='$(COVERAGE_OUTPUT_DIRECTORY)' \ + $< + +$(COVERAGE_OUTPUT_FILE): + $(LCOV) \ + --capture \ + --no-external \ + --no-checksum \ + --rc=lcov_branch_coverage=1 \ + --gcov-tool='$(GCOV)' \ + --output-file='$@' \ + $(LCOV_DIRS_ARGS) + +endif + # Tell version 3.79 and up of GNU make to not build goals in this # directory in parallel. .NOTPARALLEL: |