Estou construindo um aplicativo que depende do Qt6 e, por padrão, dpkg-buildpackage
gera >=
dependências para dependências shlibs que não especifiquei explicitamente. Então especificando:
Depends: ${shlibs:Depends}
Causas:
$ dpkg-query --show -f '${Depends}' mypackage
... qt6-base (>= 6.7.2), ...
O problema é que o Qt requer a versão específica exata contra a qual o aplicativo foi criado para poder ser executado. Se o sistema tiver qt6-base
uma versão 6.8.0
instalada, meu aplicativo será instalado, mas não será executado - como posso evitar isso?
Não quero apt
atualizar meu aplicativo até ter uma versão que suporte explicitamente a versão exata do Qt disponível no sistema (e/ou impedir a atualização do Qt até que eu tenha lançado uma versão apropriada).
Eu sei que posso adicionar dependências explícitas manuais para cada pacote Qt do qual dependo - e então atualizar a versão manualmente toda vez que eu compilar com uma nova versão Qt - mas isso vai ser muito trabalhoso. Eu esperaria que houvesse uma opção de algo como "para pacotes que têm o texto 'qt' em seu nome, use uma =
dependência em vez de um >=
".
Não há como forçar
dpkg-shlibdeps
a geração de dependências estritas em vez das dependências mais típicas “≥”, além de especificar dependências estritas explicitamente no arquivo de símbolos relevante. Os pacotes Qt definem tais dependências estritas, como dependências alternativas :No entanto, eles são usados apenas para binários que fazem referência direta a símbolos de API privados com uma
Qt_6_PRIVATE_API
versão (o “1” no final dessa linha instruidpkg-shlibdeps
a usar a dependência alternativa 1 em vez da dependência principal).Não estou ciente de uma maneira de fazer uso disso automaticamente no seu pacote, pelo menos não sem usar APIs privadas, o que seria uma má ideia. Mas você pode usar o pacote ABI você mesmo, manualmente, com uma única dependência explícita na versão ABI apropriada:
A vantagem disso em relação à especificação manual de dependências estritas em todos os pacotes de biblioteca apropriados é que a dependência só será quebrada quando a ABI mudar. Adicionar dependências estritas a todos os pacotes de biblioteca significaria que qualquer atualização desses pacotes, incluindo aqueles que mantêm a ABI, exigiria que você atualizasse seu pacote.