[Openal-devel] Re: OpenAL & freealut Library Versioning

Reinhard Tartler siretart at tauware.de
Tue Feb 21 01:55:13 PST 2006


Sven Panne wrote:
>> Package 'Hurz' is uploaded and built against libfoo 1.1. 
>> Since the shlibs system did not detect new symbols, the 
>> binary will end up with a versioned dependency of [libfoo0 
>> (>= 1.0)], although it was built against version 1.1 (!).
>
> Here my problems understanding the Debian approach begin: How can we
> automatically know which symbols belong to 1.0 and which to 1.1? For
> glibc, this is stated explicitly by hand, IIRC.

This is in fact a manual process. The maintainer has to write a decent
shlibs file. Actually, there are tools to create those shlibs files.

The automatic part comes when building binary packages which link to the
shared library. dpkg-shlibdeps looks at the binaries using objdump, and
calculates the correct versioned dependencies for a given to be packaged
binary.

>> Then we upload 1.2, introducing new symbols. Package bar does 
>> not need to be rebuilt, as libfoo is ABI compatible 
>> (indicated by not bumping soname). 
>> 
>> Package bar2 get uploaded and built against version 1.2. The 
>> shlibs system ensures that the binary package bar2 ends up 
>> with a versioned dependency [libfoo0 (>=1.2)]. 
>
> Same problem as above: How do we know that we really need 1.2 and 1.1 or
> 1.0 are not enough?

This is something the maintainer has to note in the shlibs file. See
below for more documentation about this mechanism.

>> Now libfoo 2.0 is uploaded with bumped soname. It replaces 
>> the old package libfoo0 with the name libfoo1. All dependent 
>> packages get uninstallabe and need to be rebuilt against the 
>> new library ABI. The game restarts.
>
> OK, this seems to be the normal mechanism when the SONAME changes. I
> guess that the old version could be installed at the same time, correct?

Yes, it could be. We would have to create a new source package creating
the new binary package, so that we have actually both versions of the
library around. 

This is usually done with libraries with a large number of reverse
dependencies, in order to ensure a smooth transition to the newer
library version. Usually, it is easier to maintain only the latest
version of a library, though.

>> Everyone is happy. (needless to say that this shlib system 
>> makes nearly all of the work automatically, when used correctly).
>
> I'm still failing to see how this can be done automatically. Is there a
> document describing the Debian mechanism in a bit more detail?

Sure, it is described in detail in the Debian Policy Manual:
http://www.debian.org/doc/debian-policy/ch-sharedlibs.html#s-sharedlibs-shlibdeps
http://www.debian.org/doc/debian-policy/ap-pkg-sourcepkg.html#s-pkg-dpkg-shlibdeps

Perhaps a bit easier to read is the Library Packaging Guide, espc. these
Parts:
http://www.netfort.gr.jp/~dancer/column/libpkg-guide/libpkg-guide.html#sonamenomodify
http://www.netfort.gr.jp/~dancer/column/libpkg-guide/libpkg-guide.html#shlibsfile

Greetings,
	Reinhard





More information about the Openal-devel mailing list