Provided by: dpkg-dev_1.22.6ubuntu6.1_all bug

NOME

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

RESUMO

       dpkg-buildflags [option...] [command]

DESCRIÇÃO

       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:

       1.  de todo o sistema com /etc/dpkg/buildflags.conf;

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

       3.  temporariamente pelo utilizador com variáveis de ambiente (veja a secção "AMBIENTE");

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

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

       SET flag value
           Sobrescreve a flag chamada flag para ter o valor valor.

       STRIP flag value
           Despoja da flag chamada flag todas as flags de compilação listadas em valor. Desde dpkg 1.16.1.

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

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

       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.

COMANDOS

       --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 ("flag=value"). Esta é a acção predefinida.

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

       --status
           Mostra qualquer informação que possa ser útil para explicar o comportamento de 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  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.

       --export=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 format não for  fornecido,  é  assumido  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:

           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.

           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.

           configure
               Este é um nome alternativo antigo para cmdline.

           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 include.

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

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

           vendor
               é devolvida a flag origina definida pelo fornecedor;

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

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

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

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

       --query-features 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 Builtin (desde dpkg 1.21.14). Veja a secção "Á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

       --help
           Mostra a mensagem de utilização e termina.

       --version
           Mostra a versão e termina.

FLAGS SUPORTADAS

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

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

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

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

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

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

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

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

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

       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 -Wl e , têm de ser cortados destas opções). Valor
           predefinido: empty.

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

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

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

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

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

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

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

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

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

       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 -Wl e , têm de  ser  cortados  destas  opções).
           Valor predefinido: empty. Desde dpkg 1.22.1.

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

Á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
       DEB_BUILD_OPTIONS  e DEB_BUILD_MAINT_OPTIONS com o modificador ‘+’ e ‘-’.  Seguido a sintaxe geral destas
       variáveis (descritas em 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  (‘=’).   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 hardening “pie” e desactivar a característica “fortify” você
       pode fazer isto no debian/rules:

           export DEB_BUILD_MAINT_OPTIONS = hardening=+pie,-fortify

       A funcionalidade especial 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 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  all,  como  a  funcionalidades
       específicas,  as  quais  devem  permitir  para composição. Assim para activar “lfs” na área abi, e apenas
       “pie” e “fortify” na área 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

   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.

       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 -D_LARGEFILE_SOURCE -D_FILE_OFFSET_BITS=64 a CPPFLAGS.

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

       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 -D_TIME_BITS=64 to CPPFLAGS.  This setting automatically enables the
           lfs feature from the 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  -U_LARGEFILE_SOURCE
           -U_FILE_OFFSET_BITS -U_TIME_BITS a CPPFLAGS.

   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.

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

   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.

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

       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  CFLAGS  e CXXFLAGS com bandeiras definidas para -Werror=array-bounds,
           -Werror=clobbered, -Werror=implicit-function-declaration e -Werror=volatile-register-var.

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

       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 CPPFLAGS, CFLAGS,
           OBJCFLAGS, CXXFLAGS e OBJCXXFLAGS com bandeiras  definidas  para  -D__DEB_CANARY_flag_random-id__,  e
           LDFLAGS definida para -Wl,-z,deb-canary-random-id.

   optimize
       Várias  opções  de  tempo  de compilação (detalhado em baixo) podem ser usadas para ajudar a optimizar um
       binário resultante (desde dpkg 1.21.0). Nota: ativador todas estas opções  pode  resultar  em  artefactos
       binários não reproduzíveis.

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

   sanitize
       Várias  opções  de  tempo de compilação (detalhado em baixo) podem ser usadas para ajudar a higienizar um
       binário resultante contra corrupções de memória, fugas de memória, utilização após livre, segmentação  de
       dados  e  bugs  de comportamento indefinido.  Nota: estas opções não devem ser usadas para compilações de
       produção pois elas podem reduzir a confiança na conformidade do código, reduzir a segurança  ou  mesmo  a
       funcionalidade.

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

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

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

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

   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.

       format
           Esta    definição    (desde    dpkg    1.16.1;   activada   por   predefinição)   adiciona   -Wformat
           -Werror=format-security a CFLAGS, CXXFLAGS, OBJCFLAGS e 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
           printf e scanf onde a string de formato não é uma string literal e não existem argumentos de formato,
           como em printf(foo); em vez de 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’.

       fortify
           Esta  definição  (desde  dpkg  1.16.1;  activada  por  predefinição)  adiciona  -D_FORTIFY_SOURCE=2 a
           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 -O1 ou superior.
           Se a variável de ambiente DEB_BUILD_OPTIONS conter noopt, então o suporte a fortify será desactivado,
           devido a novos avisos serem emitidos pelo glibc 2.16 e posterior.

       stackprotector
           Esta definição (desde dpkg 1.16.1; activada por predefinição se stackprotectorstrong não  estiver  em
           uso)  adiciona -fstack-protector--param=ssp-buffer-size=4 a CFLAGS, CXXFLAGS, OBJCFLAGS, OBJCXXFLAGS,
           FFLAGS e 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 __stack_chk_fail), portanto
           precisa de ser desactivada quando se compila com -nostdlib ou -ffreestanding ou semelhante.

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

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

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

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

       branch
           Esta definição (desde dpkg 1.22.00; activada por predefinição) adiciona -fcf-protection  em  amd64  e
           -mbranch-protection=standard  em  arm64 a CFLAGS, CXXFLAGS, OBJCFLAGS, OBJCXXFLAGS, FFLAGS e 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.

       relro
           Esta  definição  (desde  dpkg  1.16.1;  activada  por  predefinição) adiciona -Wl,-z,relro a 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, bindnow irá ficar também desactivado.

       bindnow
           Esta  definição  (desde  dpkg  1.16.1;  desactivada  por predefinição) adiciona -Wl,-z,now a 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 relro em cima). A opção pode ser activada  se  relro  não  for
           activado.

       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  -fPIE  (via
           /usr/share/dpkg/pie-compiler.specs)  a  CFLAGS, CXXFLAGS, OBJCFLAGS, OBJCXXFLAGS, FFLAGS e FCFLAGS, e
           -fPIE -pie (via /usr/share/dpkg/pie-link.specs) a LDFLAGS. Quando a definição está  desactivada  e  o
           gcc  injeta  as  bandeiras,  adiciona  -fno-PIE  (via /usr/share/dpkg/no-pie-compile.specs) a CFLAGS,
           CXXFLAGS,   OBJCFLAGS,    OBJCXXFLAGS,    FFLAGS    e    FCFLAGS,    e    -fno-PIE    -no-pie    (via
           /usr/share/dpkg/no-pie-link.specs) a 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 (-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 -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:

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

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

           -fPIC
               Pode ser vinculado a qualquer programa e biblioteca partilhada.

           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 -fPIE, -fpie ou -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,  -fPIC  seja  sempre  passado  em último (para que sobreponha qualquer -PIE anterior) às
           bandeiras de compilação tais como CFLAGS, e -shared é passado em último (para que sobreponha qualquer
           -pie anterior) para ligar em link bandeiras tais como LDFLAGS. 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 >= 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.

   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.

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

       fixfilepath
           Esta definição (desde dpkg 1.19.1; activada por predefinição) adiciona  -ffile-prefix-map=BUILDPATH=.
           a  CFLAGS,  CXXFLAGS,  OBJCFLAGS, OBJCXXFLAGS, FFLAGS e FCFLAGS quando 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  fixdebugpath  e  fixfilepath  forem  definidas,  esta  opção toma precedência, porque é um
           superconjunto do anterior.

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

       fixdebugpath
           Esta definição (desde dpkg 1.18.5; activada por predefinição) adiciona -fdebug-prefix-map=BUILDPATH=.
           a CFLAGS, CXXFLAGS, OBJCFLAGS, OBJCXXFLAGS, FFLAGS e FCFLAGS quando 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.

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

AMBIENTE

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

       DEB_flag_SET
       DEB_flag_MAINT_SET (desde dpkg 1.16.1)
           Esta variável pode ser usada para forçar o valor retornado para a <flag> fornecida.

       DEB_flag_STRIP (desde dpkg 1.16.1)
       DEB_flag_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 flag fornecida.

       DEB_flag_APPEND
       DEB_flag_MAINT_APPEND (desde dpkg 1.16.1)
           Esta  variável  pode  ser  usada para acrescentar opções suplementares ao valor retornado para a flag
           fornecida.

       DEB_flag_PREPEND (desde dpkg 1.16.1)
       DEB_flag_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
           flag fornecida.

       DEB_BUILD_OPTIONS
       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 DEB_BUILD_MAINT_OPTIONS
           sobrepõe qualquer definição nas áreas de funcionalidade de DEB_BUILD_OPTIONS. Veja a secção "ÁREAS DE
           CARACTERÍSTICAS" para detalhes.

       DEB_VENDOR
           Esta definição define o fornecedor actual. Se não definida, irá descobrir o fornecedor actual ao  ler
           /etc/dpkg/origins/default.

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

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

       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 0
           e 1 (predefinição).

FICHEIROS

   Ficheiros de configuração
       /etc/dpkg/buildflags.conf
           Ficheiro de configuração geral do sistema.

       $XDG_CONFIG_HOME/dpkg/buildflags.conf ou
       $HOME/.config/dpkg/buildflags.conf
           Ficheiro de configuração do utilizador.

   Suporte a empacotamento
       /usr/share/dpkg/buildflags.mk
           trecho do Makefile que irá carregar (e opcionalmente exportar) todas  as  bandeiras  suportadas  pelo
           dpkg-buildflags em variáveis (desde dpkg 1.16.1).

EXEMPLOS

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

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

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

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

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

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

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

   Utilização em debian/rules
       Você deve chamar dpkg-buildflags  ou  incluir  buildflags.mk  do  ficheiro  debian/rules  para  obter  as
       bandeiras  de  compilação  necessárias  para passar ao sistema de compilação. Note que versões antigas do
       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 debian/rules.

       Para pacotes com sistemas de compilação tipo autoconf, você pode passar as opções relevantes ao configure
       ou 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 --get. Ou você pode incluir buildflags.mk em vez disto,
       o que toma conta de chamar 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):

        DPKG_EXPORT_BUILDFLAGS = 1
        include /usr/share/dpkg/buildflags.mk

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

        include /usr/share/dpkg/buildflags.mk
        export CPPFLAGS CFLAGS LDFLAGS

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

        include /usr/share/dpkg/buildflags.mk
        build-arch:
               $(CC) -o hello hello.c $(CPPFLAGS) $(CFLAGS) $(LDFLAGS)

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

1.22.6                                             2024-07-17                                 dpkg-buildflags(1)