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: