[Libguestfs] [PATCH nbdkit 6/9] tests: Add a regression test that we can still compile with -undefined.

Richard W.M. Jones rjones at redhat.com
Thu Mar 26 19:26:01 UTC 2020


On Thu, Mar 26, 2020 at 02:05:11PM -0500, Eric Blake wrote:
> On 3/26/20 1:25 PM, Richard W.M. Jones wrote:
> >Note that this probably isn't testing anything because at least on
> >Linux the -undefined/-no-undefined flags appear to have no effect on
> >linking.
> >
> 
> [skipping review of 5/9 for now, due to its size.  I don't know how
> easy or hard it would be to split it into bisectable pieces: first
> introducing the library with just the parsing symbols that can be
> done locally, then adding more symbols, before finally getting to
> where -no-undefined actually works for plugins. But as you said on
> IRC, it gets tricky to have to get a half-finished library to still
> work correctly, so it may be worth leaving that one squashed]

I'll see if there is anything easy I can do here.  It may be that the
tests still work because libtool doesn't really care about undefined etc.

> >I'm using the -undefined flag here, but this is not actually a flag
> >documented anywhere in the libtool documentation, but I assume it's
> >fine because libtool doesn't complain.
> 
> I'll have to research if it is just ignoring an unknown flag, or
> actually honoring it (but even if it is ignoring the flag, libtool's
> default behavior of allowing undefined symbols on Linux is what we
> are indeed trying to test).  This test will have to be conditional
> on platform (it won't work on mingw); so you may have to revive the
> configure.ac stuff you chopped out in patch 4.

OK.

> >---
> >  tests/Makefile.am             | 28 ++++++++++++++
> >  tests/test-undefined.sh       | 36 ++++++++++++++++++
> >  tests/test-undefined-plugin.c | 70 +++++++++++++++++++++++++++++++++++
> >  3 files changed, 134 insertions(+)
> >
> >diff --git a/tests/Makefile.am b/tests/Makefile.am
> >index f9c6b8ad..901dca7e 100644
> >--- a/tests/Makefile.am
> 
> >+# Build a plugin with libtool -undefined flag.  This is how plugins
> >+# were built before libnbdkit.so existed.
> >+TESTS += \
> >+	test-undefined.sh \
> >+	$(NULL)
> >
> 
> >+# For use of the -rpath option, see:
> >+# https://lists.gnu.org/archive/html/libtool/2007-07/msg00067.html
> >+test_undefined_plugin_la_LDFLAGS = \
> >+	-module -avoid-version -shared \
> >+	-undefined \
> >+	$(SHARED_LDFLAGS) \
> >+	-rpath /nowhere \
> >+	$(NULL)
> 
> The most important part here is that we did NOT pass in libnbdkit.so
> on the link line, but it still builds, resulting in a plugin with
> undefined symbols which can still be loaded by the just-built
> nbdkit.
> 
> >+++ b/tests/test-undefined-plugin.c
> >@@ -0,0 +1,70 @@
> 
> >+
> >+#include <config.h>
> 
> Does our plugin need <config.h>?  Or can we omit that to be more
> like a true out-of-tree plugin that did not opt-in to our library?

Actually yes, for PACKAGE_VERSION.  However that isn't fundamentally
required.

> >+#include <stdio.h>
> >+#include <stdlib.h>
> >+#include <string.h>
> >+
> >+#include <nbdkit-plugin.h>
> >+
> >+static void *
> >+undefined_open (int readonly)
> >+{
> >+  return NBDKIT_HANDLE_NOT_NEEDED;
> 
> Hmm. I don't see any _use_ of an nbdkit_* function here.  It's not
> enough that this library links without libnbdkit.so, but we need to
> be testing that when it uses an undefined symbol, such a symbol
> actually gets provided via the nbdkit binary dlopen()ing this
> plugin.

Hmm that is actually a very good point, back to the drawing board on
this one!  I can add some calls to nbdkit_debug or as you suggested
nbdkit_parse_*.

Rich.

-- 
Richard Jones, Virtualization Group, Red Hat http://people.redhat.com/~rjones
Read my programming and virtualization blog: http://rwmj.wordpress.com
virt-df lists disk usage of guests without needing to install any
software inside the virtual machine.  Supports Linux and Windows.
http://people.redhat.com/~rjones/virt-df/




More information about the Libguestfs mailing list