1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
203
204
205
206
207
208
209
210
211
212
213
214
215
|
*****************************************************
* GENERATED FILE, DO NOT EDIT *
* THIS IS NO SOURCE FILE, BUT RESULT OF COMPILATION *
*****************************************************
This file was generated by po4a(7). Do not store it (in VCS, for example),
but store the PO file used as source file by po4a-translate.
In fact, consider this as a binary, and the PO file as a regular .c file:
If the PO get lost, keeping this translation up-to-date will be harder.
=encoding UTF-8
=head1 NOME
dpkg-gensymbols - gera ficheiros symbols (informação de dependência de biblioteca partilhada)
=head1 RESUMO
B<dpkg-gensymbols> [I<option>...]
=head1 DESCRIÇÃO
B<dpkg-gensymbols> sonda uma árvore de compilação temporária (debian/tmp por predefinição) à procura de bibliotecas e gera um ficheiro I<symbols> a descreve-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):
=over
=item *
debian/I<package>.symbols.I<arch>
=item *
debian/symbols.I<arch>
=item *
debian/I<package>.symbols
=item *
debian/symbols
=back
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 B<dpkg-gensymbols> ajuda com isso.
Quando os ficheiros de símbolos gerados diferem daqueles fornecidos pelo maintainer, B<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 B<-c>).
Este programa foi introduzido no dpkg 1.14.8.
=head1 MANTENDO FICHEIROS DE SÍMBOLOS
The base interchange format of the symbols file is described in L<deb-symbols(5)>, which is used by the symbols files included in binary packages. These are generated from template symbols files with a format based on the former, described in L<deb-src-symbols(5)> and included in source packages.
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/I<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 ‘B<~>’.
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 B<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).
=head2 Boa gestão de biblioteca
Uma biblioteca bem mantida tem as seguintes características:
=over
=item *
A sua API é estável (símbolos públicos nunca são largados, apenas símbolos públicos novos são adicionados) e alterações em modos incompatíveis sempre apenas quando o SONAME muda;
=item *
idealmente, usa a identificação da versão do símbolo para obter estabilidade da ABI apesar de alterações internas e extensão API;
=item *
não exporta símbolos privados (tais símbolos podem ser etiquetados de opcionais como meio de contornar).
=back
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.
=head1 OPÇÕES
=over
=item B<-P>I<package-build-dir>
Sonda I<package-build-dir> em vez de debian/tmp.
=item B<-p>I<package>
Define o nome do pacote. Requerido se mais do que um pacote binário estiver listado em debian/control (ou se não existir o ficheiro debian/control).
=item B<-v>I<version>
Define a versão do pacote. Usa por predefinição a versão extraída de debian/changelog. Requerido se chamado fora de uma árvore de pacote fonte.
=item B<-e>I<library-file>
Only analyze libraries explicitly listed instead of finding all public libraries. You can use shell patterns used for pathname expansions (see the L<File::Glob> manual page for details) in I<library-file> to match multiple libraries with a single argument (otherwise you need multiple B<-e>).
=item B<-l>I<directory>
Precede I<directory> à lista de directórios a pesquisar por bibliotecas partilhadas privadas (desde dpkg 1.19.1). Esta opção pode ser usada várias vezes.
B<Nota>: Use esta opção em vez de definir B<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.
=item B<-I>I<filename>
Usa I<nome-ficheiro> como ficheiro de referência para gerar o ficheiro de símbolos que é integrado no próprio pacote.
=item B<-O>[I<filename>]
Escreve o ficheiro de símbolos gerado na saída standard ou em I<filename> se especificado, em vez de B<debian/tmp/DEBIAN/symbols> (ou I<package-build-dir>B</DEBIAN/symbols> se B<-P> foi usado). Se I<filename> é pré-existente, o seu conteúdo é usado como base para o ficheiro de símbolos gerado. Você pode usar esta funcionalidade para actualizar um ficheiro de símbolos para que corresponda à nova versão do autor da sua biblioteca.
=item B<-t>
Write the symbol file in template mode rather than the format compatible with L<deb-symbols(5)>. The main difference is that in the template mode symbol names and tags are written in their original form contrary to the post-processed symbol names with tags stripped in the compatibility mode. Moreover, some symbols might be omitted when writing a standard L<deb-symbols(5)> file (according to the tag processing rules) while all symbols are always written to the symbol file template.
=item B<-c>I<[0-4]>
Define as verificações a fazer quando se compara o ficheiro de símbolos gerado com o ficheiro modelo usado como ponto de partida. Por predefinição o nível é 1. Aumentar os níveis faz mais verificações e inclui todas as verificações de baixo nível.
=over
=item Nível 0
Nunca falha.
=item Nível 1
Falha se alguns símbolos tiverem desaparecido.
=item Nível 2
Falha se alguns novo símbolos tiverem sido introduzidos.
=item Nível 3
Falha se algumas bibliotecas tiverem desaparecido.
=item Nível 4
Falha se algumas bibliotecas tiverem sido introduzidos.
=back
Este valor pode ser sobreposto pela variável de ambiente B<DPKG_GENSYMBOLS_CHECK_LEVEL>.
=item B<-q>
Mantêm-se calado e nunca gera um diff entre o ficheiro de símbolos gerados e o ficheiro modelo usando como ponto de arranque nem mostra nenhuns avisos sobre bibliotecas novas/perdidas nem símbolos novos/perdidos. Esta opção apenas desactiva os resultados informativos mas não os próprios testes (veja a opção B<-c>).
=item B<-a>I<arch>
Assume I<arch> como arquitectura anfitriã quando processa ficheiros de símbolos. Use esta opção para gerar um ficheiro de símbolos ou a diferença para qualquer arquitectura desde que os seus binários já estejam disponíveis.
=item B<-d>
Activa o modo de depuração. São mostradas numerosas mensagens para explicar o que o B<dpkg-gensymbols> faz.
=item B<-V>
Activa modo detalhado. O ficheiro de símbolos gerado contém símbolos abandonados como comentários. Mais ainda, em modo de modelo, os símbolos de padrões são seguidos de comentários que listam símbolos reais que corresponderam ao padrão.
=item B<-?>, B<--help>
Mostra a mensagem de utilização e termina.
=item B<--version>
Mostra a versão e termina.
=back
=head1 AMBIENTE
=over
=item B<DPKG_GENSYMBOLS_CHECK_LEVEL>
Sobrepõe o nível de verificação do comando, mesmo se o argumento B<-c> de linha de comandos tenha sido dado (note que isto vai contra a convenção comum de argumentos de linha de comandos a ter a precedência sobre as variáveis de ambiente).
=item B<DPKG_COLORS>
Define o modo de cor (desde dpkg 1.18.5). Os valores actualmente aceites são: B<auto> (predefinido), B<always> e B<never>.
=item B<DPKG_NLS>
Se definida, será usada para decidir se deve activar o Suporte a Linguagem Nativa. Também como conhecido como suporte de internacionalização (ou i18n) (desde dpkg 1.19.0). Os valores aceites são B<0> e B<1> (predefinição).
=back
=head1 VEJA TAMBÉM
L<https://people.redhat.com/drepper/symbol-versioning>, L<https://people.redhat.com/drepper/goodpractice.pdf>, L<https://people.redhat.com/drepper/dsohowto.pdf>, L<deb-src-symbol(5)>, L<deb-symbols(5)>, L<dpkg-shlibdeps(1)>.
=head1 TRADUÇÃO
Américo Monteiro
Se encontrar algum erro na tradução deste documento, por favor comunique para
Américo Monteiro <a_monteiro@gmx.com>.
|