launchpad-users team mailing list archive
-
launchpad-users team
-
Mailing list archive
-
Message #07147
Re: Fixing broken library package
On Tue, Dec 22, 2020 at 10:18:03PM -0500, Pierre Abbat wrote:
> On Tuesday, December 22, 2020 11:24:02 AM EST Colin Watson wrote:
> > This is a reasonable mailing list, but people are likely to need a
> > pointer to your existing packaging.
>
> The PPA is https://launchpad.net/~phma-a/+archive/ubuntu/testing , and the
> original tarball is at http://bezitopo.org/perfecttin/download.html . The
> library is Plytapus. The Git repo is at https://github.com/phma/plytapus .
>
> Installing results in these files in /usr/lib:
> libplytapus.a libplytapus.so libplytapus.so.0.6.0
> and these files in /usr/include:
> plytapus.h
> plytapus:
> config.h textio.h
>
> plytapus-dev.install says this:
> usr/include/*
> usr/lib/lib*.so
>
> plytapus1.install (I don't know what the 1 is for) says this:
> usr/lib/lib*.so.*
> usr/lib/lib*.a
>
> But while the resulting plytapus-dev package contains the header files, the
> plytapus package does not contain the libplytapus files.
You have a few problems here.
1) The upstream build system installs to .../usr/lib/lib*.so.*, but in
the version of your packaging that I downloaded
debian/plytapus1.install says "usr/lib/*/lib*.so.*", not
"usr/lib/lib*.so.*" as you quoted above. You need to drop the "/*"
bit. (I'm guessing that you used dh-make, and it's assuming that the
upstream cmake configuration follows the recommendation in
https://wiki.debian.org/Multiarch/Implementation#CMake, but this
package doesn't do that; so you need to either make the packaging
expect pre-multiarch paths or change the upstream cmake configuration
to be multiarch-friendly as in that wiki page.)
2) debian/control has the runtime library package name as "plytapus",
which means that debian/plytapus1.* are entirely ignored.
3) Library package names should start with "lib".
4) The "1" bit is currently incorrect anyway;
https://www.debian.org/doc/debian-policy/ch-sharedlibs.html says that
it should match the version number in the library's SONAME, which in
this case is "0.6.0" (you can use "objdump -p" on the .so file to see
it). You'll need to make sure to change this any time the upstream
SONAME changes.
5) It looks as though you aren't currently setting a SONAME explicitly
in the upstream cmake configuration and are just leaving cmake to
guess at one. Perhaps this is unintentional, since it amounts to
saying that every new upstream release may be entirely
ABI-incompatible with every previous one. If this isn't what you
meant, then you should set SOVERSION in the upstream cmake
configuration (I think; I'm not very fluent in cmake) and possibly
read up on the sorts of things you need to do when maintaining a C++
library interface. Symbols files
(https://www.debian.org/doc/debian-policy/ch-sharedlibs.html#dependencies-between-the-library-and-other-packages)
are a useful discipline if possible.
So, putting that together, you should remove the "/*" from
debian/plytapus1.install. You should rename debian/plytapus1.install to
debian/libplytapus0.6.0.install and debian/plytapus-dev.install to
debian/libplytapus-dev.install. You should change the two "Package:"
lines in debian/control from plytapus-dev and plytapus to
libplytapus-dev and libplytapus0.6.0, and also adjust libplytapus-dev's
Depends line to match. You can also remove debian/*.dirs entirely since
they don't seem to be needed. And I'd recommend sorting out the
upstream ABI situation, after which you'll need to adjust the library
package names again to match (if your library in fact has a fairly
stable ABI, then you'll be rewarded by not having to change the binary
package names for a while).
--
Colin Watson (he/him) [cjwatson@xxxxxxxxxxxxx]
Follow ups
References