From ffda48bd613619415b42d6857795894fae215530 Mon Sep 17 00:00:00 2001 From: Tamas TEVESZ Date: Wed, 29 Sep 2010 17:15:55 +0200 Subject: [PATCH] Add LCOV support to generate coverage information How to use: - Install LCOV (http://ltp.sourceforge.net/coverage/lcov.php) - AFAICT, compiler must be GCC. - ./configure --prefix=/some/path --enable-lcov=/var/www This will configure the sources so that generated coverage information (HTML pages) will end up in /var/www/coverage-report. Choose a directory you have write access to. - make No installation necessary (although it probably doesn't hurt to have WM installed in ${prefix} so it can find resources and stuff, but the build tree must be kept intact anyway). - Put ${srcroot}/src, ${srcroot}/WPrefs.app and ${srcroot}/util first in your path. - Arrange for your .xinitrc or DM to start ${srcroot}/src/wmaker as your window manager. - Use it as you normally would, possibly for an extended period of time. - make coverage. This will create a tree of web pages under /var/www/coverage-report - Further `make coverage's (after some more use) will re-generate the report (deleting the directory first). - `make coverage-reset' will reset execution counts to zero (see lcov(1)). Signed-off-by: Tamas TEVESZ --- Makefile.am | 13 +++++++++++++ configure.ac | 18 ++++++++++++++++++ 2 files changed, 31 insertions(+) diff --git a/Makefile.am b/Makefile.am index 8f7b6b0e..a48ad44d 100644 --- a/Makefile.am +++ b/Makefile.am @@ -10,3 +10,16 @@ EXTRA_DIST = TODO BUGS BUGFORM FAQ FAQ.I18N FAQ.I18N.cs FAQ.I18N.sk \ The-perfect-Window-Maker-patch.txt \ README.es README.pt COPYING.WTFPL autogen.sh +if USE_LCOV +coverage-reset: + find . -type f -name '*.gcda' -exec rm -f '{}' ';' + lcov --directory . --zerocounters + +coverage: + rm -rf coverage @lcov_output_directory@ + -mkdir -p coverage @lcov_output_directory@ + lcov --compat-libtool --capture --directory . --output-file coverage/coverage.info + genhtml --output-directory @lcov_output_directory@ coverage/coverage.info + +.PHONY: coverage-reset coverage +endif diff --git a/configure.ac b/configure.ac index 2caa212d..36054967 100644 --- a/configure.ac +++ b/configure.ac @@ -155,6 +155,24 @@ AS_IF([test "x$with_boehm_gc" = "xyes"], ) ) +dnl LCOV +dnl ==== +AC_ARG_ENABLE([lcov], + [AS_HELP_STRING([--enable-lcov[=output-directory]], [enable coverage data generation using LCOV (GCC only) [default=no]])], + [], + [enable_lcov=no]) + +AS_IF([test "x$enable_lcov" != "xno"], + [AX_CFLAGS_GCC_OPTION(-fprofile-arcs -ftest-coverage) + if test "x$enable_lcov" = "xyes"; then + lcov_output_directory="coverage-report" + else + lcov_output_directory="${enable_lcov}/coverage-report" + fi + AC_SUBST(lcov_output_directory)] +) +AM_CONDITIONAL([USE_LCOV], [test "x$enable_lcov" != "xno"]) + dnl dnl ============================ dnl Checks for library functions