chiark / gitweb /
awful debugging hacking
[dpkg] / man / nl / dpkg-buildflags.man
1 .\" dpkg manual page - dpkg-buildflags(1)
2 .\"
3 .\" Copyright © 2010-2011 Raphaël Hertzog <hertzog@debian.org>
4 .\" Copyright © 2011 Kees Cook <kees@debian.org>
5 .\" Copyright © 2011-2015 Guillem Jover <guillem@debian.org>
6 .\"
7 .\" This is free software; you can redistribute it and/or modify
8 .\" it under the terms of the GNU General Public License as published by
9 .\" the Free Software Foundation; either version 2 of the License, or
10 .\" (at your option) any later version.
11 .\"
12 .\" This is distributed in the hope that it will be useful,
13 .\" but WITHOUT ANY WARRANTY; without even the implied warranty of
14 .\" MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
15 .\" GNU General Public License for more details.
16 .\"
17 .\" You should have received a copy of the GNU General Public License
18 .\" along with this program.  If not, see <https://www.gnu.org/licenses/>.
19 .
20 .\"*******************************************************************
21 .\"
22 .\" This file was generated with po4a. Translate the source file.
23 .\"
24 .\"*******************************************************************
25 .TH dpkg\-buildflags 1 %RELEASE_DATE% %VERSION% dpkg\-suite
26 .nh
27 .SH NAAM
28 dpkg\-buildflags \- geeft de bij pakketbouw te gebruiken bouwvlaggen terug
29 .
30 .SH OVERZICHT
31 \fBdpkg\-buildflags\fP [\fIoptie\fP...] [\fIcommando\fP]
32 .
33 .SH BESCHRIJVING
34 \fBdpkg\-buildflags\fP is gereedschap om de compilatievlaggen op te halen die
35 tijdens het bouwen van Debian pakketten gebruikt moeten worden.
36 .
37 De standaardvlaggen worden gedefinieerd door de leverancier, maar ze kunnen
38 op verschillende manieren uitgebreid/vervangen worden:
39 .IP 1.
40 voor het hele systeem met \fB%PKGCONFDIR%/buildflags.conf\fP;
41 .IP 2.
42 voor de huidige gebruiker met \fB$XDG_CONFIG_HOME/dpkg/buildflags.conf\fP,
43 waarbij \fB$XDG_CONFIG_HOME\fP als standaardwaarde \fB$HOME/.config\fP heeft;
44 .IP 3.
45 tijdelijk door de gebruiker met omgevingsvariabelen (zie het onderdeel
46 \fBOMGEVING\fP);
47 .IP 4.
48 dynamisch door de pakketonderhouder met omgevingsvariabelen die ingesteld
49 worden via \fBdebian/rules\fP (zie het onderdeel \fBOMGEVING\fP).
50 .P
51 De configuratiebestanden kunnen vier types opdrachten bevatten:
52 .TP 
53 \fBSET\fP\fI vlag waarde\fP
54 Vervang de waarde van de vlag die \fIvlag\fP als naam heeft in waarde
55 \fIwaarde\fP.
56 .TP 
57 \fBSTRIP\fP\fI vlag waarde\fP
58 Verwijder van de vlag die \fIvlag\fP als naam heeft alle bouwvlaggen die in
59 \fIwaarde\fP opgesomd worden.
60 .TP 
61 \fBAPPEND\fP\fI vlag waarde\fP
62 Breid de vlag die \fIvlag\fP als naam heeft uit door er de opties aan toe te
63 voegen die in \fIwaarde\fP opgegeven worden. Er wordt een spatie geplaatst voor
64 de waarde die toegevoegd wordt, indien de huidige waarde van de vlag niet
65 leeg is.
66 .TP 
67 \fBPREPEND\fP\fI vlag waarde\fP
68 Breid de vlag die \fIvlag\fP als naam heeft uit door er vooraan de opties aan
69 toe te voegen die in \fIwaarde\fP opgegeven worden. Er wordt een spatie
70 geplaatst achter de waarde die toegevoegd wordt, indien de huidige waarde
71 van de vlag niet leeg is.
72 .P
73 De configuratiebestanden kunnen commentaar bevatten op regels die beginnen
74 met een hekje (#). Ook lege regels worden genegeerd.
75 .SH COMMANDO'S
76 .TP 
77 \fB\-\-dump\fP
78 Laat op standaarduitvoer alle compilatievlaggen en hun waarden zien. Dit
79 geeft per regel één vlag en de waarde ervan weer met daartussenin een
80 gelijkheidsteken (“\fIvlag\fP=\fIwaarde\fP”). Dit is de standaardactie.
81 .TP 
82 \fB\-\-list\fP
83 Geeft een lijst weer van vlaggen die door de huidige leverancier ondersteund
84 wordt (één per regel). Zie het onderdeel \fBONDERSTEUNDE VLAGGEN\fP voor meer
85 informatie daarover.
86 .TP 
87 \fB\-\-status\fP
88 Laat eventuele informatie zien die nuttig kan zijn om het gedrag te
89 verklaren van \fBdpkg\-buildflags\fP (sinds dpkg 1.16.5): relevante
90 omgevingsvariabelen, huidige leverancier, toestand van alle
91 functievlaggen. Geef ook de resulterende compileervlaggen met hun oorsprong
92 weer.
93
94 Het is de bedoeling dat dit uitgevoerd wordt vanuit \fBdebian/rules\fP, zodat
95 de bouwlog een duidelijk spoor van de gebruikte vlaggen kan bijhouden. Dit
96 kan nuttig zijn om ermee verband houdende problemen te diagnosticeren.
97 .TP 
98 \fB\-\-export=\fP\fIindeling\fP
99 Geef op standaarduitvoer commando's weer die gebruikt kunnen worden om alle
100 compilatievlaggen te exporteren ten behoeve van een specifiek
101 gereedschap. Indien de waarde \fIindeling\fP niet opgegeven werd, wordt \fBsh\fP
102 verondersteld. Enkel compilatievlaggen die met een hoofdletter beginnen
103 worden opgenomen. Van de andere wordt aangenomen dat ze niet bruikbaar zijn
104 voor de omgeving. Ondersteunde indelingen:
105 .RS
106 .TP 
107 \fBsh\fP
108 Shell\-opdrachten om alle compilatievlaggen in de omgeving in te stellen en
109 te exporteren. Er worden aanhalingstekens geplaatst rond de vlagwaarden
110 waardoor de uitvoer gereed is om door een shell geëvalueerd te worden.
111 .TP 
112 \fBcmdline\fP
113 Argumenten om door te geven aan de commandoregel van een bouwprogramma om al
114 de compilatievlaggen te gebruiken (sinds dpkg 1.17.0). De vlagwaarden worden
115 volgens de shell\-syntaxis tussen haakjes geplaatst.
116 .TP 
117 \fBconfigure\fP
118 Dit is een verouderde alias voor \fBcmdline\fP.
119 .TP 
120 \fBmake\fP
121 Make\-opdrachten om alle compilatievlaggen in de omgeving in te stellen en te
122 exporteren. De uitvoer kan naar een makefile\-fragment geschreven worden en
123 geëvalueerd met behulp van een \fBinclude\fP\-opdracht.
124 .RE
125 .TP 
126 \fB\-\-get\fP\fI vlag\fP
127 Geef de waarde van de vlag weer op de standaarduitvoer. Sluit af met 0 bij
128 een gekende vlag en sluit anders af met 1.
129 .TP 
130 \fB\-\-origin\fP\fI vlag\fP
131 Geef de origine weer van de waarde die teruggegeven wordt door
132 \fB\-\-get\fP. Sluit af met 0 bij een gekende vlag en sluit anders af met 1. De
133 origine kan één van de volgende waarden hebben:
134 .RS
135 .TP 
136 \fBvendor\fP
137 de originele vlag die door de leverancier ingesteld werd, wordt
138 teruggegeven;
139 .TP 
140 \fBsystem\fP
141 de vlag werd ingesteld/gewijzigd door een systeemconfiguratie;
142 .TP 
143 \fBuser\fP
144 de vlag werd ingesteld/gewijzigd door een gebruikersspecifieke configuratie;
145 .TP 
146 \fBenv\fP
147 de vlag werd ingesteld/gewijzigd door een omgevingsspecifieke configuratie.
148 .RE
149 .TP 
150 \fB\-\-query\-features\fP\fI gebied\fP
151 Geef de functionaliteit weer die voor een opgegeven gebied geactiveerd is
152 (sinds dpkg 1.16.2). Momenteel worden door Debian en zijn derivaten enkel de
153 gebieden \fBqa\fP, \fBreproducible\fP, \fBsanitize\fP en \fBhardening\fP erkend. Zie het
154 onderdeel \fBFUNCTIONALITEITSGEBIEDEN\fP voor meer details. Sluit af met 0 als
155 het gebied gekend is, anders met 1.
156 .IP
157 De uitvoer is in RFC822\-indeling met één sectie per functie. Bijvoorbeeld:
158 .IP
159 .nf
160   Feature: pie
161   Enabled: yes
162
163   Feature: stackprotector
164   Enabled: yes
165 .fi
166 .TP 
167 \fB\-\-help\fP
168 Toon info over het gebruik en sluit af.
169 .TP 
170 \fB\-\-version\fP
171 Toon de versie en sluit af.
172 .
173 .SH "ONDERSTEUNDE VLAGGEN"
174 .TP 
175 \fBCFLAGS\fP
176 Opties voor de C\-compiler. De door de leverancier ingestelde standaardwaarde
177 bestaat uit \fB\-g\fP en het standaardniveau van optimalisatie (gewoonlijk
178 \fB\-O2\fP, of \fB\-O0\fP indien de omgevingsvariabele \fBDEB_BUILD_OPTIONS\fP \fInoopt\fP
179 aangeeft).
180 .TP 
181 \fBCPPFLAGS\fP
182 Opties voor de C\-preprocessor. Standaardwaarde: leeg.
183 .TP 
184 \fBCXXFLAGS\fP
185 Opties voor de C++ compiler. Hetzelfde als \fBCFLAGS\fP.
186 .TP 
187 \fBOBJCFLAGS\fP
188 Opties voor de Objective C compiler. Hetzelfde als \fBCFLAGS\fP.
189 .TP 
190 \fBOBJCXXFLAGS\fP
191 Opties voor de Objective C++ compiler. Hetzelfde als \fBCXXFLAGS\fP.
192 .TP 
193 \fBGCJFLAGS\fP
194 Opties voor de GNU Java compiler (gcj). Een subset van \fBCFLAGS\fP.
195 .TP 
196 \fBFFLAGS\fP
197 Opties voor de Fortran 77 compiler. Een subset van \fBCFLAGS\fP.
198 .TP 
199 \fBFCFLAGS\fP
200 Opties voor de Fortran 9x compiler. Hetzelfde als \fBFFLAGS\fP.
201 .TP 
202 \fBLDFLAGS\fP
203 Opties die aan de compiler doorgegeven worden bij het linken van uitvoerbare
204 programma's en gedeelde objecten (indien de linker rechtstreeks aangeroepen
205 wordt, dan moeten \fB\-Wl\fP en \fB,\fP van die opties verwijderd
206 worden). Standaardwaarde: leeg.
207 .PP
208 In de toekomst kunnen nog andere vlaggen toegevoegd worden als daar behoefte
209 aan ontstaat (bijvoorbeeld om andere talen te ondersteunen).
210 .
211 .SH FUNCTIONALITEITSGEBIEDEN
212 .P
213 Elke gebiedsfunctionaliteit kan in de gebiedswaarde van de
214 omgevingsvariabelen \fBDEB_BUILD_OPTIONS\fP en \fBDEB_BUILD_MAINT_OPTIONS\fP
215 ingeschakeld en uitgeschakeld worden met de schakelaars ‘\fB+\fP’ en ‘\fB\-\fP’. Om
216 bijvoorbeeld de \fBhardening\fP\-functionaliteit “pie” te activeren en de
217 functionaliteit “fortify” uit te schakelen, kunt u in \fBdebian/rules\fP het
218 volgende doen:
219 .P
220   export DEB_BUILD_MAINT_OPTIONS=hardening=+pie,\-fortify
221 .P
222 De bijzondere functionaliteit \fBall\fP (geldig in elk gebied) kan gebruikt
223 worden om gelijktijdig alle gebiedsfunctionaliteit te activeren of uit te
224 schakelen. Alles uitschakelen in het gebied \fBhardening\fP en enkel “format”
225 en “fortify” activeren kunt u dus doen met:
226 .P
227   export DEB_BUILD_MAINT_OPTIONS=hardening=\-all,+format,+fortify
228 .
229 .SS "qa (kwaliteitsbevordering)"
230 Er kunnen verschillende compilatieopties (die hierna beschreven worden)
231 gebruikt worden om problemen in de broncode of het bouwsysteem te helpen
232 detecteren.
233 .TP 
234 \fBbug\fP
235 Deze instelling (die standaard uitgeschakeld is) voegt alle
236 waarschuwingsopties toe die op een betrouwbare wijze problematische broncode
237 opsporen. De waarschuwingen zijn fataal. De enige vlaggen die momenteel
238 ondersteund worden zijn \fBCFLAGS\fP en \fBCXXFLAGS\fP waarbij de vlaggen
239 ingesteld staan op \fB\-Werror=array\-bounds\fP, \fB\-Werror=clobbered\fP,
240 \fB\-Werror=implicit\-function\-declaration\fP en
241 \fB\-Werror=volatile\-register\-var\fP.
242 .
243 .TP 
244 \fBcanary\fP
245 Deze instelling (die standaard uitgeschakeld is) voegt loze
246 kanarievogelopties toe aan de bouwvlaggen, zodat in de bouwlogs nagekeken
247 kan worden hoe de bouwvlaggen doorgegeven worden en zodat het eventueel
248 ontbreken van normale bouwvlaginstellingen ontdekt kan worden. Momenteel
249 zijn de enige ondersteunde vlaggen \fBCPPFLAGS\fP, \fBCFLAGS\fP, \fBOBJCFLAGS\fP,
250 \fBCXXFLAGS\fP en \fBOBJCXXFLAGS\fP, waarbij die vlaggen als
251 \fB\-D__DEB_CANARY_\fP\fIvlag\fP_\fIwillekeurige\-id\fP\fB__\fP ingesteld worden, en
252 \fBLDFLAGS\fP dat ingesteld wordt op \fB\-Wl,\-z,deb\-canary\-\fP\fIwillekeurige\-id\fP.
253 .
254 .SS "sanitize (saneren)"
255 Er kunnen verschillende compilatie\-opties (die hierna beschreven worden)
256 gebruikt worden om te helpen bij het gezond houden van een resulterend
257 binair pakket op het vlak van geheugenvervuiling, geheugenlekkage,
258 geheugengebruik na vrijgave, dataraces bij threads en bugs door
259 ongedefinieerd gedrag.
260 .TP 
261 \fBaddress\fP
262 Deze instelling (standaard uitgeschakeld) voegt \fB\-fsanitize=address\fP toe
263 aan \fBLDFLAGS\fP en \fB\-fsanitize=address \-fno\-omit\-frame\-pointer\fP aan
264 \fBCFLAGS\fP en aan \fBCXXFLAGS\fP.
265 .TP 
266 \fBthread\fP
267 Deze instelling (standaard uitgeschakeld) voegt \fB\-fsanitize=thread\fP toe aan
268 \fBCFLAGS\fP, \fBCXXFLAGS\fP en \fBLDFLAGS\fP.
269 .TP 
270 \fBleak\fP
271 Deze instelling (standaard uitgeschakeld) voegt \fB\-fsanitize=leak\fP toe aan
272 \fBLDFLAGS\fP. Ze wordt automatisch uitgeschakeld als ofwel de
273 \fBaddress\fP\-functionaliteit of de \fBthread\fP\-functionaliteit geactiveerd is,
274 aangezien die dit impliceren.
275 .TP 
276 \fBundefined\fP
277 Deze instelling (standaard uitgeschakeld) voegt \fB\-fsanitize=undefined\fP toe
278 aan \fBCFLAGS\fP, \fBCXXFLAGS\fP en \fBLDFLAGS\fP.
279 .SS "hardening (kwetsbaarheidsreductie)"
280 Er kunnen verschillende compilatie\-opties (die hierna beschreven worden)
281 gebruikt worden om te helpen bij het versterken van een resulterend binair
282 pakket tegen geheugenvervuilingsaanvallen of om bijkomende
283 waarschuwingsberichten te geven tijdens het compileren. Behalve wanneer
284 hierna anders aangegeven is, worden deze opties standaard geactiveerd voor
285 architecturen die ze ondersteunen.
286 .TP 
287 \fBformat\fP
288 Deze instelling (standaard geactiveerd) voegt \fB\-Wformat
289 \-Werror=format\-security\fP toe aan \fBCFLAGS\fP, \fBCXXFLAGS\fP, \fBOBJCFLAGS\fP en
290 \fBOBJCXXFLAGS\fP. Dit zal waarschuwingen geven bij verkeerd gebruik van
291 indelingstekenreeksen en zal mislukken als indelingsfuncties gebruikt worden
292 op een manier die mogelijke veiligheidsproblemen tot gevolg kunnen
293 hebben. Momenteel geeft dit een waarschuwing als een \fBprintf\fP\-functie of
294 een \fBscanf\fP\-functie aangeroepen wordt met een indelingstekenreeks die geen
295 letterlijke tekenreeks is en er ook geen indelingsargumenten opgegeven
296 werden, zoals bij \fBprintf(foo);\fP in plaats van \fBprintf("%s", foo);\fP. Dit
297 kan een veiligheidslek zijn als de indelingstekenreeks afkomstig was van
298 onbetrouwbare invoer en ‘%n’ bevat.
299 .
300 .TP 
301 \fBfortify\fP
302 Deze instelling (standaard geactiveerd) voegt \fB\-D_FORTIFY_SOURCE=2\fP toe aan
303 \fBCPPFLAGS\fP. Tijdens het produceren van de code heeft de compiler een
304 heleboel informatie over buffergroottes (waar mogelijk), en tracht een
305 functieaanroep met een onveilige ongelimiteerde buffergrootte te vervangen
306 door een functieaanroep met een gelimiteerde buffergrootte. Dit is in het
307 bijzonder nuttig bij oude en slecht geschreven code. Daarnaast wordt het
308 gebruik in het voor schrijven toegankelijk geheugen van
309 indelingstekenreeksen die ‘%n’ bevatten, geblokkeerd. Indien een toepassing
310 op een dergelijke indelingstekenreeks steunt, zal het er een alternatief
311 voor moeten gebruiken.
312
313 Merk op dat de code ook met \fB\-O1\fP of hoger gecompileerd moet worden opdat
314 deze optie effect zou hebben. Indien de omgevingsvariabele
315 \fBDEB_BUILD_OPTIONS\fP \fInoopt\fP bevat, dan wordt ondersteuning voor \fBfortify\fP
316 uitgeschakeld. Dit is te wijten aan nieuwe waarschuwingen die gegeven worden
317 door glibc 2.16 en hoger.
318 .TP 
319 \fBstackprotector\fP
320 Deze instelling (standaard geactiveerd als stackprotectorstrong niet
321 gebruikt wordt) voegt \fB\-fstack\-protector \-\-param=ssp\-buffer\-size=4\fP toe aan
322 \fBCFLAGS\fP, \fBCXXFLAGS\fP, \fBOBJCFLAGS\fP, \fBOBJCXXFLAGS\fP, \fBGCJFLAGS\fP, \fBFFLAGS\fP
323 en \fBFCFLAGS\fP. Dit voegt beveiligingscontroles tegen het overschrijven van
324 de stack toe. Dit maakt dat bij veel mogelijke code\-injectieaanvallen
325 afgebroken wordt. In het beste geval wordt op die manier een kwetsbaarheid
326 voor code\-injectie omgebogen tot een denial\-of\-service (dienst niet
327 beschikbaar) of een fictief probleem (afhankelijk van de toepassing).
328
329 Deze functionaliteit vereist het linken van de code met glibc (of een andere
330 aanbieder van \fB__stack_chk_fail\fP) en moet dus uitgeschakeld worden als er
331 gebouwd wordt met \fB\-nostdlib\fP of \fB\-ffreestanding\fP of iets gelijkaardigs.
332 .
333 .TP 
334 \fBstackprotectorstrong\fP
335 Deze instelling (standaard geactiveerd) voegt \fB\-fstack\-protector\-strong\fP
336 toe aan \fBCFLAGS\fP, \fBCXXFLAGS\fP, \fBOBJCFLAGS\fP, \fBOBJCXXFLAGS\fP, \fBGCJFLAGS\fP,
337 \fBFFLAGS\fP en \fBFCFLAGS\fP. Dit is een sterkere variant van \fBstackprotector\fP,
338 maar zonder noemenswaardig prestatieverlies.
339
340 Het uitzetten van \fBstackprotector\fP schakelt ook deze functionaliteit uit.
341
342 Deze functionaliteit stelt dezelfde vereisten als \fBstackprotector\fP en heeft
343 daarenboven ook gcc 4.9 of een recentere versie nodig.
344 .
345 .TP 
346 \fBrelro\fP
347 Deze instelling (standaard geactiveerd) voegt \fB\-Wl,\-z,relro\fP toe aan
348 \fBLDFLAGS\fP. Tijdens het laden van het programma moet de linker in
349 verschillende ELF\-geheugensecties schrijven. Dit zet voor de programmalader
350 een vlag zodat die deze secties alleen\-lezen maakt alvorens de controle over
351 te dragen aan het programma. Het meest noemenswaardige effect is dat dit
352 aanvallen door het overschrijven van de Global Offset Table (GOT)
353 voorkomt. Indien deze optie uitgeschakeld wordt, wordt ook \fBbindnow\fP
354 uitgezet.
355 .
356 .TP 
357 \fBbindnow\fP
358 Deze instelling (standaard uitgeschakeld) voegt \fB\-Wl,\-z,now\fP toe aan
359 \fBLDFLAGS\fP. Tijdens het laden van het programma worden alle dynamische
360 symbolen omgezet, waardoor de volledige PLT (Procedure Linkage Table) als
361 alleen lezen gemarkeerd kan worden (ten gevolge van \fBrelro\fP hiervoor). Deze
362 optie kan niet aangezet worden als \fBrelro\fP niet geactiveerd is.
363 .
364 .TP 
365 \fBpie\fP
366 Deze instelling (zonder standaardinstelling sinds dpkg 1.18.23 en door gcc
367 standaard geïnjecteerd bij de Debian architecturen amd64, arm64, armel,
368 armhf, i386, kfreebsd\-amd64, kfreebsd\-i386, mips, mipsel, mips64el, ppc64el,
369 s390x, sparc en sparc64) voegt zo nodig de vereiste opties toe om PIE te
370 activeren of te deactiveren. In geval van activering en door gcc
371 geïnjecteerd, wordt er niets toegevoegd, In geval van activering en niet
372 geïnjecteerd door gcc, wordt \fB\-fPIE\fP toegevoegd bij \fBCFLAGS\fP, \fBCXXFLAGS\fP,
373 \fBOBJCFLAGS\fP, \fBOBJCXXFLAGS\fP, \fBGCJFLAGS\fP, \fBFFLAGS\fP en \fBFCFLAGS\fP, en
374 \fB\-fPIE \-pie\fP bij \fBLDFLAGS\fP. In geval van deactivering en geïnjecteerd door
375 gcc wordt \fB\-fno\-PIE\fP toegevoegd bij \fBCFLAGS\fP, \fBCXXFLAGS\fP, \fBOBJCFLAGS\fP,
376 \fBOBJCXXFLAGS\fP, \fBGCJFLAGS\fP, \fBFFLAGS\fP en \fBFCFLAGS\fP, en \fB\-fno\-PIE \-no\-pie\fP
377 bij \fBLDFLAGS\fP.
378
379 Position Independent Executable (PIE \- positie\-onafhankelijke programma's)
380 zijn nodig om voordeel te halen uit Address Space Layout Randomization (ASLR
381 \- de adresruimte rangschikken in toevallige volgorde), hetgeen door sommige
382 kernelversies ondersteund wordt. Hoewel ASLR reeds voor datagebieden in de
383 stack en de heap opgelegd kan worden (brk and mmap), moeten de codegebieden
384 als positieonafhankelijk gecompileerd worden. Gedeelde bibliotheken doen dit
385 reeds (\fB\-fPIC\fP), waardoor zij automatisch ASLR krijgen, maar binaire
386 \&.text\-gebieden moeten als PIE gebouwd worden om ASLR te krijgen. Als dit
387 gebeurt, worden aanvallen van het type ROP (Return Oriented Programming \- op
388 terugkeerwaarde georiënteerd programmeren) veel moeilijker aangezien er geen
389 statische locaties meer zijn die bij een aanval van geheugenvervuiling als
390 springplank gebruikt kunnen worden.
391
392 PIE is niet compatibel met \fB\-fPIC\fP, dus over het algemeen moet men
393 voorzichtig zijn bij het bouwen van gedeelde objecten. Maar aangezien de
394 PIE\-vlaggen die meegegeven worden geïnjecteerd worden via specs\-bestanden
395 van gcc, zou het altijd veilig moeten zijn om ze onvoorwaardelijk in te
396 stellen ongeacht het objecttype dat gecompileerd of gelinkt wordt.
397
398 Statische bibliotheken kunnen door programma's of door andere gedeelde
399 bibliotheken gebruikt worden. Afhankelijk van de gebruikte vlaggen bij het
400 compileren van alle objecten in een statische bibliotheek, zullen deze
401 bibliotheken door verschillende reeksen objecten gebruikt kunnen worden:
402
403 .RS
404 .TP 
405 geen
406 Kan niet gelinkt worden aan een PIE\-programma, noch aan een gedeelde
407 bibliotheek.
408 .TP 
409 \fB\-fPIE\fP
410 Kan gelinkt worden aan elk programma, maar niet aan een gedeelde bibliotheek
411 (aanbevolen).
412 .TP 
413 \fB\-fPIC\fP
414 Kan gelinkt worden aan elk programma en elke gedeelde bibliotheek.
415 .RE
416
417 .IP
418 Indien er een behoefte bestaat om deze vlaggen manueel in te stellen en de
419 gcc specs\-injectie te overbruggen, moet u rekening houden met verschillende
420 zaken. Het onvoorwaardelijk en expliciet doorgeven van \fB\-fPIE\fP, \fB\-fpie\fP of
421 \fB\-pie\fP aan een bouwsysteem dat libtool gebruikt, is veilig aangezien deze
422 vlaggen weggelaten worden bij het bouwen van gedeelde bibliotheken. Bij
423 projecten waarin daarentegen zowel programma's als gedeelde bibliotheken
424 gebouwd worden, moet u ervoor zorgen dat bij het bouwen van de gedeelde
425 bibliotheken \fB\-fPIC\fP steeds als laatste doorgegeven wordt (waardoor het een
426 eventuele voorafgaande \fB\-PIE\fP opheft) aan compilatievlaggen zoals \fBCFLAGS\fP
427 en dat \fB\-shared\fP als laatste doorgegeven wordt (waardoor het een eventuele
428 voorafgaande \fB\-pie\fP opheft) aan linkvlaggen zoals \fBLDFLAGS\fP. \fBOpmerking:\fP
429 dit is niet nodig met het standaard specs\-mechanisme van gcc.
430
431 .IP
432 Aangezien PIE via een algemeen register geïmplementeerd wordt, kunnen
433 bovendien bij sommige architecturen (maar niet meer bij i386 sinds de
434 optimalisaties die in gcc >= 5 toegepast zijn) prestatieverminderingen
435 tot 15% optreden bij zeer zware belasting met tekstsegmenten van
436 toepassingen. De meeste belastingen hebben minder dan 1%
437 prestatievermindering tot gevolg. Architecturen met meer algemene registers
438 (bijv. amd64) vertonen niet zo een hoge terugval in de ergste gevallen.
439 .SS "reproducible (reproduceerbaar)"
440 De hierna behandelde compilatieopties kunnen gebruikt worden om de
441 bouwreproduceerbaarheid te helpen verbeteren of om bijkomende
442 waarschuwingsberichten af te leveren tijdens het compileren. Behalve wanneer
443 het hierna aangegeven wordt, worden deze opties standaard geactiveerd voor
444 architecturen die ze ondersteunen.
445 .TP 
446 \fBtimeless\fP
447 Deze instelling (standaard geactiveerd) voegt \fB\-Wdate\-time\fP toe bij
448 \fBCPPFLAGS\fP. Dit leidt tot waarschuwingen als de macros \fB__TIME__\fP,
449 \fB__DATE__\fP en \fB__TIMESTAMP__\fP gebruikt worden.
450 .
451 .TP 
452 \fBfixdebugpath\fP
453 Deze instelling (standaard geactiveerd) voegt
454 \fB\-fdebug\-prefix\-map=\fP\fIBUILDPATH\fP\fB=.\fP toe aan \fBCFLAGS\fP, \fBCXXFLAGS\fP,
455 \fBOBJCFLAGS\fP, \fBOBJCXXFLAGS\fP, \fBGCJFLAGS\fP, \fBFFLAGS\fP en \fBFCFLAGS\fP, waarbij
456 \fBBUILDPATH\fP ingesteld wordt op de basismap van het pakket dat gebouwd
457 wordt. Dit heeft als effect dat het bouwpad verwijderd wordt van eventueel
458 gegenereerde debug\-symbolen.
459 .
460 .SH OMGEVING
461 Er zijn twee sets omgevingsvariabelen die dezelfde operaties uitvoeren. De
462 eerste (DEB_\fIvlag\fP_\fIoperatie\fP) zou nooit gebruikt mogen worden binnen
463 \fBdebian/rules\fP. Die is bedoeld voor eventuele gebruikers die het bronpakket
464 opnieuw willen bouwen met andere bouwvlaggen. De tweede set
465 (DEB_\fIvlag\fP_MAINT_\fIoperatie\fP) zou door pakketonderhouders enkel in
466 \fBdebian/rules\fP gebruikt moeten worden om de resulterende bouwvlaggen aan te
467 passen.
468 .TP 
469 \fBDEB_\fP\fIvlag\fP\fB_SET\fP
470 .TQ
471 \fBDEB_\fP\fIvlag\fP\fB_MAINT_SET\fP
472 Deze variabele kan gebruikt worden om de teruggegeven waarde voor de
473 opgegeven vlag \fIvlag\fP af te dwingen.
474 .TP 
475 \fBDEB_\fP\fIvlag\fP\fB_STRIP\fP
476 .TQ
477 \fBDEB_\fP\fIvlag\fP\fB_MAINT_STRIP\fP
478 Deze variabele kan gebruikt worden om in een lijst met witruimte als
479 scheidingsteken opties op te geven die weggehaald zullen worden uit de set
480 vlaggen die teruggegeven wordt voor de opgegeven \fIvlag\fP.
481 .TP 
482 \fBDEB_\fP\fIvlag\fP\fB_APPEND\fP
483 .TQ
484 \fBDEB_\fP\fIvlag\fP\fB_MAINT_APPEND\fP
485 Deze variabele kan gebruikt worden om bijkomende opties toe te voegen aan de
486 waarde die teruggegeven wordt voor de opgegeven \fIvlag\fP.
487 .TP 
488 \fBDEB_\fP\fIvlag\fP\fB_PREPEND\fP
489 .TQ
490 \fBDEB_\fP\fIvlag\fP\fB_MAINT_PREPEND\fP
491 Deze variabele kan gebruikt worden om vooraan bijkomende opties toe te
492 voegen aan de waarde die teruggegeven wordt voor de opgegeven \fIvlag\fP.
493 .TP 
494 \fBDEB_BUILD_OPTIONS\fP
495 .TQ
496 \fBDEB_BUILD_MAINT_OPTIONS\fP
497 Deze variabelen kunnen door een gebruiker of een onderhouder gebruikt worden
498 om diverse gebiedsfuncties die bouwvlaggen beïnvloeden, te activeren of uit
499 te zetten. De variabele \fBDEB_BUILD_MAINT_OPTIONS\fP vervangt eventuele
500 instellingen in de functionaliteitsgebieden \fBDEB_BUILD_OPTIONS\fP. Zie het
501 onderdeel \fBFUNCTIONALITEITSGEBIEDEN\fP voor de details.
502 .TP 
503 \fBDEB_VENDOR\fP
504 Deze instelling definieert de huidige leverancier. Indien zij niet ingesteld
505 is, zal gezocht worden naar de huidige leverancier door te gaan lezen in
506 \fB%PKGCONFDIR%/origins/default\fP.
507 .TP 
508 \fBDEB_BUILD_PATH\fP
509 Deze variabele stelt in welk bouwpad (sinds dpkg 1.18.8) gebruikt moet
510 worden bij functionaliteit zoals \fBfixdebugpath\fP waardoor die gesuperviseerd
511 kan worden door het aanroepende programma. Momenteel is deze variabele
512 Debian\- en derivaat\-specifiek.
513 .
514 .SH BESTANDEN
515 .SS Configuratiebestanden
516 .TP 
517 \fB%PKGCONFDIR%/buildflags.conf\fP
518 Configuratiebestand dat voor het hele systeem geldt.
519 .TP 
520 \fB$XDG_CONFIG_HOME/dpkg/buildflags.conf\fP of 
521 .TQ
522 \fB$HOME/.config/dpkg/buildflags.conf\fP
523 Configuratiebestand dat gebruikersafhankelijk is.
524 .SS "Ondersteuning bij het maken van een pakket"
525 .TP 
526 \fB%PKGDATADIR%/buildflags.mk\fP
527 Makefile\-fragment dat alle vlaggen die door \fBdpkg\-buildflags\fP ondersteund
528 worden, laadt in variabelen (en eventueel exporteert) (sinds dpkg 1.16.1).
529 .
530 .SH VOORBEELDEN
531 Om in een makefile bouwvlaggen door te geven aan een bouwcommando:
532 .PP
533 .RS 4
534 .nf
535 $(MAKE) $(shell dpkg\-buildflags \-\-export=cmdline)
536
537 \&./configure $(shell dpkg\-buildflags \-\-export=cmdline)
538 .fi
539 .RE
540 .PP
541 Om in een shell\-script of shell\-fragment bouwvlaggen in te stellen, kan
542 \fBeval\fP gebruikt worden om de uitvoer te interpreteren van en de vlaggen
543 naar de omgeving te exporteren:
544 .PP
545 .RS 4
546 .nf
547 eval "$(dpkg\-buildflags \-\-export=sh)" && make
548 .fi
549 .RE
550 .PP
551 of om de positieparameters in te stellen die aan een commando doorgegeven
552 moeten worden:
553 .PP
554 .RS 4
555 .nf
556 eval "set \-\- $(dpkg\-buildflags \-\-export=cmdline)"
557 for dir in a b c; do (cd $dir && ./configure "$@" && make); done
558 .fi
559 .RE
560 .
561 .SS "Het gebruik in debian/rules"
562 Om de benodigde bouwvlaggen te bekomen die aan het bouwsysteem doorgegeven
563 moeten worden, moet u vanuit het bestand \fBdebian/rules\fP \fBdpkg\-buildflags\fP
564 aanroepen of \fBbuildflags.mk\fP invoegen. Merk op dat oudere versies van
565 \fBdpkg\-buildpackage\fP (voor dpkg 1.16.1) deze vlaggen automatisch
566 exporteerden. U zou hierop echter niet mogen betrouwen, aangezien dit het
567 handmatig aanroepen van \fBdebian/rules\fP defect maakt.
568 .PP
569 Voor pakketten met een autoconf\-achtig bouwsysteem, kunt u de relevante
570 opties rechtstreeks doorgeven aan configure of \fBmake\fP(1), zoals hiervoor
571 geïllustreerd werd.
572 .PP
573 Voor andere bouwsystemen, of indien u een meer fijnmazige controle nodig
574 heeft over welke vlaggen waar doorgegeven worden, kunt u \fB\-\-get\fP
575 gebruiken. Of in de plaats daarvan kunt u \fBbuildflags.mk\fP invoegen, dat
576 zorgt voor het aanroepen van \fBdpkg\-buildflags\fP en het opslaan van de
577 bouwvlaggen in variabelen voor make.
578 .PP
579 Indien u alle bouwvlaggen naar de omgeving wenst te exporteren (waar ze door
580 uw bouwsysteem opgepikt kunnen worden):
581 .PP
582 .RS 4
583 .nf
584 DPKG_EXPORT_BUILDFLAGS = 1
585 include %PKGDATADIR%/buildflags.mk
586 .fi
587 .RE
588 .PP
589 Als u bijkomende controle wenst over wat geëxporteerd wordt, kunt u de
590 variabelen handmatig exporteren (aangezien er standaard geen enkele
591 geëxporteerd wordt):
592 .PP
593 .RS 4
594 .nf
595 include %PKGDATADIR%/buildflags.mk
596 export CPPFLAGS CFLAGS LDFLAGS
597 .fi
598 .RE
599 .PP
600 En u kunt de vlaggen natuurlijk ook handmatig doorgeven aan commando's:
601 .PP
602 .RS 4
603 .nf
604 include %PKGDATADIR%/buildflags.mk
605 build\-arch:
606 \&      $(CC) \-o hello hello.c $(CPPFLAGS) $(CFLAGS) $(LDFLAGS)
607 .fi
608 .RE