build-sys: integrate coverage report

Just pass --enable-coverage to configure and then "make coverage" to
have the coverage report at coverage dir.
This commit is contained in:
Lucas De Marchi 2015-01-07 19:17:15 -02:00
parent 8ff7f008cd
commit e9b0d1b40e
3 changed files with 66 additions and 1 deletions

3
.gitignore vendored
View File

@ -1,4 +1,6 @@
*.o
*.gcda
*.gcno
/*.tar.xz
/*.md5sum
.deps/
@ -14,6 +16,7 @@
/config.log
/config.status
/configure
/coverage
/libtool
/stamp-h1
/test-suite.log

View File

@ -326,6 +326,45 @@ distclean-local: $(DISTCLEAN_LOCAL_HOOKS)
buildtest-TESTS:
$(MAKE) $(AM_MAKEFLAGS) $(check_LTLIBRARIES) $(check_PROGRAMS)
# ------------------------------------------------------------------------------
# coverage
# ------------------------------------------------------------------------------
# .PHONY so it always rebuilds it
.PHONY: coverage lcov-run lcov-report coverage-sync
# run lcov from scratch, always
coverage: all
$(MAKE) lcov-run
$(MAKE) lcov-report
coverage_dir = coverage
coverage_opts = --base-directory $(srcdir) --directory $(builddir) \
--rc 'geninfo_adjust_src_path=$(abspath $(srcdir))=>$(abspath $(builddir))'
if ENABLE_COVERAGE
# reset run coverage tests
lcov-run:
@rm -rf $(coverage_dir)
lcov $(coverage_opts) --zerocounters
-$(MAKE) check
# generate report based on current coverage data
lcov-report:
$(MKDIR_P) $(coverage_dir)
lcov $(coverage_opts) --capture --no-external --ignore-errors graph \
| sed 's|$(abspath $(builddir))|$(abspath $(srcdir))|' > $(coverage_dir)/.lcov.info
lcov --remove $(coverage_dir)/.lcov.info --output-file $(coverage_dir)/.lcov-clean.info 'test-*'
genhtml -t "kmod test coverage" -o $(coverage_dir) $(coverage_dir)/.lcov-clean.info
@echo "Coverage report generated in $(abs_builddir)/$(coverage_dir)/index.html"
else
lcov-run lcov-report:
echo "Need to reconfigure with --enable-coverage"
endif
# ------------------------------------------------------------------------------
# custom release helpers
# ------------------------------------------------------------------------------

View File

@ -151,6 +151,28 @@ AS_IF([test "x$enable_python" = "xyes"], [
])
AM_CONDITIONAL([BUILD_PYTHON], [test "x$enable_python" = "xyes"])
AC_ARG_ENABLE([coverage],
AS_HELP_STRING([--enable-coverage], [enable test coverage @<:@default=disabled@:>@]),
[], [enable_coverage=no])
AS_IF([test "x$enable_coverage" = "xyes"], [
AC_CHECK_PROG(have_coverage, [lcov], [yes], [no])
AS_IF([test "x$have_coverage" = xno],[
AC_MSG_ERROR([*** lcov support requested but the program was not found])
], [
lcov_version_major="`lcov --version | cut -d ' ' -f 4 | cut -d '.' -f 1`"
lcov_version_minor="`lcov --version | cut -d ' ' -f 4 | cut -d '.' -f 2`"
AS_IF([test "$lcov_version_major" -lt 1 -o "$lcov_version_minor" -lt 10], [
AC_MSG_ERROR([*** lcov version is too old. 1.10 required])
], [
have_coverage=yes
CC_CHECK_FLAGS_APPEND([with_coverage_cflags], [CFLAGS], [\
-fprofile-arcs \
-ftest-coverage])
])
])
])
AM_CONDITIONAL([ENABLE_COVERAGE], [test "x$enable_coverage" = "xyes"])
m4_ifdef([GTK_DOC_CHECK], [
GTK_DOC_CHECK([1.14],[--flavour no-tmpl-flat])
], [
@ -204,7 +226,7 @@ CC_CHECK_FLAGS_APPEND(with_cflags, [CFLAGS], [\
-fvisibility=hidden \
-ffunction-sections \
-fdata-sections])
AC_SUBST([OUR_CFLAGS], $with_cflags)
AC_SUBST([OUR_CFLAGS], "$with_cflags $with_coverage_cflags")
CC_CHECK_FLAGS_APPEND([with_ldflags], [LDFLAGS], [ \
@ -249,6 +271,7 @@ AC_MSG_RESULT([
logging: ${enable_logging}
compression: xz=${with_xz} zlib=${with_zlib}
debug: ${enable_debug}
coverage: ${enable_coverage}
doc: ${enable_gtk_doc}
man: ${enable_manpages}
])