Commit 504923a0 authored by Peter Eisentraut's avatar Peter Eisentraut

Run only top-level recursive lcov

This is the way lcov was intended to be used.  It is much faster and
more robust and makes the makefiles simpler than running it in each
subdirectory.

The previous coding ran gcov before lcov, but that is useless because
lcov/geninfo call gcov internally and use that information.  Moreover,
this led to complications and failures during parallel make.  This
separates the two targets:  You either use "make coverage" to get
textual output from gcov or "make coverage-html" to get an HTML report
via lcov.  (Using both is still problematic because they write the same
output files.)
Reviewed-by: default avatarMichael Paquier <michael.paquier@gmail.com>
parent 7769fc00
......@@ -23,6 +23,7 @@ objfiles.txt
*.gcov.out
lcov.info
coverage/
coverage-html-stamp
*.vcproj
*.vcxproj
win32ver.rc
......
......@@ -706,6 +706,19 @@ make coverage-html
The <command>make</command> commands also work in subdirectories.
</para>
<para>
If you don't have <command>lcov</command> or prefer text output over an
HTML report, you can also run
<screen>
make coverage
</screen>
instead of <literal>make coverage-html</literal>, which will
produce <filename>.gcov</filename> output files for each source file
relevant to the test. (<literal>make coverage</literal> and <literal>make
coverage-html</literal> will overwrite each other's files, so mixing them
might be confusing.)
</para>
<para>
To reset the execution counts between test runs, run:
<screen>
......
......@@ -874,25 +874,29 @@ endif # enable_nls
ifeq ($(enable_coverage), yes)
# There is a strange interaction between lcov and existing .gcov
# output files. Hence the rm command and the ordering dependency.
# make coverage -- text output
gcda_files := $(wildcard *.gcda)
local_gcda_files = $(wildcard *.gcda)
lcov.info: $(gcda_files)
rm -f *.gcov .*.gcov
$(if $^,$(LCOV) -d . -c -o $@ $(LCOVFLAGS) --gcov-tool $(GCOV))
coverage: $(local_gcda_files:.gcda=.c.gcov)
%.c.gcov: %.gcda | lcov.info
%.c.gcov: %.gcda
$(GCOV) -b -f -p -o . $(GCOVFLAGS) $*.c >$*.c.gcov.out
coverage: $(gcda_files:.gcda=.c.gcov) lcov.info
# make coverage-html -- HTML output via lcov
.PHONY: coverage-html
coverage-html: coverage
coverage-html: coverage-html-stamp
coverage-html-stamp: lcov.info
rm -rf coverage
mkdir coverage
$(GENHTML) --show-details --legend --output-directory=coverage --title=PostgreSQL --num-spaces=4 --prefix=$(abs_top_srcdir) `find . -name lcov.info -print`
$(GENHTML) --show-details --legend --output-directory=coverage --title=PostgreSQL --num-spaces=4 --prefix=$(abs_top_srcdir) $<
touch $@
all_gcda_files = $(shell find . -name '*.gcda' -print)
lcov.info: $(all_gcda_files)
$(LCOV) -d . -c -o $@ $(LCOVFLAGS) --gcov-tool $(GCOV)
# hook for clean-up
......@@ -900,7 +904,7 @@ clean distclean maintainer-clean: clean-coverage
.PHONY: clean-coverage
clean-coverage:
rm -rf coverage
rm -rf coverage coverage-html-stamp
rm -f *.gcda *.gcno lcov.info *.gcov .*.gcov *.gcov.out
......
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment