[Date Prev][Date Next] [Thread Prev][Thread Next] [Date Index] [Thread Index]

Re: ITK debian packages



For the Debian-devel folks just tuning in: we're debating how to
introduce a SOVERSION to the ITK libraries that lack it upstream.  The
current thread starts at

    http://lists.debian.org/debian-med/2006/02/msg00037.html

Your input is welcomed.


On Thu, Mar 02, 2006 at 03:23:47PM +1100, Gavin Baker wrote:

> > Did the suggestion of SOVERSION of 4 come from upstream?  Are they
> > going to incorporate this?
> > 
> > Why is VERSION set to "2.4.0"?  Shouldn't it normally start with the
> > same number as SOVERSION?
> 
> No, upstream haven't been using SOVERSION, it is just the packages I built
> for Debian that use them.  I don't imagine they would be adverse to putting
> the change in the upstream sources, but the problem would arise whereby
> essentially every single release would break ABI (thanks to C++) and thus
> require a new SOVERSION, which they would have to maintain.

You really, really want upstream in charge of versioning the library.
If they can't guarantee any compatibility across releases, then the
SOVERSION should change on each release.  It's as simple as that.
Boost, for example, takes this approach.  The SOVERSION contains
the complete version number:

objdump -p libboost_filesystem.so |grep SONAME
  SONAME      libboost_filesystem-gcc-mt-1_33_1.so.1.33.1


> The idea was to make the VERSION the same as the official ITK release
> version, and the SOVERSION (which I understand should be a single
> monotonically increasing number) would increment each time.

That's a common convention but not mandatory, as I understand it.
Looking through my /usr/lib I can find several counterexamples.  Here
are SONAMES of a few:

	libapt-inst-libc6.3-6.so.1.1
	libbz2.so.1.0
	libcrypto.so.0.9.8
	libestbase.so.1.2


> > For reference, VTK 5 builds using
> > 
> >   SET(VTK_MAJOR_VERSION 5)
> >   SET(VTK_MINOR_VERSION 0)
> >   SET(VTK_BUILD_VERSION 0)
> >   SET(VTK_VERSION
> >     "${VTK_MAJOR_VERSION}.${VTK_MINOR_VERSION}.${VTK_BUILD_VERSION}")
> > 
> >   SET(VTK_LIBRARY_PROPERTIES ${VTK_LIBRARY_PROPERTIES}
> >     VERSION "${VTK_VERSION}"
> >     SOVERSION "${VTK_MAJOR_VERSION}.${VTK_MINOR_VERSION}")
> 
> As I understand it, that doesn't conform to policy, since the SOVERSION is
> has more than one component.

I can't find anything in Debian Policy that discusses the form that
SOVERSION must take.  I do see section 8.1 that discusses the
*package* name derived from SONAME.  What policy section are you
worried about?


> Wouldn't that lead to something like this?
> 
>   libVTKCommon.so -> libVTKCommon.so.5.0 -> libVTKCommon.so.5.0.0
>          |             /
>   SONAME=libVTKCommon.so.5.0

Yes, I believe so.


> So for the ITK releases I did, it was something like this (from memory):
> 
>   Version  soversion
>   1.6      1
>   1.8      2
>   2.0      3
>   2.4      4
> 
> Does that make sense?

You really, really want upstream in charge of versioning.  Suppose, for
example, they published ITK version 3.0 with soversion 3.  Then what?


> I could have missed something, so please correct me
> if I am mistaken.  I tried to ensure the the ITK packages and their
> versioning conformed to policy, but it's such a complex and misunderstood
> topic.  I have tried to follow Junichi's guide:
> 
>   http://www.netfort.gr.jp/~dancer/column/libpkg-guide/libpkg-guide.html

That's a helpful starting point.  But even there I don't find any hint
that Debian Policy mandates a particular style of SONAME versioning.
[Which is a good thing, actually, since opinions differ and we cannot
really bend all of upstream library authors to our will.]


> > Maybe we could suggest/request that upstream adopt something similar?
> 
> Sure, I imagine they would be happy to make this a more official change,
> once we sort out a consistent scheme.

My hunch is that ITK authors will be amenable to using the same scheme
as VTK since the two upstreams overlap a lot.  So I would propose to
them the same as the newer VTK, i.e 

  SOVERSION = "${ITK_MAJOR_VERSION}.${ITK_MINOR_VERSION}"

But mainly I propse to raise the issue on the ITK developer list
and debate it there.

Regards,
-Steve



Reply to: