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

Re: [help] how to sensibly work around if upstream fails to deal with SONAMES



Please CC-me, I'm not suscribed to mentors.

Andreas Tille wrote:
[snip]
> Thanks for the hint but I admit I'm not fully sure what exactly needs to
> be done to get the changed SONAME in the case of dcmtk.  I guess I need
> to tweak the cmake files somehow - but how?

I always promised myself to write I guide from what I have learnt from the 
Qt/KDE team all this years and I'm failing so far. But allow me some general 
rules (will possibly include more data than what you requested). And please 
please please *note they are general*, some people might do things 
differently.

First some basics:

- A src:library foo could be versioned a.b.c and have it's SONAME be 
libfoo.x, with x !=a. Normally this is not the case, but there is actually 
no problems with this.

- Let's say the library builds libfoo.x.y.z, where:

x: major version
y: minor version
z: patch version

- If your upstream breaks API/ABI on each patch version just avoid packaging 
it. Or be prepared to suffer.

Now let's say we have a binary package libfoo1 (from now on, bin:libfoo1) 
which produces libfoo1.2.3.so with SONAME libfoo1.

On version 1.3.1 upstream breaks binary compatibility or API. First thing to 
do here:

- Teach upstream why [s]he should not break API/ABI
- Try to produce a patch to solve the issue.

If that's not possible, then you have basically two options:

- If the package just breaks ABI rename the package to bin:libfoo1abi1 and 
go ahead with a transition. Bonus points if you change SONAME to be 
libfoo1abi1 too, but that's not entirely needed, although a nice thing to 
do.

- If the package breaks API you should really change SONAME to libfoo1.3 and 
package to vin:libfoo1.3. You will need to handle a much worst transition as 
the rdeps will need code changes. And be prepared to that on every monor 
update...

Please be sure to understand that this is just the tip of the iceberg, and 
that's why we don't recommend packager newcomers to package libs: they can 
be very tricky. FWIW I have learned the basics of API/ABI breaking before 
becoming a DD and how to properly handle them after I become one and thanks 
to the precious help from my Qt/KDE teammates at the time. And I still have 
*lots* to learn.

Again, i should write all this + symbols managing in some kind of doc :-/

Hope that helps at least a little.

Lisandro.


Reply to: