build: Add an --enable-code-coverage configure parameter
authorPhilip Withnall <philip@tecnocode.co.uk>
Sun, 8 Jan 2012 15:58:16 +0000 (15:58 +0000)
committerPhilip Withnall <philip@tecnocode.co.uk>
Sun, 8 Jan 2012 21:49:40 +0000 (21:49 +0000)
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
backends/eds/lib/Makefile.am
backends/key-file/Makefile.am
backends/libsocialweb/Makefile.am
backends/libsocialweb/lib/Makefile.am
backends/telepathy/Makefile.am
backends/telepathy/lib/Makefile.am
backends/tracker/Makefile.am
backends/tracker/lib/Makefile.am
configure.ac
folks/Makefile.am

index 54a22e8..e17c753 100644 (file)
@@ -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 \
index a0afdcf..6e277c7 100644 (file)
@@ -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)
index ec8b8c7..0a10ba7 100644 (file)
@@ -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 \
index 80cc474..83f096a 100644 (file)
@@ -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 \
index 1f49bcf..e330d47 100644 (file)
@@ -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)
index 5c1e626..c2826e1 100644 (file)
@@ -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 \
index 35c4442..77c75f3 100644 (file)
@@ -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)
index d5f383e..8cf3484 100644 (file)
@@ -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 \
index 215d057..a4495fd 100644 (file)
@@ -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)
index 2bbec9c..bb45b05 100644 (file)
@@ -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}
index 7cf909b..f7835c9 100644 (file)
@@ -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