dpkg-gensymbols(1) | dpkg suite | dpkg-gensymbols(1) |
dpkg-gensymbols - gera ficheiros symbols (informação de dependência de biblioteca partilhada)
dpkg-gensymbols [option...]
dpkg-gensymbols sonda uma árvore de compilação temporária (debian/tmp por predefinição) à procura de bibliotecas e gera um ficheiro symbols a descrevê-los. Este ficheiro, se não vazio, é depois instalado no sub-directório DEBIAN da árvore de compilação para que seja incluído na informação de controle do pacote.
Quando gera esses ficheiros, usa como entrada alguns ficheiros de símbolos disponibilizados pelo maintainer. Procura os seguintes ficheiros (e usa o primeiro que encontra):
O principal interesse desse ficheiros é disponibilizar a versão mínima associada a cada símbolo fornecido pelas bibliotecas. Geralmente isso corresponde à primeira versão do pacote que forneceu o símbolo, mas pode ser incrementada pelo maintainer se o ABI do símbolo é extensível sem se quebrar a compatibilidade com versões anteriores. É da responsabilidade do maintainer manter esses ficheiros actualizados e precisos, mas o dpkg-gensymbols ajuda com isso.
Quando os ficheiros de símbolos gerados diferem daqueles fornecidos pelo maintainer, dpkg-gensymbols irá escrever um diff entre as duas versões. Mais ainda, se a diferença for muito significante, irá mesmo falhar (você pode personalizar quanta diferença pode ser tolerada, veja a opção -c).
O formato de intercâmbio base do ficheiro de símbolos é descrito em deb-symbols(5), o qual é usado pelos ficheiros symbols incluídos em pacotes binários. Estes são gerados a partir de ficheiros se símbolos modelo com um formato baseado no anterior, descrito em deb-src-symbols(5) e incluído em pacotes fonte.
Os ficheiros de símbolos são apenas úteis se refletirem a evolução do pacote entre vários lançamentos. Assim o maintainer tem de os actualizar todas as vezes que é adicionado um novo símbolo para que a sua versão mínima associada corresponda à realidade.
Os diffs contidos nos logs de compilação podem ser usados com ponto de partida, mas o maintainer, adicionalmente, tem de certificar que o comportamento desses símbolos não alterou num modo que faça com que tudo o que usa esses símbolos e em link para a nova versão, deixem de funcionar com a versão antiga.
Na maioria dos casos, o diff aplica-se directamente ao ficheiro debian/package.symbols. Dito isso, geralmente são necessários mais ajustes: é recomendado, por exemplo, soltar a revisão Debian da versão mínima para que backports com um número de versão inferior mas a mesma versão de autor consigam ainda satisfazer as dependências geradas. Se uma revisão Debian não pode ser largada porque o símbolo foi realmente adicionado pela alteração específica de Debian, então deve-se acrescentar um sufixo à versão com ‘~’.
Antes de aplicar qualquer patch ao ficheiro symbols, o maintainer deve re-verificar que esta é saudável. Não é suposto símbolos públicos desaparecerem, assim a patch deve idealmente apenas adicionar novas linhas.
Note que você pode meter comentários em ficheiros de símbolos.
Não se esqueça de verificar se versões antigas de símbolos precisam de ser aumentadas. Não há maneira de dpkg-gensymbols poder avisar sobre isto. Aplica o diff às cegas ou assumir que não há nada para mudar se não existir um diff, sem verificar por tais mudanças, pode levar a pacotes com dependências soltas, que afirmam poder trabalhar com pacotes mais antigos com que já não podem trabalhar. Isto irá introduzir dificuldades de encontrar bugs com actualizações (parciais).
Uma biblioteca bem mantida tem as seguintes características:
Enquanto se mantém o ficheiro symbols, é fácil percebermos o aparecimento e desaparecimento de símbolos. Mas é mais difícil apanhar alterações de API e ABI incompatíveis. Assim o maintainer deve ler com atenção o registo de alterações do autor procurando casos onde as regras da boa gestão de bibliotecas foram quebradas. Se forem descobertos potenciais problemas, o autor original deve ser notificado pois uma correcção no autor é sempre melhor que um contorno especifico em Debian.
Nota: Use esta opção em vez de definir LD_LIBRARY_PATH, pois essa variável de ambiente é usado para controlar o vinculador de tempo-de-execução e abusar dela para definir caminhos de bibliotecas partilhadas durante a compilação pode ser problemático quando, por exemplo, se faz compilações cruzadas.
Este valor pode ser sobreposto pela variável de ambiente DPKG_GENSYMBOLS_CHECK_LEVEL.
<https://people.redhat.com/drepper/symbol-versioning>, <https://people.redhat.com/drepper/goodpractice.pdf>, <https://people.redhat.com/drepper/dsohowto.pdf>, deb-src-symbol(5), deb-symbols(5), dpkg-shlibdeps(1).
Américo Monteiro
Se encontrar algum erro na tradução deste documento, por favor comunique para Américo Monteiro <a_monteiro@gmx.com>.
2023-09-13 | 1.20.13 |