Provided by: dpkg-dev_1.22.6ubuntu6.5_all 

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 2025-09-18 dpkg-buildflags(1)