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