summaryrefslogtreecommitdiffstats
path: root/man/nl/dpkg-buildflags.man
diff options
context:
space:
mode:
Diffstat (limited to 'man/nl/dpkg-buildflags.man')
-rw-r--r--man/nl/dpkg-buildflags.man677
1 files changed, 677 insertions, 0 deletions
diff --git a/man/nl/dpkg-buildflags.man b/man/nl/dpkg-buildflags.man
new file mode 100644
index 0000000..a06f298
--- /dev/null
+++ b/man/nl/dpkg-buildflags.man
@@ -0,0 +1,677 @@
+.\" dpkg manual page - dpkg-buildflags(1)
+.\"
+.\" Copyright © 2010-2011 Raphaël Hertzog <hertzog@debian.org>
+.\" Copyright © 2011 Kees Cook <kees@debian.org>
+.\" Copyright © 2011-2015 Guillem Jover <guillem@debian.org>
+.\"
+.\" This is free software; you can redistribute it and/or modify
+.\" it under the terms of the GNU General Public License as published by
+.\" the Free Software Foundation; either version 2 of the License, or
+.\" (at your option) any later version.
+.\"
+.\" This is distributed in the hope that it will be useful,
+.\" but WITHOUT ANY WARRANTY; without even the implied warranty of
+.\" MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+.\" GNU General Public License for more details.
+.\"
+.\" You should have received a copy of the GNU General Public License
+.\" along with this program. If not, see <https://www.gnu.org/licenses/>.
+.
+.\"*******************************************************************
+.\"
+.\" This file was generated with po4a. Translate the source file.
+.\"
+.\"*******************************************************************
+.TH dpkg\-buildflags 1 %RELEASE_DATE% %VERSION% dpkg\-suite
+.nh
+.SH NAAM
+dpkg\-buildflags \- geeft de bij pakketbouw te gebruiken bouwvlaggen terug
+.
+.SH OVERZICHT
+\fBdpkg\-buildflags\fP [\fIoptie\fP...] [\fIcommando\fP]
+.
+.SH BESCHRIJVING
+\fBdpkg\-buildflags\fP 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:
+.IP 1.
+voor het hele systeem met \fB%PKGCONFDIR%/buildflags.conf\fP;
+.IP 2.
+voor de huidige gebruiker met \fB$XDG_CONFIG_HOME/dpkg/buildflags.conf\fP,
+waarbij \fB$XDG_CONFIG_HOME\fP als standaardwaarde \fB$HOME/.config\fP heeft;
+.IP 3.
+tijdelijk door de gebruiker met omgevingsvariabelen (zie het onderdeel
+\fBOMGEVING\fP);
+.IP 4.
+dynamisch door de pakketonderhouder met omgevingsvariabelen die ingesteld
+worden via \fBdebian/rules\fP (zie het onderdeel \fBOMGEVING\fP).
+.P
+De configuratiebestanden kunnen vier types opdrachten bevatten:
+.TP
+\fBSET\fP\fI vlag waarde\fP
+Vervang de waarde van de vlag die \fIvlag\fP als naam heeft in waarde
+\fIwaarde\fP.
+.TP
+\fBSTRIP\fP\fI vlag waarde\fP
+Verwijder van de vlag die \fIvlag\fP als naam heeft alle bouwvlaggen die in
+\fIwaarde\fP opgesomd worden.
+.TP
+\fBAPPEND\fP\fI vlag waarde\fP
+Breid de vlag die \fIvlag\fP als naam heeft uit door er de opties aan toe te
+voegen die in \fIwaarde\fP opgegeven worden. Er wordt een spatie geplaatst voor
+de waarde die toegevoegd wordt, indien de huidige waarde van de vlag niet
+leeg is.
+.TP
+\fBPREPEND\fP\fI vlag waarde\fP
+Breid de vlag die \fIvlag\fP als naam heeft uit door er vooraan de opties aan
+toe te voegen die in \fIwaarde\fP opgegeven worden. Er wordt een spatie
+geplaatst achter de waarde die toegevoegd wordt, indien de huidige waarde
+van de vlag niet leeg is.
+.P
+De configuratiebestanden kunnen commentaar bevatten op regels die beginnen
+met een hekje (#). Ook lege regels worden genegeerd.
+.SH COMMANDO'S
+.TP
+\fB\-\-dump\fP
+Laat op standaarduitvoer alle compilatievlaggen en hun waarden zien. Dit
+geeft per regel één vlag en de waarde ervan weer met daartussenin een
+gelijkheidsteken (“\fIvlag\fP=\fIwaarde\fP”). Dit is de standaardactie.
+.TP
+\fB\-\-list\fP
+Geeft een lijst weer van vlaggen die door de huidige leverancier ondersteund
+wordt (één per regel). Zie het onderdeel \fBSUPPORTED FLAGS\fP (ondersteunde
+vlaggen) voor meer informatie daarover.
+.TP
+\fB\-\-status\fP
+Laat eventuele informatie zien die nuttig kan zijn om het gedrag te
+verklaren van \fBdpkg\-buildflags\fP (sinds dpkg 1.16.5): relevante
+omgevingsvariabelen, huidige leverancier, toestand van alle
+functievlaggen. Geef ook de resulterende compileervlaggen met hun oorsprong
+weer.
+
+Het is de bedoeling dat dit uitgevoerd wordt vanuit \fBdebian/rules\fP, zodat
+de bouwlog een duidelijk spoor van de gebruikte vlaggen kan bijhouden. Dit
+kan nuttig zijn om ermee verband houdende problemen te diagnosticeren.
+.TP
+\fB\-\-export=\fP\fIindeling\fP
+Geef op standaarduitvoer commando's weer die gebruikt kunnen worden om alle
+compilatievlaggen te exporteren ten behoeve van een specifiek
+gereedschap. Indien de waarde \fIindeling\fP niet opgegeven werd, wordt \fBsh\fP
+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:
+.RS
+.TP
+\fBsh\fP
+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.
+.TP
+\fBcmdline\fP
+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.
+.TP
+\fBconfigure\fP
+Dit is een verouderde alias voor \fBcmdline\fP.
+.TP
+\fBmake\fP
+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 \fBinclude\fP\-opdracht.
+.RE
+.TP
+\fB\-\-get\fP\fI vlag\fP
+Geef de waarde van de vlag weer op de standaarduitvoer. Sluit af met 0 bij
+een gekende vlag en sluit anders af met 1.
+.TP
+\fB\-\-origin\fP\fI vlag\fP
+Geef de origine weer van de waarde die teruggegeven wordt door
+\fB\-\-get\fP. Sluit af met 0 bij een gekende vlag en sluit anders af met 1. De
+origine kan één van de volgende waarden hebben:
+.RS
+.TP
+\fBvendor\fP
+de originele vlag die door de leverancier ingesteld werd, wordt
+teruggegeven;
+.TP
+\fBsystem\fP
+de vlag werd ingesteld/gewijzigd door een systeemconfiguratie;
+.TP
+\fBuser\fP
+de vlag werd ingesteld/gewijzigd door een gebruikersspecifieke configuratie;
+.TP
+\fBenv\fP
+de vlag werd ingesteld/gewijzigd door een omgevingsspecifieke configuratie.
+.RE
+.TP
+\fB\-\-query\fP
+Laat alle informatie zien die nuttig kan zijn om het gedrag van het
+programma te verklaren: huidige leverancier, relevante omgevingsvariabelen,
+functiegebieden, toestand van alle functievlaggen en de compileervlaggen met
+hun oorsprong (sinds dpkg 1.19.0).
+.IP
+Bijvoorbeeld:
+.nf
+ Vendor: Debian
+ Environment:
+ DEB_CFLAGS_SET=\-O0 \-Wall
+
+ Area: qa
+ Features:
+ bug=no
+ canary=no
+
+ Area: reproducible
+ Features:
+ timeless=no
+
+ Flag: CFLAGS
+ Value: \-O0 \-Wall
+ Origin: env
+
+ Flag: CPPFLAGS
+ Value: \-D_FORTIFY_SOURCE=2
+ Origin: vendor
+.fi
+.TP
+\fB\-\-query\-features\fP\fI gebied\fP
+Geef de functies weer die voor een opgegeven gebied geactiveerd zijn (sinds
+dpkg 1.16.2). Momenteel worden door Debian en zijn derivaten enkel de
+gebieden \fBfuture\fP, \fBqa\fP, \fBreproducible\fP, \fBsanitize\fP en \fBhardening\fP
+herkend. Zie het onderdeel \fBFUNCTIEGEBIEDEN\fP voor meer details. Sluit af
+met 0 als het gebied gekend is, anders met 1.
+.IP
+De uitvoer is in RFC822\-indeling met één sectie per functie. Bijvoorbeeld:
+.IP
+.nf
+ Feature: pie
+ Enabled: yes
+
+ Feature: stackprotector
+ Enabled: yes
+.fi
+.TP
+\fB\-\-help\fP
+Toon info over het gebruik en sluit af.
+.TP
+\fB\-\-version\fP
+Toon de versie en sluit af.
+.
+.SH "ONDERSTEUNDE VLAGGEN"
+.TP
+\fBCFLAGS\fP
+Opties voor de C\-compiler. De door de leverancier ingestelde standaardwaarde
+bestaat uit \fB\-g\fP en het standaardniveau van optimalisatie (gewoonlijk
+\fB\-O2\fP, of \fB\-O0\fP indien de omgevingsvariabele \fBDEB_BUILD_OPTIONS\fP \fInoopt\fP
+aangeeft).
+.TP
+\fBCPPFLAGS\fP
+Opties voor de C\-preprocessor. Standaardwaarde: leeg.
+.TP
+\fBCXXFLAGS\fP
+Opties voor de C++ compiler. Hetzelfde als \fBCFLAGS\fP.
+.TP
+\fBOBJCFLAGS\fP
+Opties voor de Objective C compiler. Hetzelfde als \fBCFLAGS\fP.
+.TP
+\fBOBJCXXFLAGS\fP
+Opties voor de Objective C++ compiler. Hetzelfde als \fBCXXFLAGS\fP.
+.TP
+\fBGCJFLAGS\fP
+Opties voor de GNU Java compiler (gcj). Een subset van \fBCFLAGS\fP.
+.TP
+\fBFFLAGS\fP
+Opties voor de Fortran 77 compiler. Een subset van \fBCFLAGS\fP.
+.TP
+\fBFCFLAGS\fP
+Opties voor de Fortran 9x compiler. Hetzelfde als \fBFFLAGS\fP.
+.TP
+\fBLDFLAGS\fP
+Opties die aan de compiler doorgegeven worden bij het linken van uitvoerbare
+programma's en gedeelde objecten (indien de linker rechtstreeks aangeroepen
+wordt, dan moeten \fB\-Wl\fP en \fB,\fP van die opties verwijderd
+worden). Standaardwaarde: leeg.
+.PP
+In de toekomst kunnen nog andere vlaggen toegevoegd worden als daar behoefte
+aan ontstaat (bijvoorbeeld om andere talen te ondersteunen).
+.
+.SH FUNCTIEGEBIEDEN
+.P
+Elke gebiedsfunctie kan in de gebiedswaarde van de omgevingsvariabelen
+\fBDEB_BUILD_OPTIONS\fP en \fBDEB_BUILD_MAINT_OPTIONS\fP ingeschakeld en
+uitgeschakeld worden met de schakelaars ‘\fB+\fP’ en ‘\fB\-\fP’. Om bijvoorbeeld de
+\fBhardening\fP\-functionaliteit “pie” te activeren en de functionaliteit
+“fortify” uit te schakelen, kunt u in \fBdebian/rules\fP het volgende doen:
+.P
+ export DEB_BUILD_MAINT_OPTIONS=hardening=+pie,\-fortify
+.P
+De bijzondere functie \fBall\fP (geldig in elk gebied) kan gebruikt worden om
+gelijktijdig alle gebiedsfunctionaliteit te activeren of uit te
+schakelen. Alles uitschakelen in het gebied \fBhardening\fP en enkel “format”
+en “fortify” activeren kunt u dus doen met:
+.P
+ export DEB_BUILD_MAINT_OPTIONS=hardening=\-all,+format,+fortify
+.
+.SS 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.
+.TP
+\fBlfs\fP
+Deze instelling (standaard uitgezet) activeert ondersteuning voor grote
+bestanden (Large File Support) op 32\-bits architecturen waarvan de ABI
+standaard geen LFS\-ondersteuning biedt, door \fB\-D_LARGEFILE_SOURCE
+\-D_FILE_OFFSET_BITS=64\fP toe te voegen aan \fBCPPFLAGS\fP.
+.
+.SS "qa (kwaliteitsbevordering)"
+Er kunnen verschillende compilatieopties (die hierna beschreven worden)
+gebruikt worden om problemen in de broncode of het bouwsysteem te helpen
+detecteren.
+.TP
+\fBbug\fP
+Deze instelling (die standaard uitgeschakeld is) voegt alle
+waarschuwingsopties toe die op een betrouwbare wijze problematische broncode
+opsporen. De waarschuwingen zijn fataal. De enige vlaggen die momenteel
+ondersteund worden zijn \fBCFLAGS\fP en \fBCXXFLAGS\fP waarbij de vlaggen
+ingesteld staan op \fB\-Werror=array\-bounds\fP, \fB\-Werror=clobbered\fP,
+\fB\-Werror=implicit\-function\-declaration\fP en
+\fB\-Werror=volatile\-register\-var\fP.
+.
+.TP
+\fBcanary\fP
+Deze instelling (die standaard uitgeschakeld is) 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 \fBCPPFLAGS\fP, \fBCFLAGS\fP, \fBOBJCFLAGS\fP,
+\fBCXXFLAGS\fP en \fBOBJCXXFLAGS\fP, waarbij die vlaggen als
+\fB\-D__DEB_CANARY_\fP\fIvlag\fP_\fIwillekeurige\-id\fP\fB__\fP ingesteld worden, en
+\fBLDFLAGS\fP dat ingesteld wordt op \fB\-Wl,\-z,deb\-canary\-\fP\fIwillekeurige\-id\fP.
+.
+.SS "sanitize (saneren)"
+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. \fBNoot\fP: deze opties zouden \fBniet\fP gebruikt mogen
+worden voor een bouw voor productiedoeleinden, aangezien ze een verminderde
+betrouwbaarheid bieden inzake codeconformiteit en de beveiliging en zelfs de
+functionaliteit reduceren.
+.TP
+\fBaddress\fP
+Deze instelling (standaard uitgeschakeld) voegt \fB\-fsanitize=address\fP toe
+aan \fBLDFLAGS\fP en \fB\-fsanitize=address \-fno\-omit\-frame\-pointer\fP aan
+\fBCFLAGS\fP en aan \fBCXXFLAGS\fP.
+.TP
+\fBthread\fP
+Deze instelling (standaard uitgeschakeld) voegt \fB\-fsanitize=thread\fP toe aan
+\fBCFLAGS\fP, \fBCXXFLAGS\fP en \fBLDFLAGS\fP.
+.TP
+\fBleak\fP
+Deze instelling (standaard uitgeschakeld) voegt \fB\-fsanitize=leak\fP toe aan
+\fBLDFLAGS\fP. Ze wordt automatisch uitgeschakeld als ofwel de
+\fBaddress\fP\-functionaliteit of de \fBthread\fP\-functionaliteit geactiveerd is,
+aangezien die dit impliceren.
+.TP
+\fBundefined\fP
+Deze instelling (standaard uitgeschakeld) voegt \fB\-fsanitize=undefined\fP toe
+aan \fBCFLAGS\fP, \fBCXXFLAGS\fP en \fBLDFLAGS\fP.
+.SS "hardening (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.
+.TP
+\fBformat\fP
+Deze instelling (standaard geactiveerd) voegt \fB\-Wformat
+\-Werror=format\-security\fP toe aan \fBCFLAGS\fP, \fBCXXFLAGS\fP, \fBOBJCFLAGS\fP en
+\fBOBJCXXFLAGS\fP. 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 \fBprintf\fP\-functie of
+een \fBscanf\fP\-functie aangeroepen wordt met een indelingstekenreeks die geen
+letterlijke tekenreeks is en er ook geen indelingsargumenten opgegeven
+werden, zoals bij \fBprintf(foo);\fP in plaats van \fBprintf("%s", foo);\fP. Dit
+kan een veiligheidslek zijn als de indelingstekenreeks afkomstig was van
+onbetrouwbare invoer en ‘%n’ bevat.
+.
+.TP
+\fBfortify\fP
+Deze instelling (standaard geactiveerd) voegt \fB\-D_FORTIFY_SOURCE=2\fP toe aan
+\fBCPPFLAGS\fP. 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 \fB\-O1\fP of hoger gecompileerd moet worden opdat
+deze optie effect zou hebben. Indien de omgevingsvariabele
+\fBDEB_BUILD_OPTIONS\fP \fInoopt\fP bevat, dan wordt ondersteuning voor \fBfortify\fP
+uitgeschakeld. Dit is te wijten aan nieuwe waarschuwingen die gegeven worden
+door glibc 2.16 en hoger.
+.TP
+\fBstackprotector\fP
+Deze instelling (standaard geactiveerd als stackprotectorstrong niet
+gebruikt wordt) voegt \fB\-fstack\-protector \-\-param=ssp\-buffer\-size=4\fP toe aan
+\fBCFLAGS\fP, \fBCXXFLAGS\fP, \fBOBJCFLAGS\fP, \fBOBJCXXFLAGS\fP, \fBGCJFLAGS\fP, \fBFFLAGS\fP
+en \fBFCFLAGS\fP. 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 \fB__stack_chk_fail\fP) en moet dus uitgeschakeld worden als er
+gebouwd wordt met \fB\-nostdlib\fP of \fB\-ffreestanding\fP of iets gelijkaardigs.
+.
+.TP
+\fBstackprotectorstrong\fP
+Deze instelling (standaard geactiveerd) voegt \fB\-fstack\-protector\-strong\fP
+toe aan \fBCFLAGS\fP, \fBCXXFLAGS\fP, \fBOBJCFLAGS\fP, \fBOBJCXXFLAGS\fP, \fBGCJFLAGS\fP,
+\fBFFLAGS\fP en \fBFCFLAGS\fP. Dit is een sterkere variant van \fBstackprotector\fP,
+maar zonder noemenswaardig prestatieverlies.
+
+Het uitzetten van \fBstackprotector\fP schakelt ook deze functionaliteit uit.
+
+Deze functionaliteit stelt dezelfde vereisten als \fBstackprotector\fP en heeft
+daarenboven ook gcc 4.9 of een recentere versie nodig.
+.
+.TP
+\fBrelro\fP
+Deze instelling (standaard geactiveerd) voegt \fB\-Wl,\-z,relro\fP toe aan
+\fBLDFLAGS\fP. 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 \fBbindnow\fP
+uitgezet.
+.
+.TP
+\fBbindnow\fP
+Deze instelling (standaard uitgeschakeld) voegt \fB\-Wl,\-z,now\fP toe aan
+\fBLDFLAGS\fP. 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 \fBrelro\fP hiervoor). Deze
+optie kan niet aangezet worden als \fBrelro\fP niet geactiveerd is.
+.
+.TP
+\fBpie\fP
+Deze instelling (zonder 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
+\fB\-fPIE\fP toe (via \fI%PKGDATADIR%/pie\-compiler.specs\fP) aan \fBCFLAGS\fP,
+\fBCXXFLAGS\fP, \fBOBJCFLAGS\fP, \fBOBJCXXFLAGS\fP, \fBGCJFLAGS\fP, \fBFFLAGS\fP en
+\fBFCFLAGS\fP, en \fB\-fPIE \-pie\fP (via \fI%PKGDATADIR%/pie\-link.specs\fP) aan
+\fBLDFLAGS\fP. Indien de instelling gedeactiveerd is en gcc de vlaggen
+injecteert, voegt ze \fB\-fno\-PIE\fP toe (via
+\fI%PKGDATADIR%/no\-pie\-compile.specs\fP) aan \fBCFLAGS\fP, \fBCXXFLAGS\fP,
+\fBOBJCFLAGS\fP, \fBOBJCXXFLAGS\fP, \fBGCJFLAGS\fP, \fBFFLAGS\fP en \fBFCFLAGS\fP, en
+\fB\-fno\-PIE \-no\-pie\fP (via \fI%PKGDATADIR%/no\-pie\-link.specs\fP) aan \fBLDFLAGS\fP.
+
+Position Independent Executable (PIE \- positie\-onafhankelijke programma's)
+zijn 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 (\fB\-fPIC\fP), 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 \fB\-fPIC\fP, 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:
+
+.RS
+.TP
+geen
+Kan niet gelinkt worden aan een PIE\-programma, noch aan een gedeelde
+bibliotheek.
+.TP
+\fB\-fPIE\fP
+Kan gelinkt worden aan elk programma, maar niet aan een gedeelde bibliotheek
+(aanbevolen).
+.TP
+\fB\-fPIC\fP
+Kan gelinkt worden aan elk programma en elke gedeelde bibliotheek.
+.RE
+
+.IP
+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 \fB\-fPIE\fP, \fB\-fpie\fP of
+\fB\-pie\fP 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 \fB\-fPIC\fP steeds als laatste doorgegeven wordt (waardoor het een
+eventuele voorafgaande \fB\-PIE\fP opheft) aan compilatievlaggen zoals \fBCFLAGS\fP
+en dat \fB\-shared\fP als laatste doorgegeven wordt (waardoor het een eventuele
+voorafgaande \fB\-pie\fP opheft) aan linkvlaggen zoals \fBLDFLAGS\fP. \fBOpmerking:\fP
+dit is niet nodig met het standaard specs\-mechanisme van gcc.
+
+.IP
+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.
+.SS "reproducible (reproduceerbaar)"
+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.
+.TP
+\fBtimeless\fP
+Deze instelling (standaard geactiveerd) voegt \fB\-Wdate\-time\fP toe bij
+\fBCPPFLAGS\fP. Dit leidt tot waarschuwingen als de macros \fB__TIME__\fP,
+\fB__DATE__\fP en \fB__TIMESTAMP__\fP gebruikt worden.
+.
+.TP
+\fBfixfilepath\fP
+Deze instelling (standaard gedeactiveerd) voegt
+\fB\-ffile\-prefix\-map=\fP\fIBUILDPATH\fP\fB=.\fP toe aan \fBCFLAGS\fP, \fBCXXFLAGS\fP,
+\fBOBJCFLAGS\fP, \fBOBJCXXFLAGS\fP, \fBGCJFLAGS\fP, \fBFFLAGS\fP en \fBFCFLAGS\fP, waarbij
+\fBBUILDPATH\fP ingesteld wordt op de basismap van het pakket dat gebouwd
+wordt. Dit heeft als effect dat het bouwpad verwijderd wordt van eventueel
+gegenereerde bestanden.
+
+Indien zowel \fBfixdebugpath\fP als \fBfixfilepath\fP ingesteld zijn, heeft deze
+laatste optie voorrang, omdat het een superset is van de eerste.
+.TP
+\fBfixdebugpath\fP
+Deze instelling (standaard geactiveerd) voegt
+\fB\-fdebug\-prefix\-map=\fP\fIBUILDPATH\fP\fB=.\fP toe aan \fBCFLAGS\fP, \fBCXXFLAGS\fP,
+\fBOBJCFLAGS\fP, \fBOBJCXXFLAGS\fP, \fBGCJFLAGS\fP, \fBFFLAGS\fP en \fBFCFLAGS\fP, waarbij
+\fBBUILDPATH\fP 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.
+.
+.SH OMGEVING
+Er zijn twee sets omgevingsvariabelen die dezelfde operaties uitvoeren. De
+eerste (DEB_\fIvlag\fP_\fIoperatie\fP) zou nooit gebruikt mogen worden binnen
+\fBdebian/rules\fP. Die is bedoeld voor eventuele gebruikers die het bronpakket
+opnieuw willen bouwen met andere bouwvlaggen. De tweede set
+(DEB_\fIvlag\fP_MAINT_\fIoperatie\fP) zou door pakketonderhouders enkel in
+\fBdebian/rules\fP gebruikt moeten worden om de resulterende bouwvlaggen aan te
+passen.
+.TP
+\fBDEB_\fP\fIvlag\fP\fB_SET\fP
+.TQ
+\fBDEB_\fP\fIvlag\fP\fB_MAINT_SET\fP
+Deze variabele kan gebruikt worden om de teruggegeven waarde voor de
+opgegeven vlag \fIvlag\fP af te dwingen.
+.TP
+\fBDEB_\fP\fIvlag\fP\fB_STRIP\fP
+.TQ
+\fBDEB_\fP\fIvlag\fP\fB_MAINT_STRIP\fP
+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 \fIvlag\fP.
+.TP
+\fBDEB_\fP\fIvlag\fP\fB_APPEND\fP
+.TQ
+\fBDEB_\fP\fIvlag\fP\fB_MAINT_APPEND\fP
+Deze variabele kan gebruikt worden om bijkomende opties toe te voegen aan de
+waarde die teruggegeven wordt voor de opgegeven \fIvlag\fP.
+.TP
+\fBDEB_\fP\fIvlag\fP\fB_PREPEND\fP
+.TQ
+\fBDEB_\fP\fIvlag\fP\fB_MAINT_PREPEND\fP
+Deze variabele kan gebruikt worden om vooraan bijkomende opties toe te
+voegen aan de waarde die teruggegeven wordt voor de opgegeven \fIvlag\fP.
+.TP
+\fBDEB_BUILD_OPTIONS\fP
+.TQ
+\fBDEB_BUILD_MAINT_OPTIONS\fP
+Deze variabelen kunnen door een gebruiker of een onderhouder gebruikt worden
+om diverse gebiedsfuncties die bouwvlaggen beïnvloeden, te activeren of uit
+te zetten. De variabele \fBDEB_BUILD_MAINT_OPTIONS\fP vervangt eventuele
+instellingen in de functionaliteitsgebieden \fBDEB_BUILD_OPTIONS\fP. Zie het
+onderdeel \fBFUNCTIONALITEITSGEBIEDEN\fP voor de details.
+.TP
+\fBDEB_VENDOR\fP
+Deze instelling definieert de huidige leverancier. Indien zij niet ingesteld
+is, zal gezocht worden naar de huidige leverancier door te gaan lezen in
+\fB%PKGCONFDIR%/origins/default\fP.
+.TP
+\fBDEB_BUILD_PATH\fP
+Deze variabele stelt in welk bouwpad (sinds dpkg 1.18.8) gebruikt moet
+worden bij functionaliteit zoals \fBfixdebugpath\fP waardoor die gesuperviseerd
+kan worden door het aanroepende programma. Momenteel is deze variabele
+Debian\- en derivaat\-specifiek.
+.TP
+\fBDPKG_COLORS\fP
+Stelt de kleurmodus in (sinds dpkg 1.18.5). Waarden die momenteel gebruikt
+mogen worden zijn: \fBauto\fP (standaard), \fBalways\fP en \fBnever\fP.
+.TP
+\fBDPKG_NLS\fP
+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: \fB0\fP and \fB1\fP (standaard).
+.
+.SH BESTANDEN
+.SS Configuratiebestanden
+.TP
+\fB%PKGCONFDIR%/buildflags.conf\fP
+Configuratiebestand dat voor het hele systeem geldt.
+.TP
+\fB$XDG_CONFIG_HOME/dpkg/buildflags.conf\fP of
+.TQ
+\fB$HOME/.config/dpkg/buildflags.conf\fP
+Configuratiebestand dat gebruikersafhankelijk is.
+.SS "Ondersteuning bij het maken van een pakket"
+.TP
+\fB%PKGDATADIR%/buildflags.mk\fP
+Makefile\-fragment dat alle vlaggen die door \fBdpkg\-buildflags\fP ondersteund
+worden, laadt in variabelen (en eventueel exporteert) (sinds dpkg 1.16.1).
+.
+.SH VOORBEELDEN
+Om in een Makefile bouwvlaggen door te geven aan een bouwcommando:
+.PP
+.RS 4
+.nf
+$(MAKE) $(shell dpkg\-buildflags \-\-export=cmdline)
+
+\&./configure $(shell dpkg\-buildflags \-\-export=cmdline)
+.fi
+.RE
+.PP
+Om in een shell\-script of shell\-fragment bouwvlaggen in te stellen, kan
+\fBeval\fP gebruikt worden om de uitvoer te interpreteren van en de vlaggen
+naar de omgeving te exporteren:
+.PP
+.RS 4
+.nf
+eval "$(dpkg\-buildflags \-\-export=sh)" && make
+.fi
+.RE
+.PP
+of om de positieparameters in te stellen die aan een commando doorgegeven
+moeten worden:
+.PP
+.RS 4
+.nf
+eval "set \-\- $(dpkg\-buildflags \-\-export=cmdline)"
+for dir in a b c; do (cd $dir && ./configure "$@" && make); done
+.fi
+.RE
+.
+.SS "Het gebruik in debian/rules"
+Om de benodigde bouwvlaggen te bekomen die aan het bouwsysteem doorgegeven
+moeten worden, moet u vanuit het bestand \fBdebian/rules\fP \fBdpkg\-buildflags\fP
+aanroepen of \fBbuildflags.mk\fP invoegen. Merk op dat oudere versies van
+\fBdpkg\-buildpackage\fP (voor dpkg 1.16.1) deze vlaggen automatisch
+exporteerden. U zou hierop echter niet mogen betrouwen, aangezien dit het
+handmatig aanroepen van \fBdebian/rules\fP defect maakt.
+.PP
+Voor pakketten met een autoconf\-achtig bouwsysteem, kunt u de relevante
+opties rechtstreeks doorgeven aan configure of \fBmake\fP(1), zoals hiervoor
+geïllustreerd werd.
+.PP
+Voor andere bouwsystemen, of indien u een meer fijnmazige controle nodig
+heeft over welke vlaggen waar doorgegeven worden, kunt u \fB\-\-get\fP
+gebruiken. Of in de plaats daarvan kunt u \fBbuildflags.mk\fP invoegen, dat
+zorgt voor het aanroepen van \fBdpkg\-buildflags\fP en het opslaan van de
+bouwvlaggen in variabelen voor make.
+.PP
+Indien u alle bouwvlaggen naar de omgeving wenst te exporteren (waar ze door
+uw bouwsysteem opgepikt kunnen worden):
+.PP
+.RS 4
+.nf
+DPKG_EXPORT_BUILDFLAGS = 1
+include %PKGDATADIR%/buildflags.mk
+.fi
+.RE
+.PP
+Als u bijkomende controle wenst over wat geëxporteerd wordt, kunt u de
+variabelen handmatig exporteren (aangezien er standaard geen enkele
+geëxporteerd wordt):
+.PP
+.RS 4
+.nf
+include %PKGDATADIR%/buildflags.mk
+export CPPFLAGS CFLAGS LDFLAGS
+.fi
+.RE
+.PP
+En u kunt de vlaggen natuurlijk ook handmatig doorgeven aan commando's:
+.PP
+.RS 4
+.nf
+include %PKGDATADIR%/buildflags.mk
+build\-arch:
+\& $(CC) \-o hello hello.c $(CPPFLAGS) $(CFLAGS) $(LDFLAGS)
+.fi
+.RE