Eu tenho um único pacote fonte upstream usando cmake e gostaria de empacotá-lo como dois pacotes binários debian.
$ tree proj
proj/
├── app1.c
├── app2.c
└── CMakeLists.txt
O Upstream's CMakeLists.txt
já foi escrito com isso em mente. Eles usam o argumento COMPONENTS deinstall
$ cat proj/CMakeLists.txt
include(GnuInstallDirs)
add_executable(app1 app1.c)
install(
TARGETS app1
RUNTIME DESTINATION ${CMAKE_INSTALL_BINDIR}
COMPONENT app1)
add_executable(app2 app2.c)
install(
TARGETS app2
RUNTIME DESTINATION ${CMAKE_INSTALL_BINDIR}
COMPONENT app2)
Para compilar/instalar localmente, é bem fácil:
$ mkdir build && cd build
$ cmake ../proj -DCMAKE_INSTALL_PREFIX=/usr/local # Configure
$ cmake --build . # Build
$ cmake -DCOMPONENT=app1 -P cmake_install.cmake # Install app1 component
$ cmake -DCOMPONENT=app2 -P cmake_install.cmake # Install app2 component
Mas como você construiria um debian/rules
arquivo para isso?
Um
debain/rules
arquivo debhelper padrão pode se parecer com isso (buildsystem detecta automaticamente cmake em níveis de compatibilidade mais recentes).Isso será executado efetivamente
make install DESTDIR=debian/tmp
. Mas isso coloca tudo em um destino, exigindo que você grave osdebian/*.install
arquivos manualmente para dividi-los (consulte dh_install(1) ). Esta é a maneira normal de transformar uma fonte de cmake monolítica em múltiplos binários e há um bom guia para isso no manual do Debian aqui .No entanto, o upstream fez esse trabalho para você definindo instalações COMPONENT.
Para tirar proveito disso, substitua sua própria receita de instalação para especificar a associação de pacote/componente:
A raiz de
debian/<binary_package_name>
representa/
nesse pacote binário.Estou um pouco decepcionado com os
sed
comandos. Eu esperava fazer isso passando-- -DCOMPONENT=app1
para o diretório dh_auto_install. Em vez disso, esses comandos editam o Makefile gerado automaticamente pelo cmake. Esta solução presume que você esteja usandomake
, e que a única-P
string estará em seus comandos de instalação (o que parece ser o caso dos projetos que verifiquei até agora). Fico feliz em aceitar edições nesta resposta com uma solução melhor.Nota: Kitware (desenvolvedor do cmake) está trabalhando em uma nova extensão do debhelper dh-cmake que parece tornar isso ainda mais fácil. No entanto, a partir do Debian 10 (buster) ainda não está disponível.