Provided by: dpkg-dev_1.22.6ubuntu6.1_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
           Print the features enabled for a given area (since dpkg 1.16.2).  If the feature is handled (even  if
           only  on  some  architectures)  as a builtin default by the compiler, then a Builtin field is printed
           (since dpkg 1.21.14). See the "FEATURE AREAS" section for more details about the currently recognized
           areas.  Exits with 0 if the area is known otherwise exits with 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

       Feature  areas  are currently vendor specific, and the ones described below are only recognized on Debian
       and derivatives.

       Each area feature can be enabled  and  disabled  in  the  DEB_BUILD_OPTIONS  and  DEB_BUILD_MAINT_OPTIONS
       environment  variable's  area value with the ‘+’ and ‘-’ modifier.  Following the general syntax of these
       variables (described in dpkg-buildpackage(1)), multiple feature  areas  can  be  specified  separated  by
       spaces, where each get feature specifiers as mandatory parameters after an equal sign (‘=’).  The feature
       specifiers  are comma-separated and parsed from left to right, where the settings within the same feature
       specifier override previous ones, even if  the  feature  specifiers  are  split  across  multiple  space-
       separated feature area settings for the same area.

       For  example,  to enable the hardening “pie” feature and disable the “fortify” feature you can do this 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

       Multiple feature areas can be set:

           export DEB_BUILD_MAINT_OPTIONS = hardening=+pie abi=+lfs

       The override behavior applies as much to the all special feature, as to specific features,  which  should
       allow  for  composition.   Thus  to  enable  “lfs”  in  the abi area, and only “pie” and “fortify” in the
       hardening area, but “format” only when CONDITION is defined, this could be done with:

           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
           This  setting  (since  dpkg  1.22.0;  enabled by default except for i386, hurd-i386 and kfreebsd-i386
           since dpkg 1.22.5) enables 64-bit time_t support on 32-bit architectures where  their  ABI  does  not
           include it by default, by adding -D_TIME_BITS=64 to CPPFLAGS.  This setting automatically enables the
           lfs feature from the abi feature area.

           If the setting is enabled explicitly then it gets enabled on all architectures including i386 but not
           hurd-i386  nor  kfreebsd-i386 (where the kernel does not have time64 interfaces), ignoring the binary
           backwards compatibility default.

           It is also enabled by default by gcc on the armel, armhf, hppa, m68k, mips, mipsel, powerpc  and  sh4
           Debian   architectures,   where   disabling   the   feature   will  add  instead  -U_LARGEFILE_SOURCE
           -U_FILE_OFFSET_BITS -U_TIME_BITS to 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
           This    setting    (since    dpkg    1.22.3;   enabled   by   default   since   dpkg   1.22.6)   adds
           -Werror=implicit-function-declaration to 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
       Er  kunnen  verschillende  compilatieopties  (die  hierna  beschreven  worden)  gebruikt  worden  om  een
       resulterend  binair  bestand te optimaliseren (sinds dpkg 1.21.0). Opmerking: het inschakelen van al deze
       opties kan resulteren in niet-reproduceerbare ongewenste bijverschijnselen in het binair bestand.

       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
       Er kunnen verschillende compilatie-opties (die hierna beschreven worden) gebruikt worden om te helpen bij
       het gezond houden van een resulterend binair pakket op het vlak van geheugenvervuiling,  geheugenlekkage,
       geheugengebruik  na vrijgave, dataraces bij threads en bugs door ongedefinieerd gedrag. Noot: deze opties
       zouden niet gebruikt mogen worden voor een bouw voor productiedoeleinden, aangezien  ze  een  verminderde
       betrouwbaarheid bieden inzake codeconformiteit en de beveiliging en zelfs de functionaliteit reduceren.

       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.

       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.6                                             2024-07-17                                 dpkg-buildflags(1)