[folks] build: Add an --enable-code-coverage configure parameter



commit 945cb3d7301b94205ad77fb454482d07679f5037
Author: Philip Withnall <philip tecnocode co uk>
Date:   Sun Jan 8 15:58:16 2012 +0000

    build: Add an --enable-code-coverage configure parameter
    
    When building with code coverage enabled, -fprofile-arcs and -ftest-coverage
    will be passed to gcc during compilation, and -lgcov will be passed during
    linking.
    
    Code coverage is disabled by default for the core of folks, since it has to
    turn off valacâs â-gâ option to output #line directives in the generated C
    code. This is necessary because lcov gets confused by execution passing
    between .vala and .c files. More useful results can be obtained by just
    looking at the code coverage of the .c files and ignoring the boilerplate
    in them.
    
    (More specifically, lcov reports on .vala files arenât especially useful
    because they erroneously mark many lines as being executed which actually
    werenât. This happens because one Vala line may be compiled into several
    lines of C, some of which will be executed unconditionally even if the Vala
    line itself isnât executed. This will fool lcov into thinking the Vala line
    was actually executed.)
    
    Code coverage is automatically turned off when making a release.

 backends/eds/Makefile.am              |    2 +
 backends/eds/lib/Makefile.am          |    2 +
 backends/key-file/Makefile.am         |    2 +
 backends/libsocialweb/Makefile.am     |    2 +
 backends/libsocialweb/lib/Makefile.am |    2 +
 backends/telepathy/Makefile.am        |    2 +
 backends/telepathy/lib/Makefile.am    |    4 +++
 backends/tracker/Makefile.am          |    2 +
 backends/tracker/lib/Makefile.am      |    2 +
 configure.ac                          |   34 +++++++++++++++++++++++++++++++-
 folks/Makefile.am                     |    4 +++
 11 files changed, 56 insertions(+), 2 deletions(-)
---
diff --git a/backends/eds/Makefile.am b/backends/eds/Makefile.am
index 54a22e8..e17c753 100644
--- a/backends/eds/Makefile.am
+++ b/backends/eds/Makefile.am
@@ -42,6 +42,7 @@ eds_la_CPPFLAGS = \
 
 eds_la_CFLAGS = \
 	$(AM_CFLAGS) \
+	$(CODE_COVERAGE_CFLAGS) \
 	$(GIO_CFLAGS) \
 	$(GLIB_CFLAGS) \
 	$(GEE_CFLAGS) \
@@ -64,6 +65,7 @@ eds_la_LIBADD = \
 
 eds_la_LDFLAGS = \
 	$(AM_LDFLAGS) \
+	$(CODE_COVERAGE_LDFLAGS) \
 	-shared \
 	-fPIC \
 	-module \
diff --git a/backends/eds/lib/Makefile.am b/backends/eds/lib/Makefile.am
index a0afdcf..6e277c7 100644
--- a/backends/eds/lib/Makefile.am
+++ b/backends/eds/lib/Makefile.am
@@ -60,6 +60,7 @@ libfolks_eds_la_VALAFLAGS = \
 
 libfolks_eds_la_CFLAGS = \
 	$(AM_CFLAGS) \
+	$(CODE_COVERAGE_CFLAGS) \
 	$(GIO_CFLAGS) \
 	$(GLIB_CFLAGS) \
 	$(GEE_CFLAGS) \
@@ -85,6 +86,7 @@ libfolks_eds_la_LIBADD = \
 # command as an error message in a bizarrely named file
 libfolks_eds_la_LDFLAGS = \
 	$(AM_LDFLAGS) \
+	$(CODE_COVERAGE_LDFLAGS) \
 	-version-info "$(LT_CURRENT)":"$(LT_REVISION)":"$(LT_AGE)" \
 	-export-symbols-regex "^(EDSF|edsf)_.*|" \
 	$(NULL)
diff --git a/backends/key-file/Makefile.am b/backends/key-file/Makefile.am
index ec8b8c7..0a10ba7 100644
--- a/backends/key-file/Makefile.am
+++ b/backends/key-file/Makefile.am
@@ -31,6 +31,7 @@ key_file_la_CPPFLAGS = \
 
 key_file_la_CFLAGS = \
 	$(AM_CFLAGS) \
+	$(CODE_COVERAGE_CFLAGS) \
 	$(GIO_CFLAGS) \
 	$(GLIB_CFLAGS) \
 	$(GEE_CFLAGS) \
@@ -46,6 +47,7 @@ key_file_la_LIBADD = \
 
 key_file_la_LDFLAGS = \
 	$(AM_LDFLAGS) \
+	$(CODE_COVERAGE_LDFLAGS) \
 	-shared \
 	-fPIC \
 	-module \
diff --git a/backends/libsocialweb/Makefile.am b/backends/libsocialweb/Makefile.am
index 80cc474..83f096a 100644
--- a/backends/libsocialweb/Makefile.am
+++ b/backends/libsocialweb/Makefile.am
@@ -40,6 +40,7 @@ libsocialweb_la_CPPFLAGS = \
 
 libsocialweb_la_CFLAGS = \
 	$(AM_CFLAGS) \
+	$(CODE_COVERAGE_CFLAGS) \
 	$(GIO_CFLAGS) \
 	$(GLIB_CFLAGS) \
 	$(GEE_CFLAGS) \
@@ -58,6 +59,7 @@ libsocialweb_la_LIBADD = \
 
 libsocialweb_la_LDFLAGS = \
 	$(AM_LDFLAGS) \
+	$(CODE_COVERAGE_LDFLAGS) \
 	-shared \
 	-fPIC \
 	-module \
diff --git a/backends/libsocialweb/lib/Makefile.am b/backends/libsocialweb/lib/Makefile.am
index 1f49bcf..e330d47 100644
--- a/backends/libsocialweb/lib/Makefile.am
+++ b/backends/libsocialweb/lib/Makefile.am
@@ -59,6 +59,7 @@ folks_backend_libsocialweb_deps = \
 
 libfolks_libsocialweb_la_CFLAGS = \
 	$(GIO_CFLAGS) \
+	$(CODE_COVERAGE_CFLAGS) \
 	$(GLIB_CFLAGS) \
 	$(GEE_CFLAGS) \
 	$(SW_CLIENT_CFLAGS) \
@@ -74,6 +75,7 @@ libfolks_libsocialweb_la_LIBADD = \
 
 
 libfolks_libsocialweb_la_LDFLAGS = \
+	$(CODE_COVERAGE_LDFLAGS) \
 	-version-info "$(LT_CURRENT)":"$(LT_REVISION)":"$(LT_AGE)" \
         -export-symbols-regex "^swf_.*" \
 	$(NULL)
diff --git a/backends/telepathy/Makefile.am b/backends/telepathy/Makefile.am
index 5c1e626..c2826e1 100644
--- a/backends/telepathy/Makefile.am
+++ b/backends/telepathy/Makefile.am
@@ -40,6 +40,7 @@ telepathy_la_CPPFLAGS = \
 
 telepathy_la_CFLAGS = \
 	$(AM_CFLAGS) \
+	$(CODE_COVERAGE_CFLAGS) \
 	$(GIO_CFLAGS) \
 	$(GLIB_CFLAGS) \
 	$(GEE_CFLAGS) \
@@ -58,6 +59,7 @@ telepathy_la_LIBADD = \
 
 telepathy_la_LDFLAGS = \
 	$(AM_LDFLAGS) \
+	$(CODE_COVERAGE_LDFLAGS) \
 	-shared \
 	-fPIC \
 	-module \
diff --git a/backends/telepathy/lib/Makefile.am b/backends/telepathy/lib/Makefile.am
index 35c4442..77c75f3 100644
--- a/backends/telepathy/lib/Makefile.am
+++ b/backends/telepathy/lib/Makefile.am
@@ -28,6 +28,7 @@ tp_lowlevel_headers = tp-lowlevel.h
 
 libtp_lowlevel_la_CFLAGS = \
 	$(AM_CFLAGS) \
+	$(CODE_COVERAGE_CFLAGS) \
 	$(ERROR_CFLAGS) \
 	$(GIO_CFLAGS) \
 	$(GLIB_CFLAGS) \
@@ -40,6 +41,7 @@ libtp_lowlevel_la_CFLAGS = \
 # vala-gen-introspect)
 libtp_lowlevel_la_LDFLAGS = \
 	$(AM_LDFLAGS) \
+	$(CODE_COVERAGE_LDFLAGS) \
 	-shared \
 	-rpath $(libdir) \
 	-avoid-version \
@@ -127,6 +129,7 @@ libfolks_telepathy_la_VALAFLAGS = \
 
 libfolks_telepathy_la_CFLAGS = \
 	$(AM_CFLAGS) \
+	$(CODE_COVERAGE_CFLAGS) \
 	$(GIO_CFLAGS) \
 	$(GLIB_CFLAGS) \
 	$(GEE_CFLAGS) \
@@ -148,6 +151,7 @@ libfolks_telepathy_la_LIBADD = \
 # command as an error message in a bizarrely named file
 libfolks_telepathy_la_LDFLAGS = \
 	$(AM_LDFLAGS) \
+	$(CODE_COVERAGE_LDFLAGS) \
 	-version-info "$(LT_CURRENT)":"$(LT_REVISION)":"$(LT_AGE)" \
 	-export-symbols-regex "^tpf_.*" \
 	$(NULL)
diff --git a/backends/tracker/Makefile.am b/backends/tracker/Makefile.am
index d5f383e..8cf3484 100644
--- a/backends/tracker/Makefile.am
+++ b/backends/tracker/Makefile.am
@@ -41,6 +41,7 @@ tracker_la_CPPFLAGS = \
 
 tracker_la_CFLAGS = \
 	$(AM_CFLAGS) \
+	$(CODE_COVERAGE_CFLAGS) \
 	$(GIO_CFLAGS) \
 	$(GLIB_CFLAGS) \
 	$(GEE_CFLAGS) \
@@ -59,6 +60,7 @@ tracker_la_LIBADD = \
 
 tracker_la_LDFLAGS = \
 	$(AM_LDFLAGS) \
+	$(CODE_COVERAGE_LDFLAGS) \
 	-shared \
 	-fPIC \
 	-module \
diff --git a/backends/tracker/lib/Makefile.am b/backends/tracker/lib/Makefile.am
index 215d057..a4495fd 100644
--- a/backends/tracker/lib/Makefile.am
+++ b/backends/tracker/lib/Makefile.am
@@ -52,6 +52,7 @@ libfolks_tracker_la_CPPFLAGS = \
 
 libfolks_tracker_la_CFLAGS = \
 	$(AM_CFLAGS) \
+	$(CODE_COVERAGE_CFLAGS) \
 	$(GIO_CFLAGS) \
 	$(GLIB_CFLAGS) \
 	$(GEE_CFLAGS) \
@@ -72,6 +73,7 @@ libfolks_tracker_la_LIBADD = \
 # command as an error message in a bizarrely named file
 libfolks_tracker_la_LDFLAGS = \
 	$(AM_LDFLAGS) \
+	$(CODE_COVERAGE_LDFLAGS) \
 	-version-info "$(LT_CURRENT)":"$(LT_REVISION)":"$(LT_AGE)" \
 	-export-symbols-regex "^(TRF|trf)_.*|" \
 	$(NULL)
diff --git a/configure.ac b/configure.ac
index 2bbec9c..bb45b05 100644
--- a/configure.ac
+++ b/configure.ac
@@ -450,15 +450,44 @@ AS_COMPILER_FLAG([-Wstrict-prototypes], [ERROR_CFLAGS="$ERROR_CFLAGS \
 
 AC_SUBST([ERROR_CFLAGS])
 
+# -----------------------------------------------------------
+# Code coverage flags
+# -----------------------------------------------------------
+
+AC_ARG_ENABLE([code-coverage],
+              AS_HELP_STRING([--enable-code-coverage],
+                             [compile with code coverage code]),
+              [enable_code_coverage=$enableval], [enable_code_coverage=no])
+
+# Only enable code coverage if this isn't a release.
+m4_if(folks_released, [1], [],
+    [
+        if test "x$GCC" = "xyes"; then
+            if test "x$enable_code_coverage" = "xyes"; then
+                CODE_COVERAGE_CFLAGS="-fprofile-arcs -ftest-coverage -O0 -ggdb"
+                CODE_COVERAGE_LDFLAGS="-lgcov"
+            fi
+        fi
+    ])
+
+AC_SUBST([CODE_COVERAGE_CFLAGS])
+AC_SUBST([CODE_COVERAGE_LDFLAGS])
+
 # Vala-related flags
 AS_IF([test "x$enable_vala" = "xyes"],
       [ERROR_INTROSPECTION_SCANNER_ARGS="\
                         $ERROR_INTROSPECTION_SCANNER_ARGS --warn-error"
        ERROR_VALAFLAGS="$ERROR_VALAFLAGS --fatal-warnings"])
 
+# Disable -g if we're building with code coverage enabled, since Vala's
+# insertion of #line directives into .c files confuses lcov. For the moment,
+# we'll have to do with looking at code coverage of the generated C files only.
+# We set the debug flags in CODE_COVERAGE_CFLAGS instead in that case.
 m4_if(folks_released, [1], [],
     [
-        ERROR_VALAFLAGS="$ERROR_VALAFLAGS -g"
+        if test "x$enable_code_coverage" != "xyes" -o "x$GCC" != "xyes"; then
+            ERROR_VALAFLAGS="$ERROR_VALAFLAGS -g"
+        fi
     ])
 
 AC_SUBST([ERROR_INTROSPECTION_SCANNER_ARGS])
@@ -524,7 +553,8 @@ Configure summary:
 
         Vala........................:  ${enable_vala}
         Vala Compiler...............:  ${VALAC}
-        C Compiler Flags............:  ${CFLAGS} ${ERROR_CFLAGS}
+        C Compiler Flags............:  ${CFLAGS} ${ERROR_CFLAGS} ${CODE_COVERAGE_CFLAGS}
+        Linker Flags................:  ${LDFLAGS} ${CODE_COVERAGE_LDFLAGS}
         Prefix......................:  ${prefix}
         Bugreporting URL............:  ${PACKAGE_BUGREPORT}
         Documentation...............:  ${have_valadoc}
diff --git a/folks/Makefile.am b/folks/Makefile.am
index 7cf909b..f7835c9 100644
--- a/folks/Makefile.am
+++ b/folks/Makefile.am
@@ -31,12 +31,14 @@ libfolks_internal_la_VALAFLAGS = \
 
 libfolks_internal_la_CFLAGS = \
 	$(AM_CFLAGS) \
+	$(CODE_COVERAGE_CFLAGS) \
 	$(GLIB_CFLAGS) \
 	$(GEE_CFLAGS) \
 	$(NULL)
 
 libfolks_internal_la_LDFLAGS = \
 	$(AM_LDFLAGS) \
+	$(CODE_COVERAGE_LDFLAGS) \
 	$(NULL)
 
 libfolks_internal_la_LIBADD = \
@@ -109,6 +111,7 @@ libfolks_la_VALAFLAGS = \
 
 libfolks_la_CFLAGS = \
 	$(AM_CFLAGS) \
+	$(CODE_COVERAGE_CFLAGS) \
 	$(GIO_CFLAGS) \
 	$(GLIB_CFLAGS) \
 	$(GMODULE_CFLAGS) \
@@ -131,6 +134,7 @@ libfolks_la_LIBADD = \
 # command as an error message in a bizarrely named file
 libfolks_la_LDFLAGS = \
 	$(AM_LDFLAGS) \
+	$(CODE_COVERAGE_LDFLAGS) \
 	-version-info "$(LT_CURRENT)":"$(LT_REVISION)":"$(LT_AGE)"
 
 folksdir = $(includedir)/folks



[Date Prev][Date Next]   [Thread Prev][Thread Next]   [Thread Index] [Date Index] [Author Index]