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(a)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
Show replies by thread