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
# ------------------------------------------------------------------------------
])
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])
], [
-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], [ \
logging: ${enable_logging}
compression: xz=${with_xz} zlib=${with_zlib}
debug: ${enable_debug}
+ coverage: ${enable_coverage}
doc: ${enable_gtk_doc}
man: ${enable_manpages}
])