Eu sou novo em empacotamento e estou tentando empacotar uma biblioteca que um dos meus programas usa. A biblioteca é chamada Plytapus e é usada pelo programa PerfectTIN. Você pode encontrar o código-fonte para ambos no meu site GitHub, https://github.com/phma/ , e no site PerfectTIN, http://bezitopo.org/perfecttin/download.html . Os pacotes de origem estão em https://launchpad.net/~phma-a/+archive/ubuntu/testing .
Eu tentei construir o pacote PerfectTIN depois de adicionar plytapus-dev aos requisitos de compilação (com apenas plytapus instalado, ele foi construído sem plytapus) e obtive uma falha. Descobriu-se que o pacote plytapus não contém o arquivo .so. Editei os arquivos no diretório debian e tentei novamente.
registro de alterações
plytapus (0.6.0-3) focal; urgency=medium
* Remove extra asterisk from plytapus1.install
-- Pierre Abbat <[email protected]> Sun, 20 Dec 2020 14:02:52 -0500
plytapus (0.6.0-2) focal; urgency=medium
* Add cmake as dependency
-- Pierre Abbat <[email protected]> Mon, 23 Nov 2020 03:42:16 -0500
plytapus (0.6.0-1) focal; urgency=medium
* Initial release
-- Pierre Abbat <[email protected]> Tue, 17 Nov 2020 02:18:06 -0500
plytapus1.install
usr/lib/lib*.so.*
usr/lib/lib*.a
ao controle
Source: plytapus
Priority: optional
Maintainer: Pierre Abbat <[email protected]>
Build-Depends: debhelper-compat (= 12), cmake (>= 3.4)
Standards-Version: 4.4.0
Section: libs
Homepage: https://github.com/phma/plytapus
#Vcs-Browser: https://salsa.debian.org/debian/plytapus
#Vcs-Git: https://salsa.debian.org/debian/plytapus.git
Package: plytapus-dev
Section: libdevel
Architecture: any
Multi-Arch: same
Depends: plytapus (= ${binary:Version}), ${misc:Depends}
Description: Library for reading and writing PLY files
Plytapus is a C++ library for reading and writing PLY (Stanford polygon)
files.
.
This package provides the header files.
Package: plytapus
Architecture: any
Multi-Arch: same
Depends: ${shlibs:Depends}, ${misc:Depends}
Description: Library for reading and writing PLY files
Plytapus is a C++ library for reading and writing PLY (Stanford polygon)
files.
.
This package provides the shared and static library.
Aqui está a seção relevante do log de compilação:
make[2]: Leaving directory '/home/phma/package/plytapus-0.6.0/obj-x86_64-linux-gnu'
Install the project...
/usr/bin/cmake -P cmake_install.cmake
-- Install configuration: "None"
-- Installing: /home/phma/package/plytapus-0.6.0/debian/tmp/usr/lib/libplytapus.so.0.6.0
-- Installing: /home/phma/package/plytapus-0.6.0/debian/tmp/usr/lib/libplytapus.so
-- Installing: /home/phma/package/plytapus-0.6.0/debian/tmp/usr/lib/libplytapus.a
-- Installing: /home/phma/package/plytapus-0.6.0/debian/tmp/usr/include/plytapus.h
-- Installing: /home/phma/package/plytapus-0.6.0/debian/tmp/usr/include/plytapus/config.h
-- Installing: /home/phma/package/plytapus-0.6.0/debian/tmp/usr/include/plytapus/textio.h
make[1]: Leaving directory '/home/phma/package/plytapus-0.6.0/obj-x86_64-linux-gnu'
dh_install
dh_installdocs
dh_installchangelogs
dh_perl
dh_link
dh_strip_nondeterminism
dh_compress
dh_fixperms
dh_missing
dh_missing: usr/lib/libplytapus.so.0.6.0 exists in debian/tmp but is not installed to anywhere
dh_missing: usr/lib/libplytapus.a exists in debian/tmp but is not installed to anywhere
The following debhelper tools have reported what they installed (with files per package)
* dh_install: plytapus (0), plytapus-dev (3)
* dh_installdocs: plytapus (0), plytapus-dev (0)
If the missing files are installed by another tool, please file a bug against it.
When filing the report, if the tool is not part of debhelper itself, please reference the
"Logging helpers and dh_missing" section from the "PROGRAMMING" guide for debhelper (10.6.3+).
(in the debhelper package: /usr/share/doc/debhelper/PROGRAMMING.gz)
Be sure to test with dpkg-buildpackage -A/-B as the results may vary when only a subset is built
For a short-term work-around: Add the files to debian/not-installed
dh_dwz
dh_strip
dh_makeshlibs
dh_shlibdeps
dh_installdeb
dh_gencontrol
dpkg-gencontrol: warning: Depends field of package plytapus: substitution variable ${shlibs:Depends} used, but is not defined
dh_md5sums
dh_builddeb
dpkg-deb: building package 'plytapus-dev' in '../plytapus-dev_0.6.0-3_amd64.deb'.
dpkg-deb: building package 'plytapus' in '../plytapus_0.6.0-3_amd64.deb'.
Como posso corrigir isso para que os arquivos .so e .a estejam no pacote plytapus?
Acho que é porque o nome do arquivo está errado. Tente renomear
plytapus1.install
paraplytapus.install
.Repetindo minha resposta de https://lists.launchpad.net/launchpad-users/msg07147.html :
.../usr/lib/lib*.so.*
, mas na versão do seu pacote que baixeidebian/plytapus1.install
dizusr/lib/*/lib*.so.*
, nãousr/lib/lib*.so.*
como você citou acima. Você precisa largar o/*
bit. (Acho que você usoudh-make
, e está assumindo que acmake
configuração upstream segue a recomendação em https://wiki.debian.org/Multiarch/Implementation#CMake , mas este pacote não faz isso; então você precisa faça com que o empacotamento espere caminhos pré-multiarch ou altere acmake
configuração upstream para ser compatível com multiarch, como naquela página wiki.)debian/control
tem o nome do pacote da biblioteca de tempo de execução comoplytapus
, o que significa quedebian/plytapus1.*
são totalmente ignorados.SONAME
, que neste caso é "0.6.0" (você pode usarobjdump -p
o arquivo .so para vê-lo). Você precisará certificar-se de alterar isso sempre que o upstream forSONAME
alterado.SONAME
explicitamente nacmake
configuração upstream e está apenas deixandocmake
para adivinhar um. Talvez isso não seja intencional, pois equivale a dizer que cada nova versão upstream pode ser totalmente incompatível com ABI com todas as anteriores. Se isso não é o que você quis dizer, então você deve definirSOVERSION
na configuração upstreamcmake
(eu acho; eu não sou muito fluente emcmake
) e possivelmente ler sobre os tipos de coisas que você precisa fazer ao manter uma interface de biblioteca C++. Arquivos de símbolos são uma disciplina útil, se possível.Então, juntando isso, você deve remover o
/*
arquivodebian/plytapus1.install
. Você deve renomeardebian/plytapus1.install
paradebian/libplytapus0.6.0.install
edebian/plytapus-dev.install
paradebian/libplytapus-dev.install
. Você deve alterar as duas linhas "Package:" emdebian/control
fromplytapus-dev
eplytapus
tolibplytapus-dev
elibplytapus0.6.0
, e também ajustarlibplytapus-dev
a linha Depends de 's para corresponder. Você também pode removerdebian/*.dirs
completamente, pois eles não parecem ser necessários. E eu recomendaria resolver a situação da ABI upstream, após a qual você precisará ajustar os nomes dos pacotes da biblioteca novamente para corresponder (se sua biblioteca de fato tiver uma ABI bastante estável, você será recompensado por não precisar alterar os nomes dos pacotes binários por um tempo).