[libvirt] [PATCH designer] Adapt saner libtool versioning scheme from libvirt

Daniel P. Berrange berrange at redhat.com
Fri Apr 19 11:56:09 UTC 2013


On Fri, Apr 19, 2013 at 01:22:43PM +0200, Christophe Fergeau wrote:
> On Fri, Apr 19, 2013 at 10:56:05AM +0100, Daniel P. Berrange wrote:
> > From: "Daniel P. Berrange" <berrange at redhat.com>
> > 
> > The current way libtool versioning is calculated has a timebomb
> > when the package version number changes to 1.0.0, which will
> > cause the library soname to change. Adapt to the latest libvirt
> > macros for libtool versioning, which use an explicit variable
> > LIBVIRT_DESIGNER_SONUM setting for changing soname.
> > ---
> >  configure.ac | 40 +++++++++++++++++++++++++++++++++++++++-
> >  1 file changed, 39 insertions(+), 1 deletion(-)
> > 
> > diff --git a/configure.ac b/configure.ac
> > index c999826..2a55f75 100644
> > --- a/configure.ac
> > +++ b/configure.ac
> > @@ -19,9 +19,47 @@ LIBVIRT_DESIGNER_MAJOR_VERSION=`echo $VERSION | awk -F. '{print $1}'`
> >  LIBVIRT_DESIGNER_MINOR_VERSION=`echo $VERSION | awk -F. '{print $2}'`
> >  LIBVIRT_DESIGNER_MICRO_VERSION=`echo $VERSION | awk -F. '{print $3}'`
> >  LIBVIRT_DESIGNER_VERSION=$LIBVIRT_DESIGNER_MAJOR_VERSION.$LIBVIRT_DESIGNER_MINOR_VERSION.$LIBVIRT_DESIGNER_MICRO_VERSION$LIBVIRT_DESIGNER_MICRO_VERSION_SUFFIX
> > -LIBVIRT_DESIGNER_VERSION_INFO=`expr $LIBVIRT_DESIGNER_MAJOR_VERSION + $LIBVIRT_DESIGNER_MINOR_VERSION`:$LIBVIRT_DESIGNER_MICRO_VERSION:$LIBVIRT_DESIGNER_MINOR_VERSION
> >  LIBVIRT_DESIGNER_VERSION_NUMBER=`expr $LIBVIRT_DESIGNER_MAJOR_VERSION \* 1000000 + $LIBVIRT_DESIGNER_MINOR_VERSION \* 1000 + $LIBVIRT_DESIGNER_MICRO_VERSION`
> >  
> > +# In libtool terminology we need to figure out:
> > +#
> > +# CURRENT
> > +#     The most recent interface number that this library implements.
> > +#
> > +# REVISION
> > +#     The implementation number of the CURRENT interface.
> > +#
> > +# AGE
> > +#     The difference between the newest and oldest interfaces that this
> > +#     library implements.
> > +#
> > +# In other words, the library implements all the interface numbers
> > +# in the range from number `CURRENT - AGE' to `CURRENT'.
> > +#
> > +# Libtool assigns the soname version from `CURRENT - AGE', and we
> > +# don't want that to ever change in libvirt. ie it must always be
> > +# zero, to produce libvirt.so.0.
> 
> libvirt-designer, libvirt-designer.so.0 rather than libvirt, libvirt.so.0
> 
> I'm not sure the "CURRENT - AGE" part is 100% accurate, looking at the
> libtool script (searching for $current), some OSes (freebsd, qnx, ..)
> seems to use just $CURRENT (not really important though)
> 
> > +#
> > +# We would, however, like the libvirt-designer version number reflected
> > +# in the so version'd symlinks, and this is based on AGE.REVISION
> > +# eg  libvirt-designer.so.0.AGE.REVISION
> > +#
> > +# Assuming we do ever want to break soname version, this can
> > +# toggled. But seriously, don't touch this, unless we explicitly
> > +# agree to break ABI on the mailing list.
> > +LIBVIRT_DESIGNER_SONUM=0
> 
> Hmm I think I remember Debian packagers complaining when we broke ABI by
> only changing symbol versioning and not changing soname (as I don't think
> symbol versions show up in .deb requires), will we be incrementing this
> every time we break ABI?

Yes, if we intentionally break ABI, then we increment SONUM and
reset all symbol versions to the current package release number.

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 :|




More information about the libvir-list mailing list