This patch adds test coverage to the 'make test' target.
gcov is used for gcc and tcov is used for Sun studio compiler.

Victor
diff --git a/Makefile.am b/Makefile.am
index 29085ec..c149d00 100644
--- a/Makefile.am
+++ b/Makefile.am
@@ -7,6 +7,7 @@ memcached_LDADD = @DTRACE_OBJ@ @DAEMON_OBJ@
 memcached_debug_LDADD = @DTRACE_DEBUG_OBJ@ @DAEMON_OBJ@
 memcached_DEPENDENCIES = @DTRACE_OBJ@ @DAEMON_OBJ@
 memcached_debug_DEPENDENCIES = @DTRACE_DEBUG_OBJ@ @DAEMON_OBJ@
+memcached_debug_CFLAGS = @PROFILER_FLAGS@
 
 memcached_dtrace.h:
 	${DTRACE} -h -s memcached_dtrace.d 
@@ -26,6 +27,20 @@ EXTRA_DIST = doc scripts TODO t memcached.spec daemon.c memcached_dtrace.d
 
 test:	memcached-debug
 	prove $(srcdir)/t
+	@if test `basename $(PROFILER)` = "gcov"; then \
+	  for file in memcached_debug-*.gc??; do \
+	    mv -f $$file `echo $$file | sed 's/memcached_debug-//'`; \
+	  done && \
+	  for file in *.gcda; do \
+	    $(PROFILER) `echo $$file | sed 's/.gcda/.c/'` 2>&1; \
+	  done \
+	elif test `basename $(PROFILER)` = "tcov"; then \
+	  files=`grep SRCFILE memcached-debug.profile/tcovd | sed 's/SRCFILE://' | sort | uniq` && \
+	  $(PROFILER) -x memcached-debug.profile $$files 2>&1; \
+	  for file in *.tcov; do \
+	    echo `echo $$file | sed 's/.tcov//'` : `grep 'Percent of the file executed' $$file`; \
+	  done \
+	else :; fi
 
 dist-hook:
 	rm -rf $(distdir)/doc/.svn/
diff --git a/configure.ac b/configure.ac
index 01c51cf..1a8afe3 100644
--- a/configure.ac
+++ b/configure.ac
@@ -28,6 +28,32 @@ AC_SUBST(DTRACE_OBJ)
 AC_SUBST(DTRACE_DEBUG_OBJ)
 AC_SUBST(DTRACEFLAGS)
 
+if test "$GCC" = "yes"
+then
+   AC_PATH_PROG([PROFILER], [gcov], "no", [$PATH])
+   if test "x$PROFILER" != "xno"; then
+      PROFILER_FLAGS="-fprofile-arcs -ftest-coverage"    
+   fi
+else
+   AC_RUN_IFELSE(
+      [AC_LANG_PROGRAM([], [dnl
+#ifdef __SUNPRO_C
+   return 0;
+#else
+   return 1;
+#endif
+      ])
+    ],[
+       AC_PATH_PROG([PROFILER], [tcov], "no", [$PATH])
+       if test "x$PROFILER" != "xno"; then
+          PROFILER_FLAGS=-xprofile=tcov
+       fi
+    ])
+fi
+
+AC_SUBST(PROFILER_FLAGS)
+
+
 AC_ARG_ENABLE(64bit,
   [AS_HELP_STRING([--enable-64bit],[build 64bit verison])])
 if test "x$enable_64bit" == "xyes"

Reply via email to