Jim Meyering <jim(a)meyering.net> wrote:
"Daniel P. Berrange" <berrange(a)redhat.com> wrote:
> On Wed, Feb 27, 2008 at 04:52:21PM +0100, Jim Meyering wrote:
>> I got link errors when building with --disable-shared, and finally
>> fixed it. Here's most of the solution. The patch after this one
>> adjusts the gcov (test-coverage)-related things so that works with
>> the new setup, too.
>> diff --git a/src/libvirt_sym.version b/src/libvirt_sym.version
>> index 38b631e..581f380 100644
>> --- a/src/libvirt_sym.version
>> +++ b/src/libvirt_sym.version
>> @@ -32,6 +32,7 @@
>> virDomainLookupByName;
>> virDomainLookupByUUID;
>> virDomainLookupByUUIDString;
>> + virDomainParseXMLDesc;
>
> This is not part of the public API.
Good catch.
I needed that with an earlier incarnation of this work,
but no longer.
>> @@ -184,6 +185,8 @@
>> __virBufferVSprintf;
>> __virBufferAdd;
>> __virBufferAddChar;
>> + __virErrorMsg;
>> + __virRaiseError;
>
> What uses these two symbols ? AFAIK they shoudl only ever be
> called by internal drivers and not exported
Same here.
With those adjustments, the only changes to libvirt_sym.version
are to remove some SPACE-before-TAB.
Here's the adjusted patch.
If no one objects, I'll commit these two later today.
Subject: [PATCH] Avoid link errors with "configure --disable-shared".
* src/Makefile.am: Create a convenience library, libvirt_test.la,
and don't restrict access to *its* symbols.
* tests/Makefile.am (LDADDS): Add ../src/libvirt_test.la, so that
"configure --disable-shared" no longer provokes link errors.
(LIBVIRT): Remove definition.
(LDADDS): Remove use.
($(LIBVIRT)): Remove rule.
(LDADDS): Use the new convenience library instead.
(CLEANFILES): Define.
* docs/examples/index.py (dump_Makefile): Append $(COVERAGE_LDFLAGS),
to the LDADDS definition, to avoid link error with the combination of
--enable-test-coverage and --disable-shared.
* docs/examples/Makefile.am: Regenerate.
* docs/examples/index.html: Likewise.
* qemud/Makefile.am (libvirtd_LDFLAGS): Append $(COVERAGE_LDFLAGS).
* src/libvirt_sym.version: Remove some SP-before-TAB.
Signed-off-by: Jim Meyering <meyering(a)redhat.com>
---
docs/examples/Makefile.am | 2 +-
docs/examples/index.html | 2 +-
docs/examples/index.py | 3 ++-
qemud/Makefile.am | 26 ++++++++++++++++----------
src/Makefile.am | 19 +++++++++++++++++++
src/libvirt_sym.version | 8 ++++----
tests/Makefile.am | 13 ++-----------
7 files changed, 45 insertions(+), 28 deletions(-)
diff --git a/docs/examples/Makefile.am b/docs/examples/Makefile.am
index 9da4e21..d8e4868 100644
--- a/docs/examples/Makefile.am
+++ b/docs/examples/Makefile.am
@@ -3,7 +3,7 @@
SUBDIRS=python
INCLUDES = -I$(top_builddir)/include -I$(top_srcdir)/include -I@srcdir@/include
DEPS = $(top_builddir)/src/libvirt.la
-LDADDS = @STATIC_BINARIES@ $(WARN_CFLAGS) $(top_builddir)/src/libvirt.la
+LDADDS = @STATIC_BINARIES@ $(WARN_CFLAGS) $(top_builddir)/src/libvirt.la
$(COVERAGE_LDFLAGS)
rebuild: examples.xml index.html
diff --git a/docs/examples/index.py b/docs/examples/index.py
index 8f386ed..6be80c5 100755
--- a/docs/examples/index.py
+++ b/docs/examples/index.py
@@ -225,7 +225,8 @@ def dump_Makefile():
SUBDIRS=python
INCLUDES = -I$(top_builddir)/include -I$(top_srcdir)/include -I@srcdir@/include
DEPS = $(top_builddir)/src/libvirt.la
-LDADDS = @STATIC_BINARIES@ $(WARN_CFLAGS) $(top_builddir)/src/libvirt.la
+LDADDS = @STATIC_BINARIES@ $(WARN_CFLAGS) $(top_builddir)/src/libvirt.la \
+ $(COVERAGE_LDFLAGS)
rebuild: examples.xml index.html
diff --git a/qemud/Makefile.am b/qemud/Makefile.am
index 3094b18..8cbcebe 100644
--- a/qemud/Makefile.am
+++ b/qemud/Makefile.am
@@ -48,18 +48,22 @@ libvirtd_SOURCES = \
#-D_XOPEN_SOURCE=600 -D_XOPEN_SOURCE_EXTENDED=1 -D_POSIX_C_SOURCE=199506L
libvirtd_CFLAGS = \
- -I$(top_srcdir)/gnulib/lib -I../gnulib/lib \
- -I$(top_srcdir)/include -I$(top_builddir)/include \
- $(LIBXML_CFLAGS) $(GNUTLS_CFLAGS) $(SASL_CFLAGS) \
- $(POLKIT_CFLAGS) \
- $(WARN_CFLAGS) -DLOCAL_STATE_DIR="\"$(localstatedir)\"" \
- -DSYSCONF_DIR="\"$(sysconfdir)\"" \
+ -I$(top_srcdir)/gnulib/lib -I../gnulib/lib \
+ -I$(top_srcdir)/include -I$(top_builddir)/include \
+ $(LIBXML_CFLAGS) $(GNUTLS_CFLAGS) $(SASL_CFLAGS) \
+ $(POLKIT_CFLAGS) \
+ $(WARN_CFLAGS) -DLOCAL_STATE_DIR="\"$(localstatedir)\"" \
+ $(COVERAGE_CFLAGS) \
+ -DSYSCONF_DIR="\"$(sysconfdir)\"" \
-DQEMUD_PID_FILE="\"$(QEMUD_PID_FILE)\"" \
-DREMOTE_PID_FILE="\"$(REMOTE_PID_FILE)\"" \
- -DGETTEXT_PACKAGE=\"$(PACKAGE)\"
+ -DGETTEXT_PACKAGE=\"$(PACKAGE)\"
+
+libvirtd_LDFLAGS = \
+ $(WARN_CFLAGS) $(LIBXML_LIBS) $(GNUTLS_LIBS) $(SASL_LIBS) \
+ $(COVERAGE_LDFLAGS)
+ $(POLKIT_LIBS)
-libvirtd_LDFLAGS = $(WARN_CFLAGS) $(LIBXML_LIBS) $(GNUTLS_LIBS) $(SASL_LIBS) \
- $(POLKIT_LIBS)
libvirtd_DEPENDENCIES = ../src/libvirt.la
libvirtd_LDADD = ../src/libvirt.la ../gnulib/lib/libgnu.la
@@ -145,7 +149,6 @@ libvirtd.init: libvirtd.init.in
chmod a+x $@-t
mv $@-t $@
-CLEANFILES = libvirtd.init
else
install-init:
@@ -154,3 +157,6 @@ uninstall-init:
endif # DBUS_INIT_SCRIPTS_RED_HAT
endif # WITH_LIBVIRTD
+
+CLEANFILES = libvirtd.init
+CLEANFILES += *.cov *.gcov .libs/*.gcda .libs/*.gcno *.gcno *.gcda
diff --git a/src/Makefile.am b/src/Makefile.am
index 9c4810a..8821faa 100644
--- a/src/Makefile.am
+++ b/src/Makefile.am
@@ -99,6 +99,25 @@ libvirt_la_LDFLAGS = -Wl,--version-script=$(srcdir)/libvirt_sym.version
\
@CYGWIN_EXTRA_LDFLAGS@ @MINGW_EXTRA_LDFLAGS@
libvirt_la_CFLAGS = $(COVERAGE_CFLAGS) -DIN_LIBVIRT
+# Create an automake "convenience library" version of libvirt_la,
+# just for testing, since the test harness requires access to internal
+# bits and pieces that we don't want to make publicly accessible.
+noinst_LTLIBRARIES = libvirt_test.la
+
+# Convert libvirt_sym.version
+# to libvirt_test_sym.version, and
+# remove -version-info X.Y.Z (not needed since this is a convenience library.
+test_LDFLAGS = \
+ $$(echo '$(libvirt_la_LDFLAGS)' \
+ |sed 's!-Wl,--v.*_sym\.version!!' \
+ |sed 's!-version-info @LIBVIRT_VERSION_INFO@!!')
+
+# Just like the above, but with a slightly different set of public symbols.
+libvirt_test_la_SOURCES = $(libvirt_la_SOURCES)
+libvirt_test_la_LIBADD = $(libvirt_la_LIBADD)
+libvirt_test_la_LDFLAGS = $(test_LDFLAGS)
+libvirt_test_la_CFLAGS = $(COVERAGE_CFLAGS)
+
bin_PROGRAMS = virsh
virsh_SOURCES = virsh.c console.c console.h util-lib.c util-lib.h
diff --git a/src/libvirt_sym.version b/src/libvirt_sym.version
index 15c05dc..694e041 100644
--- a/src/libvirt_sym.version
+++ b/src/libvirt_sym.version
@@ -166,10 +166,10 @@
__virEventRegisterImpl;
- __virStateInitialize;
- __virStateCleanup;
- __virStateReload;
- __virStateActive;
+ __virStateInitialize;
+ __virStateCleanup;
+ __virStateReload;
+ __virStateActive;
__virDrvSupportsFeature;
diff --git a/tests/Makefile.am b/tests/Makefile.am
index fb9bcff..644715e 100644
--- a/tests/Makefile.am
+++ b/tests/Makefile.am
@@ -3,14 +3,6 @@
SUBDIRS = virshdata confdata sexpr2xmldata \
xml2sexprdata xmconfigdata xencapsdata
-# Wierd libtool related juju...
-#
-# We explicitly want wildcard here instead of just linking
-# to the libvirt.a file. This ensures that when coverage
-# tests are run, all the output data ends up in the correct
-# location. ie, src/ instead of src/.libs.
-LIBVIRT = $(wildcard $(top_builddir)/src/.libs/libvirt_la-*.o)
-
INCLUDES = \
-I$(top_srcdir)/gnulib/lib -I../gnulib/lib \
-I$(top_builddir)/include \
@@ -34,7 +26,7 @@ LDADDS = \
$(SASL_LIBS) \
$(SELINUX_LIBS) \
$(WARN_CFLAGS) \
- $(LIBVIRT) \
+ ../src/libvirt_test.la \
../gnulib/lib/libgnu.la \
$(COVERAGE_LDFLAGS)
@@ -132,5 +124,4 @@ reconnect_SOURCES = \
reconnect.c
reconnect_LDADD = $(LDADDS)
-$(LIBVIRT):
- -@(cd $(top_builddir)/src && $(MAKE) MAKEFLAGS+=--silent)
+CLEANFILES = *.cov *.gcov .libs/*.gcda .libs/*.gcno *.gcno *.gcda
--
1.5.4.3.326.g7655e3
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 8821faa..d7e4a91 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.326.g7655e3