mirror of
https://github.com/python/cpython.git
synced 2025-11-27 13:45:25 +00:00
Issue #18481: Add C coverage reporting with gcov and lcov. A new make target
"coverage-report" creates an instrumented Python build, runs unit tests and creates a HTML. The report can be updated with "make coverage-lcov".
This commit is contained in:
parent
3b998d1086
commit
49e52f9375
3 changed files with 55 additions and 1 deletions
|
|
@ -36,6 +36,7 @@ Modules/Setup.local
|
||||||
Modules/config.c
|
Modules/config.c
|
||||||
Modules/ld_so_aix$
|
Modules/ld_so_aix$
|
||||||
Parser/pgen$
|
Parser/pgen$
|
||||||
|
^lcov-report/
|
||||||
^core
|
^core
|
||||||
^python-gdb.py
|
^python-gdb.py
|
||||||
^python.exe-gdb.py
|
^python.exe-gdb.py
|
||||||
|
|
@ -91,3 +92,7 @@ Modules/_testembed
|
||||||
.coverage
|
.coverage
|
||||||
coverage/
|
coverage/
|
||||||
htmlcov/
|
htmlcov/
|
||||||
|
*.gcda
|
||||||
|
*.gcno
|
||||||
|
*.gcov
|
||||||
|
coverage.info
|
||||||
|
|
|
||||||
|
|
@ -211,6 +211,12 @@ HOST_GNU_TYPE= @host@
|
||||||
PROFILE_TASK= $(srcdir)/Tools/pybench/pybench.py -n 2 --with-gc --with-syscheck
|
PROFILE_TASK= $(srcdir)/Tools/pybench/pybench.py -n 2 --with-gc --with-syscheck
|
||||||
#PROFILE_TASK= $(srcdir)/Lib/test/regrtest.py
|
#PROFILE_TASK= $(srcdir)/Lib/test/regrtest.py
|
||||||
|
|
||||||
|
# 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 ===
|
# === Definitions added by makesetup ===
|
||||||
|
|
||||||
|
|
||||||
|
|
@ -463,11 +469,48 @@ run_profile_task:
|
||||||
build_all_use_profile:
|
build_all_use_profile:
|
||||||
$(MAKE) all CFLAGS="$(CFLAGS) -fprofile-use -fprofile-correction"
|
$(MAKE) all CFLAGS="$(CFLAGS) -fprofile-use -fprofile-correction"
|
||||||
|
|
||||||
|
# Compile and run with gcov
|
||||||
|
.PHONY=coverage coverage-lcov coverage-report
|
||||||
coverage:
|
coverage:
|
||||||
@echo "Building with support for coverage checking:"
|
@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"
|
$(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/_sha3/keccak/*' \
|
||||||
|
'*/Modules/_decimal/libmpdec/*' \
|
||||||
|
'*/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 and importlib
|
||||||
|
@touch $(GRAMMAR_INPUT)
|
||||||
|
@touch $(srcdir)/Lib/importlib/_bootstrap.py
|
||||||
|
: # build with coverage info
|
||||||
|
$(MAKE) coverage
|
||||||
|
: # run tests, ignore failures
|
||||||
|
$(TESTRUNNER) $(TESTOPTS) || true
|
||||||
|
: # build lcov report
|
||||||
|
$(MAKE) coverage-lcov
|
||||||
|
|
||||||
# Build the interpreter
|
# Build the interpreter
|
||||||
$(BUILDPYTHON): Modules/python.o $(LIBRARY) $(LDLIBRARY) $(PY3LIBRARY)
|
$(BUILDPYTHON): Modules/python.o $(LIBRARY) $(LDLIBRARY) $(PY3LIBRARY)
|
||||||
|
|
@ -1396,6 +1439,8 @@ clean: pycremoval
|
||||||
|
|
||||||
profile-removal:
|
profile-removal:
|
||||||
find . -name '*.gc??' -exec rm -f {} ';'
|
find . -name '*.gc??' -exec rm -f {} ';'
|
||||||
|
rm -f $(COVERAGE_INFO)
|
||||||
|
rm -rf $(COVERAGE_REPORT)
|
||||||
|
|
||||||
clobber: clean profile-removal
|
clobber: clean profile-removal
|
||||||
-rm -f $(BUILDPYTHON) $(PGEN) $(LIBRARY) $(LDLIBRARY) $(DLLLIBRARY) \
|
-rm -f $(BUILDPYTHON) $(PGEN) $(LIBRARY) $(LDLIBRARY) $(DLLLIBRARY) \
|
||||||
|
|
|
||||||
|
|
@ -725,6 +725,10 @@ IDLE
|
||||||
Build
|
Build
|
||||||
-----
|
-----
|
||||||
|
|
||||||
|
- Issue #18481: Add C coverage reporting with gcov and lcov. A new make target
|
||||||
|
"coverage-report" creates an instrumented Python build, runs unit tests
|
||||||
|
and creates a HTML. The report can be updated with "make coverage-lcov".
|
||||||
|
|
||||||
- Issue #17845: Clarified the message printed when some module are not built.
|
- Issue #17845: Clarified the message printed when some module are not built.
|
||||||
|
|
||||||
- Issue #18256: Compilation fix for recent AIX releases. Patch by
|
- Issue #18256: Compilation fix for recent AIX releases. Patch by
|
||||||
|
|
|
||||||
Loading…
Add table
Add a link
Reference in a new issue