[sheepdog] [PATCH v2 1/3] build: add 'make coverage' target

Kai Zhang kyle at zelin.io
Thu Jun 6 13:19:40 CEST 2013


Signed-off-by: Kai Zhang <kyle at zelin.io>
---
 .gitignore         |    4 ++++
 Makefile.am        |   15 +++++++++++++++
 collie/Makefile.am |    3 +++
 configure.ac       |   11 +++++++++++
 sheep/Makefile.am  |    3 +++
 5 files changed, 36 insertions(+), 0 deletions(-)

diff --git a/.gitignore b/.gitignore
index 60448d4..1c40a20 100644
--- a/.gitignore
+++ b/.gitignore
@@ -16,6 +16,9 @@
 *.orig
 *.rej
 cscope.*
+*.gcda
+*.gcno
+*.info
 
 #
 # for GLOBAL
@@ -36,6 +39,7 @@ shepherd/shepherd
 # directories
 .deps
 autom4te.cache
+coverage
 
 aclocal.m4
 Makefile
diff --git a/Makefile.am b/Makefile.am
index 16eb532..2d2e158 100644
--- a/Makefile.am
+++ b/Makefile.am
@@ -37,6 +37,7 @@ dist-clean-local:
 clean-generic:
 	rm -rf $(SPEC) $(TARFILE) cscope*
 	find -name '*.orig' -or -name '*.rej' | xargs rm -f
+	find -name '*.gcno' -or -name '*.gcda' -or -name '*.info' | xargs rm -f
 
 cscope:
 	@echo create cscope.out
@@ -82,3 +83,17 @@ check-style:
 	@for dir in lib collie sheep include sheepfs; do \
 		make -C $$dir check-style CHECK_STYLE="$(CHECK_STYLE)"; \
 	done
+
+if BUILD_COVERAGE
+coverage: clean check
+	@rm -rf coverage
+
+	@for dir in collie sheep ; do					\
+		$(MAKE) -C $$dir coverage;				\
+	done
+
+	@lcov -a collie/collie.info -a sheep/sheep.info			\
+	-o sheep.info &&						\
+	lcov -r sheep.info /usr/include/\* -o sheep.info &&		\
+	genhtml sheep.info -o coverage
+endif
diff --git a/collie/Makefile.am b/collie/Makefile.am
index bfbf660..e0d12d8 100644
--- a/collie/Makefile.am
+++ b/collie/Makefile.am
@@ -51,3 +51,6 @@ check-syntax:
 
 check-style:
 	@$(CHECK_STYLE) $(collie_SOURCES) $(noinst_HEADERS)
+
+coverage:
+	@lcov -d . -c -o collie.info
diff --git a/configure.ac b/configure.ac
index e06e55c..4ccadbd 100644
--- a/configure.ac
+++ b/configure.ac
@@ -179,9 +179,14 @@ AC_ARG_ENABLE([debug],
 	[  --enable-debug          : enable debug build. ],
 	[ default="no" ])
 
+AC_ARG_ENABLE([unittest],
+	[  --enable-unittest       : enable unittest. ],
+	[ default="no" ])
+
 AC_ARG_ENABLE([coverage],
 	[  --enable-coverage       : coverage analysis of the codebase. ],
 	[ default="no" ])
+AM_CONDITIONAL(BUILD_COVERAGE, test x$enable_coverage = xyes)
 
 AC_ARG_ENABLE([corosync],
 	[  --enable-corosync       : build corosync cluster driver ],,
@@ -326,11 +331,17 @@ if test "x${enable_coverage}" = xyes && \
 	COVERAGE_CFLAGS="-ftest-coverage -fprofile-arcs"
 	COVERAGE_LDFLAGS="-ftest-coverage -fprofile-arcs"
 	PACKAGE_FEATURES="$PACKAGE_FEATURES coverage"
+	enable_unittest="yes"
 else
 	COVERAGE_CFLAGS=""
 	COVERAGE_LDFLAGS=""
 fi
 
+if test "x${enable_unittest}" = xyes; then
+	PKG_CHECK_MODULES([CHECK], [check >= 0.9.4])
+fi
+AM_CONDITIONAL(BUILD_UNITTEST, test x$enable_unittest = xyes)
+
 
 if test "x${enable_fatal_warnings}" = xyes && \
 		cc_supports_flag -Werror ; then
diff --git a/sheep/Makefile.am b/sheep/Makefile.am
index e20579f..4916409 100644
--- a/sheep/Makefile.am
+++ b/sheep/Makefile.am
@@ -62,3 +62,6 @@ check-syntax:
 
 check-style:
 	@$(CHECK_STYLE) $(sheep_SOURCES) $(noinst_HEADERS)
+
+coverage:
+	@lcov -d . -c -o sheep.info
-- 
1.7.1




More information about the sheepdog mailing list