[Python-checkins] cpython (2.7): Issue #25925: Backport C coverage reporting Makefile targets

zach.ware python-checkins at python.org
Wed Jan 20 01:12:36 EST 2016


https://hg.python.org/cpython/rev/ed7b602a7400
changeset:   99993:ed7b602a7400
branch:      2.7
parent:      99990:65b7eb7dfb64
user:        Zachary Ware <zachary.ware at gmail.com>
date:        Wed Jan 20 00:11:52 2016 -0600
summary:
  Issue #25925: Backport C coverage reporting Makefile targets

Originally added by Christian Heimes in 85ec2b5bfcd2.

Initial patch for the backport by Alecsandru Patrascu.

files:
  .hgignore       |   5 ++++
  Makefile.pre.in |  42 ++++++++++++++++++++++++++++++++++++-
  2 files changed, 46 insertions(+), 1 deletions(-)


diff --git a/.hgignore b/.hgignore
--- a/.hgignore
+++ b/.hgignore
@@ -30,6 +30,7 @@
 Modules/ld_so_aix$
 Parser/pgen$
 Parser/pgen.stamp$
+^lcov-report/
 ^core
 ^python-gdb.py
 ^pybuilddir.txt
@@ -81,6 +82,10 @@
 PCbuild/*.pdb
 PCbuild/amd64
 PCbuild/obj
+*.gcda
+*.gcno
+*.gcov
+coverage.info
 .coverage
 coverage/
 externals/
diff --git a/Makefile.pre.in b/Makefile.pre.in
--- a/Makefile.pre.in
+++ b/Makefile.pre.in
@@ -211,6 +211,11 @@
 # The task to run while instrument when building the profile-opt target
 PROFILE_TASK=-m test.regrtest --pgo
 
+# report files for gcov / lcov coverage report
+COVERAGE_INFO=	$(abs_builddir)/coverage.info
+COVERAGE_REPORT=$(abs_builddir)/lcov-report
+COVERAGE_REPORT_OPTIONS=--no-branch-coverage --title "CPython lcov report"
+
 # === Definitions added by makesetup ===
 
 
@@ -457,11 +462,46 @@
 build_all_use_profile:
 	$(MAKE) all CFLAGS="$(CFLAGS) $(PGO_PROF_USE_FLAG)"
 
+# Compile and run with gcov
+.PHONY=coverage coverage-lcov coverage-report
 coverage:
 	@echo "Building with support for coverage checking:"
-	$(MAKE) clean
+	$(MAKE) clean profile-removal
 	$(MAKE) all CFLAGS="$(CFLAGS) -O0 -pg -fprofile-arcs -ftest-coverage" LIBS="$(LIBS) -lgcov"
 
+coverage-lcov:
+	@echo "Creating Coverage HTML report with LCOV:"
+	@rm -f $(COVERAGE_INFO)
+	@rm -rf $(COVERAGE_REPORT)
+	@lcov --capture --directory $(abs_builddir) \
+	    --base-directory $(realpath $(abs_builddir)) \
+	    --path $(realpath $(abs_srcdir)) \
+	    --output-file $(COVERAGE_INFO)
+	: # remove 3rd party modules and system headers
+	@lcov --remove $(COVERAGE_INFO) \
+	    '*/Modules/_ctypes/libffi*/*' \
+	    '*/Modules/expat/*' \
+	    '*/Modules/zlib/*' \
+	    '*/Include/*' \
+	    '/usr/include/*' \
+	    '/usr/local/include/*' \
+	    --output-file $(COVERAGE_INFO)
+	@genhtml $(COVERAGE_INFO) --output-directory $(COVERAGE_REPORT) \
+	    $(COVERAGE_REPORT_OPTIONS)
+	@echo
+	@echo "lcov report at $(COVERAGE_REPORT)/index.html"
+	@echo
+
+coverage-report:
+	: # force rebuilding of parser
+	@touch $(GRAMMAR_INPUT)
+	: # build with coverage info
+	$(MAKE) coverage
+	: # run tests, ignore failures
+	$(TESTPYTHON) $(TESTPROG) $(TESTOPTS) || true
+	: # build lcov report
+	$(MAKE) coverage-lcov
+
 
 # Build the interpreter
 $(BUILDPYTHON):	Modules/python.o $(LIBRARY) $(LDLIBRARY)

-- 
Repository URL: https://hg.python.org/cpython


More information about the Python-checkins mailing list