[Spice-devel] [spice-gtk] build: Remove need for static linking for tests
Christophe Fergeau
cfergeau at redhat.com
Wed Nov 21 12:38:24 UTC 2018
Hey,
On Wed, Nov 21, 2018 at 06:21:40AM -0500, Frediano Ziglio wrote:
> >
> > Currently, spice-gtk tests are disabled if build of static libraries is
> > disabled. This commit introduces an intermediate
> > spice-client-glib-impl.la convenience library which does not have its
> > internal symbols hidden, and can thus be used instead of static linking
> > when building the tests.
>
> Well, symbols are still hidden, but in this case they are exported as
> hidden by the convenience library which is a static library so you
> are using static linking, just that you are statically linking the
> convenience library.
>
> > The installed spice-client-glib-2.0.la library is just this library with
> > the version script applied to hide non exported symbols.
> >
>
> Is just that hidden symbols are not exported by shared objects so
> when you link the convenience library (which is a static library of
> shared objects meant to be used in shared libraries!) into the shared
> object these symbols are not exported.
> spice-client-glib-2.0.la library is not the convenience library, just
> has the same content, a shared library has a completely different
> format.
>
> Not against this patch, just the comment is really confusing.
Yep, in short I totally forgot spice-gtk uses G_GNUC_INTERNAL, if it did
not, having a shared or static convenience library would not matter.
I'll improve the log:
« Currently, spice-gtk tests are disabled if build of static libraries is
disabled. This commit introduces an intermediate
spice-client-glib-impl.la convenience library which will be used both
for generating the spice-client-glib-2.0 shared library (after applying
the version script), and to link the tests with.
This is better than --enable-static as we don't need to rebuild each
object twice (static and shared). »
>
> > This was inspired by similar work Fabiano Fidencio did in libosinfo:
> > https://www.redhat.com/archives/libosinfo/2018-November/msg00231.html
> >
> > Signed-off-by: Christophe Fergeau <cfergeau at redhat.com>
> > ---
> > Makefile.am | 6 +-----
> > configure.ac | 2 --
> > src/Makefile.am | 34 +++++++++++++++++++---------------
> > tests/Makefile.am | 4 ++--
> > 4 files changed, 22 insertions(+), 24 deletions(-)
[snip]
> >
> > diff --git a/tests/Makefile.am b/tests/Makefile.am
> > index bfa43a37..1bb0a259 100644
> > --- a/tests/Makefile.am
> > +++ b/tests/Makefile.am
> > @@ -30,10 +30,10 @@ AM_CPPFLAGS = \
> > -DG_LOG_DOMAIN=\"GSpice\" \
> > $(NULL)
> >
> > -AM_LDFLAGS = $(GIO_LIBS) -static
> > +AM_LDFLAGS = $(GIO_LIBS)
> >
> > LDADD = \
> > - $(top_builddir)/src/libspice-client-glib-2.0.la \
> > + $(top_builddir)/src/libspice-client-glib-impl.la\
> > $(NULL)
> >
> > test_util_SOURCES = util.c
>
> I think we use the same "trick" also for spice-server.
I'd have to check...
> A minor issue of this method is that linking tests is much longer
> and resulting executables are really huge. This as each tests will
> include all the library code and data. You probably don't notice
> much are the number of tests is pretty low.
> To this issue I have no much to suggest. Probably tests that could
> be linked to the shared library should be linked to the shared
> library instead of the convenience one.
I checked a build with/without the patch, and I only see negligible size
increases (measured to 0.1% on one of the binaries). We were already
doing static builds before the patch (see the AM_LDFLAGS change which
removes -static).
Christophe
-------------- next part --------------
A non-text attachment was scrubbed...
Name: signature.asc
Type: application/pgp-signature
Size: 833 bytes
Desc: not available
URL: <https://lists.freedesktop.org/archives/spice-devel/attachments/20181121/1d96d3bc/attachment.sig>
More information about the Spice-devel
mailing list