← Back to team overview

launchpad-users team mailing list archive

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