[libvirt] [PATCH] build: silence libtool warning

Libtool supports linking directly against .o files on some platforms (such as Linux), which happens to be the only place where we are actually doing that (for the dtrace-generated probes.o files). However, it raises a big stink about the non-portability, even though we don't attempt it on platforms where it would actually fail: CCLD libvirt_driver_qemu.la *** Warning: Linking the shared library libvirt_driver_qemu.la against the non-libtool *** objects libvirt_qemu_probes.o is not portable! This shuts libtool up by creating a proper .lo file that matches what libtool normally expects. * src/Makefile.am (%_probes.lo): New rule. (libvirt_probes.stp, libvirt_qemu_probes.stp): Simplify into... (%_probes.stp): ...shorter rule. (CLEANFILES): Clean new .lo files. (libvirt_la_BUILT_LIBADD, libvirt_driver_qemu_la_LIBADD) (libvirt_lxc_LDADD, virt_aa_helper_LDADD): Link against .lo file. * tests/Makefile.am (PROBES_O, qemu_LDADDS): Likewise. --- I got tired enough of the warning to figure out how to shut it up; libtool was rather particular about parsing the first two lines of comments embedded in the .lo file before declaring it to have correct syntax. However, I got stumped by the next round of warnings: CCLD qemuxml2xmltest *** Warning: Linking the executable qemuxml2xmltest against the loadable module *** libvirt_driver_qemu.so is not portable! Anyone have a clue on that one? Would a convenience library be the key? src/Makefile.am | 28 ++++++++++++++++++---------- tests/Makefile.am | 4 ++-- 2 files changed, 20 insertions(+), 12 deletions(-) diff --git a/src/Makefile.am b/src/Makefile.am index bdb0ef4..0b20f1f 100644 --- a/src/Makefile.am +++ b/src/Makefile.am @@ -1246,7 +1246,7 @@ libvirt_la_CFLAGS = -DIN_LIBVIRT $(AM_CFLAGS) libvirt_la_DEPENDENCIES = $(libvirt_la_BUILT_LIBADD) $(LIBVIRT_SYMBOL_FILE) if WITH_DTRACE_PROBES -libvirt_la_BUILT_LIBADD += libvirt_probes.o +libvirt_la_BUILT_LIBADD += libvirt_probes.lo libvirt_la_DEPENDENCIES += libvirt_probes.o nodist_libvirt_la_SOURCES = libvirt_probes.h if WITH_REMOTE @@ -1256,7 +1256,7 @@ endif WITH_REMOTE BUILT_SOURCES += libvirt_probes.h libvirt_probes.stp libvirt_functions.stp if WITH_QEMU -libvirt_driver_qemu_la_LIBADD += libvirt_qemu_probes.o +libvirt_driver_qemu_la_LIBADD += libvirt_qemu_probes.lo nodist_libvirt_driver_qemu_la_SOURCES = libvirt_qemu_probes.h libvirt_driver_qemu_la_DEPENDENCIES = libvirt_qemu_probes.o @@ -1272,6 +1272,15 @@ tapset_DATA = libvirt_probes.stp libvirt_qemu_probes.stp libvirt_functions.stp %_probes.o: %_probes.d $(AM_V_GEN)$(DTRACE) -o $@ -G -s $< +%_probes.lo: %_probes.o + $(AM_V_GEN)printf %s\\n \ + '# $@ - a libtool object file' \ + '# Generated by libtool (GNU libtool) 2.4' \ + '# Actually generated by Makefile.am, in order to shut up libtool' \ + "pic_object='$<'" \ + "non_pic_object='$<'" \ + > $@ + RPC_PROBE_FILES = $(srcdir)/rpc/virnetprotocol.x \ $(srcdir)/rpc/virkeepaliveprotocol.x \ $(srcdir)/remote/remote_protocol.x \ @@ -1280,14 +1289,13 @@ RPC_PROBE_FILES = $(srcdir)/rpc/virnetprotocol.x \ libvirt_functions.stp: $(RPC_PROBE_FILES) $(srcdir)/rpc/gensystemtap.pl $(AM_V_GEN)perl -w $(srcdir)/rpc/gensystemtap.pl $(RPC_PROBE_FILES) > $@ -libvirt_probes.stp: libvirt_probes.d $(srcdir)/dtrace2systemtap.pl - $(AM_V_GEN)perl -w $(srcdir)/dtrace2systemtap.pl $(bindir) $(sbindir) $(libdir) $< > $@ - -libvirt_qemu_probes.stp: libvirt_qemu_probes.d $(srcdir)/dtrace2systemtap.pl - $(AM_V_GEN)perl -w $(srcdir)/dtrace2systemtap.pl $(bindir) $(sbindir) $(libdir) $< > $@ +%_probes.stp: %_probes.d $(srcdir)/dtrace2systemtap.pl + $(AM_V_GEN)perl -w $(srcdir)/dtrace2systemtap.pl \ + $(bindir) $(sbindir) $(libdir) $< > $@ -CLEANFILES += libvirt_probes.h libvirt_probes.o \ +CLEANFILES += libvirt_probes.h libvirt_probes.o libvirt_probes.lo \ libvirt_qemu_probes.h libvirt_qemu_probes.o \ + libvirt_qemu_probes.lo\ libvirt_functions.stp libvirt_probes.stp \ libvirt_qemu_probes.stp endif @@ -1479,7 +1487,7 @@ libvirt_lxc_LDADD = $(CAPNG_LIBS) $(YAJL_LIBS) \ $(RT_LIBS) $(DBUS_LIBS) \ ../gnulib/lib/libgnu.la if WITH_DTRACE_PROBES -libvirt_lxc_LDADD += libvirt_probes.o +libvirt_lxc_LDADD += libvirt_probes.lo endif if WITH_SECDRIVER_SELINUX libvirt_lxc_LDADD += $(SELINUX_LIBS) @@ -1524,7 +1532,7 @@ virt_aa_helper_LDADD = \ libvirt_util.la \ ../gnulib/lib/libgnu.la if WITH_DTRACE_PROBES -virt_aa_helper_LDADD += libvirt_probes.o +virt_aa_helper_LDADD += libvirt_probes.lo endif virt_aa_helper_CFLAGS = \ -I$(top_srcdir)/src/conf \ diff --git a/tests/Makefile.am b/tests/Makefile.am index 24818b1..d1106cf 100644 --- a/tests/Makefile.am +++ b/tests/Makefile.am @@ -31,7 +31,7 @@ endif PROBES_O = if WITH_DTRACE_PROBES -PROBES_O += ../src/libvirt_probes.o +PROBES_O += ../src/libvirt_probes.lo endif LDADDS = \ @@ -295,7 +295,7 @@ if WITH_NETWORK qemu_LDADDS += ../src/libvirt_driver_network.la endif if WITH_DTRACE_PROBES -qemu_LDADDS += ../src/libvirt_qemu_probes.o +qemu_LDADDS += ../src/libvirt_qemu_probes.lo endif qemu_LDADDS += $(LDADDS) -- 1.7.7.6

On Fri, May 25, 2012 at 10:06:12AM -0600, Eric Blake wrote:
Libtool supports linking directly against .o files on some platforms (such as Linux), which happens to be the only place where we are actually doing that (for the dtrace-generated probes.o files). However, it raises a big stink about the non-portability, even though we don't attempt it on platforms where it would actually fail:
CCLD libvirt_driver_qemu.la
*** Warning: Linking the shared library libvirt_driver_qemu.la against the non-libtool *** objects libvirt_qemu_probes.o is not portable!
This shuts libtool up by creating a proper .lo file that matches what libtool normally expects.
* src/Makefile.am (%_probes.lo): New rule. (libvirt_probes.stp, libvirt_qemu_probes.stp): Simplify into... (%_probes.stp): ...shorter rule. (CLEANFILES): Clean new .lo files. (libvirt_la_BUILT_LIBADD, libvirt_driver_qemu_la_LIBADD) (libvirt_lxc_LDADD, virt_aa_helper_LDADD): Link against .lo file. * tests/Makefile.am (PROBES_O, qemu_LDADDS): Likewise. ---
I got tired enough of the warning to figure out how to shut it up; libtool was rather particular about parsing the first two lines of comments embedded in the .lo file before declaring it to have correct syntax.
However, I got stumped by the next round of warnings:
CCLD qemuxml2xmltest
*** Warning: Linking the executable qemuxml2xmltest against the loadable module *** libvirt_driver_qemu.so is not portable!
Anyone have a clue on that one? Would a convenience library be the key?
Hmm, perhaps if we built libvirt_driver_qemu_impl.la and then make both libvirt_driver_qemu.so and qemuxml2xmltest link to that convenience library, it'd be happy.
src/Makefile.am | 28 ++++++++++++++++++---------- tests/Makefile.am | 4 ++-- 2 files changed, 20 insertions(+), 12 deletions(-)
ACK Daniel -- |: http://berrange.com -o- http://www.flickr.com/photos/dberrange/ :| |: http://libvirt.org -o- http://virt-manager.org :| |: http://autobuild.org -o- http://search.cpan.org/~danberr/ :| |: http://entangle-photo.org -o- http://live.gnome.org/gtk-vnc :|

On 05/25/2012 10:34 AM, Daniel P. Berrange wrote:
However, I got stumped by the next round of warnings:
CCLD qemuxml2xmltest
*** Warning: Linking the executable qemuxml2xmltest against the loadable module *** libvirt_driver_qemu.so is not portable!
Anyone have a clue on that one? Would a convenience library be the key?
Hmm, perhaps if we built libvirt_driver_qemu_impl.la and then make both libvirt_driver_qemu.so and qemuxml2xmltest link to that convenience library, it'd be happy.
Indeed, that appears to work. I'll post another patch soon.
src/Makefile.am | 28 ++++++++++++++++++---------- tests/Makefile.am | 4 ++-- 2 files changed, 20 insertions(+), 12 deletions(-)
ACK
Meanwhile, I've pushed this. -- Eric Blake eblake@redhat.com +1-919-301-3266 Libvirt virtualization library http://libvirt.org
participants (2)
-
Daniel P. Berrange
-
Eric Blake