[Libvir] [PATCH] Rewrite test-coverage rules to accommodate multiple .o files per .c.

Jim Meyering jim at meyering.net
Wed Feb 27 15:58:31 UTC 2008


This makes the "make -C src cov" rule work with the addition of the
libvirt_test.la convenience library.  The trouble is that since there
are now two .o files per .c (one for the "real" libvirt library, and
another for the convenience library, libvirt_test.la, with no access
restrictions, for testing), when you generate test-coverage stats,
you have stats for each .c file in two different places, one for each
.o file.  This solves the problem by running gcov on each pair of .o files.

A minor twist: when profiling with --disable-shared, the .o files are in
".", rather than in ".libs/", so configure.in now records the dirname
in a new AC_SUBST'd variable, LV_LIBTOOL_OBJDIR, and src/Makefile.am
uses that.  Thus, profiling works with shared as well as static
libraries.


	Rewrite test-coverage rules to accommodate multiple .o files per .c.
	* src/Makefile.am (cov): Rewrite rule to merge gcov results corresponding
	to two .o files: the libvirt_la- one, and the libvirt_test_la- one.
	(tst): Remove unused rule.
	* configure.in (LV_LIBTOOL_OBJDIR): Define and AC_SUBST.

Signed-off-by: Jim Meyering <meyering at redhat.com>
---
 configure.in    |    7 +++++++
 src/Makefile.am |   24 ++++++++++++------------
 2 files changed, 19 insertions(+), 12 deletions(-)

diff --git a/configure.in b/configure.in
index c2030c7..6367990 100644
--- a/configure.in
+++ b/configure.in
@@ -913,6 +913,13 @@ AC_SUBST(MINGW_EXTRA_LDFLAGS)

 AC_SYS_LARGEFILE

+# Set LV_LIBTOOL_OBJDIR to "." or $lt_cv_objdir, depending on whether
+# we're building shared libraries.  This is the name of the directory
+# in which .o files will be created.
+test "$enable_shared" = no && lt_cv_objdir=.
+LV_LIBTOOL_OBJDIR=${lt_cv_objdir-.}
+AC_SUBST(LV_LIBTOOL_OBJDIR)
+
 # very annoying
 rm -f COPYING
 cp COPYING.LIB COPYING
diff --git a/src/Makefile.am b/src/Makefile.am
index c15de77..f8f2c4b 100644
--- a/src/Makefile.am
+++ b/src/Makefile.am
@@ -137,20 +137,20 @@ else
 EXTRA_DIST += parthelper.c
 endif

-#
-# target to ease building test programs
-#
-tst: tst.c
-	$(CC) $(CFLAGS) $(INCLUDES) -I../include -o tst tst.c .libs/libvirt.a $(LIBXML_LIBS) $(VIRSH_LIBS) $(GNUTLS_LIBS) $(LIBS)
-
-COVERAGE_FILES = $(CLIENT_SOURCES:%.c=libvirt_la-%.cov)
-
-cov: clean-cov $(COVERAGE_FILES)
+cov: clean-cov
+	for i in $(CLIENT_SOURCES); do			\
+	  case $$i in *.c) ;; *) continue;; esac;	\
+	  b=$$(basename $$i .c);			\
+	  o_files=;					\
+	  for i in '' _test; do				\
+	    o="$(LV_LIBTOOL_OBJDIR)/libvirt$${i}_la-$$b.o";	\
+	    test -f "$$o"				\
+	      && o_files="$$o_files $$o";		\
+	  done;						\
+	  gcov -b -f $$o_files > $$b.cov;		\
+	done

 clean-cov:
 	rm -f *.cov *.gcov

-%.cov: .libs/%.o
-	gcov -b -f -o .libs $< > $@
-
 CLEANFILES = *.cov *.gcov .libs/*.gcda .libs/*.gcno *.gcno *.gcda
--
1.5.4.3.231.gc0a6




More information about the libvir-list mailing list