summaryrefslogtreecommitdiffstats
path: root/man/nl/dpkg-buildflags.pod
blob: 385f2549492b290d8a262e7b4c3c9fb3c5e339c7 (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
203
204
205
206
207
208
209
210
211
212
213
214
215
216
217
218
219
220
221
222
223
224
225
226
227
228
229
230
231
232
233
234
235
236
237
238
239
240
241
242
243
244
245
246
247
248
249
250
251
252
253
254
255
256
257
258
259
260
261
262
263
264
265
266
267
268
269
270
271
272
273
274
275
276
277
278
279
280
281
282
283
284
285
286
287
288
289
290
291
292
293
294
295
296
297
298
299
300
301
302
303
304
305
306
307
308
309
310
311
312
313
314
315
316
317
318
319
320
321
322
323
324
325
326
327
328
329
330
331
332
333
334
335
336
337
338
339
340
341
342
343
344
345
346
347
348
349
350
351
352
353
354
355
356
357
358
359
360
361
362
363
364
365
366
367
368
369
370
371
372
373
374
375
376
377
378
379
380
381
382
383
384
385
386
387
388
389
390
391
392
393
394
395
396
397
398
399
400
401
402
403
404
405
406
407
408
409
410
411
412
413
414
415
416
417
418
419
420
421
422
423
424
425
426
427
428
429
430
431
432
433
434
435
436
437
438
439
440
441
442
443
444
445
446
447
448
449
450
451
452
453
454
455
456
457
458
459
460
461
462
463
464
465
466
467
468
469
470
471
472
473
474
475
476
477
478
479
480
481
482
483
484
485
486
487
488
489
490
491
492
493
494
495
496
497
498
499
500
501
502
503
504
505
506
507
508
509
510
511
512
513
514
515
516
517
518
519
520
521
522
523
524
525
526
527
528
529
530
531
532
533
534
535
536
537
538
539
540
541
542
543
544
545
546
547
548
549
550
551
552
553
554
555
556
557
558
559
560
561
562
563
564
565
566
567
568
569
570
571
572
573
574
575
576
577
578
579
580
581
582
583
584
585
586
587
588
589
590
591
592
593
594
595
596
597
598
599
600
601
602
603
604
605
606
607
608
609
610
611
612
613
614
615
616
617
618
619
620
621
622
623
624
625
626
627
628
629
630
631
632
633
634
635
636
637
638
639
640
641
642
643
644
645
646
647
648
649
650
651
652
653
654
655
656
657
658
659
660
661
662
663
664
665
        *****************************************************
        *           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 L</OMGEVING>);

=item 4.

dynamisch door de pakketbeheerder met omgevingsvariabelen die ingesteld worden via B<debian/rules> (zie het onderdeel L</OMGEVING>).

=back

De configuratiebestanden kunnen vier types opdrachten bevatten:

=over 

=item B<SET> I<vlag> I<waarde>

De vlag met I<vlag> als naam overschrijven om ze de waarde I<waarde> te geven.

=item B<STRIP> I<vlag> I<waarde>

Van de vlag met I<vlag> als naam alle bouwvlaggen verwijderen die in I<waarde> opgesomd worden. Sinds dpkg 1.16.1.

=item B<APPEND> I<vlag> I<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> I<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. Sinds dpkg 1.16.1.

=back

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.

=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 L</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, 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=2
 Origin: vendor

=item B<--query-features> I<gebied>

De functies weergeven die voor een opgegeven gebied geactiveerd zijn (sinds dpkg 1.16.2). Als de functie door de compiler als een ingebouwde standaard wordt behandeld (al is het maar op sommige architecturen), dan wordt een veld B<Builtin> weergegeven (sinds dpkg 1.21.14). Zie het onderdeel L<FUNCTIEGEBIEDEN> voor meer details over de gebieden die momenteel herkend worden. 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
 Builtin: 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<ASFLAGS>

Opties voor de host-assembler. Standaardwaarde: leeg. Sinds dpkg 1.21.0.

=item B<CFLAGS>

Opties voor de host-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 host-C-preprocessor. Standaardwaarde: leeg.

=item B<CXXFLAGS>

Opties voor de host-C++ compiler. Hetzelfde als B<CFLAGS>.

=item B<OBJCFLAGS>

Opties voor de host-Objective C compiler. Hetzelfde als B<CFLAGS>. Sinds dpkg 1.17.7.

=item B<OBJCXXFLAGS>

Opties voor de host-Objective C++ compiler. Hetzelfde als B<CXXFLAGS>. Sinds dpkg 1.17.7.

=item B<DFLAGS>

Opties voor de host-D-compiler (ldc of gdc). Sinds dpkg 1.20.6.

=item B<FFLAGS>

Opties voor de host-Fortran 77 compiler. Een subset van B<CFLAGS>.

=item B<FCFLAGS>

Opties voor de host-Fortran 9x compiler. Hetzelfde als B<FFLAGS>. Sinds dpkg 1.17.7.

=item B<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 B<-Wl> en B<,> van die opties verwijderd worden). Standaardwaarde: leeg.

=item B<ASFLAGS_FOR_BUILD>

Opties voor de bouwassembler. Standaardwaarde: leeg. Sinds dpkg 1.21.0.

=item B<CFLAGS_FOR_BUILD>

Opties voor de bouw-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). Sinds dpkg 1.22.1.

=item B<CPPFLAGS_FOR_BUILD>

Opties voor de bouw-C-preprocessor. Standaardwaarde: leeg. Sinds dpkg 1.22.1.

=item B<CXXFLAGS_FOR_BUILD>

Opties voor de bouw-C++ compiler. Hetzelfde als B<CFLAGS_FOR_BUILD>. Sinds dpkg 1.22.1.

=item B<OBJCFLAGS_FOR_BUILD>

Opties voor de bouw-Objective C compiler. Hetzelfde als B<CFLAGS_FOR_BUILD>. Sinds dpkg 1.22.1.

=item B<OBJCXXFLAGS_FOR_BUILD>

Opties voor de bouw-Objective C++ compiler. Hetzelfde als B<CXXFLAGS_FOR_BUILD>. Sinds dpkg 1.22.1.

=item B<DFLAGS_FOR_BUILD>

Opties voor de bouw-D-compiler (ldc of gdc). Sinds dpkg 1.22.1.

=item B<FFLAGS_FOR_BUILD>

Opties voor de bouw-Fortran 77 compiler. Een deelverzameling van B<CFLAGS_FOR_BUILD>. Sinds dpkg 1.22.1.

=item B<FCFLAGS_FOR_BUILD>

Opties voor de bouw-Fortran 9x compiler. Hetzelfde als B<FFLAGS_FOR_BUILD>. Sinds dpkg 1.22.1.

=item B<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 B<-Wl> en B<,> van die opties verwijderd worden). Standaardwaarde: leeg. Sinds dpkg 1.22.1.

=back

In de toekomst kunnen nog andere vlaggen toegevoegd worden als daar behoefte aan ontstaat (bijvoorbeeld om andere talen te ondersteunen).

=head1 FUNCTIEGEBIEDEN

Functiegebieden zijn momenteel leverancier-specifiek, en degene die hieronder worden beschreven, worden alleen herkend op Debian en afgeleiden.

Elke gebiedsfunctie kan worden in- en uitgeschakeld in de gebiedswaarde van de omgevingsvariabelen B<DEB_BUILD_OPTIONS> en B<DEB_BUILD_MAINT_OPTIONS> met het wijzigingselement 'B<+>' en 'B<->'. Volgens de algemene syntaxis van deze variabelen (beschreven in L<dpkg-buildpackage(1)>), kunnen meerdere functiegebieden worden gespecificeerd, gescheiden door spaties, waarbij elkeen functiespecificaties krijgt als verplichte parameters na een gelijkheidsteken ('B<=>'). De functiespecificaties zijn door komma's gescheiden en worden van links naar rechts verwerkt, waarbij de instellingen binnen dezelfde functiespecificatie voorrang hebben op eerdere instellingen, zelfs als de functiespecificaties zijn verdeeld over meerdere door spaties gescheiden functiegebiedsinstellingen voor hetzelfde gebied.

Om bijvoorbeeld de functie “pie” van B<hardening> in te schakelen en de functie “fortify” uit te schakelen, kunt u dit doen in B<debian/rules>:

    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

Er kunnen meerdere functiegebieden ingesteld worden:

    export DEB_BUILD_MAINT_OPTIONS = hardening=+pie abi=+lfs

Het voorrangsgedrag is zowel van toepassing op de speciale functie B<all> als op specifieke functies, hetgeen compositie mogelijk moet maken. Dus, om “lfs” in te schakelen in het gebied gebied B<abi>, en enkel “pie” en “fortify” in het gebied B<hardening>, maar “format” alleen wanneer CONDITION is gedefinieerd, kan men dit als volgt doen:

    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

=head2 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.

=over 

=item B<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 B<-D_LARGEFILE_SOURCE -D_FILE_OFFSET_BITS=64> toe te voegen aan B<CPPFLAGS>.

Wanneer deze functie is ingeschakeld, wordt de waarde van dezelfde functie in het functiegebied B<future> overschreven.

=item B<time64>

Deze instelling (sinds dpkg 1.22.0; standaard ingeschakeld, behalve voor i386, hurd-i386 en kfreebsd-i386 sinds dpkg 1.22.5) activeert ondersteuning voor 64-bits time_t op 32-bits architecturen waar hun ABI dit standaard niet bevat, door B<-D_TIME_BITS=64> toe te voegen aan B<CPPFLAGS>. Deze instelling schakelt automatisch de functie B<lfs> uit het functiegebied B<abi> in.

Als de instelling expliciet wordt ingeschakeld, wordt deze ingeschakeld op alle architecturen, inclusief i386, maar niet op hurd-i386 of kfreebsd-i386 (waar de kernel geen time64-interfaces heeft), waarbij de standaard voor binaire achterwaartse compatibiliteit wordt genegeerd.

Deze wordt ook standaard ingeschakeld door gcc op de Debian architecturen armel, armhf, hppa, m68k, mips, mipsel, powerpc en sh4, waar het uitschakelen van de functie dan weer B<-U_LARGEFILE_SOURCE -U_FILE_OFFSET_BITS -U_TIME_BITS> toevoegt aan B<CPPFLAGS>.

=back

=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 (sinds dpkg 1.19.0; standaard uitgeschakeld) is nu een alias voor de functie B<lfs> in het gebied B<abi>. Gebruik die in plaats daarvan. De functie uit het B<abi>-gebied overschrijft deze instelling.

=back

=head2 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-implicit-func>

Deze instelling (sinds dpkg 1.22.3; standaard ingeschakeld sinds dpkg 1.22.6) voegt B<-Werror=implicit-function-declaration> toe aan B<CFLAGS>.

=item B<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 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>.

Deze functionaliteit verwerkt B<-Werror=implicit-function-declaration> via de functionaliteit B<bug-implicit-func>, als die niet is gespecificeerd.

=item B<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 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 optimalisering

Several compile-time options (detailed below) can be used to help optimize a resulting binary (since dpkg 1.21.0).  B<Note>: Enabling B<all> these options can result in unreproducible binary artifacts.

=over 

=item B<lto>

Deze instelling (sinds dpkg 1.21.0; standaard uitgeschakeld) zet Link Time Optimization aan door B<-flto=auto -ffat-lto-objects> toe te voegen aan B<CFLAGS>, B<CXXFLAGS>, B<OBJCFLAGS>, B<OBJCXXFLAGS>, B<FFLAGS>, B<FCFLAGS> of B<LDFLAGS>.

=back

=head2 sanering

Several compile-time options (detailed below) can be used to help sanitize a resulting binary against memory corruptions, memory leaks, use after free, threading data races and undefined behavior bugs.  B<Note>: These options should B<not> be used for production builds as they can reduce reliability for conformant code, reduce security or even functionality.

=over 

=item B<address>

Deze instelling (sinds dpkg 1.18.0; 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 (sinds dpkg 1.18.0; standaard uitgeschakeld) voegt B<-fsanitize=thread> toe aan B<CFLAGS>, B<CXXFLAGS> en B<LDFLAGS>.

=item B<leak>

Deze instelling (sinds dpkg 1.18.0; 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 (sinds dpkg 1.18.0; standaard uitgeschakeld) voegt B<-fsanitize=undefined> toe aan B<CFLAGS>, B<CXXFLAGS> en B<LDFLAGS>.

=back

=head2 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 (sinds dpkg 1.16.1; 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 (sinds dpkg 1.16.1; 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 (sinds dpkg 1.16.1; 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<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 (sinds dpkg 1.17.11; standaard geactiveerd) voegt B<-fstack-protector-strong> toe aan B<CFLAGS>, B<CXXFLAGS>, B<OBJCFLAGS>, B<OBJCXXFLAGS>, 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<stackclash>

Deze instelling (sinds dpkg 1.22.0; standaard geactiveerd) voegt op B<amd64>, B<arm64>, B<armhf> en B<armel> B<-fstack-protector-strong> toe aan B<CFLAGS>, B<CXXFLAGS>, B<OBJCFLAGS>, B<OBJCXXFLAGS>, B<FFLAGS> en B<FCFLAGS>. Hiermee wordt code toegevoegd om aanvallen van het type stack-clash te voorkomen.

=item B<branch>

Deze instelling (sinds dpkg 1.22.0; standaard geactiveerd) voegt B<-fstack-protector-strong> toe aan B<CFLAGS>, B<CXXFLAGS>, B<OBJCFLAGS>, B<OBJCXXFLAGS>, B<FFLAGS> en B<FCFLAGS>. Dit voegt takbeveiliging toe aan indirecte aanroepen, sprongen en retouren om te controleren of deze geldig zijn tijdens het uitvoeren.

=item B<relro>

Deze instelling (sinds dpkg 1.16.1; 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 (sinds dpkg 1.16.1; 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 (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 B<-fPIE> toe (via I<%PKGDATADIR%/pie-compiler.specs>) aan B<CFLAGS>, B<CXXFLAGS>, B<OBJCFLAGS>, B<OBJCXXFLAGS>, 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<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) 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 (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 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.

=over 

=item B<timeless>

Deze instelling (sinds dpkg 1.17.14; 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 (sinds dpkg 1.19.1; standaard geactiveerd) voegt B<-ffile-prefix-map=>I<BUILDPATH>B<=.> toe aan B<CFLAGS>, B<CXXFLAGS>, B<OBJCFLAGS>, B<OBJCXXFLAGS>, 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.

B<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 B<fixdebugpath> vereisen, waardoor alle gegenereerde debug-symbolenobjecten niet reproduceerbaar zouden kunnen worden. De ideale oplossing is om te stoppen met het vastleggen van bouwvlaggen.

=item B<fixdebugpath>

Deze instelling (sinds dpkg 1.18.5; standaard geactiveerd) voegt B<-fdebug-prefix-map=>I<BUILDPATH>B<=.> toe aan B<CFLAGS>, B<CXXFLAGS>, B<OBJCFLAGS>, B<OBJCXXFLAGS>, 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.

B<Opmerking>: deze functie heeft vergelijkbare reproduceerbare eigenschappen als B<fixfilepath>.

=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 pakketbeheerders 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> (sinds dpkg 1.16.1)

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> (sinds dpkg 1.16.1)

=item B<DEB_>I<vlag>B<_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 I<vlag>.

=item B<DEB_>I<vlag>B<_APPEND>

=item B<DEB_>I<vlag>B<_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 I<vlag>.

=item B<DEB_>I<vlag>B<_PREPEND> (sinds dpkg 1.16.1)

=item B<DEB_>I<vlag>B<_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 I<vlag>.

=item B<DEB_BUILD_OPTIONS>

=item B<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 B<DEB_BUILD_MAINT_OPTIONS> vervangt eventuele instellingen in de functionaliteitsgebieden B<DEB_BUILD_OPTIONS>. Zie het onderdeel L</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<DEB_HOST_ARCH>

Sets the host architecture.  This affects the build flags that are emitted, which is typically relevant when cross-compiling, where B<DEB_HOST_ARCH> is different to B<DEB_BUILD_ARCH>.

=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 L<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