ecore: Enable coverage builds for exsisting tests
authorstefan <stefan@7cbeb6ba-43b4-40fd-8cce-4c39aea84d33>
Thu, 9 Aug 2012 16:19:30 +0000 (16:19 +0000)
committerstefan <stefan@7cbeb6ba-43b4-40fd-8cce-4c39aea84d33>
Thu, 9 Aug 2012 16:19:30 +0000 (16:19 +0000)
git-svn-id: http://svn.enlightenment.org/svn/e/trunk/ecore@75055 7cbeb6ba-43b4-40fd-8cce-4c39aea84d33

Makefile.am
configure.ac
m4/efl_coverage.m4 [new file with mode: 0644]
src/lib/ecore_cocoa/Makefile.am
src/lib/ecore_con/Makefile.am
src/lib/ecore_config/Makefile.am
src/lib/ecore_directfb/Makefile.am
src/lib/ecore_evas/Makefile.am
src/lib/ecore_fb/Makefile.am
src/lib/ecore_file/Makefile.am
src/tests/Makefile.am

index b7be982..9f16aeb 100644 (file)
@@ -117,6 +117,7 @@ m4/ecore_check_options.m4 \
 m4/efl_doxygen.m4 \
 m4/efl_path_max.m4 \
 m4/efl_shm_open.m4 \
+m4/efl_coverage.m4 \
 m4/efl_tests.m4 \
 m4/efl_threads.m4
 
@@ -196,7 +197,7 @@ if BUILD_ECORE_WAYLAND
 pkgconfig_DATA += ecore-wayland.pc
 endif
 
-.PHONY: doc
+.PHONY: doc coverage
 
 # Documentation
 
@@ -217,3 +218,33 @@ check-local:
        @echo "reconfigure with --enable-tests"
 
 endif
+
+# Coverage report
+
+if EFL_ENABLE_COVERAGE
+lcov-reset:
+       @rm -rf $(top_builddir)/coverage
+       @find $(top_builddir) -name "*.gcda" -delete
+       @lcov --zerocounters --directory $(top_builddir)
+
+lcov-report:
+       @mkdir $(top_builddir)/coverage
+       lcov --capture --compat-libtool --output-file $(top_builddir)/coverage/coverage.info --directory $(top_builddir)
+       lcov --remove $(top_builddir)/coverage/coverage.info '*.h' --output-file $(top_builddir)/coverage/coverage.cleaned.info
+       genhtml -t "$(PACKAGE_STRING)" -o $(top_builddir)/coverage/html $(top_builddir)/coverage/coverage.cleaned.info
+       @echo "Coverage Report at $(top_builddir)/coverage/html"
+
+coverage:
+       @$(MAKE) lcov-reset
+       @$(MAKE) check
+       @$(MAKE) lcov-report
+else
+lcov-reset:
+       @echo "reconfigure with --enable-coverage"
+
+lcov-report:
+       @echo "reconfigure with --enable-coverage"
+
+coverage:
+       @echo "reconfigure with --enable-tests --enable-coverage"
+endif
index 2ab207b..b0a05fc 100644 (file)
@@ -1969,10 +1969,17 @@ ECORE_EVAS_CHECK_MODULE_FULL([wayland-egl], [wayland-egl egl >= 7.10],
       fi
    ])
 
-### Unit tests
+### Unit tests and coverage
 
 EFL_CHECK_TESTS([enable_tests="yes"], [enable_tests="no"])
 
+EFL_CHECK_COVERAGE([${enable_tests}], [enable_coverage="yes"], [enable_coverage="no"])
+CFLAGS="${CFLAGS} ${EFL_COVERAGE_CFLAGS}"
+ECORE_LIBS="${ECORE_LIBS} ${EFL_COVERAGE_LIBS}"
+if test "x$enable_coverage" = "xyes" ; then
+   CFLAGS="${CFLAGS} ${EFL_DEBUG_CFLAGS}"
+fi
+
 ### install and build examples
 
 EFL_CHECK_BUILD_EXAMPLES([enable_build_examples="yes"], [enable_build_examples="no"])
@@ -2220,6 +2227,7 @@ if test "x${have_ecore_evas}" = "xyes" ; then
 fi
 echo
 echo "  Tests................: ${enable_tests}"
+echo "  Coverage.............: ${enable_coverage}"
 echo "  Maximum log level....: ${with_max_log_level}"
 echo "Documentation..........: ${build_doc}"
 echo "Examples...............: ${enable_build_examples}"
diff --git a/m4/efl_coverage.m4 b/m4/efl_coverage.m4
new file mode 100644 (file)
index 0000000..85d0321
--- /dev/null
@@ -0,0 +1,62 @@
+dnl Copyright (C) 2008 Vincent Torri <vtorri at univ-evry dot fr>
+dnl That code is public domain and can be freely used or copied.
+
+dnl Macro that check if coverage support is wanted and, if yes, if
+dnl lcov is available.
+
+dnl Usage: EFL_CHECK_COVERAGE(tests [, ACTION-IF-FOUND [, ACTION-IF-NOT-FOUND]])
+dnl The parameter 'tests' is used if a dependency is needed. If set to "yes",
+dnl the dependency is available.
+dnl Defines EFL_COVERAGE_CFLAGS and EFL_COVERAGE_LIBS variables
+dnl Defines the automake conditionnal EFL_ENABLE_COVERAGE
+
+AC_DEFUN([EFL_CHECK_COVERAGE],
+[
+
+dnl configure option
+
+AC_ARG_ENABLE([coverage],
+   [AC_HELP_STRING([--enable-coverage], [enable coverage profiling instrumentation @<:@default=disabled@:>@])],
+   [
+    if test "x${enableval}" = "xyes" ; then
+       _efl_enable_coverage="yes"
+    else
+       _efl_enable_coverage="no"
+    fi
+   ],
+   [_efl_enable_coverage="no"])
+
+AC_MSG_CHECKING([whether to use profiling instrumentation])
+AC_MSG_RESULT([$_efl_enable_coverage])
+
+dnl lcov check
+
+if test "x$_efl_enable_coverage" = "xyes" && test ! "x$1" = "xyes" ; then
+   AC_MSG_WARN([Coverage report requested but tests not being built, disable profiling instrumentation.])
+   AC_MSG_WARN([Run configure with --enable-tests])
+   _efl_enable_coverage="no"
+fi
+
+if test "x$_efl_enable_coverage" = "xyes" ; then
+   AC_CHECK_PROG(have_lcov, [lcov], [yes], [no])
+   if test "x$have_lcov" = "xyes" ; then
+      EFL_COVERAGE_CFLAGS="-fprofile-arcs -ftest-coverage"
+      EFL_COVERAGE_LIBS="-lgcov"
+# remove any optimisation flag and force debug symbols
+      EFL_DEBUG_CFLAGS="-g -O0 -DDEBUG"
+   else
+      AC_MSG_WARN([lcov is not found, disable profiling instrumentation])
+      _efl_enable_coverage="no"
+   fi
+fi
+
+dnl Substitution
+AC_SUBST(EFL_COVERAGE_CFLAGS)
+AC_SUBST(EFL_COVERAGE_LIBS)
+
+AM_CONDITIONAL(EFL_ENABLE_COVERAGE, test "x${_efl_enable_coverage}" = "xyes")
+
+AS_IF([test "x$_efl_enable_coverage" = "xyes"], [$2], [$3])
+])
+
+dnl End of efl_coverage.m4
index 4ac7b11..c41bd9b 100644 (file)
@@ -6,7 +6,8 @@ AM_CPPFLAGS = \
 -I$(top_builddir)/src/lib/ecore \
 -I$(top_builddir)/src/lib/ecore_input \
 @EVAS_CFLAGS@ \
-@EINA_CFLAGS@
+@EINA_CFLAGS@ \
+@EFL_ECORE_BUILD@
 
 lib_LTLIBRARIES = libecore_cocoa.la
 includes_HEADERS = \
index 0e8e071..1c3871f 100644 (file)
@@ -12,7 +12,8 @@ AM_CPPFLAGS = \
 @EINA_CFLAGS@ \
 @TLS_CFLAGS@ \
 @CARES_CFLAGS@ \
-@WIN32_CPPFLAGS@
+@WIN32_CPPFLAGS@ \
+@EFL_ECORE_BUILD@
 
 lib_LTLIBRARIES = libecore_con.la
 includes_HEADERS = Ecore_Con.h
index c459351..c8e8ae3 100644 (file)
@@ -12,7 +12,8 @@ AM_CPPFLAGS = \
 -DPACKAGE_DATA_DIR=\"$(datadir)/$(PACKAGE)\" \
 @EVAS_CFLAGS@ \
 @EET_CFLAGS@ \
-@EINA_CFLAGS@
+@EINA_CFLAGS@ \
+@EFL_ECORE_BUILD@
 
 CLEANFILES = $(DB)
 
index 8142d33..6c53626 100644 (file)
@@ -3,7 +3,7 @@ MAINTAINERCLEANFILES = Makefile.in
 AM_CPPFLAGS = \
 -I$(top_srcdir)/src/lib/ecore \
 -I$(top_builddir)/src/lib/ecore \
-@DIRECTFB_CFLAGS@ @EINA_CFLAGS@
+@DIRECTFB_CFLAGS@ @EINA_CFLAGS@ @EFL_ECORE_BUILD@
 
 lib_LTLIBRARIES = libecore_directfb.la
 includes_HEADERS = Ecore_DirectFB.h
index cd7f37b..1828096 100644 (file)
@@ -107,7 +107,8 @@ $(ECORE_IPC_INC) \
 @EVAS_CFLAGS@ \
 @EINA_CFLAGS@ \
 @EVIL_CFLAGS@ \
-@WAYLAND_EGL_CFLAGS@
+@WAYLAND_EGL_CFLAGS@ \
+@EFL_ECORE_BUILD@
 
 AM_CFLAGS = @WIN32_CFLAGS@
 
index 9129fec..3af625a 100644 (file)
@@ -5,8 +5,8 @@ AM_CPPFLAGS = \
 -I$(top_builddir)/src/lib/ecore \
 -I$(top_srcdir)/src/lib/ecore_input \
 @TSLIB_CFLAGS@ \
-@EINA_CFLAGS@
-
+@EINA_CFLAGS@ \
+@EFL_ECORE_BUILD@
 
 lib_LTLIBRARIES = libecore_fb.la
 includes_HEADERS = Ecore_Fb.h
index ab23ace..e3cb74a 100644 (file)
@@ -8,7 +8,8 @@ AM_CPPFLAGS = \
 @CURL_CFLAGS@ \
 @EVIL_CFLAGS@ \
 @EINA_CFLAGS@ \
-@WIN32_CPPFLAGS@
+@WIN32_CPPFLAGS@ \
+@EFL_ECORE_BUILD@
 
 AM_CFLAGS = @WIN32_CFLAGS@
 
index bfd20d9..217f5f8 100644 (file)
@@ -5,7 +5,8 @@ AM_CPPFLAGS = \
 -I$(top_srcdir)/src/lib/ecore_con \
 -I$(top_srcdir)/src/lib/ecore_x \
 @EINA_CFLAGS@ \
-@CHECK_CFLAGS@
+@CHECK_CFLAGS@ \
+@EFL_ECORE_BUILD@
 
 if EFL_ENABLE_TESTS