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(a)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 :|