Provided by: dpkg-dev_1.22.11ubuntu1_all bug

NAAM

       dpkg-buildflags - geeft de bij pakketbouw te gebruiken bouwvlaggen terug

OVERZICHT

       dpkg-buildflags [optie...] [commando]

BESCHRIJVING

       dpkg-buildflags is gereedschap om de compilatievlaggen op te halen die tijdens het bouwen van Debian
       pakketten gebruikt moeten worden.

       De standaardvlaggen worden gedefinieerd door de leverancier, maar ze kunnen op verschillende manieren
       uitgebreid/vervangen worden:

       1.  voor het hele systeem met /etc/dpkg/buildflags.conf;

       2.  voor  de  huidige  gebruiker  met $XDG_CONFIG_HOME/dpkg/buildflags.conf, waarbij $XDG_CONFIG_HOME als
           standaardwaarde $HOME/.config heeft;

       3.  tijdelijk door de gebruiker met omgevingsvariabelen (zie het onderdeel "OMGEVING");

       4.  dynamisch door de pakketbeheerder met omgevingsvariabelen die ingesteld worden via debian/rules  (zie
           het onderdeel "OMGEVING").

       De configuratiebestanden kunnen vier types opdrachten bevatten:

       SET vlag waarde
           De vlag met vlag als naam overschrijven om ze de waarde waarde te geven.

       STRIP vlag waarde
           Van  de vlag met vlag als naam alle bouwvlaggen verwijderen die in waarde opgesomd worden. Sinds dpkg
           1.16.1.

       APPEND vlag waarde
           De vlag met vlag als naam uitbreiden door er de opties aan toe te  voegen  die  in  waarde  opgegeven
           worden.  Er  wordt een spatie geplaatst voor de waarde die toegevoegd wordt, indien de huidige waarde
           van de vlag niet leeg is.

       PREPEND vlag waarde
           De vlag met vlag als naam uitbreiden door er vooraan de opties  aan  toe  te  voegen  die  in  waarde
           opgegeven  worden.  Er  wordt  een  spatie geplaatst achter de waarde die toegevoegd wordt, indien de
           huidige waarde van de vlag niet leeg is. Sinds dpkg 1.16.1.

       De configuratiebestanden kunnen commentaar bevatten op regels die beginnen met een hekje  (#).  Ook  lege
       regels worden genegeerd.

       Dit programma werd geïntroduceerd in dpkg 1.15.7.

COMMANDO'S

       --dump
           Op  standaarduitvoer  alle compilatievlaggen en hun waarden tonen. Dit geeft per regel één vlag en de
           waarde ervan weer met daartussenin een gelijkheidsteken (“vlag=waarde”). Dit is de standaardactie.

       --list
           Een lijst weergeven van vlaggen die door de huidige leverancier ondersteund worden (één  per  regel).
           Zie het onderdeel "ONDERSTEUNDE VLAGGEN" voor meer informatie daarover.

       --status
           Eventuele  informatie laten zien welke nuttig kan zijn om het gedrag te verklaren van dpkg-buildflags
           (sinds  dpkg  1.16.5):  relevante  omgevingsvariabelen,  huidige  leverancier,  toestand   van   alle
           functievlaggen. Ook de resulterende compileervlaggen met hun oorsprong weergeven.

           Het  is  de  bedoeling  dat  dit uitgevoerd wordt vanuit debian/rules, zodat de bouwlog een duidelijk
           spoor van de gebruikte vlaggen kan bijhouden. Dit kan nuttig zijn om ermee verband houdende problemen
           te diagnosticeren.

       --export=indeling
           Op standaarduitvoer commando's weergeven die gebruikt kunnen  worden  om  alle  compilatievlaggen  te
           exporteren  ten behoeve van een specifiek gereedschap. Indien de waarde indeling niet opgegeven werd,
           wordt sh verondersteld. Enkel compilatievlaggen die met een hoofdletter  beginnen  worden  opgenomen.
           Van de andere wordt aangenomen dat ze niet bruikbaar zijn voor de omgeving. Ondersteunde indelingen:

           sh  Shell-opdrachten  om  alle  compilatievlaggen  in  de omgeving in te stellen en te exporteren. Er
               worden aanhalingstekens geplaatst rond de vlagwaarden waardoor de uitvoer gereed is om  door  een
               shell geëvalueerd te worden.

           cmdline
               Argumenten om door te geven aan de commandoregel van een bouwprogramma om al de compilatievlaggen
               te  gebruiken (sinds dpkg 1.17.0). De vlagwaarden worden volgens de shell-syntaxis tussen haakjes
               geplaatst.

           configure
               Dit is een verouderde alias voor cmdline.

           make
               Make-opdrachten om alle compilatievlaggen in de omgeving in  te  stellen  en  te  exporteren.  De
               uitvoer  kan  naar  een  Makefile-fragment  geschreven  worden  en geëvalueerd met behulp van een
               include-opdracht.

       --get vlag
           De waarde van de vlag op de standaarduitvoer weergeven. Sluit af met 0 bij een gekende vlag en  sluit
           anders af met 1.

       --origin vlag
           De  origine weergeven van de waarde die teruggegeven wordt door --get. Sluit af met 0 bij een gekende
           vlag en sluit anders af met 1. De origine kan één van de volgende waarden hebben:

           vendor
               de originele vlag die door de leverancier ingesteld werd, wordt teruggegeven;

           system
               de vlag werd ingesteld/gewijzigd door een systeemconfiguratie;

           user
               de vlag werd ingesteld/gewijzigd door een gebruikersspecifieke configuratie;

           env de vlag werd ingesteld/gewijzigd door een omgevingsspecifieke configuratie.

       --query
           Alle informatie tonen welke nuttig kan zijn om het gedrag van het  programma  te  verklaren:  huidige
           leverancier, relevante omgevingsvariabelen, functiegebieden, toestand van alle functievlaggen, of een
           functie  door  de  compiler  als  een ingebouwde standaard wordt behandeld (sinds dpkg 1.21.14) en de
           compileervlaggen met hun oorsprong (sinds dpkg 1.19.0).

           Bijvoorbeeld:

            Vendor: Debian
            Environment:
             DEB_CFLAGS_SET=-O0 -Wall

            Area: qa
            Features:
             bug=no
             canary=no
            Builtins:

            Area: hardening
            Features:
             pie=no
            Builtins:
             pie=yes

            Area: reproducible
            Features:
             timeless=no
            Builtins:

            Flag: CFLAGS
            Value: -O0 -Wall
            Origin: env

            Flag: CPPFLAGS
            Value: -D_FORTIFY_SOURCE=3
            Origin: vendor

       --query-features gebied
           De functies weergeven die voor een opgegeven gebied geactiveerd zijn  (sinds  dpkg  1.16.2).  Als  de
           functie  door  de  compiler  als  een ingebouwde standaard wordt behandeld (al is het maar op sommige
           architecturen), dan wordt een veld Builtin  weergegeven  (sinds  dpkg  1.21.14).  Zie  het  onderdeel
           FUNCTIEGEBIEDEN  voor  meer details over de gebieden die momenteel herkend worden. Sluit af met 0 als
           het gebied gekend is, anders met 1.

           De uitvoer is in RFC822-indeling met één sectie per functie. Bijvoorbeeld:

            Feature: pie
            Enabled: yes
            Builtin: yes

            Feature: stackprotector
            Enabled: yes

       --help
           Info tonen over het gebruik en afsluiten.

       --version
           De versie tonen en afsluiten.

ONDERSTEUNDE VLAGGEN

       ASFLAGS
           Opties voor de host-assembler. Standaardwaarde: leeg. Sinds dpkg 1.21.0.

       CFLAGS
           Opties voor de host-C-compiler. De door de leverancier ingestelde standaardwaarde bestaat uit  -g  en
           het   standaardniveau  van  optimalisatie  (gewoonlijk  -O2,  of  -O0  indien  de  omgevingsvariabele
           DEB_BUILD_OPTIONS noopt aangeeft).

       CPPFLAGS
           Opties voor de host-C-preprocessor. Standaardwaarde: leeg.

       CXXFLAGS
           Opties voor de host-C++ compiler. Hetzelfde als CFLAGS.

       OBJCFLAGS
           Opties voor de host-Objective C compiler. Hetzelfde als CFLAGS. Sinds dpkg 1.17.7.

       OBJCXXFLAGS
           Opties voor de host-Objective C++ compiler. Hetzelfde als CXXFLAGS. Sinds dpkg 1.17.7.

       DFLAGS
           Opties voor de host-D-compiler (ldc of gdc). Sinds dpkg 1.20.6.

       FFLAGS
           Opties voor de host-Fortran 77 compiler. Een subset van CFLAGS.

       FCFLAGS
           Opties voor de host-Fortran 9x compiler. Hetzelfde als FFLAGS. Sinds dpkg 1.17.7.

       LDFLAGS
           Opties die aan de host-compiler doorgegeven worden bij het  linken  van  uitvoerbare  programma's  en
           gedeelde  objecten  (indien  de  linker  rechtstreeks  aangeroepen wordt, dan moeten -Wl en , van die
           opties verwijderd worden). Standaardwaarde: leeg.

       ASFLAGS_FOR_BUILD
           Opties voor de bouwassembler. Standaardwaarde: leeg. Sinds dpkg 1.21.0.

       CFLAGS_FOR_BUILD
           Opties voor de bouw-C-compiler. De door de leverancier ingestelde standaardwaarde bestaat uit  -g  en
           het   standaardniveau  van  optimalisatie  (gewoonlijk  -O2,  of  -O0  indien  de  omgevingsvariabele
           DEB_BUILD_OPTIONS noopt aangeeft). Sinds dpkg 1.22.1.

       CPPFLAGS_FOR_BUILD
           Opties voor de bouw-C-preprocessor. Standaardwaarde: leeg. Sinds dpkg 1.22.1.

       CXXFLAGS_FOR_BUILD
           Opties voor de bouw-C++ compiler. Hetzelfde als CFLAGS_FOR_BUILD. Sinds dpkg 1.22.1.

       OBJCFLAGS_FOR_BUILD
           Opties voor de bouw-Objective C compiler. Hetzelfde als CFLAGS_FOR_BUILD. Sinds dpkg 1.22.1.

       OBJCXXFLAGS_FOR_BUILD
           Opties voor de bouw-Objective C++ compiler. Hetzelfde als CXXFLAGS_FOR_BUILD. Sinds dpkg 1.22.1.

       DFLAGS_FOR_BUILD
           Opties voor de bouw-D-compiler (ldc of gdc). Sinds dpkg 1.22.1.

       FFLAGS_FOR_BUILD
           Opties voor de bouw-Fortran 77 compiler. Een deelverzameling van CFLAGS_FOR_BUILD. Sinds dpkg 1.22.1.

       FCFLAGS_FOR_BUILD
           Opties voor de bouw-Fortran 9x compiler. Hetzelfde als FFLAGS_FOR_BUILD. Sinds dpkg 1.22.1.

       LDFLAGS_FOR_BUILD
           Opties die aan de bouw-compiler doorgegeven worden bij het  linken  van  uitvoerbare  programma's  of
           gedeelde  objecten  (indien  de  linker  rechtstreeks  aangeroepen wordt, dan moeten -Wl en , van die
           opties verwijderd worden). Standaardwaarde: leeg. Sinds dpkg 1.22.1.

       In de toekomst kunnen nog andere vlaggen toegevoegd worden als daar behoefte aan  ontstaat  (bijvoorbeeld
       om andere talen te ondersteunen).

FUNCTIEGEBIEDEN

       Functiegebieden  zijn  momenteel leverancier-specifiek, en degene die hieronder worden beschreven, worden
       alleen herkend op Debian en afgeleiden.

       Elke gebiedsfunctie kan worden in- en  uitgeschakeld  in  de  gebiedswaarde  van  de  omgevingsvariabelen
       DEB_BUILD_OPTIONS  en  DEB_BUILD_MAINT_OPTIONS  met het wijzigingselement '+' en '-'. Volgens de algemene
       syntaxis van deze variabelen (beschreven in dpkg-buildpackage(1)), kunnen meerdere functiegebieden worden
       gespecificeerd, gescheiden door  spaties,  waarbij  elkeen  functiespecificaties  krijgt  als  verplichte
       parameters  na een gelijkheidsteken ('='). De functiespecificaties zijn door komma's gescheiden en worden
       van links naar rechts verwerkt, waarbij de  instellingen  binnen  dezelfde  functiespecificatie  voorrang
       hebben  op  eerdere  instellingen,  zelfs  als  de  functiespecificaties zijn verdeeld over meerdere door
       spaties gescheiden functiegebiedsinstellingen voor hetzelfde gebied.

       Om bijvoorbeeld de functie “pie” van hardening in te schakelen en de functie “fortify” uit te  schakelen,
       kunt u dit doen in debian/rules:

           export DEB_BUILD_MAINT_OPTIONS = hardening=+pie,-fortify

       De   bijzondere   functie   all  (geldig  in  elk  gebied)  kan  gebruikt  worden  om  gelijktijdig  alle
       gebiedsfunctionaliteit te activeren of uit te schakelen. Alles uitschakelen in het  gebied  hardening  en
       enkel “format” en “fortify” activeren kunt u dus doen met:

           export DEB_BUILD_MAINT_OPTIONS = hardening=-all,+format,+fortify

       Er kunnen meerdere functiegebieden ingesteld worden:

           export DEB_BUILD_MAINT_OPTIONS = hardening=+pie abi=+lfs

       Het  voorrangsgedrag  is  zowel  van  toepassing  op  de speciale functie all als op specifieke functies,
       hetgeen compositie mogelijk moet maken. Dus, om “lfs” in te schakelen in het gebied gebied abi, en  enkel
       “pie”  en  “fortify” in het gebied hardening, maar “format” alleen wanneer CONDITION is gedefinieerd, kan
       men dit als volgt doen:

           export DEB_BUILD_MAINT_OPTIONS = hardening=-all,+pie,+format abi=+lfs
           …
           DEB_BUILD_MAINT_OPTIONS += hardening=+fortify
           ifdef CONDITION
           DEB_BUILD_MAINT_OPTIONS += hardening=-format
           endif

   abi
       Er kunnen verschillende compilatieopties (die hierna beschreven worden) gebruikt worden  om  functies  te
       activeren  die  de ABI van een pakket kunnen veranderen, maar om redenen van terugwaartse compatibiliteit
       niet standaard geactiveerd kunnen worden tenzij gecoördineerd of individueel gecontroleerd.

       lfs Deze instelling (sinds dpkg 1.22.0; standaard uitgezet) activeert ondersteuning voor grote  bestanden
           (Large  File Support) op 32-bits architecturen waarvan de ABI standaard geen LFS-ondersteuning biedt,
           door -D_LARGEFILE_SOURCE -D_FILE_OFFSET_BITS=64 toe te voegen aan CPPFLAGS.

           Wanneer deze functie is ingeschakeld, wordt de waarde  van  dezelfde  functie  in  het  functiegebied
           future overschreven.

       time64
           Deze  instelling  (sinds  dpkg  1.22.0;  standaard  ingeschakeld,  behalve  voor  i386,  hurd-i386 en
           kfreebsd-i386 sinds dpkg 1.22.5) activeert ondersteuning voor 64-bits time_t op 32-bits architecturen
           waar hun ABI dit standaard niet  bevat,  door  -D_TIME_BITS=64  toe  te  voegen  aan  CPPFLAGS.  Deze
           instelling schakelt automatisch de functie lfs uit het functiegebied abi in.

           Als  de  instelling  expliciet  wordt  ingeschakeld,  wordt  deze ingeschakeld op alle architecturen,
           inclusief i386, maar niet op hurd-i386  of  kfreebsd-i386  (waar  de  kernel  geen  time64-interfaces
           heeft), waarbij de standaard voor binaire achterwaartse compatibiliteit wordt genegeerd.

           Deze  wordt  ook standaard ingeschakeld door gcc op de Debian architecturen armel, armhf, hppa, m68k,
           mips, mipsel, powerpc en sh4, waar het uitschakelen  van  de  functie  dan  weer  -U_LARGEFILE_SOURCE
           -U_FILE_OFFSET_BITS -U_TIME_BITS toevoegt aan CPPFLAGS.

   future
       Er  kunnen  verschillende  compilatieopties (die hierna beschreven worden) gebruikt worden om functies te
       activeren die standaard geactiveerd zouden moeten zijn, maar dat niet zijn om  redenen  van  terugwaartse
       compatibiliteit.

       lfs Deze  instelling  (sinds dpkg 1.19.0; standaard uitgeschakeld) is nu een alias voor de functie lfs in
           het gebied abi. Gebruik die in plaats daarvan.  De  functie  uit  het  abi-gebied  overschrijft  deze
           instelling.

   kwaliteitsbevordering
       Er  kunnen  verschillende compilatieopties (die hierna beschreven worden) gebruikt worden om problemen in
       de broncode of het bouwsysteem te helpen detecteren.

       bug-implicit-func
           Deze  instelling  (sinds   dpkg   1.22.3;   standaard   ingeschakeld   sinds   dpkg   1.22.6)   voegt
           -Werror=implicit-function-declaration toe aan CFLAGS.

       bug Deze  instelling  (sinds dpkg 1.17.4; standaard uitgeschakeld) voegt alle waarschuwingsopties toe die
           op een betrouwbare wijze problematische broncode opsporen. De waarschuwingen zijn  fataal.  De  enige
           vlaggen  die  momenteel ondersteund worden zijn CFLAGS en CXXFLAGS waarbij de vlaggen ingesteld staan
           op     -Werror=array-bounds,     -Werror=clobbered,     -Werror=implicit-function-declaration      en
           -Werror=volatile-register-var.

           Deze  functionaliteit  verwerkt  -Werror=implicit-function-declaration  via  de  functionaliteit bug-
           implicit-func, als die niet is gespecificeerd.

       canary
           Deze instelling (sinds dpkg 1.17.14; standaard uitgeschakeld) voegt loze kanarievogelopties  toe  aan
           de  bouwvlaggen,  zodat  in de bouwlogs nagekeken kan worden hoe de bouwvlaggen doorgegeven worden en
           zodat het eventueel ontbreken van normale bouwvlaginstellingen ontdekt kan worden. Momenteel zijn  de
           enige  ondersteunde vlaggen CPPFLAGS, CFLAGS, OBJCFLAGS, CXXFLAGS en OBJCXXFLAGS, waarbij die vlaggen
           als -D__DEB_CANARY_vlag_willekeurige-id__  ingesteld  worden,  en  LDFLAGS  dat  ingesteld  wordt  op
           -Wl,-z,deb-canary-willekeurige-id.

   optimalisering
       Several compile-time options (detailed below) can be used to help optimize a resulting binary (since dpkg
       1.21.0).  Note: Enabling all these options can result in unreproducible binary artifacts.

       lto Deze  instelling  (sinds  dpkg  1.21.0;  standaard uitgeschakeld) zet Link Time Optimization aan door
           -flto=auto -ffat-lto-objects toe te voegen aan  CFLAGS,  CXXFLAGS,  OBJCFLAGS,  OBJCXXFLAGS,  FFLAGS,
           FCFLAGS of LDFLAGS.

   sanering
       Several  compile-time  options  (detailed  below) can be used to help sanitize a resulting binary against
       memory corruptions, memory leaks, use after free, threading  data  races  and  undefined  behavior  bugs.
       Note:  These  options  should  not  be  used  for  production  builds  as they can reduce reliability for
       conformant code, reduce security or even functionality.

       address
           Deze instelling (sinds dpkg 1.18.0; standaard uitgeschakeld) voegt -fsanitize=address toe aan LDFLAGS
           en -fsanitize=address -fno-omit-frame-pointer aan CFLAGS en aan CXXFLAGS.

       thread
           Deze instelling (sinds dpkg 1.18.0; standaard uitgeschakeld) voegt -fsanitize=thread toe aan  CFLAGS,
           CXXFLAGS en LDFLAGS.

       leak
           Deze  instelling  (sinds dpkg 1.18.0; standaard uitgeschakeld) voegt -fsanitize=leak toe aan LDFLAGS.
           Ze wordt automatisch uitgeschakeld als ofwel de address-functionaliteit of de  thread-functionaliteit
           geactiveerd is, aangezien die dit impliceren.

       undefined
           Deze  instelling  (sinds  dpkg  1.18.0;  standaard  uitgeschakeld) voegt -fsanitize=undefined toe aan
           CFLAGS, CXXFLAGS en LDFLAGS.

   kwetsbaarheidsreductie
       Er kunnen verschillende compilatie-opties (die hierna beschreven worden) gebruikt worden om te helpen bij
       het versterken van een resulterend binair pakket  tegen  geheugenvervuilingsaanvallen  of  om  bijkomende
       waarschuwingsberichten  te  geven  tijdens  het  compileren. Behalve wanneer hierna anders aangegeven is,
       worden deze opties standaard geactiveerd voor architecturen die ze ondersteunen.

       format
           Deze instelling (sinds dpkg 1.16.1; standaard geactiveerd) voegt -Wformat -Werror=format-security toe
           aan CFLAGS, CXXFLAGS, OBJCFLAGS en OBJCXXFLAGS. Dit zal waarschuwingen geven bij verkeerd gebruik van
           indelingstekenreeksen en zal mislukken als  indelingsfuncties  gebruikt  worden  op  een  manier  die
           mogelijke veiligheidsproblemen tot gevolg kunnen hebben. Momenteel geeft dit een waarschuwing als een
           printf-functie   of  een  scanf-functie  aangeroepen  wordt  met  een  indelingstekenreeks  die  geen
           letterlijke tekenreeks is en er ook geen indelingsargumenten opgegeven werden, zoals bij printf(foo);
           in plaats van printf("%s",  foo);.  Dit  kan  een  veiligheidslek  zijn  als  de  indelingstekenreeks
           afkomstig was van onbetrouwbare invoer en ‘%n’ bevat.

       fortify
           Deze  instelling  (sinds  dpkg  1.16.1;  standaard  geactiveerd)  voegt  -D_FORTIFY_SOURCE=3  toe aan
           CPPFLAGS. Tijdens het produceren  van  de  code  heeft  de  compiler  een  heleboel  informatie  over
           buffergroottes  (waar  mogelijk),  en  tracht  een  functieaanroep  met  een onveilige ongelimiteerde
           buffergrootte te vervangen door een functieaanroep met een gelimiteerde buffergrootte. Dit is in  het
           bijzonder  nuttig  bij  oude  en  slecht  geschreven  code.  Daarnaast  wordt het gebruik in het voor
           schrijven toegankelijk geheugen van indelingstekenreeksen die ‘%n’ bevatten, geblokkeerd. Indien  een
           toepassing  op  een  dergelijke  indelingstekenreeks  steunt,  zal het er een alternatief voor moeten
           gebruiken.

           Merk op dat de code ook met -O1 of hoger gecompileerd moet worden opdat deze optie effect zou hebben.
           Indien de omgevingsvariabele DEB_BUILD_OPTIONS noopt bevat,  dan  wordt  ondersteuning  voor  fortify
           uitgeschakeld.  Dit  is  te  wijten  aan  nieuwe waarschuwingen die gegeven worden door glibc 2.16 en
           hoger.

       stackprotector
           Deze instelling (sinds dpkg 1.16.1; standaard  geactiveerd  als  stackprotectorstrong  niet  gebruikt
           wordt)  voegt  -fstack-protector  --param=ssp-buffer-size=4  toe  aan  CFLAGS,  CXXFLAGS,  OBJCFLAGS,
           OBJCXXFLAGS, FFLAGS en FCFLAGS. Dit voegt beveiligingscontroles tegen het overschrijven van de  stack
           toe.  Dit  maakt  dat  bij veel mogelijke code-injectieaanvallen afgebroken wordt. In het beste geval
           wordt op die manier een kwetsbaarheid voor code-injectie omgebogen tot een denial-of-service  (dienst
           niet beschikbaar) of een fictief probleem (afhankelijk van de toepassing).

           Deze  functionaliteit  vereist  het  linken  van  de  code  met  glibc  (of  een andere aanbieder van
           __stack_chk_fail)  en  moet  dus  uitgeschakeld  worden  als  er  gebouwd  wordt  met  -nostdlib   of
           -ffreestanding of iets gelijkaardigs.

       stackprotectorstrong
           Deze  instelling  (sinds  dpkg 1.17.11; standaard geactiveerd) voegt -fstack-protector-strong toe aan
           CFLAGS, CXXFLAGS, OBJCFLAGS, OBJCXXFLAGS,  FFLAGS  en  FCFLAGS.  Dit  is  een  sterkere  variant  van
           stackprotector, maar zonder noemenswaardig prestatieverlies.

           Het uitzetten van stackprotector schakelt ook deze functionaliteit uit.

           Deze  functionaliteit stelt dezelfde vereisten als stackprotector en heeft daarenboven ook gcc 4.9 of
           een recentere versie nodig.

       stackclash
           Deze instelling (sinds dpkg 1.22.0; standaard geactiveerd) voegt op  amd64,  arm64,  armhf  en  armel
           -fstack-protector-strong toe aan CFLAGS, CXXFLAGS, OBJCFLAGS, OBJCXXFLAGS, FFLAGS en FCFLAGS. Hiermee
           wordt code toegevoegd om aanvallen van het type stack-clash te voorkomen.

       branch
           Deze  instelling  (sinds  dpkg  1.22.0; standaard geactiveerd) voegt -fstack-protector-strong toe aan
           CFLAGS, CXXFLAGS, OBJCFLAGS, OBJCXXFLAGS,  FFLAGS  en  FCFLAGS.  Dit  voegt  takbeveiliging  toe  aan
           indirecte  aanroepen,  sprongen  en  retouren  om  te  controleren  of  deze  geldig zijn tijdens het
           uitvoeren.

       relro
           Deze instelling (sinds dpkg 1.16.1;  standaard  geactiveerd)  voegt  -Wl,-z,relro  toe  aan  LDFLAGS.
           Tijdens  het  laden  van het programma moet de linker in verschillende ELF-geheugensecties schrijven.
           Dit zet voor de programmalader een vlag  zodat  die  deze  secties  alleen-lezen  maakt  alvorens  de
           controle over te dragen aan het programma. Het meest noemenswaardige effect is dat dit aanvallen door
           het  overschrijven  van de Global Offset Table (GOT) voorkomt. Indien deze optie uitgeschakeld wordt,
           wordt ook bindnow uitgezet.

       bindnow
           Deze instelling (sinds dpkg 1.16.1;  standaard  uitgeschakeld)  voegt  -Wl,-z,now  toe  aan  LDFLAGS.
           Tijdens  het  laden  van het programma worden alle dynamische symbolen omgezet, waardoor de volledige
           PLT (Procedure Linkage Table)  als  alleen  lezen  gemarkeerd  kan  worden  (ten  gevolge  van  relro
           hiervoor). Deze optie kan niet aangezet worden als relro niet geactiveerd is.

       pie Deze instelling (sinds dpkg 1.16.1; zonder algemene standaardinstelling sinds dpkg 1.18.23, aangezien
           het  nu  standaard  geactiveerd wordt door gcc op de Debian-architecturen amd64, arm64, armel, armhf,
           hurd-i386, i386, kfreebsd-amd64, kfreebsd-i386, mips,  mipsel,  mips64el,  powerpc,  ppc64,  ppc64el,
           riscv64,  s390x,  sparc  en  sparc64) voegt zo nodig de vereiste opties toe om PIE te activeren of te
           deactiveren via gcc specs-bestanden, afhankelijk van het feit of gcc op die architectuur  de  vlaggen
           zelf  injecteert  of niet. Indien de instelling geactiveerd is en gcc de vlaggen injecteert, voegt ze
           niets toe. Indien de instelling geactiveerd is en gcc de vlaggen niet injecteert, voegt ze -fPIE  toe
           (via  /usr/share/dpkg/pie-compiler.specs)  aan  CFLAGS,  CXXFLAGS,  OBJCFLAGS, OBJCXXFLAGS, FFLAGS en
           FCFLAGS, en -fPIE  -pie  (via  /usr/share/dpkg/pie-link.specs)  aan  LDFLAGS.  Indien  de  instelling
           gedeactiveerd    is    en    gcc    de    vlaggen    injecteert,   voegt   ze   -fno-PIE   toe   (via
           /usr/share/dpkg/no-pie-compile.specs)  aan  CFLAGS,  CXXFLAGS,  OBJCFLAGS,  OBJCXXFLAGS,  FFLAGS   en
           FCFLAGS, en -fno-PIE -no-pie (via /usr/share/dpkg/no-pie-link.specs) aan LDFLAGS.

           Position  Independent  Executable  (PIE  -  positie-onafhankelijke programma) is nodig om voordeel te
           halen uit Address Space Layout Randomization  (ASLR  -  de  adresruimte  rangschikken  in  toevallige
           volgorde),  hetgeen door sommige kernelversies ondersteund wordt. Hoewel ASLR reeds voor datagebieden
           in  de  stack  en  de  heap  opgelegd  kan  worden  (brk  and  mmap),  moeten  de  codegebieden   als
           positieonafhankelijk  gecompileerd worden. Gedeelde bibliotheken doen dit reeds (-fPIC), waardoor zij
           automatisch ASLR krijgen, maar binaire .text-gebieden moeten  als  PIE  gebouwd  worden  om  ASLR  te
           krijgen.  Als  dit  gebeurt,  worden  aanvallen  van  het  type ROP (Return Oriented Programming - op
           terugkeerwaarde georiënteerd programmeren) veel moeilijker aangezien er geen statische locaties  meer
           zijn die bij een aanval van geheugenvervuiling als springplank gebruikt kunnen worden.

           PIE  is niet compatibel met -fPIC, dus over het algemeen moet men voorzichtig zijn bij het bouwen van
           gedeelde objecten. Maar aangezien de PIE-vlaggen die meegegeven worden geïnjecteerd worden via specs-
           bestanden van gcc, zou het altijd veilig moeten zijn om ze onvoorwaardelijk in  te  stellen  ongeacht
           het objecttype dat gecompileerd of gelinkt wordt.

           Statische  bibliotheken kunnen door programma's of door andere gedeelde bibliotheken gebruikt worden.
           Afhankelijk van de  gebruikte  vlaggen  bij  het  compileren  van  alle  objecten  in  een  statische
           bibliotheek, zullen deze bibliotheken door verschillende reeksen objecten gebruikt kunnen worden:

           geen
               Kan niet gelinkt worden aan een PIE-programma, noch aan een gedeelde bibliotheek.

           -fPIE
               Kan gelinkt worden aan elk programma, maar niet aan een gedeelde bibliotheek (aanbevolen).

           -fPIC
               Kan gelinkt worden aan elk programma en elke gedeelde bibliotheek.

           Indien  er  een  behoefte  bestaat  om deze vlaggen manueel in te stellen en de gcc specs-injectie te
           overbruggen, moet u rekening houden  met  verschillende  zaken.  Het  onvoorwaardelijk  en  expliciet
           doorgeven van -fPIE, -fpie of -pie aan een bouwsysteem dat libtool gebruikt, is veilig aangezien deze
           vlaggen  weggelaten worden bij het bouwen van gedeelde bibliotheken. Bij projecten waarin daarentegen
           zowel programma's als gedeelde bibliotheken gebouwd worden, moet u ervoor zorgen dat bij  het  bouwen
           van  de  gedeelde bibliotheken -fPIC steeds als laatste doorgegeven wordt (waardoor het een eventuele
           voorafgaande -PIE opheft) aan compilatievlaggen zoals CFLAGS en dat -shared als  laatste  doorgegeven
           wordt (waardoor het een eventuele voorafgaande -pie opheft) aan linkvlaggen zoals LDFLAGS. Opmerking:
           dit is niet nodig met het standaard specs-mechanisme van gcc.

           Aangezien  PIE  via  een  algemeen  register  geïmplementeerd  wordt,  kunnen  bovendien  bij sommige
           architecturen (maar niet meer bij i386 sinds de optimalisaties  die  in  gcc  >=  5  toegepast  zijn)
           prestatieverminderingen   tot   15%   optreden  bij  zeer  zware  belasting  met  tekstsegmenten  van
           toepassingen.  De  meeste  belastingen  hebben  minder  dan  1%  prestatievermindering  tot   gevolg.
           Architecturen  met  meer  algemene  registers  (bijv. amd64) vertonen niet zo een hoge terugval in de
           ergste gevallen.

   reproduceerbaarheid
       De hierna behandelde compilatieopties kunnen gebruikt worden  om  de  bouwreproduceerbaarheid  te  helpen
       verbeteren  of om bijkomende waarschuwingsberichten af te leveren tijdens het compileren. Behalve wanneer
       het hierna aangegeven  wordt,  worden  deze  opties  standaard  geactiveerd  voor  architecturen  die  ze
       ondersteunen.

       timeless
           Deze  instelling  (sinds dpkg 1.17.14; standaard geactiveerd) voegt -Wdate-time toe bij CPPFLAGS. Dit
           leidt tot waarschuwingen als de macros __TIME__, __DATE__ en __TIMESTAMP__ gebruikt worden.

       fixfilepath
           Deze instelling (sinds dpkg 1.19.1; standaard geactiveerd)  voegt  -ffile-prefix-map=BUILDPATH=.  toe
           aan CFLAGS, CXXFLAGS, OBJCFLAGS, OBJCXXFLAGS, FFLAGS en FCFLAGS, waarbij BUILDPATH ingesteld wordt op
           de  basismap  van het pakket dat gebouwd wordt. Dit heeft als effect dat het bouwpad verwijderd wordt
           van elk gegenereerd bestand.

           Indien zowel fixdebugpath als fixfilepath ingesteld zijn, heeft deze laatste  optie  voorrang,  omdat
           het een superset is van de eerste.

           Opmerking: Als het bouwproces de bouwvlaggen in de resulterende gebouwde objecten vastlegt, wordt het
           pakket  niet  reproduceerbaar.  En  hoewel  het  uitschakelen  van  deze  optie sommige objecten weer
           reproduceerbaar zou kunnen maken, zou dit ook het uitschakelen van  fixdebugpath  vereisen,  waardoor
           alle  gegenereerde  debug-symbolenobjecten  niet  reproduceerbaar  zouden  kunnen  worden.  De ideale
           oplossing is om te stoppen met het vastleggen van bouwvlaggen.

       fixdebugpath
           Deze instelling (sinds dpkg 1.18.5; standaard geactiveerd) voegt  -fdebug-prefix-map=BUILDPATH=.  toe
           aan CFLAGS, CXXFLAGS, OBJCFLAGS, OBJCXXFLAGS, FFLAGS en FCFLAGS, waarbij BUILDPATH ingesteld wordt op
           de  basismap  van het pakket dat gebouwd wordt. Dit heeft als effect dat het bouwpad verwijderd wordt
           van eventueel gegenereerde debug-symbolen.

           Opmerking: deze functie heeft vergelijkbare reproduceerbare eigenschappen als fixfilepath.

OMGEVING

       Er zijn twee sets omgevingsvariabelen die dezelfde operaties uitvoeren. De eerste (DEB_vlag_operatie) zou
       nooit gebruikt mogen worden binnen debian/rules.  Die  is  bedoeld  voor  eventuele  gebruikers  die  het
       bronpakket opnieuw willen bouwen met andere bouwvlaggen. De tweede set (DEB_vlag_MAINT_operatie) zou door
       pakketbeheerders  enkel  in  debian/rules  gebruikt  moeten  worden om de resulterende bouwvlaggen aan te
       passen.

       DEB_vlag_SET
       DEB_vlag_MAINT_SET (sinds dpkg 1.16.1)
           Deze variabele kan gebruikt worden om de teruggegeven waarde  voor  de  opgegeven  vlag  vlag  af  te
           dwingen.

       DEB_vlag_STRIP (sinds dpkg 1.16.1)
       DEB_vlag_MAINT_STRIP (sinds dpkg 1.16.1)
           Deze  variabele  kan  gebruikt  worden om in een lijst met witruimte als scheidingsteken opties op te
           geven die weggehaald zullen worden uit de set vlaggen die teruggegeven wordt voor de opgegeven vlag.

       DEB_vlag_APPEND
       DEB_vlag_MAINT_APPEND (sinds dpkg 1.16.1)
           Deze variabele kan gebruikt worden om bijkomende opties toe te voegen aan de waarde die  teruggegeven
           wordt voor de opgegeven vlag.

       DEB_vlag_PREPEND (sinds dpkg 1.16.1)
       DEB_vlag_MAINT_PREPEND (sinds dpkg 1.16.1)
           Deze  variabele  kan  gebruikt  worden  om  vooraan bijkomende opties toe te voegen aan de waarde die
           teruggegeven wordt voor de opgegeven vlag.

       DEB_BUILD_OPTIONS
       DEB_BUILD_MAINT_OPTIONS (sinds dpkg 1.16.1)
           Deze variabelen kunnen door een gebruiker of een beheerder gebruikt worden om diverse gebiedsfuncties
           die bouwvlaggen beïnvloeden, te activeren of uit  te  zetten.  De  variabele  DEB_BUILD_MAINT_OPTIONS
           vervangt  eventuele  instellingen in de functionaliteitsgebieden DEB_BUILD_OPTIONS. Zie het onderdeel
           "FUNCTIONALITEITSGEBIEDEN" voor de details.

       DEB_VENDOR
           Deze instelling definieert de huidige leverancier. Indien zij niet ingesteld is, zal  gezocht  worden
           naar de huidige leverancier door te gaan lezen in /etc/dpkg/origins/default.

       DEB_BUILD_PATH
           Deze  variabele  stelt  in  welk bouwpad (sinds dpkg 1.18.8) gebruikt moet worden bij functionaliteit
           zoals fixdebugpath waardoor die gesuperviseerd kan worden door het aanroepende  programma.  Momenteel
           is deze variabele Debian- en derivaat-specifiek.

       DEB_HOST_ARCH
           Sets  the  host  architecture.   This  affects  the  build flags that are emitted, which is typically
           relevant when cross-compiling, where DEB_HOST_ARCH is different to DEB_BUILD_ARCH.

       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).

BESTANDEN

   Configuratiebestanden
       /etc/dpkg/buildflags.conf
           Configuratiebestand dat voor het hele systeem geldt.

       $XDG_CONFIG_HOME/dpkg/buildflags.conf of
       $HOME/.config/dpkg/buildflags.conf
           Configuratiebestand dat gebruikersafhankelijk is.

   Ondersteuning bij het maken van een pakket
       /usr/share/dpkg/buildflags.mk
           Makefile-fragment  dat  alle vlaggen die door dpkg-buildflags ondersteund worden, laadt in variabelen
           (en eventueel exporteert) (sinds dpkg 1.16.1).

VOORBEELDEN

       Om in een Makefile bouwvlaggen door te geven aan een bouwcommando:

        $(MAKE) $(shell dpkg-buildflags --export=cmdline)

        ./configure $(shell dpkg-buildflags --export=cmdline)

       Om in een shell-script of shell-fragment bouwvlaggen in te  stellen,  kan  eval  gebruikt  worden  om  de
       uitvoer te interpreteren en de vlaggen in de omgeving te exporteren:

        eval "$(dpkg-buildflags --export=sh)" && make

       of om de positieparameters in te stellen die aan een commando doorgegeven moeten worden:

        eval "set -- $(dpkg-buildflags --export=cmdline)"
        for dir in a b c; do (cd $dir && ./configure "$@" && make); done

   Het gebruik in debian/rules
       Om  de  benodigde bouwvlaggen te bekomen die aan het bouwsysteem doorgegeven moeten worden, moet u vanuit
       het bestand debian/rules dpkg-buildflags aanroepen of buildflags.mk invoegen. Merk op dat oudere  versies
       van  dpkg-buildpackage (voor dpkg 1.16.1) deze vlaggen automatisch exporteerden. U zou hierop echter niet
       mogen betrouwen, aangezien dit het handmatig aanroepen van debian/rules defect maakt.

       Voor pakketten met een autoconf-achtig bouwsysteem, kunt u de relevante opties rechtstreeks doorgeven aan
       configure of make(1), zoals hiervoor geïllustreerd werd.

       Voor andere bouwsystemen, of indien u een meer fijnmazige controle nodig heeft over  welke  vlaggen  waar
       doorgegeven  worden,  kunt  u --get gebruiken. Of in de plaats daarvan kunt u buildflags.mk invoegen, dat
       zorgt voor het aanroepen van dpkg-buildflags en het opslaan van de bouwvlaggen in variabelen voor make.

       Indien u alle bouwvlaggen naar de omgeving wenst te exporteren (waar  ze  door  uw  bouwsysteem  opgepikt
       kunnen worden):

        DPKG_EXPORT_BUILDFLAGS = 1
        include /usr/share/dpkg/buildflags.mk

       Als  u  bijkomende  controle wenst over wat geëxporteerd wordt, kunt u de variabelen handmatig exporteren
       (aangezien er standaard geen enkele geëxporteerd wordt):

        include /usr/share/dpkg/buildflags.mk
        export CPPFLAGS CFLAGS LDFLAGS

       En u kunt de vlaggen natuurlijk ook handmatig doorgeven aan commando's:

        include /usr/share/dpkg/buildflags.mk
        build-arch:
               $(CC) -o hello hello.c $(CPPFLAGS) $(CFLAGS) $(LDFLAGS)

1.22.11                                            2024-08-05                                 dpkg-buildflags(1)