Provided by: dpkg-dev_1.22.6ubuntu6_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)