dpkg (1.18.25) stretch; urgency=medium
[dpkg] / man / nl / dpkg-gensymbols.man
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).