Provided by: dpkg-dev_1.19.7ubuntu3.2_all bug

NAAM

       dpkg-gensymbols  -  genereer  symbolenbestanden  (informatie  over  afhankelijkheidsrelaties met gedeelde
       bibliotheken)

OVERZICHT

       dpkg-gensymbols [optie...]

BESCHRIJVING

       dpkg-gensymbols doorzoekt een tijdelijke bouwboom (standaard is dat debian/tmp) op zoek naar bibliotheken
       en genereert een symbols-bestand dat ze  beschrijft.  Dit  bestand  wordt  dan  als  het  niet  leeg  is,
       geïnstalleerd  in  een  onderliggende  map  van  de  bouwboom  met de naam DEBIAN, zodat het uiteindelijk
       opgenomen geraakt in de controle-informatie van het pakket.

       Bij het genereren van deze bestanden gebruikt het als  invoer  bepaalde  symbolenbestanden  die  door  de
       onderhouder aangeleverd worden. Het zoekt naar de volgende bestanden (en gebruikt het eerste dat gevonden
       wordt):

       •   debian/pakket.symbols.arch

       •   debian/symbols.arch

       •   debian/pakket.symbols

       •   debian/symbols

       Het  hoofddoel  van deze bestanden is aan te geven welke de minimale versie is die behoort bij elk van de
       symbolen die door de bibliotheken aangeleverd worden. Gewoonlijk komt dit overeen met  de  eerste  versie
       van  het  pakket  dat  in  dat  symbool voorzag, maar dit kan door de onderhouder manueel verhoogd worden
       indien de ABI van het  symbool  uitgebreid  werd  zonder  dat  daardoor  de  neerwaartse  compatibiliteit
       verbroken  wordt.  Het  is  de  verantwoordelijkheid  van  de onderhouder om deze bestanden up-to-date en
       accuraat te houden, maar dpkg-gensymbols helpt hierbij.

       Indien het  gegenereerde  symbolenbestand  verschilt  van  datgene  wat  de  onderhouder  aanlevert,  zal
       dpkg-gensymbols  de verschillen tussen de twee versies tonen in diff-formaat. Bovendien kan dit zelfs tot
       een mislukking leiden als de verschillen te significant zijn (u kunt aanpassen hoeveel  verschil  u  kunt
       tolereren; zie de optie -c).

HET ONDERHOUD VAN SYMBOLENBESTANDEN

       De  symbolenbestanden  zijn  pas  echt  nuttig  als  ze  de  evolutie van het pakket reflecteren doorheen
       verschillende releases. De onderhouder moet ze dus  iedere  keer  bijwerken  wanneer  een  nieuw  symbool
       toegevoegd  wordt,  zodat  de minimale versie die eraan gekoppeld wordt, overeenkomt met de realiteit. De
       diffs (weergave van de verschillen) die in de bouwlogs te  vinden  zijn,  kunnen  als  startpunt  genomen
       worden,  maar  daarbovenop  moet de onderhouder erop letten dat het gedrag van deze symbolen niet zodanig
       veranderd werd, dat iets dat van deze symbolen gebruik maakt en linkt met de nieuwe  versie,  niet  stopt
       met  werken  met  de  oude versie. In de meeste gevallen kan de diff rechtstreeks toegepast worden op het
       bestand debian/pakket.symbols. Dit gezegd zijnde, zijn verdere aanpassingen meestal wel nodig: het  wordt
       bijvoorbeeld  aanbevolen om het Debian revisienummer weg te laten uit de minimale versie, zodat backports
       (nieuwere programmaversies die  geschikt  gemaakt  worden  voor  een  vroegere  release)  met  een  lager
       versienummer  maar eenzelfde toeleveraarsversie (upstream version) nog steeds voldoen aan de gegenereerde
       afhankelijkheidsrelaties. Indien het Debian revisienummer niet weggelaten kan worden  omdat  het  symbool
       echt   via  een  Debian-specifieke  aanpassing  toegevoegd  werd,  moet  men  aan  het  versienummer  het
       achtervoegsel ‘~’ toevoegen.

       Vooraleer een patch toe te passen op een symbolenbestand, moet de onderhouder grondig controleren of  dat
       wel  correct  is.  Publieke symbolen worden verondersteld niet te verdwijnen. Een patch zou dus idealiter
       enkel nieuwe regels mogen toevoegen.

       Merk op dat u commentaar kunt opnemen in symbolenbestanden: elke regel met ‘#’ als eerste  teken  is  een
       commentaarregel,  behalve  als  die  regel  begint met ‘#include’ (zie het onderdeel over Het gebruik van
       includes). Regels die beginnen met ‘#MISSING:’ zijn een bijzondere vorm van  commentaar  waarin  symbolen
       die verdwenen zijn, gedocumenteerd worden.

       Vergeet niet na te gaan of oudere symboolversies niet verhoogd moeten worden. Er bestaat geen manier voor
       dpkg-gensymbols  om  in  dit  verband  waarschuwingen  te  geven.  Een diff (weergave van de verschillen)
       blindweg toepassen of ervan uitgaan dat er niets aangepast moet worden als er geen diff is zonder zelf op
       eventuele wijzigingen te controleren, kan leiden tot pakketten met verslapte afhankelijkheidsrelaties die
       onterecht  laten  veronderstellen  dat  ze  met  oudere  pakketten  kunnen  samenwerken.  Dit   kan   bij
       (gedeeltelijke) opwaarderingen leiden tot moeilijk te vinden bugs.

   Substitutie van #PACKAGE# gebruiken
       In  enkele  zeldzame gevallen verschilt de naam van de bibliotheek naargelang de architectuur. Om de naam
       van het pakket niet rechtstreeks in het symbolenbestand te moeten inschrijven, kunt u gebruik  maken  van
       de  marker  #PACKAGE#.  Die  zal tijdens de installatie van de symbolenbestanden vervangen worden door de
       echte pakketnaam. In tegenstelling tot de marker #MINVER#, zal #PACKAGE# nooit  te  vinden  zijn  in  een
       symbolenbestand binnenin een binair pakket.

   Symbooltags gebruiken
       Het gebruik van symbooltags is nuttig om symbolen te markeren die op een of andere manier bijzonder zijn.
       Aan  elk  symbool  kan een arbitrair aantal tags gekoppeld worden. Hoewel alle tags ontleed en opgeslagen
       worden, worden slechts een aantal ervan herkend door dpkg-gensymbols. Ze lokken een speciale  behandeling
       van de symbolen uit. Zie het onderdeel Standaard symbooltags voor een voorstelling van deze tags.

       Tags  worden  vlak voor de symboolnaam opgegeven (tussenin mag er geen witruimte zijn). Een opgave begint
       steeds met het openen van een haakje ( en eindigt met het sluiten  ervan  )  en  moet  minstens  één  tag
       bevatten.  Meerdere  tags  worden  onderling  gescheiden  door een |-teken. Elke tag kan een facultatieve
       waarde hebben die van de naam van de tag gescheiden wordt door het teken =. Namen  van  tags  en  waarden
       kunnen  arbitraire  tekenreeksen  zijn,  behalve dat zij niet de speciale tekens ) | = mogen bevatten. De
       symboolnaam die na een tagopgave komt kan facultatief tussen aanhalingstekens geplaatst worden, ofwel met
       ' of met ", waardoor hij witruimte mag bevatten. Evenwel, indien er voor het symbool geen tags  opgegeven
       werden, zullen de aanhalingstekens behandeld worden als onderdeel van de naam van het symbool die eindigt
       bij de eerste spatie.

        (tag1=ik werd gemarkeerd|tagnaam met spatie)"getagd en aangehaald symbool"@Base 1.0
        (optional)getagd_niet-aangehaald_symbool@Base 1.0 1
        niet-getagd_symbool@Base 1.0

       Het  eerste  symbool  in het voorbeeld werd getagd en aangehaald symbool genoemd en heeft twee tags: tag1
       met als waarde ik werd gemarkeerd en tagnaam met spatie die geen waarde heeft. Het tweede symbool met als
       naam getagd_niet-aangehaald_symbool werd enkel gemarkeerd met de tag die optional  als  naam  heeft.  Het
       laatste symbool is een voorbeeld van een normaal niet-gemarkeerd symbool.

       Aangezien symbooltags een uitbreiding zijn van het deb-symbols(5)-systeem, kunnen zij enkel deel uitmaken
       van de symbolenbestanden die in broncodepakketten gebruikt worden (die bestanden moeten dan gezien worden
       als  sjablonen die gebruikt worden om de symbolenbestanden te bouwen die in de binaire pakketten zitten).
       Indien dpkg-gensymbols aangeroepen wordt zonder de optie -t  zal  het  symbolenbestanden  produceren  die
       compatibel  zijn  met  het deb-symbols(5)-systeem: er gebeurt een volledige verwerking van de symbolen in
       overeenstemming met de vereisten van hun standaardtags en de uitvoer wordt  ontdaan  van  alle  tags.  In
       sjabloonmodus  (-t)  daarentegen  blijven in de uitvoer alle symbolen en hun tags (zowel de standaardtags
       als de niet-gekende) behouden en worden ze in hun originele vorm neergeschreven zoals ze geladen werden.

   Standaard symbooltags
       optional
              Een symbool dat als optional  (facultatief)  gemarkeerd  is,  kan  om  het  even  wanneer  uit  de
              bibliotheek verdwijnen en dat feit zal nooit een mislukking van dpkg-gensymbols tot gevolg hebben.
              Nochtans  zullen  verdwenen  facultatieve  symbolen  permanent als MISSING (ontbrekend) aangegeven
              worden in de diff (weergave van de veranderingen) bij elke nieuwe pakketrevisie. Dit gedrag  dient
              als  een geheugensteuntje voor de onderhouder dat een dergelijk symbool verwijderd moet worden uit
              het symbolenbestand of terug toegevoegd aan de bibliotheek. Indien  een  facultatief  symbool  dat
              eerder  als  MISSING opgetekend stond in een volgende revisie plots opnieuw terug opduikt, zal het
              terug opgewaardeerd worden  naar  de  status  “existing”  (bestaand)  zonder  wijziging  van  zijn
              minimumversie.

              Deze  tag  is  nuttig  voor private symbolen waarvan de verdwijning geen ABI-breuk veroorzaakt. De
              meeste van de C++-sjabloon-instantiaties vallen bijvoorbeeld  onder  deze  categorie.  Zoals  elke
              andere  tag  kan  ook  deze  een arbitraire waarde hebben: die kan gebruikt worden om aan te geven
              waarom het symbool als facultatief beschouwd wordt.

       arch=architectuurlijst
       arch-bits=architectuur-bits
       arch-endian=architectuur-endianness
              Deze tags laten iemand toe om de set architecturen waarvoor het  symbool  verondersteld  wordt  te
              bestaan,  te  beperken. De tags arch-bits en arch-endian worden sinds dpkg 1.18.0 ondersteund. Als
              de symbolenlijst bijgewerkt wordt met de symbolen die in de bibliotheek  gevonden  worden,  worden
              alle  architectuurspecifieke  symbolen  die van geen belang zijn voor de huidige hostarchitectuur,
              behandeld alsof ze niet bestaan. Indien een architectuurspecifiek symbool dat betrekking heeft  op
              de  huidige  hostarchitectuur,  ontbreekt in de bibliotheek, zijn de normale procedures die gelden
              voor ontbrekende symbolen, van toepassing en dit kan het mislukken van dpkg-gensymbols tot  gevolg
              hebben.  Anderzijds,  indien het architectuurspecifieke symbool aangetroffen wordt als het er niet
              verondersteld wordt te zijn (omdat de huidige hostarchitectuur niet vermeld wordt  in  de  tag  of
              niet overeenkomt met de endianness of de bits), dan wordt het architectuurneutraal gemaakt (d.w.z.
              dat  de  tags  arch,  arch-bits  en  arch-endian weggelaten worden en het symbool omwille van deze
              verandering in de diff (weergave van de veranderingen) opgenomen zal worden), maar het wordt  niet
              als nieuw beschouwd.

              Als  in de standaardmodus (niet-sjabloonmodus) gewerkt wordt, worden van de architectuurspecifieke
              symbolen  enkel  die  in  het  symbolenbestand  opgeschreven  die  overeenkomen  met  de   huidige
              hostarchitectuur.   Als  daarentegen  in  de  sjabloonmodus  gewerkt  wordt,  worden  steeds  alle
              architectuurspecifieke  symbolen  (ook  die  voor  vreemde  architecturen)  opgeschreven  in   het
              symbolenbestand.

              De  indeling  voor  de  architectuurlijst  is  dezelfde als die welke gebruikt wordt voor het veld
              Build-Depends van debian/control (behalve de omsluitende vierkante haakjes  []).  Met  het  eerste
              symbool  uit  de  onderstaande  lijst  zal  bijvoorbeeld  enkel  rekening  gehouden  worden bij de
              architecturen alpha, any-amd64 en ia64, met het tweede enkel op  linux-architecturen  en  met  het
              derde overal behalve op armel.

               (arch=alpha any-amd64 ia64)een_64bits_specifiek_symbool@Base 1.0
               (arch=linux-any)linux_specifiek_symbool@Base 1.0
               (arch=!armel)symbool_dat_armel_niet_heeft@Base 1.0

              De waarde van architectuur-bits is ofwel 32 of 64.

               (arch-bits=32)32bits_specifiek_symbool@Base 1.0
               (arch-bits=64)64bits_specifiek_symbool@Base 1.0

              De waarde van architectuur-endianness is ofwel little of big.

               (arch-endian=little)little_endian_specifiek_symbool@Base 1.0
               (arch-endian=big)big_endian_specifiek_symbool@Base 1.0

              Meerdere beperkingen kunnen aaneengeregen worden.

               (arch-bits=32|arch-endian=little)32bits_le_symbool@Base 1.0

       ignore-blacklist
              dpkg-gensymbols  hanteert een interne zwarte lijst van symbolen die niet zouden mogen voorkomen in
              symbolenbestanden omdat ze gewoonlijk slechts een neveneffect zijn van details in de wijze  waarop
              de  gereedschapskist  (toolchain) geïmplementeerd wordt. Indien u om een of andere reden echt wilt
              dat een van deze symbolen opgenomen wordt in het symbolenbestand, moet u het symbool markeren  met
              de  tag  ignore-blacklist. Dit kan nodig zijn voor sommige gereedschapskistbibliotheken van lagere
              orde zoals libgcc

       c++    Geeft een c++-symboolpatroon aan. Zie hierna in de subsectie Het gebruik van symboolpatronen.

       symver Geeft een symver (symboolversie) symboolpatroon aan. Zie hierna in de subsectie  Het  gebruik  van
              symboolpatronen.

       regex  Geeft een regex-symboolpatroon aan. Zie hierna in de subsectie Het gebruik van symboolpatronen.

   Het gebruik van symboolpatronen
       Anders  dan  een  standaardbeschrijving  van  een symbool, kan een patroon meerdere echte symbolen uit de
       bibliotheek dekken. dpkg-gensymbols zal proberen om elk patroon te  vergelijken  met  elk  reëel  symbool
       waarvoor  in  het  symbolenbestand  geen  specifiek symboolpendant gedefinieerd werd. Telkens wanneer een
       eerste overeenkomst met een patroon gevonden wordt, worden alle tags en eigenschappen ervan gebruikt  als
       basisspecificatie voor het symbool. Indien er met geen enkel patroon een overeenkomst gevonden wordt, zal
       het symbool als nieuw beschouwd worden.

       Een  patroon  wordt als verloren beschouwd als het met geen enkel symbool uit de bibliotheek overeenkomt.
       Standaard zal dit onder -c1 of een hoger niveau een mislukking van dpkg-gensymbols uitlokken. Indien  een
       dergelijke  mislukking  echter onwenselijk is, kan het patroon gemarkeerd worden met de tag optional. Als
       het patroon in dat geval geen  overeenkomst  oplevert,  zal  het  enkel  in  de  diff  (weergave  van  de
       wijzigingen) als MISSING (ontbrekend) vermeld worden. Zoals elk ander symbool kan ook een patroon beperkt
       worden  tot  specifieke  architecturen  met  de  tag  arch. Raadpleeg het onderdeel Standaard symbooltags
       hierboven voor meer informatie.

       Patronen  vormen  een  uitbreiding  van  het  deb-symbols(5)-systeem  en  zijn  daarom  enkel  geldig  in
       symbolenbestandsjablonen.  De  syntaxis  voor  het  opgeven  van patronen verschilt niet van die voor een
       specifiek symbool. Het onderdeel symboolnaam van de specificatie fungeert echter als  een  expressie  die
       vergeleken  wordt met naam@versie van het echte symbool. Om het onderscheid te maken tussen verschillende
       types patronen, wordt een patroon doorgaans gemarkeerd met een speciale tag

       Op dit ogenblik ondersteunt dpkg-gensymbols drie fundamentele patroontypes:

       c++
          Dit patroon wordt met de tag c++ aangeduid. Het zoekt enkel een overeenkomst met C++-symbolen  aan  de
          hand  van  hun  ontwarde  (demangled)  symboolnaam (zoals die weergegeven wordt door het hulpprogramma
          c++filt(1)). Dit patroon is zeer  handig  om  symbolen  te  vinden  waarvan  de  verhaspelde  naam  op
          verschillende  architecturen  anders  kan zijn, terwijl hun ontwarde naam gelijk blijft. Een groep van
          dergelijke symbolen is non-virtual thunks die architectuurspecifieke geheugenplaatsen  ingebed  hebben
          in hun verhaspelde naam. Een courant voorkomend voorbeeld hiervan is een virtuele destructor die onder
          een   diamantovererving   een   niet-virtueel  thunk-symbool  nodig  heeft.  Bijvoorbeeld,  zelfs  als
          _ZThn8_N3NSB6ClassDD1Ev@Base op 32-bits-architecturen wellicht _ZThn16_N3NSB6ClassDD1Ev@Base zal  zijn
          op 64-bits-architecturen, kunnen zij met één enkel c++-patroon aangeduid worden:

          libdummy.so.1 libdummy1 #MINVER#
           [...]
           (c++)"non-virtual thunk to NSB::ClassD::~ClassD()@Base" 1.0
           [...]

          De bovenstaande ontwarde naam kan verkregen worden door het volgende commando uit te voeren:

           $ echo '_ZThn8_N3NSB6ClassDD1Ev@Base' | c++filt

          Merk  op  dat  een  verhaspelde  naam  per  definitie  uniek  is  in de bibliotheek, maar dat dit niet
          noodzakelijk het geval is voor ontwarde namen. Een aantal verschillende echte  symbolen  kan  dezelfde
          ontwarde  naam  hebben.  Dat  is  bijvoorbeeld  het geval met niet-virtuele thunk-symbolen in complexe
          overervingsconfiguraties of met de meeste constructors en destructors (vermits g++ voor hen  doorgaans
          twee  echte  symbolen  genereert). Vermits deze collisies zich op het ABI-niveau voordoen, verminderen
          zij evenwel niet de kwaliteit van het symbolenbestand.

       symver
          Dit patroon wordt door de tag symver aangegeven. Goed onderhouden  bibliotheken  hebben  symbolen  met
          versienummers,  waarbij  elke versie overeenkomt met de toeleveraarsversie waar het symbool toegevoegd
          werd. Indien dat het geval is, kunt u een symver-patroon gebruiken om eventuele symbolen aan te duiden
          die gekoppeld zijn aan de specifieke versie. Bijvoorbeeld:

          libc.so.6 libc6 #MINVER#
           (symver)GLIBC_2.0 2.0
           [...]
           (symver)GLIBC_2.7 2.7
           access@GLIBC_2.0 2.2

          Alle symbolen die horen bij de versies GLIBC_2.0 en GLIBC_2.7  zullen  resulteren  in  de  respectieve
          minimale  versies  2.0  en  2.7,  met  uitzondering  van het symbool access@GLIBC_2.0. Dit laatste zal
          resulteren in een minimale vereiste van libc6 versie 2.2 en dit ondanks het feit dat het  valt  binnen
          het  bereik van het patroon "(symver)GLIBC_2.0". De reden hiervoor is dat specifieke symbolen voorrang
          hebben op patronen.

          Merk op dat hoewel patronen met jokertekens volgens de oude stijl (in het veld symboolnaam  aangegeven
          door  "*@version")  nog  steeds  ondersteund worden, zij vervangen werden door een syntaxis volgens de
          nieuwe  stijl  "(symver|optional)version".  Als  hetzelfde  effect  gewenst  wordt  moet  bijvoorbeeld
          "*@GLIBC_2.0 2.0" geschreven worden als "(symver|optional)GLIBC_2.0 2.0".

       regex
          Patronen  in  de vorm van reguliere expressies worden aangegeven met de tag regex. Zij zoeken naar een
          overeenkomst met de in het veld symboolnaam vermelde perl reguliere expressie. Een reguliere expressie
          wordt als zodanig vergeleken. Daarom mag u niet vergeten ze te laten beginnen met het teken ^.  Anders
          kan  ze  een  overeenkomst  opleveren  met om het even welk deel van de tekenreeks naam@versie van het
          echte symbool. Bijvoorbeeld:

          libdummy.so.1 libdummy1 #MINVER#
           (regex)"^mystack_.*@Base$" 1.0
           (regex|optional)"private" 1.0

          Symbolen zoals "mystack_new@Base", "mystack_push@Base", "mystack_pop@Base" enz. zullen door het eerste
          patroon gevonden worden, terwijl "ng_mystack_new@Base" bijvoorbeeld niet. Het tweede patroon  zal  een
          overeenkomst opleveren met alle symbolen die in hun naam de tekenreeks "private" hebben en de gevonden
          symbolen zullen de tag optional overerven van het patroon.

       De hierboven vermelde basispatronen kunnen met elkaar gecombineerd worden als dat zinvol is. In dat geval
       worden  zij  verwerkt  in  de  volgorde  waarin de tags opgegeven werden. Bijvoorbeeld beide onderstaande
       patronen

        (c++|regex)"^NSA::ClassA::Private::privmethod\d\(int\)@Base" 1.0
        (regex|c++)N3NSA6ClassA7Private11privmethod\dEi@Base 1.0

       zullen          de           symbolen           "_ZN3NSA6ClassA7Private11privmethod1Ei@Base"           en
       "_ZN3NSA6ClassA7Private11privmethod2Ei@Base" vinden. Bij het vergelijken met het eerste patroon wordt het
       rauwe  symbool  eerst  ontward als een C++-symbool en vervolgens wordt de ontwarde naam vergeleken met de
       reguliere expressie. Bij het vergelijken met het tweede patroon daarentegen, wordt de reguliere expressie
       vergeleken met de rauwe symboolnaam en vervolgens wordt nagegaan of het een C++-symbool is  door  het  te
       proberen ontwarren. Als een basispatroon een mislukking oplevert, betekent dit het mislukken van het hele
       patroon.  Om  die reden zal "__N3NSA6ClassA7Private11privmethod\dEi@Base" bijvoorbeeld met geen van beide
       patronen een overeenkomst opleveren, aangezien het geen geldig C++-symbool is.

       Over het algemeen genomen kunnen alle patronen in twee groepen  onderverdeeld  worden:  aliassen  (basale
       c++-  en  symver-patronen)  en generieke patronen (regex, alle combinaties van meerdere basale patronen).
       Het vergelijken met basale patronen van het alias-type verloopt snel (O(1)), terwijl  dat  bij  generieke
       patronen  voor  elk symbool O(N) is (waarbij N het aantal generieke patronen is). Daarom wordt aangeraden
       om geen overdadig gebruik te maken van generieke patronen.

       Indien meerdere patronen een overeenkomst opleveren met hetzelfde echte symbool, krijgen aliassen  (eerst
       c++,  dan  symver)  de  voorkeur  boven  generieke  patronen.  Generieke patronen worden vergeleken in de
       volgorde waarin zij aangetroffen worden in het symbolenbestandsjabloon tot er een  eerste  succes  volgt.
       Merk  nochtans  op  dat  het  manueel herordenen van items uit het sjabloonbestand niet aangeraden wordt,
       aangezien dpkg-gensymbols diffs (weergave van de veranderingen) genereert op basis van  de  alfanumerieke
       volgorde van hun namen.

   Het gebruik van includes
       Als  de  set  van  geëxporteerde symbolen onderling verschilt tussen verschillende architecturen, kan het
       inefficiënt worden om één enkel symbolenbestand te gebruiken. In die gevallen kan een include-opdracht op
       een aantal wijzen nuttig blijken:

       •   U kunt het gemeenschappelijke gedeelte afsplitsen in een extern bestand en dat bestand opnemen in  uw
           bestand pakket.symbols.arch met behulp van een include-opdracht op de volgende manier:

           #include "pakketten.symbols.common"

       •   Net zoals om het even welk symbool kan ook een include-opdracht tags krijgen:

           (tag|...|tagN)#include "in-te-voegen-bestand"

           Als   gevolg   daarvan   zal   er   standaard   van  uitgegaan  worden  dat  alle  symbolen  die  uit
           in-te-voegen-bestand  opgenomen  worden,  gemarkeerd  zijn  met  tag  ...  tagN.  U  kunt  van   deze
           functionaliteit  gebruik  maken  om  een  gemeenschappelijk  bestand  pakket.symbols  te maken waarin
           architectuurspecifieke symbolenbestanden opgenomen worden:

             gemeenschappelijk_symbool1@Base 1.0
            (arch=amd64 ia64 alpha)#include "pakket.symbolen.64bits"
            (arch=!amd64 !ia64 !alpha)#include "pakket.symbolen.32bits"
             gemeenschappelijk_symbool2@Base 1.0

       De symbolenbestanden worden regel per regel gelezen en include-opdrachten worden verwerkt  van  zodra  ze
       tegengekomen  worden. Dit betekent dat de inhoud van het ingevoegde bestand eventueel zaken kan vervangen
       die voor de include-opdracht stonden en dat zaken die na de opdracht  komen,  eventueel  inhoud  uit  het
       ingevoegde  bestand  kunnen  vervangen.  Elk  symbool  (of  zelfs  een  andere #include-opdracht) uit het
       ingevoegde bestand kan bijkomende tags opgeven of via zijn tag-vermeldingen waarden  van  de  overgeërfde
       tags  vervangen. Er bestaat nochtans geen manier waarop een symbool eventueel overgeërfde tags zou kunnen
       verwijderen.

       Een ingevoegd bestand kan de kopregel die de SONAME van de bibliotheek  bevat,  herhalen.  In  dat  geval
       vervangt  het  een  eventueel  eerder  ingelezen  kopregel. Het is over het algemeen nochtans best om het
       dupliceren van kopregels te vermijden. Een manier om dat te doen is de volgende:

       #include "libding1.symbols.common"
        arch_specifiek_symbool@Base 1.0

   Goed beheer van bibliotheken
       Een goed onderhouden bibliotheek heeft de volgende functionaliteit:

       •   haar API is stabiel (publieke symbolen worden nooit verwijderd, enkel worden nieuwe publieke symbolen
           toegevoegd) en zij ondergaat enkel op een incompatibele manier veranderingen als de SONAME verandert;

       •   idealiter gebruikt zij symboolversienummering om ondanks  interne  wijzigingen  en  API-uitbreidingen
           ABI-stabiliteit te bekomen;

       •   zij  exporteert  geen  private symbolen (dergelijke symbolen kunnen de tag optional krijgen om dat te
           omzeilen).

       Bij het onderhoud van een symbolenbestand is  het  gemakkelijk  om  het  verschijnen  en  verdwijnen  van
       symbolen  op  te  merken.  Maar  het is moeilijker om incompatibele API- en ABI-wijzigingen op te merken.
       Daarom moet de onderhouder het changelog-bestand van de toeleveraar grondig nakijken op situaties waarbij
       de regels van goed bibliotheekbeheer geschonden worden. Indien mogelijke problemen ontdekt worden, zou de
       toeleverende auteur erover ingelicht moeten  worden,  aangezien  een  reparatie  op  het  niveau  van  de
       toeleveraar altijd te verkiezen valt boven een Debian-specifieke tijdelijke oplossing.

OPTIES

       -Ppakketbouwmap
              Zoek in pakketbouwmap in plaats van in debian/tmp.

       -ppakket
              Definieer de pakketnaam. Is vereist als meer dan één binair pakket vermeld wordt in debian/control
              (of indien er geen bestand debian/control is).

       -vversie
              Definieer  de  pakketversie. Standaard is dat de versie die uit debian/changelog gehaald wordt. Is
              vereist indien het aanroepen gebeurt van buiten de boom van het broncodepakket.

       -ebibliotheekbestand
              Analyseer enkel de expliciet vermelde bibliotheken in plaats van  alle  publieke  bibliotheken  te
              zoeken.   U   kunt  in  bibliotheekbestand  gebruik  maken  van  shell-patronen  met  het  oog  op
              padnaamexpansie (zie de man-pagina File::Glob(3perl) voor  details)  om  met  één  enkel  argument
              meerdere bibliotheken aan te duiden (anders heeft u meerdere malen -e nodig).

       -lmap  Voeg  map  vooraan  toe  aan de lijst van mappen waarin naar private gedeelde bibliotheken gezocht
              moet worden (sinds dpkg 1.19.1). Deze optie kan meermaals gebruikt worden.

              Opmerking: gebruik deze optie in de plaats van het instellen van  LD_LIBRARY_PATH,  aangezien  die
              omgevingsvariabele gebruikt wordt om de runtime linker aan te sturen. Daarvan misbruik maken om de
              paden  van  gedeelde  bibliotheken  in  te  stellen  tijdens  het  bouwen  van  het programma, kan
              problematisch zijn, bijvoorbeeld bij het cross-compileren.

       -Ibestandsnaam
              Gebruik bestandsnaam als referentiebestand om het symbolenbestand te genereren dat in  het  pakket
              zelf geïntegreerd wordt.

       -O[bestandsnaam]
              Geef  het  gegenereerde  symbolenbestand  uit  weer  op  de  standaarduitvoer  of schrijf het naar
              bestandsnaam  als  dat   opgegeven   werd,   eerder   dan   naar   debian/tmp/DEBIAN/symbols   (of
              pakketbouwmap/DEBIAN/symbols indien -P gebruikt werd). Indien bestandsnaam reeds bestond, wordt de
              inhoud  ervan  gebruikt  als  basis  voor  het  gegenereerde  symbolenbestand.  U  kunt  van  deze
              functionaliteit gebruik maken om een symbolenbestand bij te werken zodat het in overeenstemming is
              met een nieuwere toeleveraarsversie van uw bibliotheek.

       -t     Schrijf het symbolenbestand in sjabloonmodus eerder dan in  de  indeling  die  compatibel  is  met
              deb-symbols(5).  Het  grootste verschil is dat in de sjabloonmodus symboolnamen en tags geschreven
              worden in hun originele vorm in tegenstelling tot in de  compatibele  modus  waarin  de  verwerkte
              symboolnamen  ontdaan  van  hun tags gebruikt worden. Daarenboven kunnen bij het schrijven van een
              standaard deb-symbols(5)-bestand sommige symbolen weggelaten worden (overeenkomstig de regels voor
              het  verwerken  van  tags),  terwijl  in  een   symbolenbestandsjabloon   steeds   alle   symbolen
              neergeschreven worden.

       -c[0-4]
              Definieer   de   controles   die   moeten  gebeuren  bij  het  vergelijken  van  het  gegenereerde
              symbolenbestand met het sjabloonbestand dat  als  vertrekpunt  gebruikt  werd.  Standaard  is  dat
              volgens niveau 1. Het verhogen van het niveau leidt tot meer controles, terwijl alle controles van
              lagere  niveaus behouden blijven. Niveau 0 leidt nooit tot een mislukking. Niveau 1 mislukt als er
              symbolen verdwenen zijn. Niveau 2 geeft een mislukking als nieuwe symbolen geïntroduceerd  werden.
              Niveau  3  mislukt  als  er  bibliotheken verdwenen zijn. Niveau 4 geeft een mislukking als nieuwe
              bibliotheken geïntroduceerd werden.

              Deze waarde kan vervangen worden door de omgevingsvariabele DPKG_GENSYMBOLS_CHECK_LEVEL.

       -q     Gedraag u rustig en genereer nooit  een  diff  (een  overzicht  van  de  verschillen)  tussen  het
              gegenereerde symbolenbestand en het sjabloonbestand dat als vertrekpunt gebruikt werd en toon geen
              enkele  waarschuwing in verband met nieuwe/verloren bibliotheken of nieuwe/verloren symbolen. Deze
              optie schakelt enkel de informatieve uitvoer uit, maar niet de controles zelf (zie de optie -c).

       -aarch Ga uit van arch als hostarchitectuur bij het verwerken van symbolenbestanden. Gebruik  deze  optie
              om  een  symbolenbestand  of  een  diff  (overzicht  van  de  verschillen)  voor  een willekeurige
              architectuur te genereren op voorwaarde dat de binaire bestanden ervan reeds voorhanden zijn.

       -d     Zet debug-modus aan. Talrijke berichten worden dan getoond om toe te lichten  wat  dpkg-gensymbols
              doet.

       -V     Schakel  de breedsprakige modus in. Het gegenereerde symbolenbestand bevat dan verouderde symbolen
              in de vorm van commentaar.  In  sjabloonmodus  worden  daarenboven  patroonsymbolen  gevolgd  door
              commentaar met daarin een opsomming van de echte symbolen die met het patroon overeenkwamen.

       -?, --help
              Toon info over het gebruik en sluit af.

       --version
              Toon de versie en sluit af.

OMGEVING

       DPKG_GENSYMBOLS_CHECK_LEVEL
              Overschrijft  het controleniveau van het commando, zelfs als het argument -c opgegeven werd aan de
              commandoregel  (merk   op   dat   dit   ingaat   tegen   de   algemeen   geldende   afspraak   dat
              commandoregel-argumenten voorrang hebben op omgevingsvariabelen).

       DPKG_COLORS
              Stelt de kleurmodus in (sinds dpkg 1.18.5). Waarden die momenteel gebruikt mogen worden zijn: auto
              (standaard), always en never.

       DPKG_NLS
              Indien  dit  ingesteld  is,  zal  het  gebruikt  worden  om  te  beslissen  over het activeren van
              moedertaalondersteuning, ook gekend als internationaliseringsondersteuning (of i18n)  (sinds  dpkg
              1.19.0). Geldige waarden zijn: 0 and 1 (standaard).

ZIE OOK

       https://people.redhat.com/drepper/symbol-versioning
       https://people.redhat.com/drepper/goodpractice.pdf
       https://people.redhat.com/drepper/dsohowto.pdf
       deb-symbols(5), dpkg-shlibdeps(1).

1.19.7                                             2022-05-25                                 dpkg-gensymbols(1)