summaryrefslogtreecommitdiffstats
path: root/man/pt/dpkg-buildflags.pod
blob: b38857136904cc06b5be846a4cc3c51ac258e76d (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
666
667
668
669
670
671
        *****************************************************
        *           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 NOME

dpkg-buildflags - retorna flags de compilação para usar durante a compilação de pacotes

=head1 RESUMO

B<dpkg-buildflags> [I<option>...] [I<command>]

=head1 DESCRIÇÃO

B<dpkg-buildflags> é uma ferramenta para obter flags de compilação para usar durante a compilação de pacotes Debian.

As flags predefinidas são definidas pelo fornecedor mas podem ser estendidas/sobrepostas de várias maneiras:

=over 

=item 1.

de todo o sistema com B<%PKGCONFDIR%/buildflags.conf>;

=item 2.

para o utilizador actual com B<$XDG_CONFIG_HOME/dpkg/buildflags.conf> onde B<$XDG_CONFIG_HOME> usa por predefinição B<$HOME/.config>;

=item 3.

temporariamente pelo utilizador com variáveis de ambiente (veja a secção L</AMBIENTE>);

=item 4.

dinamicamente pelo maintainer do pacote com variáveis de ambiente definidas via B<debian/rules> (veja a secção L</AMBIENTE>).

=back

Os ficheiros de configuração podem conter quatro tipos de directivas:

=over 

=item B<SET> I<flag> I<value>

Sobrescreve a flag chamada I<flag> para ter o valor I<valor>.

=item B<STRIP> I<flag> I<value>

Despoja da flag chamada I<flag> todas as flags de compilação listadas em I<valor>. Desde dpkg 1.16.1.

=item B<APPEND> I<flag> I<value>

Estende a flag chamada I<flag> ao acrescentar as opções dadas em I<valor>. É usado um espaço a preceder o valor acrescentado se o valor da flag actual não estiver vazio.

=item B<PREPEND> I<flag> I<value>

Estende a flag chamada I<flag> ao precede-la com as opções dadas em I<valor>. É acrescentado um espaço ao valor precedido se o valor da flag actual não estiver vazio. Desde dpkg 1.16.1.

=back

Os ficheiros de configuração podem conter comentários nas linhas que começam com um cardinal (#). As linhas vazias também são ignoradas.

Este programa foi introduzido no dpkg 1.15.7.

=head1 COMANDOS

=over 

=item B<--dump>

Escreve na saída standard todas as bandeiras de compilação e os seus valores. Escreve uma bandeira por linha separada do seu valor por um sinal de igual ("I<flag>=I<value>"). Esta é a acção predefinida.

=item B<--list>

Escreve a lista das flags suportadas pelo fornecedor actual (uma por cada linha). Veja a secção L</FLAGS SUPORTADAS> para mais informação sobre elas.

=item B<--status>

Mostra qualquer informação que possa ser útil para explicar o comportamento de B<dpkg-buildflags> (desde dpkg 1.16.5): variáveis de ambiente relevantes, fornecedor actual, estado de todas as bandeiras de funcionalidades. Também escreve as bandeira de compilação resultantes com as suas origens.

Isto destina-se a ser corrido a partir de B<debian/rules>, para que os relatórios de compilação mantenham um rasto claro das bandeiras de compilação usadas. Isto pode ser útil para diagnosticar problemas relacionados com elas.

=item B<--export=>I<format>

Escreve na saída standard comandos que podem ser usados para exportar todas as bandeiras de compilação para alguma ferramenta particular. Se o valor I<format> não for fornecido, é assumido B<sh>. Apenas são incluídas bandeiras que comecem com um caractere maiúsculo, as outras são assumidas como não apropriadas para o ambiente. Formatos suportados:

=over 

=item B<sh>

Comandos de shell para definir e exportar todas as bandeiras de compilação no ambiente. Os valores das bandeiras são citados para que o resultado esteja pronto para avaliação pela shell.

=item B<cmdline>

Argumentos a passar para a linha de comandos dos programas de compilação para se usar todas as bandeiras de compilação (desde dpkg 1.17.0). Os valores das bandeiras são citados na sintaxe da shell.

=item B<configure>

Este é um nome alternativo antigo para B<cmdline>.

=item B<make>

Faz as directivas definir e exportar todas as bandeiras de compilação no ambiente. O resultado pode ser escrito para o fragmento do Makefile e avaliado usando uma directiva B<include>.

=back

=item B<--get> I<flag>

Escreve o valor da flag na saída standard. Termina com 0 se a flag for conhecida, caso contrário termina com 1.

=item B<--origin> I<flag>

Escreve a origem do valor que é devolvido por B<--get>. Termina com 0 se a flag for conhecida, caso contrário termina com 1. A origem pode ser um dos seguintes valores:

=over 

=item B<vendor>

é devolvida a flag origina definida pelo fornecedor;

=item B<system>

a flag é definida/modifica por uma configuração de todo o sistema;

=item B<user>

a flag é definida/modifica por uma configuração específica do utilizador;

=item B<env>

a flag é definida/modifica por uma configuração específica do ambiente;

=back

=item B<--query>

Escreve qualquer informação que possa ser útil para explicar o comportamento do programa: fornecedor actual, variáveis de ambiente relevantes, áreas de funcionalidades, estado de todas as bandeiras de funcionalidades, se uma funcionalidade é lidada como uma predefinição de compilação pelo compilador (desde dpkg 1.21.14), a as bandeiras de compilação com as suas origens (desde dpkg 1.19.0).

Por exemplo:

 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<area>

Escreve as funcionalidades activadas para uma dada área (desde dpkg 1.16.2). Se a funcionalidade é lidada (mesmo que apenas em algumas arquitecturas) como predefinição de compilação pelo compilador, então é escrito um campo B<Builtin> (desde dpkg 1.21.14). Veja a secção L</ÁREAS DE CARACTERÍSTICAS> para mais detalhes. acerca das áreas actualmente reconhecidas. Termina com 0 se a área for conhecida caso contrário termina com 1.

O resultado está em formato RFC822, com uma secção por característica. Por exemplo:

 Feature: pie
 Enabled: yes
 Builtin: yes

 Feature: stackprotector
 Enabled: yes

=item B<--help>

Mostra a mensagem de utilização e termina.

=item B<--version>

Mostra a versão e termina.

=back

=head1 FLAGS SUPORTADAS

=over 

=item B<ASFLAGS>

Opções para o assemblador da máquina. Valor predefinido: vazio. Desde dpkg 1.21.0.

=item B<CFLAGS>

Opções para o compilador de C da maquina. O valor predefinido regulado pelo fornecedor inclui B<-g> e o nível de optimização predefinido (geralmente B<-O2>, ou B<-O0> se a variável de ambiente B<DEB_BUILD_OPTIONS> definir I<noopt>).

=item B<CPPFLAGS>

Opções para o pré-processador de C da máquina. Valor predefinido: vazio.

=item B<CXXFLAGS>

Opções para o compilador de C++ da máquina. O mesmo que B<CFLAGS>.

=item B<OBJCFLAGS>

Opções para o compilador Objective C da máquina. O mesmo que B<CFLAGS>. Desde dpkg 1.17.7.

=item B<OBJCXXFLAGS>

Opções para o compilador Objective C++ da maquina. O mesmo que B<CXXFLAGS>. Desde dpkg 1.17.7.

=item B<DFLAGS>

Opções para o compilador D da maquina (ldc ou gdc). Desde dpkg 1.20.6.

=item B<FFLAGS>

Opções para o compilador Fortran 77 da maquina. Um subconjunto de B<CFLAGS>.

=item B<FCFLAGS>

Opções para o compilador Fortran 9x da maquina. O mesmo que B<FFLAGS>. Desde dpkg 1.17.7.

=item B<LDFLAGS>

Opções passadas ao compilador da maquina quando faz link a executáveis ou objetos partilhados (se o vinculador (linker) for chamado directamente, então B<-Wl> e B<,> têm de ser cortados destas opções). Valor predefinido: empty.

=item B<ASFLAGS_FOR_BUILD>

Opções para o assemblador de compilação. Valor predefinido: vazio. Desde dpkg 1.21.0.

=item B<CFLAGS_FOR_BUILD>

Opções para o compilador de C de compilação. O valor predefinido regulado pelo fornecedor inclui B<-g> e o nível de optimização predefinido (geralmente B<-O2>, ou B<-O0> se a variável de ambiente B<DEB_BUILD_OPTIONS> definir I<noopt>). Desde dpkg 1.22.1.

=item B<CPPFLAGS_FOR_BUILD>

Opções para o pre-processador C de compilação. Valor predefinido: vazio. Desde dpkg 1.21.0.

=item B<CXXFLAGS_FOR_BUILD>

Opções para o compilador C++ de compilação. O mesmo que B<CFLAGS_FOR_BUILD>. Desde dpkg 1.22.1.

=item B<OBJCFLAGS_FOR_BUILD>

Opções para o compilador Objective C de compilação. O mesmo que B<CFLAGS_FOR_BUILD>. Desde dpkg 1.22.1.

=item B<OBJCXXFLAGS_FOR_BUILD>

Opções para o compilador Objective C++ de compilação. O mesmo que B<CXXFLAGS_FOR_BUILD>. Desde dpkg 1.22.1.

=item B<DFLAGS_FOR_BUILD>

Opções para o compilador D de compilação (ldc ou gdc). Desde dpkg 1.22.1.

=item B<FFLAGS_FOR_BUILD>

Opções para o compilador Fortran 77 de compilação. Um subconjunto de B<CFLAGS_FOR_BUILD>. Desde dpkg 1.22.1.

=item B<FCFLAGS_FOR_BUILD>

Opções para o compilador Fortran 9x de compilação. O mesmo que B<FFLAGS_FOR_BUILD>. Desde dpkg 1.22.1.

=item B<LDFLAGS_FOR_BUILD>

Opções passadas ao compilador da compilação quando faz link a executáveis ou objetos partilhados (se o vinculador (linker) for chamado directamente, então B<-Wl> e B<,> têm de ser cortados destas opções). Valor predefinido: empty. Desde dpkg 1.22.1.

=back

Podem ser adicionadas novas bandeiras no futuro se a necessidade surgir (por exemplo para suportar outras linguagens).

=head1 ÁREAS DE CARACTERÍSTICAS

As áreas de características são actualmente especificadas pelo fornecedor. e as descritas em baixo são reconhecidas apenas em Debian e derivados.

Cada área de característica pode ser activada e desactivada no valor de área das variáveis de ambiente B<DEB_BUILD_OPTIONS> e B<DEB_BUILD_MAINT_OPTIONS> com o modificador ‘B<+>’ e ‘B<->’.  Seguido a sintaxe geral destas variáveis (descritas em L<dpkg-buildpackage(1)>), múltiplas áreas de característica podem ser especificadas separadas por espaços, onde cada uma obtém especificadores de característica como parâmetros obrigatórios após um sinal de igual (‘B<=>’).  Os especificadores de característica são separados por vírgulas e analisados da esquerda para a direita. onde as definições dentro do mesmo especificador de característica sobrepõem as anteriores, mesmo que os especificadores de característica estejam divididos entre várias definições de área de característica separadas por espaços para a mesma área.

Por exemplo, para activar a característica B<hardening> “pie” e desactivar a característica “fortify” você pode fazer isto no B<debian/rules>:

    export DEB_BUILD_MAINT_OPTIONS = hardening=+pie,-fortify

A funcionalidade especial B<all> (válida em qualquer área) pode ser usada para activar ou desactivar todas as funcionalidades de área ao mesmo tempo. Assim desactivar tudo na área B<hardening> e activar apenas apenas “format” e “fortify” pode ser obtido com:

    export DEB_BUILD_MAINT_OPTIONS = hardening=-all,+format,+fortify

Podem ser definidas múltiplas áreas de característica:

    export DEB_BUILD_MAINT_OPTIONS = hardening=+pie abi=+lfs

O comportamento de sobreposição aplica-se tanto à funcionalidade especial B<all>, como a funcionalidades específicas, as quais devem permitir para composição. Assim para activar “lfs” na área B<abi>, e apenas “pie” e “fortify” na área B<hardening>, mas “format” apenas quando CONDITION estiver definida, isto pode ser feito com:

    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

Várias opções de tempo de compilação (detalhado em baixo) podem ser usadas para activar funcionalidades que podem modificar o ABI dum pacote, mas não podem estar activas por predefinição devido a razões de compatibilidade com versões anteriores, a menos que sejam coordenadas ou verificadas individualmente.

=over 

=item B<lfs>

Esta definição (desde dpkg 1.22.00; desactivada por predefinição) activa Suporte Ficheiros Longos em arquitecturas de 32-bit onde o seu ABI não inclui LFS (Large File Support) por predefinição, ao adicionar B<-D_LARGEFILE_SOURCE -D_FILE_OFFSET_BITS=64> a B<CPPFLAGS>.

Quando esta funcionalidade é activa irá sobrepor o valor da mesma funcionalidade na área de funcionalidades B<future>.

=item B<time64>

This setting (since dpkg 1.22.0; enabled by default except for i386, hurd-i386 and kfreebsd-i386 since dpkg 1.22.5) enables 64-bit time_t support on 32-bit architectures where their ABI does not include it by default, by adding B<-D_TIME_BITS=64> to B<CPPFLAGS>.  This setting automatically enables the B<lfs> feature from the B<abi> feature area.

Se a definição for explicitamente activada então fica activada em todas as arquitecturas incluindo i386 mas não hurd-i386 nem kfreebsd-i386 (onde o kernel não tem interfaces time64), ignorando a compatibilidade predefinida de versões binárias antigas.

É também activada por predefinição pelo gcc nas arquitecturas Debian armel, armhf, hppa, m68k, mips, mipsel, powerpc e sh4, onde desactivar a funcionalidade irá adicionar então B<-U_LARGEFILE_SOURCE -U_FILE_OFFSET_BITS -U_TIME_BITS> a B<CPPFLAGS>.

=back

=head2 future

Várias opções de tempo de compilação (detalhado em baixo) podem ser usadas para activar funcionalidades que deveria estar activadas por predefinição, mas não podem estar por razões de compatibilidade com versões anteriores.

=over 

=item B<lfs>

Esta definição (desde dpkg 1.19.0; desactivada por predefinição) é agora um nome alternativo para a funcionalidade B<lfs> na área B<abi>, use esta em vez da anterior. A funcionalidade da ária B<abi> sobrepõe esta definição.

=back

=head2 qa

Várias opções de tempo de compilação (detalhado em baixo) podem ser usadas para ajudar a detectar no código fonte ou no sistema de compilação.

=over 

=item B<bug-implicit-func>

This setting (since dpkg 1.22.3; enabled by default since dpkg 1.22.6) adds B<-Werror=implicit-function-declaration> to B<CFLAGS>.

=item B<bug>

Esta definição (desde dpkg 1.17.4; desactivada por predefinição) adiciona qualquer opção de aviso de detecção de fiabilidade problemática no código fonte. Os avisos são fatais. As únicas bandeiras presentemente suportadas são B<CFLAGS> e B<CXXFLAGS> com bandeiras definidas para B<-Werror=array-bounds>, B<-Werror=clobbered>, B<-Werror=implicit-function-declaration> e B<-Werror=volatile-register-var>.

Esta característica manuseia B<-Werror=implicit-function-declaration> via característica B<bug-implicit-func>, se tal não foi especificado.

=item B<canary>

Esta definição (desde dpkg 1.17.14; desactivada por predefinição) adiciona opções canary fantoches às bandeiras de compilação, para que os relatórios de compilação possam ser verificados em como as bandeiras de compilação se propagam e para permitir encontrar qualquer omissão de definições normais de bandeiras de compilação. As únicas bandeiras actualmente suportadas são B<CPPFLAGS>, B<CFLAGS>, B<OBJCFLAGS>, B<CXXFLAGS> e B<OBJCXXFLAGS> com bandeiras definidas para B<-D__DEB_CANARY_>I<flag>_I<random-id>B<__>, e B<LDFLAGS> definida para B<-Wl,-z,deb-canary->I<random-id>.

=back

=head2 optimize

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>

Esta definição (desde dpkg 1.21.0; desactivada por predefinição) activa Link Time Optimization ao adicionar B<-flto=auto -ffat-lto-objects> a B<CFLAGS>, B<CXXFLAGS>, B<OBJCFLAGS>, B<OBJCXXFLAGS>, B<FFLAGS>, B<FCFLAGS> e B<LDFLAGS>.

=back

=head2 sanitize

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>

Esta definição (desde dpkg 1.18.0; desactivada por predefinição) adiciona B<-fsanitize=address> a B<LDFLAGS> e B<-fsanitize=address -fno-omit-frame-pointer> a B<CFLAGS> e B<CXXFLAGS>.

=item B<thread>

Esta definição (desde dpkg 1.18.0; desactivada por predefinição) adiciona B<-fsanitize=thread> a B<CFLAGS>, B<CXXFLAGS> e B<LDFLAGS>.

=item B<leak>

Esta definição (desde dpkg 1.18.0; desactivada por predefinição) adiciona B<-fsanitize=leak> a B<LDFLAGS>. Fica automaticamente desactivada se as funcionalidades B<address> ou B<thread> estiverem activas, pois elas já implicam isto.

=item B<undefined>

Esta definição (desde dpkg 1.18.0; desactivada por predefinição) adiciona B<-fsanitize=undefined> a B<CFLAGS>, B<CXXFLAGS> e B<LDFLAGS>.

=back

=head2 endurecimento

Várias opções de tempo de compilação (detalhado em baixo) podem ser usadas para ajudar a endurecer um binário resultante contra ataques de corrupção de memória, ou disponibilizar mensagens de aviso adicionais durante a compilação. Excepto como notado em baixo, estas estão activadas por predefinição para as arquitecturas que as suportam.

=over 

=item B<format>

Esta definição (desde dpkg 1.16.1; activada por predefinição) adiciona B<-Wformat -Werror=format-security> a B<CFLAGS>, B<CXXFLAGS>, B<OBJCFLAGS> e B<OBJCXXFLAGS>.  Isto irá avisar sobre uso de strings de formato impróprias, e irá falhar quando funções de formato forem usadas em modo que representem possíveis problemas de segurança. Presentemente, isto avisa sobre chamadas a funções B<printf> e B<scanf> onde a string de formato não é uma string literal e não existem argumentos de formato, como em B<printf(foo);> em vez de B<printf("%s", foo);> Isto pode ser um buraco de segurança se a string de formato vier de uma entrada não confiável e conter ‘%n’.

=item B<fortify>

Esta definição (desde dpkg 1.16.1; activada por predefinição) adiciona B<-D_FORTIFY_SOURCE=2> a B<CPPFLAGS>. Durante a geração de código o compilador sabe muita informação sobre tamanhos de buffer (onde possível), e tenta substituir chamadas de função buffer de comprimento ilimitadas e inseguras por umas limitadas em comprimento. Isto é especialmente útil para código antigo, desnecessariamente complicado. Adicionalmente, as strings de formato em memória gravável que contêm ‘%n’ são bloqueadas. Se uma aplicação depender de tal string de formato, isso terá que ser contornado.

Note que para esta opção ter algum efeito, a fonte tem de também ser compilada com B<-O1> ou superior. Se a variável de ambiente B<DEB_BUILD_OPTIONS> conter I<noopt>, então o suporte a B<fortify> será desactivado, devido a novos avisos serem emitidos pelo glibc 2.16 e posterior.

=item B<stackprotector>

Esta definição (desde dpkg 1.16.1; activada por predefinição se stackprotectorstrong não estiver em uso) adiciona B<-fstack-protector--param=ssp-buffer-size=4> a B<CFLAGS>, B<CXXFLAGS>, B<OBJCFLAGS>, B<OBJCXXFLAGS>, B<FFLAGS> e B<FCFLAGS>. Isto adiciona verificações de segurança contra sobreposições de empilhamento. Isto renderiza muitos potenciais ataques de injeções de código em situações de abortar. No melhor caso, isto transforma vulnerabilidades de injeção de código em negação de serviço ou em não-problemas (dependendo da aplicação).

Esta funcionalidade requer ligação (link) a glibc (ou outro fornecedor de B<__stack_chk_fail>), portanto precisa de ser desactivada quando se compila com B<-nostdlib> ou B<-ffreestanding> ou semelhante.

=item B<stackprotectorstrong>

Esta definição (desde dpkg 1.17.11; activada por predefinição) adiciona B<-fstack-protector-strong> a B<CFLAGS>, B<CXXFLAGS>, B<OBJCFLAGS>, B<OBJCXXFLAGS>, B<FFLAGS> e B<FCFLAGS>. Esta é uma variante mais forte de B<stackprotector>, mas sem penalidades de performance significativas.

Desactivar B<stackprotector> irá também desactivar esta definição.

Esta funcionalidade tem os mesmos requerimentos que B<stackprotector>, e adicionalmente também requer gcc 4.9 e posterior.

=item B<stackclash>

Esta definição (desde dpkg 1.22.00; activada por predefinição) adiciona B<-fstack-clash-protection> a B<amd64>, B<arm64>, B<armhf> e B<armel> a B<CFLAGS>, B<CXXFLAGS>, B<OBJCFLAGS>, B<OBJCXXFLAGS>, B<FFLAGS> e B<FCFLAGS>. Isto adiciona código para prevenir ataques do estilo stack clash.

=item B<branch>

Esta definição (desde dpkg 1.22.00; activada por predefinição) adiciona B<-fcf-protection> em B<amd64> e B<-mbranch-protection=standard> em B<arm64> a B<CFLAGS>, B<CXXFLAGS>, B<OBJCFLAGS>, B<OBJCXXFLAGS>, B<FFLAGS> e B<FCFLAGS>. Isto adiciona proteção de ramo a chamadas, saltos e retornos indiretos para verificar se estes são válidos durante a execução.

=item B<relro>

Esta definição (desde dpkg 1.16.1; activada por predefinição) adiciona B<-Wl,-z,relro> a B<LDFLAGS>. Durante o carregamento do programa, várias secções de memória ELF precisam de ser escritas pelo vinculador. Isto sinaliza ao carregador para tornar estas secções só-leitura antes de entregar o controlo ao programa. Mais notavelmente isto previne ataques de sobrescrita GOT. Se esta opção for desactivada, B<bindnow> irá ficar também desactivado.

=item B<bindnow>

Esta definição (desde dpkg 1.16.1; desactivada por predefinição) adiciona B<-Wl,-z,now> a B<LDFLAGS>. Durante o carregamento do programa, todos os símbolos dinâmicos são resolvidos, permitindo que todo o PLT seja marcado só-leitura (devido ao B<relro> em cima). A opção pode ser activada se B<relro> não for activado.

=item B<pie>

Esta definição (desde dpkg 1.16.1; sem uma predefinição global desde dpkg 1.18.23, pois é agora activa por predefinição pelo gcc nas arquitecturas Debian amd64, arm64, armel, armhf, hurd-i386, i386, kfreebsd-amd64, kfreebsd-i386, mips, mipsel, mips64el, powerpc, ppc64, ppc64el, riscv64, s390x, sparc e sparc64) adiciona as opções requeridas para activar ou desactivar PIE via ficheiros de especificações do gcc, Se necessário, dependendo de se o gcc injeta nessa arquitectura as bandeiras por ele próprio ou não. Quando a definição está activa e o gcc injeta as bandeiras, não adiciona nada. Quando a definição está activa e o gcc não injeta as bandeiras, adiciona B<-fPIE> (via I<%PKGDATADIR%/pie-compiler.specs>) a B<CFLAGS>, B<CXXFLAGS>, B<OBJCFLAGS>, B<OBJCXXFLAGS>, B<FFLAGS> e B<FCFLAGS>, e B<-fPIE -pie> (via I<%PKGDATADIR%/pie-link.specs>) a B<LDFLAGS>. Quando a definição está desactivada e o gcc injeta as bandeiras, adiciona B<-fno-PIE> (via I<%PKGDATADIR%/no-pie-compile.specs>) a B<CFLAGS>, B<CXXFLAGS>, B<OBJCFLAGS>, B<OBJCXXFLAGS>, B<FFLAGS> e B<FCFLAGS>, e B<-fno-PIE -no-pie> (via I<%PKGDATADIR%/no-pie-link.specs>) a B<LDFLAGS>.

Position Independent Executable (PIE) é necessário para tirar vantagem de Address Space Layout Randomization (ASLR), suportado por algumas versões de kernel. Enquanto ASLR já pode ser aplicada para áreas de dados na stack e heap (brk e mmap), as áreas de código têm de ser compiladas como independente-de-posição. As bibliotecas partilhadas já fazem isto (B<-fPIC>), assim elas ganham ASLR automaticamente, mas as regiões de texto binários precisam de ser compiladas como PIE para ganhar ASLR. Quando isto acontece, os ataques ROP (Return Oriented Programming) são mais difíceis pois não são localizações estáticas para ressaltar durante um ataque de corrupção de memória.

PIE não é compatível com B<-fPIC>, assim em geral é preciso cuidado ao compilar objectos partilhados. Mas porque as bandeiras PIE emitidas são injetadas via ficheiros specs de gcc, deverá ser sempre seguro defini-las incondicionalmente independentemente do tipo de objecto a ser compilado ou ligado em link.

Bibliotecas estáticas pode ser usadas por programas ou outras bibliotecas partilhadas. Dependendo das bandeiras usadas para compilar todos os objectos dentro de uma biblioteca estática, estas bibliotecas serão utilizáveis por conjuntos diferentes de objectos:

=over 

=item none

Não pode ser vinculado a um programa PIE, não é uma biblioteca partilhada.

=item B<-fPIE>

Pode ser vinculado a qualquer programa, mas não a uma biblioteca partilhada (recomendado).

=item B<-fPIC>

Pode ser vinculado a qualquer programa e biblioteca partilhada.

=back

Se existir a necessidade de definir estas bandeiras manualmente, fazendo bypass à injeção de spec gcc, há varias coisas a ter em conta. Passar incondicionalmente e explicitamente B<-fPIE>, B<-fpie> ou B<-pie> a um sistema de compilação usando libtool é seguro pois estas bandeiras irão ser despojadas quando se compila bibliotecas partilhadas. Caso contrário em projetos que compilam ambos programas e bibliotecas partilhadas você pode precisar de certificar que quando compila as bibliotecas partilhadas, B<-fPIC> seja sempre passado em último (para que sobreponha qualquer B<-PIE> anterior) às bandeiras de compilação tais como B<CFLAGS>, e B<-shared> é passado em último (para que sobreponha qualquer B<-pie> anterior) para ligar em link bandeiras tais como B<LDFLAGS>. B<Nota>: Isto não deve ser necessário com a maquinaria de specs gcc predefinida.

Adicionalmente, como PIE é implementado via registo geral, algumas arquitecturas com falta de registo (mas não incluindo mais a i386 desde as optimizações implementadas no gcc E<gt>= 5) podem ver perdas de performance até aos 15% em grandes cargas de aplicações de segmentos de texto pesados; a maioria das cargas vêm menos de 1%. Arquitecturas com registos mais gerais (ex. amd64) não vêm mais alto que uma penalidade de pior caso.

=back

=head2 reproducible

As opções de tempo de compilação detalhadas em baixo  podem ser usadas para ajudar a melhorar a reprodutibilidade de compilação ou fornecer mensagens de aviso adicionais durante a compilação. Excepto como notado em baixo, estas estão activadas por predefinição para as arquitecturas que as suportam.

=over 

=item B<timeless>

Esta definição (desde dpkg 1.17.14; activada por predefinição) adiciona B<-Wdate-time> a B<CPPFLAGS>. Isto irá causar avisos quando as macros B<__TIME__>, B<__DATE__> e B<__TIMESTAMP__> são usadas.

=item B<fixfilepath>

Esta definição (desde dpkg 1.19.1; activada por predefinição) adiciona B<-ffile-prefix-map=>I<BUILDPATH>B<=.> a B<CFLAGS>, B<CXXFLAGS>, B<OBJCFLAGS>, B<OBJCXXFLAGS>, B<FFLAGS> e B<FCFLAGS> quando B<BUILDPATH> está definido para o directório de nível de topo do pacote a ser compilado. Isto tem o efeito de remover o caminho de compilação de qualquer ficheiro gerado.

Se ambas B<fixdebugpath> e B<fixfilepath> forem definidas, esta opção toma precedência, porque é um superconjunto do anterior.

B<Nota>: Se o processo de compilação capturar as bandeiras de compilação para os objectos de compilação resultantes, isso irá tornar o pacote não-reproduzível. E ao desactivar esta opção poderá tornar alguns dos objectos reproduzíveis de novo isto irá também requerer desactivar B<fixdebugpath>, o que poderá tornar quaisquer símbolos de depuração gerados não-reproduzíveis. A correção ideal é parar de capturar bandeiras de compilação.

=item B<fixdebugpath>

Esta definição (desde dpkg 1.18.5; activada por predefinição) adiciona B<-fdebug-prefix-map=>I<BUILDPATH>B<=.> a B<CFLAGS>, B<CXXFLAGS>, B<OBJCFLAGS>, B<OBJCXXFLAGS>, B<FFLAGS> e B<FCFLAGS> quando B<BUILDPATH> está definido para o directório de nível de topo do pacote a ser compilado. Isto tem o efeito de remover o caminho de compilação de qualquer símbolo de depuração gerado.

B<Nota>: Esta funcionalidade tem propriedades de reprodução semelhantes a B<fixfilepath>.

=back

=head1 AMBIENTE

Existem 2 conjuntos de variáveis de ambiente a fazer as mesmas operações, O primeiro (DEB_I<flag>_I<op>) nunca deve ser usada dentro de B<debian/rules>. Destina-se a qualquer utilizador que queria recompilar o pacote fonte com bandeiras de compilação diferentes. O segundo conjunto (DEB_I<flag>_MAINT_I<op>) só deve ser usado em B<debian/rules> pelos maintainers de pacotes para alterar as bandeiras de compilação resultantes.

=over 

=item B<DEB_>I<flag>B<_SET>

=item B<DEB_>I<flag>B<_MAINT_SET> (desde dpkg 1.16.1)

Esta variável pode ser usada para forçar o valor retornado para a <flag> fornecida.

=item B<DEB_>I<flag>B<_STRIP> (desde dpkg 1.16.1)

=item B<DEB_>I<flag>B<_MAINT_STRIP> (desde dpkg 1.16.1)

Esta variável pode ser usada para disponibilizar uma lista separada por espaços das opções que irão ser despojadas do conjunto de flags retornado para a I<flag> fornecida.

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

=item B<DEB_>I<flag>B<_MAINT_APPEND> (desde dpkg 1.16.1)

Esta variável pode ser usada para acrescentar opções suplementares ao valor retornado para a I<flag> fornecida.

=item B<DEB_>I<flag>B<_PREPEND> (desde dpkg 1.16.1)

=item B<DEB_>I<flag>B<_MAINT_PREPEND> (desde dpkg 1.16.1)

Esta variável pode ser usada para adicionar opções suplementares ao inicio do valor retornado  para a I<flag> fornecida.

=item B<DEB_BUILD_OPTIONS>

=item B<DEB_BUILD_MAINT_OPTIONS> (desde dpkg 1.16.1)

Estas variáveis podem ser usadas por um utilizador ou maintainer para desactivar/activar várias funcionalidades de área que afectam bandeiras de compilação. A variável B<DEB_BUILD_MAINT_OPTIONS> sobrepõe qualquer definição nas áreas de funcionalidade de B<DEB_BUILD_OPTIONS>. Veja a secção L</ÁREAS DE CARACTERÍSTICAS> para detalhes.

=item B<DEB_VENDOR>

Esta definição define o fornecedor actual. Se não definida, irá descobrir o fornecedor actual ao ler B<%PKGCONFDIR%/origins/default>.

=item B<DEB_BUILD_PATH>

Esta variável define o caminho de compilação (desde dpkg 1.18.8) a usar em funcionalidades como B<fixdebugpath> para que possam ser controladas pelo chamador. Esta variável é actualmente específica de Debian e derivados.

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

Define o modo de cor (desde dpkg 1.18.5). Os valores actualmente aceites são: B<auto> (predefinido), B<always> e B<never>.

=item B<DPKG_NLS>

Se definida, será usada para decidir se deve activar o Suporte a Linguagem Nativa. Também como conhecido como suporte de internacionalização (ou i18n) (desde dpkg 1.19.0). Os valores aceites são B<0> e B<1> (predefinição).

=back

=head1 FICHEIROS

=head2 Ficheiros de configuração

=over 

=item B<%PKGCONFDIR%/buildflags.conf>

Ficheiro de configuração geral do sistema.

=item B<$XDG_CONFIG_HOME/dpkg/buildflags.conf> ou

=item B<$HOME/.config/dpkg/buildflags.conf>

Ficheiro de configuração do utilizador.

=back

=head2 Suporte a empacotamento

=over 

=item B<%PKGDATADIR%/buildflags.mk>

trecho do Makefile que irá carregar (e opcionalmente exportar) todas as bandeiras suportadas pelo B<dpkg-buildflags> em variáveis (desde dpkg 1.16.1).

=back

=head1 EXEMPLOS

Para passar flags de compilação a um comando de compilação dentro de um Makefile:

=over 

 $(MAKE) $(shell dpkg-buildflags --export=cmdline)

 ./configure $(shell dpkg-buildflags --export=cmdline)

=back

Para definir bandeiras de compilação num script de shell ou num fragmento de shell, por ser usado o B<eval> para interpretar o resultado e para exportar as bandeiras no ambiente:

=over 

 eval "$(dpkg-buildflags --export=sh)" && make

=back

ou para definir os parâmetros posicionais a passar a um comando:

=over 

 eval "set -- $(dpkg-buildflags --export=cmdline)"
 for dir in a b c; do (cd $dir && ./configure "$@" && make); done

=back

=head2 Utilização em debian/rules

Você deve chamar B<dpkg-buildflags> ou incluir B<buildflags.mk> do ficheiro B<debian/rules> para obter as bandeiras de compilação necessárias para passar ao sistema de compilação. Note que versões antigas do B<dpkg-buildpackage> (antes do dpkg 1.16.1) exportavam estas bandeiras automaticamente. No entanto, você não deve confiar nisto, pois isto quebra a invocação manual de B<debian/rules>.

Para pacotes com sistemas de compilação tipo autoconf, você pode passar as opções relevantes ao configure ou L<make(1)> diretamente, como mostrado em cima.

Para outros sistemas de compilação, ou quando precisa de um controle mais afinado acerca de quais bandeiras são passadas para onde, você pode usar B<--get>. Ou você pode incluir B<buildflags.mk> em vez disto, o que toma conta de chamar B<dpkg-buildflags> e guardar as bandeiras de compilação em variáveis do make.

Se você quiser exportar todas as bandeiras de compilação para o ambiente (onde elas pode ser colhidas pelo seu sistema de compilação):

=over 

 DPKG_EXPORT_BUILDFLAGS = 1
 include %PKGDATADIR%/buildflags.mk

=back

Para algum controle extra sobre o que é exportado, você pode exportar manualmente as variáveis (pois nenhuma é exportada por predefinição).

=over 

 include %PKGDATADIR%/buildflags.mk
 export CPPFLAGS CFLAGS LDFLAGS

=back

E claro que você pode passar as bandeiras aos comandos manualmente:

=over 

 include %PKGDATADIR%/buildflags.mk
 build-arch:
 	$(CC) -o hello hello.c $(CPPFLAGS) $(CFLAGS) $(LDFLAGS)

=back


=head1 TRADUÇÃO

Américo Monteiro

Se encontrar algum erro na tradução deste documento, por favor comunique para
Américo Monteiro <a_monteiro@gmx.com>.