diff options
author | Daniel Baumann <daniel.baumann@progress-linux.org> | 2024-04-27 09:40:31 +0000 |
---|---|---|
committer | Daniel Baumann <daniel.baumann@progress-linux.org> | 2024-04-27 09:40:31 +0000 |
commit | b86570f63e533abcbcb97c2572e0e5732a96307b (patch) | |
tree | cabc83be691530ae685c45a8bc7620ccc0e1ebdf /man/nl/dpkg-buildflags.pod | |
parent | Initial commit. (diff) | |
download | dpkg-upstream.tar.xz dpkg-upstream.zip |
Adding upstream version 1.20.13.upstream/1.20.13upstream
Signed-off-by: Daniel Baumann <daniel.baumann@progress-linux.org>
Diffstat (limited to '')
-rw-r--r-- | man/nl/dpkg-buildflags.pod | 798 |
1 files changed, 798 insertions, 0 deletions
diff --git a/man/nl/dpkg-buildflags.pod b/man/nl/dpkg-buildflags.pod new file mode 100644 index 0000000..4d1e1ed --- /dev/null +++ b/man/nl/dpkg-buildflags.pod @@ -0,0 +1,798 @@ + + ***************************************************** + * GENERATED FILE, DO NOT EDIT * + * THIS IS NO SOURCE FILE, BUT RESULT OF COMPILATION * + ***************************************************** + +This file was generated by po4a(7). Do not store it (in VCS, for example), +but store the PO file used as source file by po4a-translate. + +In fact, consider this as a binary, and the PO file as a regular .c file: +If the PO get lost, keeping this translation up-to-date will be harder. + +=encoding UTF-8 + +=head1 NAAM + +dpkg-buildflags - geeft de bij pakketbouw te gebruiken bouwvlaggen terug + +=head1 OVERZICHT + +B<dpkg-buildflags> [I<optie>...] [I<commando>] + +=head1 BESCHRIJVING + +B<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: + +=over + +=item 1. + +voor het hele systeem met B<%PKGCONFDIR%/buildflags.conf>; + +=item 2. + +voor de huidige gebruiker met B<$XDG_CONFIG_HOME/dpkg/buildflags.conf>, +waarbij B<$XDG_CONFIG_HOME> als standaardwaarde B<$HOME/.config> heeft; + +=item 3. + +tijdelijk door de gebruiker met omgevingsvariabelen (zie het onderdeel +B<OMGEVING>); + +=item 4. + +dynamisch door de pakketonderhouder met omgevingsvariabelen die ingesteld +worden via B<debian/rules> (zie het onderdeel B<OMGEVING>). + +=back + +De configuratiebestanden kunnen vier types opdrachten bevatten: + +=over + +=item B<SET> I<vlag waarde> + +De vlag met I<vlag> als naam overschrijven om ze de waarde I<waarde> te +geven. + +=item B<STRIP> I<vlag waarde> + +Van de vlag met I<vlag> als naam alle bouwvlaggen verwijderen die in +I<waarde> opgesomd worden. + +=item B<APPEND> I<vlag waarde> + +De vlag met I<vlag> als naam uitbreiden door er de opties aan toe te voegen +die in I<waarde> opgegeven worden. Er wordt een spatie geplaatst voor de +waarde die toegevoegd wordt, indien de huidige waarde van de vlag niet leeg +is. + +=item B<PREPEND> I<vlag waarde> + +De vlag met I<vlag> als naam uitbreiden door er vooraan de opties aan toe te +voegen die in I<waarde> opgegeven worden. Er wordt een spatie geplaatst +achter de waarde die toegevoegd wordt, indien de huidige waarde van de vlag +niet leeg is. + +=back + +De configuratiebestanden kunnen commentaar bevatten op regels die beginnen +met een hekje (#). Ook lege regels worden genegeerd. + +=head1 COMMANDO'S + +=over + +=item B<--dump> + +Op standaarduitvoer alle compilatievlaggen en hun waarden tonen. Dit geeft +per regel één vlag en de waarde ervan weer met daartussenin een +gelijkheidsteken (“I<vlag>=I<waarde>”). Dit is de standaardactie. + +=item B<--list> + +Een lijst weergeven van vlaggen die door de huidige leverancier ondersteund +worden (één per regel). Zie het onderdeel B<SUPPORTED FLAGS> (ondersteunde +vlaggen) voor meer informatie daarover. + +=item B<--status> + +Eventuele informatie laten zien welke nuttig kan zijn om het gedrag te +verklaren van B<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 B<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. + +=item B<--export=>I<indeling> + +Op standaarduitvoer commando's weergeven die gebruikt kunnen worden om alle +compilatievlaggen te exporteren ten behoeve van een specifiek +gereedschap. Indien de waarde I<indeling> niet opgegeven werd, wordt B<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: + +=over + +=item B<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. + +=item B<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. + +=item B<configure> + +Dit is een verouderde alias voor B<cmdline>. + +=item B<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 B<include>-opdracht. + +=back + +=item B<--get> I<vlag> + +De waarde van de vlag op de standaarduitvoer weergeven. Sluit af met 0 bij +een gekende vlag en sluit anders af met 1. + +=item B<--origin> I<vlag> + +De origine weergeven van de waarde die teruggegeven wordt door +B<--get>. Sluit af met 0 bij een gekende vlag en sluit anders af met 1. De +origine kan één van de volgende waarden hebben: + +=over + +=item B<vendor> + +de originele vlag die door de leverancier ingesteld werd, wordt +teruggegeven; + +=item B<system> + +de vlag werd ingesteld/gewijzigd door een systeemconfiguratie; + +=item B<user> + +de vlag werd ingesteld/gewijzigd door een gebruikersspecifieke configuratie; + +=item B<env> + +de vlag werd ingesteld/gewijzigd door een omgevingsspecifieke configuratie. + +=back + +=item B<--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 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 + + Area: reproducible + Features: + timeless=no + + Flag: CFLAGS + Value: -O0 -Wall + Origin: env + + Flag: CPPFLAGS + Value: -D_FORTIFY_SOURCE=2 + Origin: vendor + +=item B<--query-features> I<gebied> + +De functies weergeven die voor een opgegeven gebied geactiveerd zijn (sinds +dpkg 1.16.2). Momenteel worden door Debian en zijn derivaten enkel de +gebieden B<future>, B<qa>, B<reproducible>, B<sanitize> en B<hardening> +herkend. Zie het onderdeel B<FUNCTIEGEBIEDEN> voor meer details. Sluit af +met 0 als het gebied gekend is, anders met 1. + +De uitvoer is in RFC822-indeling met één sectie per functie. Bijvoorbeeld: + + Feature: pie + Enabled: yes + + Feature: stackprotector + Enabled: yes + +=item B<--help> + +Info tonen over het gebruik en afsluiten. + +=item B<--version> + +De versie tonen en afsluiten. + +=back + +=head1 ONDERSTEUNDE VLAGGEN + +=over + +=item B<CFLAGS> + +Opties voor de C-compiler. De door de leverancier ingestelde standaardwaarde +bestaat uit B<-g> en het standaardniveau van optimalisatie (gewoonlijk +B<-O2>, of B<-O0> indien de omgevingsvariabele B<DEB_BUILD_OPTIONS> I<noopt> +aangeeft). + +=item B<CPPFLAGS> + +Opties voor de C-preprocessor. Standaardwaarde: leeg. + +=item B<CXXFLAGS> + +Opties voor de C++ compiler. Hetzelfde als B<CFLAGS>. + +=item B<OBJCFLAGS> + +Opties voor de Objective C compiler. Hetzelfde als B<CFLAGS>. + +=item B<OBJCXXFLAGS> + +Opties voor de Objective C++ compiler. Hetzelfde als B<CXXFLAGS>. + +=item B<GCJFLAGS> + +Opties voor de GNU Java compiler (gcj). Een subset van B<CFLAGS>. + +=item B<DFLAGS> + +Opties voor de D-compiler (ldc of gdc). Sinds dpkg 1.20.6. + +=item B<FFLAGS> + +Opties voor de Fortran 77 compiler. Een subset van B<CFLAGS>. + +=item B<FCFLAGS> + +Opties voor de Fortran 9x compiler. Hetzelfde als B<FFLAGS>. + +=item B<LDFLAGS> + +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 B<-Wl> en B<,> van die opties verwijderd +worden). Standaardwaarde: leeg. + +=back + +In de toekomst kunnen nog andere vlaggen toegevoegd worden als daar behoefte +aan ontstaat (bijvoorbeeld om andere talen te ondersteunen). + +=head1 FUNCTIEGEBIEDEN + +Elke gebiedsfunctie kan in de gebiedswaarde van de omgevingsvariabelen +B<DEB_BUILD_OPTIONS> en B<DEB_BUILD_MAINT_OPTIONS> ingeschakeld en +uitgeschakeld worden met de schakelaars ‘B<+>’ en ‘B<->’. Om bijvoorbeeld de +B<hardening>-functionaliteit “pie” te activeren en de functionaliteit +“fortify” uit te schakelen, kunt u in B<debian/rules> het volgende doen: + + export DEB_BUILD_MAINT_OPTIONS=hardening=+pie,-fortify + +De bijzondere functie B<all> (geldig in elk gebied) kan gebruikt worden om +gelijktijdig alle gebiedsfunctionaliteit te activeren of uit te +schakelen. Alles uitschakelen in het gebied B<hardening> en enkel “format” +en “fortify” activeren kunt u dus doen met: + + export DEB_BUILD_MAINT_OPTIONS=hardening=-all,+format,+fortify + +=head2 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. + +=over + +=item B<lfs> + +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 B<-D_LARGEFILE_SOURCE +-D_FILE_OFFSET_BITS=64> toe te voegen aan B<CPPFLAGS>. + +=back + +=head2 qa (kwaliteitsbevordering) + +Er kunnen verschillende compilatieopties (die hierna beschreven worden) +gebruikt worden om problemen in de broncode of het bouwsysteem te helpen +detecteren. + +=over + +=item B<bug> + +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 B<CFLAGS> en B<CXXFLAGS> waarbij de vlaggen +ingesteld staan op B<-Werror=array-bounds>, B<-Werror=clobbered>, +B<-Werror=implicit-function-declaration> en +B<-Werror=volatile-register-var>. + +=item B<canary> + +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 B<CPPFLAGS>, B<CFLAGS>, B<OBJCFLAGS>, +B<CXXFLAGS> en B<OBJCXXFLAGS>, waarbij die vlaggen als +B<-D__DEB_CANARY_>I<vlag>_I<willekeurige-id>B<__> ingesteld worden, en +B<LDFLAGS> dat ingesteld wordt op B<-Wl,-z,deb-canary->I<willekeurige-id>. + +=back + +=head2 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. B<Noot>: deze opties zouden B<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. + +=over + +=item B<address> + +Deze instelling (standaard uitgeschakeld) voegt B<-fsanitize=address> toe +aan B<LDFLAGS> en B<-fsanitize=address -fno-omit-frame-pointer> aan +B<CFLAGS> en aan B<CXXFLAGS>. + +=item B<thread> + +Deze instelling (standaard uitgeschakeld) voegt B<-fsanitize=thread> toe aan +B<CFLAGS>, B<CXXFLAGS> en B<LDFLAGS>. + +=item B<leak> + +Deze instelling (standaard uitgeschakeld) voegt B<-fsanitize=leak> toe aan +B<LDFLAGS>. Ze wordt automatisch uitgeschakeld als ofwel de +B<address>-functionaliteit of de B<thread>-functionaliteit geactiveerd is, +aangezien die dit impliceren. + +=item B<undefined> + +Deze instelling (standaard uitgeschakeld) voegt B<-fsanitize=undefined> toe +aan B<CFLAGS>, B<CXXFLAGS> en B<LDFLAGS>. + +=back + +=head2 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. + +=over + +=item B<format> + +Deze instelling (standaard geactiveerd) voegt B<-Wformat +-Werror=format-security> toe aan B<CFLAGS>, B<CXXFLAGS>, B<OBJCFLAGS> en +B<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 B<printf>-functie of +een B<scanf>-functie aangeroepen wordt met een indelingstekenreeks die geen +letterlijke tekenreeks is en er ook geen indelingsargumenten opgegeven +werden, zoals bij B<printf(foo);> in plaats van B<printf("%s", foo);>. Dit +kan een veiligheidslek zijn als de indelingstekenreeks afkomstig was van +onbetrouwbare invoer en ‘%n’ bevat. + +=item B<fortify> + +Deze instelling (standaard geactiveerd) voegt B<-D_FORTIFY_SOURCE=2> toe aan +B<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 B<-O1> of hoger gecompileerd moet worden opdat +deze optie effect zou hebben. Indien de omgevingsvariabele +B<DEB_BUILD_OPTIONS> I<noopt> bevat, dan wordt ondersteuning voor B<fortify> +uitgeschakeld. Dit is te wijten aan nieuwe waarschuwingen die gegeven worden +door glibc 2.16 en hoger. + +=item B<stackprotector> + +Deze instelling (standaard geactiveerd als stackprotectorstrong niet +gebruikt wordt) voegt B<-fstack-protector --param=ssp-buffer-size=4> toe aan +B<CFLAGS>, B<CXXFLAGS>, B<OBJCFLAGS>, B<OBJCXXFLAGS>, B<GCJFLAGS>, B<FFLAGS> +en B<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 B<__stack_chk_fail>) en moet dus uitgeschakeld worden als er +gebouwd wordt met B<-nostdlib> of B<-ffreestanding> of iets gelijkaardigs. + +=item B<stackprotectorstrong> + +Deze instelling (standaard geactiveerd) voegt B<-fstack-protector-strong> +toe aan B<CFLAGS>, B<CXXFLAGS>, B<OBJCFLAGS>, B<OBJCXXFLAGS>, B<GCJFLAGS>, +B<FFLAGS> en B<FCFLAGS>. Dit is een sterkere variant van B<stackprotector>, +maar zonder noemenswaardig prestatieverlies. + +Het uitzetten van B<stackprotector> schakelt ook deze functionaliteit uit. + +Deze functionaliteit stelt dezelfde vereisten als B<stackprotector> en heeft +daarenboven ook gcc 4.9 of een recentere versie nodig. + +=item B<relro> + +Deze instelling (standaard geactiveerd) voegt B<-Wl,-z,relro> toe aan +B<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 B<bindnow> +uitgezet. + +=item B<bindnow> + +Deze instelling (standaard uitgeschakeld) voegt B<-Wl,-z,now> toe aan +B<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 B<relro> hiervoor). Deze +optie kan niet aangezet worden als B<relro> niet geactiveerd is. + +=item B<pie> + +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 +B<-fPIE> toe (via I<%PKGDATADIR%/pie-compiler.specs>) aan B<CFLAGS>, +B<CXXFLAGS>, B<OBJCFLAGS>, B<OBJCXXFLAGS>, B<GCJFLAGS>, B<FFLAGS> en +B<FCFLAGS>, en B<-fPIE -pie> (via I<%PKGDATADIR%/pie-link.specs>) aan +B<LDFLAGS>. Indien de instelling gedeactiveerd is en gcc de vlaggen +injecteert, voegt ze B<-fno-PIE> toe (via +I<%PKGDATADIR%/no-pie-compile.specs>) aan B<CFLAGS>, B<CXXFLAGS>, +B<OBJCFLAGS>, B<OBJCXXFLAGS>, B<GCJFLAGS>, B<FFLAGS> en B<FCFLAGS>, en +B<-fno-PIE -no-pie> (via I<%PKGDATADIR%/no-pie-link.specs>) aan B<LDFLAGS>. + +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 (B<-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 B<-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: + +=over + +=item geen + +Kan niet gelinkt worden aan een PIE-programma, noch aan een gedeelde +bibliotheek. + +=item B<-fPIE> + +Kan gelinkt worden aan elk programma, maar niet aan een gedeelde bibliotheek +(aanbevolen). + +=item B<-fPIC> + +Kan gelinkt worden aan elk programma en elke gedeelde bibliotheek. + +=back + +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 B<-fPIE>, B<-fpie> of +B<-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 B<-fPIC> steeds als laatste doorgegeven wordt (waardoor het een +eventuele voorafgaande B<-PIE> opheft) aan compilatievlaggen zoals B<CFLAGS> +en dat B<-shared> als laatste doorgegeven wordt (waardoor het een eventuele +voorafgaande B<-pie> opheft) aan linkvlaggen zoals B<LDFLAGS>. B<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 E<gt>= 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. + +=back + +=head2 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. + +=over + +=item B<timeless> + +Deze instelling (standaard geactiveerd) voegt B<-Wdate-time> toe bij +B<CPPFLAGS>. Dit leidt tot waarschuwingen als de macros B<__TIME__>, +B<__DATE__> en B<__TIMESTAMP__> gebruikt worden. + +=item B<fixfilepath> + +Deze instelling (standaard geactiveerd) voegt +B<-ffile-prefix-map=>I<BUILDPATH>B<=.> toe aan B<CFLAGS>, B<CXXFLAGS>, +B<OBJCFLAGS>, B<OBJCXXFLAGS>, B<GCJFLAGS>, B<FFLAGS> en B<FCFLAGS>, waarbij +B<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 B<fixdebugpath> als B<fixfilepath> ingesteld zijn, heeft deze +laatste optie voorrang, omdat het een superset is van de eerste. + +=item B<fixdebugpath> + +Deze instelling (standaard geactiveerd) voegt +B<-fdebug-prefix-map=>I<BUILDPATH>B<=.> toe aan B<CFLAGS>, B<CXXFLAGS>, +B<OBJCFLAGS>, B<OBJCXXFLAGS>, B<GCJFLAGS>, B<FFLAGS> en B<FCFLAGS>, waarbij +B<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. + +=back + +=head1 OMGEVING + +Er zijn twee sets omgevingsvariabelen die dezelfde operaties uitvoeren. De +eerste (DEB_I<vlag>_I<operatie>) zou nooit gebruikt mogen worden binnen +B<debian/rules>. Die is bedoeld voor eventuele gebruikers die het bronpakket +opnieuw willen bouwen met andere bouwvlaggen. De tweede set +(DEB_I<vlag>_MAINT_I<operatie>) zou door pakketonderhouders enkel in +B<debian/rules> gebruikt moeten worden om de resulterende bouwvlaggen aan te +passen. + +=over + +=item B<DEB_>I<vlag>B<_SET> + +=item B<DEB_>I<vlag>B<_MAINT_SET> + +Deze variabele kan gebruikt worden om de teruggegeven waarde voor de +opgegeven vlag I<vlag> af te dwingen. + +=item B<DEB_>I<vlag>B<_STRIP> + +=item B<DEB_>I<vlag>B<_MAINT_STRIP> + +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 I<vlag>. + +=item B<DEB_>I<vlag>B<_APPEND> + +=item B<DEB_>I<vlag>B<_MAINT_APPEND> + +Deze variabele kan gebruikt worden om bijkomende opties toe te voegen aan de +waarde die teruggegeven wordt voor de opgegeven I<vlag>. + +=item B<DEB_>I<vlag>B<_PREPEND> + +=item B<DEB_>I<vlag>B<_MAINT_PREPEND> + +Deze variabele kan gebruikt worden om vooraan bijkomende opties toe te +voegen aan de waarde die teruggegeven wordt voor de opgegeven I<vlag>. + +=item B<DEB_BUILD_OPTIONS> + +=item B<DEB_BUILD_MAINT_OPTIONS> + +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 B<DEB_BUILD_MAINT_OPTIONS> vervangt eventuele +instellingen in de functionaliteitsgebieden B<DEB_BUILD_OPTIONS>. Zie het +onderdeel B<FUNCTIONALITEITSGEBIEDEN> voor de details. + +=item B<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 +B<%PKGCONFDIR%/origins/default>. + +=item B<DEB_BUILD_PATH> + +Deze variabele stelt in welk bouwpad (sinds dpkg 1.18.8) gebruikt moet +worden bij functionaliteit zoals B<fixdebugpath> waardoor die gesuperviseerd +kan worden door het aanroepende programma. Momenteel is deze variabele +Debian- en derivaat-specifiek. + +=item B<DPKG_COLORS> + +Stelt de kleurmodus in (sinds dpkg 1.18.5). Waarden die momenteel gebruikt +mogen worden zijn: B<auto> (standaard), B<always> en B<never>. + +=item B<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: B<0> and B<1> (standaard). + +=back + +=head1 BESTANDEN + +=head2 Configuratiebestanden + +=over + +=item B<%PKGCONFDIR%/buildflags.conf> + +Configuratiebestand dat voor het hele systeem geldt. + +=item B<$XDG_CONFIG_HOME/dpkg/buildflags.conf> of + +=item B<$HOME/.config/dpkg/buildflags.conf> + +Configuratiebestand dat gebruikersafhankelijk is. + +=back + +=head2 Ondersteuning bij het maken van een pakket + +=over + +=item B<%PKGDATADIR%/buildflags.mk> + +Makefile-fragment dat alle vlaggen die door B<dpkg-buildflags> ondersteund +worden, laadt in variabelen (en eventueel exporteert) (sinds dpkg 1.16.1). + +=back + +=head1 VOORBEELDEN + +Om in een Makefile bouwvlaggen door te geven aan een bouwcommando: + +=over + + $(MAKE) $(shell dpkg-buildflags --export=cmdline) + + ./configure $(shell dpkg-buildflags --export=cmdline) + +=back + +Om in een shell-script of shell-fragment bouwvlaggen in te stellen, kan +B<eval> gebruikt worden om de uitvoer te interpreteren en de vlaggen in de +omgeving te exporteren: + +=over + + eval "$(dpkg-buildflags --export=sh)" && make + +=back + +of om de positieparameters in te stellen die aan een commando doorgegeven +moeten worden: + +=over + + eval "set -- $(dpkg-buildflags --export=cmdline)" + for dir in a b c; do (cd $dir && ./configure "$@" && make); done + +=back + +=head2 Het gebruik in debian/rules + +Om de benodigde bouwvlaggen te bekomen die aan het bouwsysteem doorgegeven +moeten worden, moet u vanuit het bestand B<debian/rules> B<dpkg-buildflags> +aanroepen of B<buildflags.mk> invoegen. Merk op dat oudere versies van +B<dpkg-buildpackage> (voor dpkg 1.16.1) deze vlaggen automatisch +exporteerden. U zou hierop echter niet mogen betrouwen, aangezien dit het +handmatig aanroepen van B<debian/rules> defect maakt. + +Voor pakketten met een autoconf-achtig bouwsysteem, kunt u de relevante +opties rechtstreeks doorgeven aan configure of B<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 B<--get> +gebruiken. Of in de plaats daarvan kunt u B<buildflags.mk> invoegen, dat +zorgt voor het aanroepen van B<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): + +=over + + DPKG_EXPORT_BUILDFLAGS = 1 + include %PKGDATADIR%/buildflags.mk + +=back + +Als u bijkomende controle wenst over wat geëxporteerd wordt, kunt u de +variabelen handmatig exporteren (aangezien er standaard geen enkele +geëxporteerd wordt): + +=over + + include %PKGDATADIR%/buildflags.mk + export CPPFLAGS CFLAGS LDFLAGS + +=back + +En u kunt de vlaggen natuurlijk ook handmatig doorgeven aan commando's: + +=over + + include %PKGDATADIR%/buildflags.mk + build-arch: + $(CC) -o hello hello.c $(CPPFLAGS) $(CFLAGS) $(LDFLAGS) + +=back + |