Commit | Line | Data |
---|---|---|
1479465f GJ |
1 | .\" dpkg manual page - dpkg-gensymbols(1) |
2 | .\" | |
3 | .\" Copyright © 2007-2011 Raphaël Hertzog <hertzog@debian.org> | |
4 | .\" Copyright © 2009-2010 Modestas Vainius <modestas@vainius.eu> | |
5 | .\" Copyright © 2012-2015 Guillem Jover <guillem@debian.org> | |
6 | .\" | |
7 | .\" This is free software; you can redistribute it and/or modify | |
8 | .\" it under the terms of the GNU General Public License as published by | |
9 | .\" the Free Software Foundation; either version 2 of the License, or | |
10 | .\" (at your option) any later version. | |
11 | .\" | |
12 | .\" This is distributed in the hope that it will be useful, | |
13 | .\" but WITHOUT ANY WARRANTY; without even the implied warranty of | |
14 | .\" MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the | |
15 | .\" GNU General Public License for more details. | |
16 | .\" | |
17 | .\" You should have received a copy of the GNU General Public License | |
18 | .\" along with this program. If not, see <https://www.gnu.org/licenses/>. | |
19 | . | |
20 | .\"******************************************************************* | |
21 | .\" | |
22 | .\" This file was generated with po4a. Translate the source file. | |
23 | .\" | |
24 | .\"******************************************************************* | |
25 | .TH dpkg\-gensymbols 1 %RELEASE_DATE% %VERSION% dpkg\-suite | |
26 | .nh | |
27 | .SH NAAM | |
28 | dpkg\-gensymbols \- genereer symbolenbestanden (informatie over | |
29 | afhankelijkheidsrelaties met gedeelde bibliotheken) | |
30 | . | |
31 | .SH OVERZICHT | |
32 | \fBdpkg\-gensymbols\fP [\fIoptie\fP...] | |
33 | . | |
34 | .SH BESCHRIJVING | |
35 | \fBdpkg\-gensymbols\fP doorzoekt een tijdelijke bouwboom (standaard is dat | |
36 | debian/tmp) op zoek naar bibliotheken en genereert een \fIsymbols\fP\-bestand | |
37 | dat ze beschrijft. Dit bestand wordt dan als het niet leeg is, geïnstalleerd | |
38 | in een onderliggende map van de bouwboom met de naam DEBIAN, zodat het | |
39 | uiteindelijk opgenomen geraakt in de controle\-informatie van het pakket. | |
40 | .P | |
41 | Bij het genereren van deze bestanden gebruikt het als invoer bepaalde | |
42 | symbolenbestanden die door de onderhouder aangeleverd worden. Het zoekt naar | |
43 | de volgende bestanden (en gebruikt het eerste dat gevonden wordt): | |
44 | .IP • 4 | |
45 | debian/\fIpakket\fP.symbols.\fIarch\fP | |
46 | .IP • 4 | |
47 | debian/symbols.\fIarch\fP | |
48 | .IP • 4 | |
49 | debian/\fIpakket\fP.symbols | |
50 | .IP • 4 | |
51 | debian/symbols | |
52 | .P | |
53 | Het hoofddoel van deze bestanden is aan te geven welke de minimale versie is | |
54 | die behoort bij elk van de symbolen die door de bibliotheken aangeleverd | |
55 | worden. Gewoonlijk komt dit overeen met de eerste versie van het pakket dat | |
56 | in dat symbool voorzag, maar dit kan door de onderhouder manueel verhoogd | |
57 | worden indien de ABI van het symbool uitgebreid werd zonder dat daardoor de | |
58 | neerwaartse compatibiliteit verbroken wordt. Het is de verantwoordelijkheid | |
59 | van de onderhouder om deze bestanden up\-to\-date en accuraat te houden, maar | |
60 | \fBdpkg\-gensymbols\fP helpt hierbij. | |
61 | .P | |
62 | Indien het gegenereerde symbolenbestand verschilt van datgene wat de | |
63 | onderhouder aanlevert, zal \fBdpkg\-gensymbols\fP de verschillen tussen de twee | |
64 | versies tonen in diff\-formaat. Bovendien kan dit zelfs tot een mislukking | |
65 | leiden als de verschillen te significant zijn (u kunt aanpassen hoeveel | |
66 | verschil u kunt tolereren; zie de optie \fB\-c\fP). | |
67 | .SH "HET ONDERHOUD VAN SYMBOLENBESTANDEN" | |
68 | De symbolenbestanden zijn pas echt nuttig als ze de evolutie van het pakket | |
69 | reflecteren doorheen verschillende releases. De onderhouder moet ze dus | |
70 | iedere keer bijwerken wanneer een nieuw symbool toegevoegd wordt, zodat de | |
71 | minimale versie die eraan gekoppeld wordt, overeenkomt met de realiteit. De | |
72 | diffs (weergave van de verschillen) die in de bouwlogs te vinden zijn, | |
73 | kunnen als startpunt genomen worden, maar daarbovenop moet de onderhouder | |
74 | erop letten dat het gedrag van deze symbolen niet zodanig veranderd werd, | |
75 | dat iets dat van deze symbolen gebruik maakt en linkt met de nieuwe versie, | |
76 | niet stopt met werken met de oude versie. In de meeste gevallen kan de diff | |
77 | rechtstreeks toegepast worden op het bestand debian/\fIpakket\fP.symbols. Dit | |
78 | gezegd zijnde, zijn verdere aanpassingen meestal wel nodig: het wordt | |
79 | bijvoorbeeld aanbevolen om het Debian revisienummer weg te laten uit de | |
80 | minimale versie, zodat backports (nieuwere programmaversies die geschikt | |
81 | gemaakt worden voor een vroegere release) met een lager versienummer maar | |
82 | eenzelfde toeleveraarsversie (upstream version) nog steeds voldoen aan de | |
83 | gegenereerde afhankelijkheidsrelaties. Indien het Debian revisienummer niet | |
84 | weggelaten kan worden omdat het symbool echt via een Debian\-specifieke | |
85 | aanpassing toegevoegd werd, moet men aan het versienummer het achtervoegsel | |
86 | ‘\fB~\fP’ toevoegen. | |
87 | .P | |
88 | Vooraleer een patch toe te passen op een symbolenbestand, moet de | |
89 | onderhouder grondig controleren of dat wel correct is. Publieke symbolen | |
90 | worden verondersteld niet te verdwijnen. Een patch zou dus idealiter enkel | |
91 | nieuwe regels mogen toevoegen. | |
92 | .P | |
93 | Merk op dat u commentaar kunt opnemen in symbolenbestanden: elke regel met | |
94 | ‘#’ als eerste teken is een commentaarregel, behalve als die regel begint | |
95 | met ‘#include’ (zie het onderdeel over \fBHet gebruik van includes\fP). Regels | |
96 | die beginnen met ‘#MISSING:’ zijn een bijzondere vorm van commentaar waarin | |
97 | symbolen die verdwenen zijn, gedocumenteerd worden. | |
98 | .P | |
99 | Vergeet niet na te gaan of oudere symboolversies niet verhoogd moeten | |
100 | worden. Er bestaat geen manier voor \fBdpkg\-gensymbols\fP om in dit verband | |
101 | waarschuwingen te geven. Een diff (weergave van de verschillen) blindweg | |
102 | toepassen of ervan uitgaan dat er niets aangepast moet worden als er geen | |
103 | diff is zonder zelf op eventuele wijzigingen te controleren, kan leiden tot | |
104 | pakketten met verslapte afhankelijkheidsrelaties die onterecht laten | |
105 | veronderstellen dat ze met oudere pakketten kunnen samenwerken. Dit kan bij | |
106 | (gedeeltelijke) opwaarderingen leiden tot moeilijk te vinden bugs. | |
107 | .SS "Substitutie van #PACKAGE# gebruiken" | |
108 | .P | |
109 | In enkele zeldzame gevallen verschilt de naam van de bibliotheek naargelang | |
110 | de architectuur. Om de naam van het pakket niet rechtstreeks in het | |
111 | symbolenbestand te moeten inschrijven, kunt u gebruik maken van de marker | |
112 | \fI#PACKAGE#\fP. Die zal tijdens de installatie van de symbolenbestanden | |
113 | vervangen worden door de echte pakketnaam. In tegenstelling tot de marker | |
114 | \fI#MINVER#\fP, zal \fI#PACKAGE#\fP nooit te vinden zijn in een symbolenbestand | |
115 | binnenin een binair pakket. | |
116 | .SS "Symbooltags gebruiken" | |
117 | .P | |
118 | Het gebruik van symbooltags is nuttig om symbolen te markeren die op een of | |
119 | andere manier bijzonder zijn. Aan elk symbool kan een arbitrair aantal tags | |
120 | gekoppeld worden. Hoewel alle tags ontleed en opgeslagen worden, worden | |
121 | slechts een aantal ervan herkend door \fBdpkg\-gensymbols\fP. Ze lokken een | |
122 | speciale behandeling van de symbolen uit. Zie het onderdeel \fBStandaard | |
123 | symbooltags\fP voor een voorstelling van deze tags. | |
124 | .P | |
125 | Tags worden vlak voor de symboolnaam opgegeven (tussenin mag er geen | |
126 | witruimte zijn). Een opgave begint steeds met het openen van een haakje \fB(\fP | |
127 | en eindigt met het sluiten ervan \fB)\fP en moet minstens één tag | |
128 | bevatten. Meerdere tags worden onderling gescheiden door een | |
129 | \fB|\fP\-teken. Elke tag kan een facultatieve waarde hebben die van de naam van | |
130 | de tag gescheiden wordt door het teken \fB=\fP. Namen van tags en waarden | |
131 | kunnen arbitraire tekenreeksen zijn, behalve dat zij niet de speciale tekens | |
132 | \fB)\fP \fB|\fP \fB=\fP mogen bevatten. De symboolnaam die na een tagopgave komt kan | |
133 | facultatief tussen aanhalingstekens geplaatst worden, ofwel met \fB'\fP of met | |
134 | \fB"\fP, waardoor hij witruimte mag bevatten. Evenwel, indien er voor het | |
135 | symbool geen tags opgegeven werden, zullen de aanhalingstekens behandeld | |
136 | worden als onderdeel van de naam van het symbool die eindigt bij de eerste | |
137 | spatie. | |
138 | .P | |
139 | (tag1=ik werd gemarkeerd|tagnaam met spatie)"getagd en aangehaald symbool"@Base 1.0 | |
140 | (optional)getagd_niet\-aangehaald_symbool@Base 1.0 1 | |
141 | niet\-getagd_symbool@Base 1.0 | |
142 | .P | |
143 | Het eerste symbool in het voorbeeld werd \fIgetagd en aangehaald symbool\fP | |
144 | genoemd en heeft twee tags: \fItag1\fP met als waarde \fIik werd gemarkeerd\fP en | |
145 | \fItagnaam met spatie\fP die geen waarde heeft. Het tweede symbool met als naam | |
146 | \fIgetagd_niet\-aangehaald_symbool\fP werd enkel gemarkeerd met de tag die | |
147 | \fIoptional\fP als naam heeft. Het laatste symbool is een voorbeeld van een | |
148 | normaal niet\-gemarkeerd symbool. | |
149 | .P | |
150 | Aangezien symbooltags een uitbreiding zijn van het | |
151 | \fBdeb\-symbols\fP(5)\-systeem, kunnen zij enkel deel uitmaken van de | |
152 | symbolenbestanden die in broncodepakketten gebruikt worden (die bestanden | |
153 | moeten dan gezien worden als sjablonen die gebruikt worden om de | |
154 | symbolenbestanden te bouwen die in de binaire pakketten zitten). Indien | |
155 | \fBdpkg\-gensymbols\fP aangeroepen wordt zonder de optie \fB\-t\fP zal het | |
156 | symbolenbestanden produceren die compatibel zijn met het | |
157 | \fBdeb\-symbols\fP(5)\-systeem: er gebeurt een volledige verwerking van de | |
158 | symbolen in overeenstemming met de vereisten van hun standaardtags en de | |
159 | uitvoer wordt ontdaan van alle tags. In sjabloonmodus (\fB\-t\fP) daarentegen | |
160 | blijven in de uitvoer alle symbolen en hun tags (zowel de standaardtags als | |
161 | de niet\-gekende) behouden en worden ze in hun originele vorm neergeschreven | |
162 | zoals ze geladen werden. | |
163 | .SS "Standaard symbooltags" | |
164 | .TP | |
165 | \fBoptional\fP | |
166 | Een symbool dat als optional (facultatief) gemarkeerd is, kan om het even | |
167 | wanneer uit de bibliotheek verdwijnen en dat feit zal nooit een mislukking | |
168 | van \fBdpkg\-gensymbols\fP tot gevolg hebben. Nochtans zullen verdwenen | |
169 | facultatieve symbolen permanent als MISSING (ontbrekend) aangegeven worden | |
170 | in de diff (weergave van de veranderingen) bij elke nieuwe | |
171 | pakketrevisie. Dit gedrag dient als een geheugensteuntje voor de onderhouder | |
172 | dat een dergelijk symbool verwijderd moet worden uit het symbolenbestand of | |
173 | terug toegevoegd aan de bibliotheek. Indien een facultatief symbool dat | |
174 | eerder als MISSING opgetekend stond in een volgende revisie plots opnieuw | |
175 | terug opduikt, zal het terug opgewaardeerd worden naar de status “existing” | |
176 | (bestaand) zonder wijziging van zijn minimumversie. | |
177 | ||
178 | Deze tag is nuttig voor private symbolen waarvan de verdwijning geen | |
179 | ABI\-breuk veroorzaakt. De meeste van de C++\-sjabloon\-instantiaties vallen | |
180 | bijvoorbeeld onder deze categorie. Zoals elke andere tag kan ook deze een | |
181 | arbitraire waarde hebben: die kan gebruikt worden om aan te geven waarom het | |
182 | symbool als facultatief beschouwd wordt. | |
183 | .TP | |
184 | \fBarch=\fP\fIarchitectuurlijst\fP | |
185 | .TQ | |
186 | \fBarch\-bits=\fP\fIarchitectuur\-bits\fP | |
187 | .TQ | |
188 | \fBarch\-endian=\fP\fIarchitectuur\-endianness\fP | |
189 | Deze tags laten iemand toe om de set architecturen waarvoor het symbool | |
190 | verondersteld wordt te bestaan, te beperken. De tags \fBarch\-bits\fP en | |
191 | \fBarch\-endian\fP worden sinds dpkg 1.18.0 ondersteund. Als de symbolenlijst | |
192 | bijgewerkt wordt met de symbolen die in de bibliotheek gevonden worden, | |
193 | worden alle architectuurspecifieke symbolen die van geen belang zijn voor de | |
194 | huidige hostarchitectuur, behandeld alsof ze niet bestaan. Indien een | |
195 | architectuurspecifiek symbool dat betrekking heeft op de huidige | |
196 | hostarchitectuur, ontbreekt in de bibliotheek, zijn de normale procedures | |
197 | die gelden voor ontbrekende symbolen, van toepassing en dit kan het | |
198 | mislukken van \fBdpkg\-gensymbols\fP tot gevolg hebben. Anderzijds, indien het | |
199 | architectuurspecifieke symbool aangetroffen wordt als het er niet | |
200 | verondersteld wordt te zijn (omdat de huidige hostarchitectuur niet vermeld | |
201 | wordt in de tag of niet overeenkomt met de endianness of de bits), dan wordt | |
202 | het architectuurneutraal gemaakt (d.w.z. dat de tags arch, arch\-bits en | |
203 | arch\-endian weggelaten worden en het symbool omwille van deze verandering in | |
204 | de diff (weergave van de veranderingen) opgenomen zal worden), maar het | |
205 | wordt niet als nieuw beschouwd. | |
206 | ||
207 | Als in de standaardmodus (niet\-sjabloonmodus) gewerkt wordt, worden van de | |
208 | architectuurspecifieke symbolen enkel die in het symbolenbestand | |
209 | opgeschreven die overeenkomen met de huidige hostarchitectuur. Als | |
210 | daarentegen in de sjabloonmodus gewerkt wordt, worden steeds alle | |
211 | architectuurspecifieke symbolen (ook die voor vreemde architecturen) | |
212 | opgeschreven in het symbolenbestand. | |
213 | ||
214 | De indeling voor de \fIarchitectuurlijst\fP is dezelfde als die welke gebruikt | |
215 | wordt voor het veld \fBBuild\-Depends\fP van \fIdebian/control\fP (behalve de | |
216 | omsluitende vierkante haakjes []). Met het eerste symbool uit de | |
217 | onderstaande lijst zal bijvoorbeeld enkel rekening gehouden worden bij de | |
218 | architecturen alpha, any\-amd64 en ia64, met het tweede enkel op | |
219 | linux\-architecturen en met het derde overal behalve op armel. | |
220 | ||
221 | (arch=alpha any\-amd64 ia64)een_64bits_specifiek_symbool@Base 1.0 | |
222 | (arch=linux\-any)linux_specifiek_symbool@Base 1.0 | |
223 | (arch=!armel)symbool_dat_armel_niet_heeft@Base 1.0 | |
224 | ||
225 | De waarde van \fIarchitectuur\-bits\fP is ofwel \fB32\fP of \fB64\fP. | |
226 | ||
227 | (arch\-bits=32)32bits_specifiek_symbool@Base 1.0 | |
228 | (arch\-bits=64)64bits_specifiek_symbool@Base 1.0 | |
229 | ||
230 | De waarde van \fIarchitectuur\-endianness\fP is ofwel \fBlittle\fP of \fBbig\fP. | |
231 | ||
232 | (arch\-endian=little)little_endian_specifiek_symbool@Base 1.0 | |
233 | (arch\-endian=big)big_endian_specifiek_symbool@Base 1.0 | |
234 | ||
235 | Meerdere beperkingen kunnen aaneengeregen worden. | |
236 | ||
237 | (arch\-bits=32|arch\-endian=little)32bits_le_symbool@Base 1.0 | |
238 | .TP | |
239 | \fBignore\-blacklist\fP | |
240 | dpkg\-gensymbols hanteert een interne zwarte lijst van symbolen die niet | |
241 | zouden mogen voorkomen in symbolenbestanden omdat ze gewoonlijk slechts een | |
242 | neveneffect zijn van details in de wijze waarop de gereedschapskist | |
243 | (toolchain) geïmplementeerd wordt. Indien u om een of andere reden echt wilt | |
244 | dat een van deze symbolen opgenomen wordt in het symbolenbestand, moet u het | |
245 | symbool markeren met de tag \fBignore\-blacklist\fP. Dit kan nodig zijn voor | |
246 | sommige gereedschapskistbibliotheken van lagere orde zoals libgcc | |
247 | .TP | |
248 | \fBc++\fP | |
249 | Geeft een \fIc++\fP\-symboolpatroon aan. Zie hierna in de subsectie \fBHet | |
250 | gebruik van symboolpatronen\fP. | |
251 | .TP | |
252 | \fBsymver\fP | |
253 | Geeft een \fIsymver\fP (symboolversie) symboolpatroon aan. Zie hierna in de | |
254 | subsectie \fBHet gebruik van symboolpatronen\fP. | |
255 | .TP | |
256 | \fBregex\fP | |
257 | Geeft een \fIregex\fP\-symboolpatroon aan. Zie hierna in de subsectie \fBHet | |
258 | gebruik van symboolpatronen\fP. | |
259 | .SS "Het gebruik van symboolpatronen" | |
260 | .P | |
261 | Anders dan een standaardbeschrijving van een symbool, kan een patroon | |
262 | meerdere echte symbolen uit de bibliotheek dekken. \fBdpkg\-gensymbols\fP zal | |
263 | proberen om elk patroon te vergelijken met elk reëel symbool waarvoor in het | |
264 | symbolenbestand \fIgeen\fP specifiek symboolpendant gedefinieerd werd. Telkens | |
265 | wanneer een eerste overeenkomst met een patroon gevonden wordt, worden alle | |
266 | tags en eigenschappen ervan gebruikt als basisspecificatie voor het | |
267 | symbool. Indien er met geen enkel patroon een overeenkomst gevonden wordt, | |
268 | zal het symbool als nieuw beschouwd worden. | |
269 | ||
270 | Een patroon wordt als verloren beschouwd als het met geen enkel symbool uit | |
271 | de bibliotheek overeenkomt. Standaard zal dit onder \fB\-c1\fP of een hoger | |
272 | niveau een mislukking van \fBdpkg\-gensymbols\fP uitlokken. Indien een | |
273 | dergelijke mislukking echter onwenselijk is, kan het patroon gemarkeerd | |
274 | worden met de tag \fIoptional\fP. Als het patroon in dat geval geen | |
275 | overeenkomst oplevert, zal het enkel in de diff (weergave van de | |
276 | wijzigingen) als MISSING (ontbrekend) vermeld worden. Zoals elk ander | |
277 | symbool kan ook een patroon beperkt worden tot specifieke architecturen met | |
278 | de tag \fIarch\fP. Raadpleeg het onderdeel \fBStandaard symbooltags\fP hierboven | |
279 | voor meer informatie. | |
280 | ||
281 | Patronen vormen een uitbreiding van het \fBdeb\-symbols\fP(5)\-systeem en zijn | |
282 | daarom enkel geldig in symbolenbestandsjablonen. De syntaxis voor het | |
283 | opgeven van patronen verschilt niet van die voor een specifiek symbool. Het | |
284 | onderdeel symboolnaam van de specificatie fungeert echter als een expressie | |
285 | die vergeleken wordt met \fInaam@versie\fP van het echte symbool. Om het | |
286 | onderscheid te maken tussen verschillende types patronen, wordt een patroon | |
287 | doorgaans gemarkeerd met een speciale tag | |
288 | ||
289 | Op dit ogenblik ondersteunt \fBdpkg\-gensymbols\fP drie fundamentele | |
290 | patroontypes: | |
291 | .TP 3 | |
292 | \fBc++\fP | |
293 | Dit patroon wordt met de tag \fIc++\fP aangeduid. Het zoekt enkel een | |
294 | overeenkomst met C++\-symbolen aan de hand van hun ontwarde (demangled) | |
295 | symboolnaam (zoals die weergegeven wordt door het hulpprogramma | |
296 | \fBc++filt\fP(1)). Dit patroon is zeer handig om symbolen te vinden waarvan de | |
297 | verhaspelde naam op verschillende architecturen anders kan zijn, terwijl hun | |
298 | ontwarde naam gelijk blijft. Een groep van dergelijke symbolen is | |
299 | \fInon\-virtual thunks\fP die architectuurspecifieke geheugenplaatsen ingebed | |
300 | hebben in hun verhaspelde naam. Een courant voorkomend voorbeeld hiervan is | |
301 | een virtuele destructor die onder een diamantovererving een niet\-virtueel | |
302 | thunk\-symbool nodig heeft. Bijvoorbeeld, zelfs als | |
303 | _ZThn8_N3NSB6ClassDD1Ev@Base op 32\-bits\-architecturen wellicht | |
304 | _ZThn16_N3NSB6ClassDD1Ev@Base zal zijn op 64\-bits\-architecturen, kunnen zij | |
305 | met één enkel \fIc++\fP\-patroon aangeduid worden: | |
306 | ||
307 | libdummy.so.1 libdummy1 #MINVER# | |
308 | [...] | |
309 | (c++)"non\-virtual thunk to NSB::ClassD::~ClassD()@Base" 1.0 | |
310 | [...] | |
311 | ||
312 | De bovenstaande ontwarde naam kan verkregen worden door het volgende | |
313 | commando uit te voeren: | |
314 | ||
315 | $ echo '_ZThn8_N3NSB6ClassDD1Ev@Base' | c++filt | |
316 | ||
317 | Merk op dat een verhaspelde naam per definitie uniek is in de bibliotheek, | |
318 | maar dat dit niet noodzakelijk het geval is voor ontwarde namen. Een aantal | |
319 | verschillende echte symbolen kan dezelfde ontwarde naam hebben. Dat is | |
320 | bijvoorbeeld het geval met niet\-virtuele thunk\-symbolen in complexe | |
321 | overervingsconfiguraties of met de meeste constructors en destructors | |
322 | (vermits g++ voor hen doorgaans twee echte symbolen genereert). Vermits deze | |
323 | collisies zich op het ABI\-niveau voordoen, verminderen zij evenwel niet de | |
324 | kwaliteit van het symbolenbestand. | |
325 | .TP | |
326 | \fBsymver\fP | |
327 | Dit patroon wordt door de tag \fIsymver\fP aangegeven. Goed onderhouden | |
328 | bibliotheken hebben symbolen met versienummers, waarbij elke versie | |
329 | overeenkomt met de toeleveraarsversie waar het symbool toegevoegd | |
330 | werd. Indien dat het geval is, kunt u een \fIsymver\fP\-patroon gebruiken om | |
331 | eventuele symbolen aan te duiden die gekoppeld zijn aan de specifieke | |
332 | versie. Bijvoorbeeld: | |
333 | ||
334 | libc.so.6 libc6 #MINVER# | |
335 | (symver)GLIBC_2.0 2.0 | |
336 | [...] | |
337 | (symver)GLIBC_2.7 2.7 | |
338 | access@GLIBC_2.0 2.2 | |
339 | ||
340 | Alle symbolen die horen bij de versies GLIBC_2.0 en GLIBC_2.7 zullen | |
341 | resulteren in de respectieve minimale versies 2.0 en 2.7, met uitzondering | |
342 | van het symbool access@GLIBC_2.0. Dit laatste zal resulteren in een minimale | |
343 | vereiste van libc6 versie 2.2 en dit ondanks het feit dat het valt binnen | |
344 | het bereik van het patroon "(symver)GLIBC_2.0". De reden hiervoor is dat | |
345 | specifieke symbolen voorrang hebben op patronen. | |
346 | ||
347 | Merk op dat hoewel patronen met jokertekens volgens de oude stijl (in het | |
348 | veld symboolnaam aangegeven door "*@version") nog steeds ondersteund worden, | |
349 | zij vervangen werden door een syntaxis volgens de nieuwe stijl | |
350 | "(symver|optional)version". Als hetzelfde effect gewenst wordt moet | |
351 | bijvoorbeeld "*@GLIBC_2.0 2.0" geschreven worden als | |
352 | "(symver|optional)GLIBC_2.0 2.0". | |
353 | .TP | |
354 | \fBregex\fP | |
355 | Patronen in de vorm van reguliere expressies worden aangegeven met de tag | |
356 | \fIregex\fP. Zij zoeken naar een overeenkomst met de in het veld symboolnaam | |
357 | vermelde perl reguliere expressie. Een reguliere expressie wordt als zodanig | |
358 | vergeleken. Daarom mag u niet vergeten ze te laten beginnen met het teken | |
359 | \fI^\fP. Anders kan ze een overeenkomst opleveren met om het even welk deel van | |
360 | de tekenreeks \fInaam@versie\fP van het echte symbool. Bijvoorbeeld: | |
361 | ||
362 | libdummy.so.1 libdummy1 #MINVER# | |
363 | (regex)"^mystack_.*@Base$" 1.0 | |
364 | (regex|optional)"private" 1.0 | |
365 | ||
366 | Symbolen zoals "mystack_new@Base", "mystack_push@Base", "mystack_pop@Base" | |
367 | enz. zullen door het eerste patroon gevonden worden, terwijl | |
368 | "ng_mystack_new@Base" bijvoorbeeld niet. Het tweede patroon zal een | |
369 | overeenkomst opleveren met alle symbolen die in hun naam de tekenreeks | |
370 | "private" hebben en de gevonden symbolen zullen de tag \fIoptional\fP overerven | |
371 | van het patroon. | |
372 | .P | |
373 | De hierboven vermelde basispatronen kunnen met elkaar gecombineerd worden | |
374 | als dat zinvol is. In dat geval worden zij verwerkt in de volgorde waarin de | |
375 | tags opgegeven werden. Bijvoorbeeld beide onderstaande patronen | |
376 | ||
377 | (c++|regex)"^NSA::ClassA::Private::privmethod\ed\e(int\e)@Base" 1.0 | |
378 | (regex|c++)N3NSA6ClassA7Private11privmethod\edEi@Base 1.0 | |
379 | ||
380 | zullen de symbolen "_ZN3NSA6ClassA7Private11privmethod1Ei@Base" en | |
381 | "_ZN3NSA6ClassA7Private11privmethod2Ei@Base" vinden. Bij het vergelijken met | |
382 | het eerste patroon wordt het rauwe symbool eerst ontward als een C++\-symbool | |
383 | en vervolgens wordt de ontwarde naam vergeleken met de reguliere | |
384 | expressie. Bij het vergelijken met het tweede patroon daarentegen, wordt de | |
385 | reguliere expressie vergeleken met de rauwe symboolnaam en vervolgens wordt | |
386 | nagegaan of het een C++\-symbool is door het te proberen ontwarren. Als een | |
387 | basispatroon een mislukking oplevert, betekent dit het mislukken van het | |
388 | hele patroon. Om die reden zal | |
389 | "__N3NSA6ClassA7Private11privmethod\edEi@Base" bijvoorbeeld met geen van | |
390 | beide patronen een overeenkomst opleveren, aangezien het geen geldig | |
391 | C++\-symbool is. | |
392 | ||
393 | Over het algemeen genomen kunnen alle patronen in twee groepen onderverdeeld | |
394 | worden: aliassen (basale \fIc++\fP\- en \fIsymver\fP\-patronen) en generieke | |
395 | patronen (\fIregex\fP, alle combinaties van meerdere basale patronen). Het | |
396 | vergelijken met basale patronen van het alias\-type verloopt snel (O(1)), | |
397 | terwijl dat bij generieke patronen voor elk symbool O(N) is (waarbij N het | |
398 | aantal generieke patronen is). Daarom wordt aangeraden om geen overdadig | |
399 | gebruik te maken van generieke patronen. | |
400 | ||
401 | Indien meerdere patronen een overeenkomst opleveren met hetzelfde echte | |
402 | symbool, krijgen aliassen (eerst \fIc++\fP, dan \fIsymver\fP) de voorkeur boven | |
403 | generieke patronen. Generieke patronen worden vergeleken in de volgorde | |
404 | waarin zij aangetroffen worden in het symbolenbestandsjabloon tot er een | |
405 | eerste succes volgt. Merk nochtans op dat het manueel herordenen van items | |
406 | uit het sjabloonbestand niet aangeraden wordt, aangezien \fBdpkg\-gensymbols\fP | |
407 | diffs (weergave van de veranderingen) genereert op basis van de | |
408 | alfanumerieke volgorde van hun namen. | |
409 | .SS "Het gebruik van includes" | |
410 | .P | |
411 | Als de set van geëxporteerde symbolen onderling verschilt tussen | |
412 | verschillende architecturen, kan het inefficiënt worden om één enkel | |
413 | symbolenbestand te gebruiken. In die gevallen kan een include\-opdracht op | |
414 | een aantal wijzen nuttig blijken: | |
415 | .IP • 4 | |
416 | U kunt het gemeenschappelijke gedeelte afsplitsen in een extern bestand en | |
417 | dat bestand opnemen in uw bestand \fIpakket\fP.symbols.\fIarch\fP met behulp van | |
418 | een include\-opdracht op de volgende manier: | |
419 | ||
420 | #include "\fIpakketten\fP.symbols.common" | |
421 | .IP • | |
422 | Net zoals om het even welk symbool kan ook een include\-opdracht tags | |
423 | krijgen: | |
424 | ||
425 | (tag|...|tagN)#include "in\-te\-voegen\-bestand" | |
426 | ||
427 | Als gevolg daarvan zal er standaard van uitgegaan worden dat alle symbolen | |
428 | die uit \fIin\-te\-voegen\-bestand\fP opgenomen worden, gemarkeerd zijn met \fItag\fP | |
429 | \&... \fItagN\fP. U kunt van deze functionaliteit gebruik maken om een | |
430 | gemeenschappelijk bestand \fIpakket\fP.symbols te maken waarin | |
431 | architectuurspecifieke symbolenbestanden opgenomen worden: | |
432 | ||
433 | gemeenschappelijk_symbool1@Base 1.0 | |
434 | (arch=amd64 ia64 alpha)#include "pakket.symbolen.64bits" | |
435 | (arch=!amd64 !ia64 !alpha)#include "pakket.symbolen.32bits" | |
436 | gemeenschappelijk_symbool2@Base 1.0 | |
437 | .P | |
438 | De symbolenbestanden worden regel per regel gelezen en include\-opdrachten | |
439 | worden verwerkt van zodra ze tegengekomen worden. Dit betekent dat de inhoud | |
440 | van het ingevoegde bestand eventueel zaken kan vervangen die voor de | |
441 | include\-opdracht stonden en dat zaken die na de opdracht komen, eventueel | |
442 | inhoud uit het ingevoegde bestand kunnen vervangen. Elk symbool (of zelfs | |
443 | een andere #include\-opdracht) uit het ingevoegde bestand kan bijkomende tags | |
444 | opgeven of via zijn tag\-vermeldingen waarden van de overgeërfde tags | |
445 | vervangen. Er bestaat nochtans geen manier waarop een symbool eventueel | |
446 | overgeërfde tags zou kunnen verwijderen. | |
447 | .P | |
448 | Een ingevoegd bestand kan de kopregel die de SONAME van de bibliotheek | |
449 | bevat, herhalen. In dat geval vervangt het een eventueel eerder ingelezen | |
450 | kopregel. Het is over het algemeen nochtans best om het dupliceren van | |
451 | kopregels te vermijden. Een manier om dat te doen is de volgende: | |
452 | .PP | |
453 | #include "libding1.symbols.common" | |
454 | arch_specifiek_symbool@Base 1.0 | |
455 | .SS "Goed beheer van bibliotheken" | |
456 | .P | |
457 | Een goed onderhouden bibliotheek heeft de volgende functionaliteit: | |
458 | .IP • 4 | |
459 | haar API is stabiel (publieke symbolen worden nooit verwijderd, enkel worden | |
460 | nieuwe publieke symbolen toegevoegd) en zij ondergaat enkel op een | |
461 | incompatibele manier veranderingen als de SONAME verandert; | |
462 | .IP • 4 | |
463 | idealiter gebruikt zij symboolversienummering om ondanks interne wijzigingen | |
464 | en API\-uitbreidingen ABI\-stabiliteit te bekomen; | |
465 | .IP • 4 | |
466 | zij exporteert geen private symbolen (dergelijke symbolen kunnen de tag | |
467 | optional krijgen om dat te omzeilen). | |
468 | .P | |
469 | Bij het onderhoud van een symbolenbestand is het gemakkelijk om het | |
470 | verschijnen en verdwijnen van symbolen op te merken. Maar het is moeilijker | |
471 | om incompatibele API\- en ABI\-wijzigingen op te merken. Daarom moet de | |
472 | onderhouder het changelog\-bestand van de toeleveraar grondig nakijken op | |
473 | situaties waarbij de regels van goed bibliotheekbeheer geschonden | |
474 | worden. Indien mogelijke problemen ontdekt worden, zou de toeleverende | |
475 | auteur erover ingelicht moeten worden, aangezien een reparatie op het niveau | |
476 | van de toeleveraar altijd te verkiezen valt boven een Debian\-specifieke | |
477 | tijdelijke oplossing. | |
478 | .SH OPTIES | |
479 | .TP | |
480 | \fB\-P\fP\fIpakketbouwmap\fP | |
481 | Zoek in \fIpakketbouwmap\fP in plaats van in debian/tmp. | |
482 | .TP | |
483 | \fB\-p\fP\fIpakket\fP | |
484 | Definieer de pakketnaam. Is vereist als meer dan één binair pakket vermeld | |
485 | wordt in debian/control (of indien er geen bestand debian/control is). | |
486 | .TP | |
487 | \fB\-v\fP\fIversie\fP | |
488 | Definieer de pakketversie. Standaard is dat de versie die uit | |
489 | debian/changelog gehaald wordt. Is vereist indien het aanroepen gebeurt van | |
490 | buiten de boom van het broncodepakket. | |
491 | .TP | |
492 | \fB\-e\fP\fIbibliotheekbestand\fP | |
493 | Analyseer enkel de expliciet vermelde bibliotheken in plaats van alle | |
494 | publieke bibliotheken te zoeken. U kunt in \fIbibliotheekbestand\fP gebruik | |
495 | maken van shell\-patronen met het oog op padnaamexpansie (zie de man\-pagina | |
496 | \fBFile::Glob\fP(3perl) voor details) om met één enkel argument meerdere | |
497 | bibliotheken aan te duiden (anders heeft u meerdere malen \fB\-e\fP nodig). | |
498 | .TP | |
499 | \fB\-I\fP\fIbestandsnaam\fP | |
500 | Gebruik \fIbestandsnaam\fP als referentiebestand om het symbolenbestand te | |
501 | genereren dat in het pakket zelf geïntegreerd wordt. | |
502 | .TP | |
503 | \fB\-O\fP[\fIbestandsnaam\fP] | |
504 | Geef het gegenereerde symbolenbestand uit weer op de standaarduitvoer of | |
505 | schrijf het naar \fIbestandsnaam\fP als dat opgegeven werd, eerder dan naar | |
506 | \fBdebian/tmp/DEBIAN/symbols\fP (of \fIpakketbouwmap\fP\fB/DEBIAN/symbols\fP indien | |
507 | \fB\-P\fP gebruikt werd). Indien \fIbestandsnaam\fP reeds bestond, wordt de inhoud | |
508 | ervan gebruikt als basis voor het gegenereerde symbolenbestand. U kunt van | |
509 | deze functionaliteit gebruik maken om een symbolenbestand bij te werken | |
510 | zodat het in overeenstemming is met een nieuwere toeleveraarsversie van uw | |
511 | bibliotheek. | |
512 | .TP | |
513 | \fB\-t\fP | |
514 | Schrijf het symbolenbestand in sjabloonmodus eerder dan in de indeling die | |
515 | compatibel is met \fBdeb\-symbols\fP(5). Het grootste verschil is dat in de | |
516 | sjabloonmodus symboolnamen en tags geschreven worden in hun originele vorm | |
517 | in tegenstelling tot in de compatibele modus waarin de verwerkte | |
518 | symboolnamen ontdaan van hun tags gebruikt worden. Daarenboven kunnen bij | |
519 | het schrijven van een standaard \fBdeb\-symbols\fP(5)\-bestand sommige symbolen | |
520 | weggelaten worden (overeenkomstig de regels voor het verwerken van tags), | |
521 | terwijl in een symbolenbestandsjabloon steeds alle symbolen neergeschreven | |
522 | worden. | |
523 | .TP | |
524 | \fB\-c\fP\fI[0\-4]\fP | |
525 | Definieer de controles die moeten gebeuren bij het vergelijken van het | |
526 | gegenereerde symbolenbestand met het sjabloonbestand dat als vertrekpunt | |
527 | gebruikt werd. Standaard is dat volgens niveau 1. Het verhogen van het | |
528 | niveau leidt tot meer controles, terwijl alle controles van lagere niveaus | |
529 | behouden blijven. Niveau 0 leidt nooit tot een mislukking. Niveau 1 mislukt | |
530 | als er symbolen verdwenen zijn. Niveau 2 geeft een mislukking als nieuwe | |
531 | symbolen geïntroduceerd werden. Niveau 3 mislukt als er bibliotheken | |
532 | verdwenen zijn. Niveau 4 geeft een mislukking als nieuwe bibliotheken | |
533 | geïntroduceerd werden. | |
534 | ||
535 | Deze waarde kan vervangen worden door de omgevingsvariabele | |
536 | \fBDPKG_GENSYMBOLS_CHECK_LEVEL\fP. | |
537 | .TP | |
538 | \fB\-q\fP | |
539 | Gedraag u rustig en genereer nooit een diff (een overzicht van de | |
540 | verschillen) tussen het gegenereerde symbolenbestand en het sjabloonbestand | |
541 | dat als vertrekpunt gebruikt werd en toon geen enkele waarschuwing in | |
542 | verband met nieuwe/verloren bibliotheken of nieuwe/verloren symbolen. Deze | |
543 | optie schakelt enkel de informatieve uitvoer uit, maar niet de controles | |
544 | zelf (zie de optie \fB\-c\fP). | |
545 | .TP | |
546 | \fB\-a\fP\fIarch\fP | |
547 | Ga uit van \fIarch\fP als hostarchitectuur bij het verwerken van | |
548 | symbolenbestanden. Gebruik deze optie om een symbolenbestand of een diff | |
549 | (overzicht van de verschillen) voor een willekeurige architectuur te | |
550 | genereren op voorwaarde dat de binaire bestanden ervan reeds voorhanden | |
551 | zijn. | |
552 | .TP | |
553 | \fB\-d\fP | |
554 | Zet debug\-modus aan. Talrijke berichten worden dan getoond om toe te lichten | |
555 | wat \fBdpkg\-gensymbols\fP doet. | |
556 | .TP | |
557 | \fB\-V\fP | |
558 | Schakel de breedsprakige modus in. Het gegenereerde symbolenbestand bevat | |
559 | dan verouderde symbolen in de vorm van commentaar. In sjabloonmodus worden | |
560 | daarenboven patroonsymbolen gevolgd door commentaar met daarin een opsomming | |
561 | van de echte symbolen die met het patroon overeenkwamen. | |
562 | .TP | |
563 | \fB\-?\fP, \fB\-\-help\fP | |
564 | Toon info over het gebruik en sluit af. | |
565 | .TP | |
566 | \fB\-\-version\fP | |
567 | Toon de versie en sluit af. | |
568 | . | |
569 | .SH OMGEVING | |
570 | .TP | |
571 | \fBDPKG_GENSYMBOLS_CHECK_LEVEL\fP | |
572 | Overschrijft het controleniveau van het commando, zelfs als het argument | |
573 | \fB\-c\fP opgegeven werd aan de commandoregel (merk op dat dit ingaat tegen de | |
574 | algemeen geldende afspraak dat commandoregel\-argumenten voorrang hebben op | |
575 | omgevingsvariabelen). | |
576 | .SH "ZIE OOK" | |
577 | \fBhttps://people.redhat.com/drepper/symbol\-versioning\fP | |
578 | .br | |
579 | \fBhttps://people.redhat.com/drepper/goodpractice.pdf\fP | |
580 | .br | |
581 | \fBhttps://people.redhat.com/drepper/dsohowto.pdf\fP | |
582 | .br | |
583 | \fBdeb\-symbols\fP(5), \fBdpkg\-shlibdeps\fP(1). |