dpkg-architecture - define e determina a arquitectura para
compilação de pacotes
dpkg-architecture [
option...] [
command]
dpkg-architecture disponibiliza uma habilidade para determinar e definir
a arquitectura de compilação e da máquina para
compilação de pacotes.
A arquitectura de compilação é sempre determinada seja ou
pela variável
DEB_BUILD_ARCH se definida (e se
--force
não for especificada) ou por uma chamada externa ao
dpkg(1), e
não pode ser definida na linha de comandos.
Você pode especificar a arquitectura da máquina ao fornecer uma ou
ambas as opções
--host-arch e
--host-type, caso
contrário é usada a variável
DEB_HOST_ARCH se
definida (e não sendo especificado
--force). A
predefinição é determinada por uma chamada externa ao
gcc(1), ou o mesmo como a arquitectura de compilação se
CC ou gcc estiverem ambos não disponíveis. Um de
--host-arch e
--host-type é suficiente, o valor do outro
será definido para uma predefinição utilizável. De
facto, é muitas vezes melhor apenas especificar um, porque
dpkg-architecture vai avisa-lo se a sua escolha não corresponder
ao predefinido.
-
-l, --list
- Escreve as variáveis de ambiente, uma em cada linha,
no formato VARIÁVEL=valor. Esta é a
acção predefinida.
-
-e, --equal architecture
- Verifica a igualdade da arquitectura (desde dpkg 1.13.13).
Compara a actual ou a arquitectura de maquina Debian especificada com
architecture, para verificar se são iguais. Esta
acção não irá expandir as wildcards de
arquitectura. O comando termina com um estado de saída 0 de
corresponderem, 1 se não corresponderem.
-
-i, --is architecture-wildcard
- Verifica a identidade da arquitectura (desde dpkg 1.13.13).
Compara a actual ou a arquitectura de máquina Debian especificada
com architecture-wildcard após a ter expandido como uma
wildcard de arquitectura, para verificar se correspondem. O comando
termina com estado de saída 0 se corresponderem, 1 se não
corresponderem.
-
-q, --query variable-name
- Escreve o valor de uma variável única.
-
-s, --print-set
- Escreve um comando de exportação. Isto pode
ser usado para definir as variáveis de ambiente usando a shell
POSIX ou make eval, dependendo do formato dos resultados.
-
-u, --print-unset
- Escreve um comando semelhante ao --print-set mas
para limpar o valor de todas as variáveis.
-
-c, --command command-string
- Executa uma command-string num ambiente que tem
todas as variáveis definidas para o determinado valor.
-
-L, --list-known
- Escreve uma lista de nomes de arquitecturas válidos.
Possivelmente restringidos por uma ou mais das opções de
correspondência --match-wildcard, --match-bits ou
--match-endian (desde dpkg 1.17.14).
-
-?, --help
- Mostra a mensagem de utilização e
termina.
- --version
- Mostra a versão e termina.
-
-a, --host-arch architecture
- Define a arquitectura da máquina Debian
-
-t, --host-type gnu-system-type
- Define o tipo de sistema GNU da máquina.
-
-A, --target-arch architecture
- Define a arquitectura Debian de destino (desde dpkg
1.17.14).
-
-T, --target-type gnu-system-type
- Define o tipo de sistema GNU do destino (desde dpkg
1.17.14).
-
-W, --match-wildcard
architecture-wildcard
- Restringe as arquitectura listadas por --list-known
a aquelas que correspondem à wildcard de arquitectura especificada
(desde dpkg 1.17.14).
-
-B, --match-bits
architecture-bits
- Restringe as arquitectura listadas por --list-known
a aquelas com os bits de CPU especificados (desde dpkg 1.17.14). Seja
32 ou 64.
-
-E, --match-endian
architecture-endianness
- Restringe as arquitectura listadas por --list-known
a aquelas com a categoria endian especificada (desde dpkg 1.17.14). Seja
little ou big.
-
--print-format format
- Define o formato de resultados para --print-set e
--print-unset (desde dpkg 1.20.6), para ou shell
(predefinição) ou make.
-
-f, --force
- Os valores definidos pelas variáveis de ambiente
existentes com os mesmos nomes usados como usados pelos scripts são
respeitados (isto é, usados por dpkg-architecture), excepto
se esta bandeira de forçar estiver presente. Isto permite ao
utilizador sobrepor um valor mesmo quando a chamada a
dpkg-architecture está enterrada em algum outro script (por
exemplo dpkg-buildpackage(1)).
- máquina de compilação
- A máquina onde o pacote é compilado.
- máquina anfitriã
- A máquina para onde o pacote é
compilado.
- máquina destino (alvo)
- A maquina para a qual o compilador foi construído,
ou o que emulador que irá correr código para. Isto é
apenas necessário quando se compila ferramenta-corrente-cruzada (ou
emulador), uma que será compilada sobre a arquitectura de
compilação, para ser corrida na arquitectura
anfitriã, e para compilar código (ou correr emulado) para a
arquitectura alvo.
- Arquitectura Debian
- A string de arquitectura Debian, a qual especifica a
árvore binária no arquivo FTP. Exemplos: i386, sparc,
hurd-i386.
- Tuple de arquitectura Debian
- Um tuple de arquitectura Debian é a arquitectura
totalmente qualificada com todos os seus componentes soletrados. Isto
difere das arquitecturas Debian em que pelo menos o componente cpu
não trás embutido o abi. O tuple actual tem o formato
abi-libc-os-cpu. Exemplos:
base-gnu-linux-amd64, eabihf-musl-linux-arm.
- Wildcard de arquitectura Debian
- Um wildcard de arquitectura Debian é uma string
especial de arquitectura que irá corresponder a qualquer
arquitectura real que faça parte dela. O formato geral é um
tuple de arquitectura Debian com quatro ou menos elementos, e com pelo
menos um deles a ser any. Elementos em falta no tuple são
prefixados implicitamente como any, e assim os seguintes pares
são equivalentes:
-
any-any-any-any =
any
-
any-any-os-any =
os-any
-
any-libc-any-any =
libc-any-any
Exemplos: linux-any, any-i386, hurd-any, eabi-any-any-arm, musl-any-any.
- Tipo de sistema GNU
- Uma string de especificação de arquitectura
consiste de duas partes separadas por um hífen: cpu e sistema.
Exemplos: i586-linux-gnu, sparc-linux-gnu, i686-gnu, x86_64-netbsd.
- multiarch triplet
- O tipo de sistema GNU clarificado, usado para caminhos do
sistema de ficheiros. Este triplet não altera mesmo quando a linha
base ISA entra em colisão, para que os caminhos resultantes fiquem
estáveis com o tempo. A única diferença actual com o
tipo de sistema GNU é que a parte de CPU para os sistemas baseados
em i386 é sempre i386. Exemplos: i386-linux-gnu, x86_64-linux-gnu.
Exemplos de caminhos: /lib/powerpc64le-linux-gnu/,
/usr/lib/i386-kfreebsd-gnu/.
As seguintes variáveis são lidas a partir do ambiente (a menos que
--force seja especificado) e definidas por
dpkg-architecture
(veja a secção
TERMS para uma descrição do
esquema de nomeação):
- DEB_BUILD_ARCH
- A arquitectura Debian da máquina de
compilação.
- DEB_BUILD_ARCH_ABI
- O nome ABI Debian da máquina de
compilação (desde dpkg 1.18.11).
- DEB_BUILD_ARCH_LIBC
- O nome libc Debian da máquina de
compilação (desde dpkg 1.18.11).
- DEB_BUILD_ARCH_OS
- O nome de sistema Debian da máquina de
compilação (desde dpkg 1.13.2).
- DEB_BUILD_ARCH_CPU
- O nome de CPU de Debian da máquina de
compilação (desde dpkg 1.13.2).
- DEB_BUILD_ARCH_BITS
- O tamanho do ponteiro da máquina de
compilação (em bits, desde dpkg 1.15.4).
- DEB_BUILD_ARCH_ENDIAN
- A classe endian da máquina de
compilação (ittle / big; desde dpkg 1.15.4).
- DEB_BUILD_GNU_CPU
- A parte CPU GNU de DEB_BUILD_GNU_TYPE.
- DEB_BUILD_GNU_SYSTEM
- A parte de system GNU de DEB_BUILD_GNU_TYPE.
- DEB_BUILD_GNU_TYPE
- O tipo de sistema GNU da máquina de
compilação.
- DEB_BUILD_MULTIARCH
- O tipo de sistema GNU clarificado da máquina de
compilação, usado para caminhos do sistema de ficheiros
(desde dpkg 1.16.0).
- DEB_HOST_ARCH
- A arquitectura Debian da máquina
anfitriã.
- DEB_HOST_ARCH_ABI
- O nome ABI Debian da máquina anfitriã (desde
dpkg 1.18.11).
- DEB_HOST_ARCH_LIBC
- O nome libc Debian da máquina anfitriã (desde
dpkg 1.18.11).
- DEB_HOST_ARCH_OS
- O nome de sistema Debian da máquina anfitriã
(desde dpkg 1.13.2).
- DEB_HOST_ARCH_CPU
- O nome de CPU de Debian da máquina anfitriã
(desde dpkg 1.13.2).
- DEB_HOST_ARCH_BITS
- O tamanho do ponteiro da máquina anfitriã (em
bits, desde dpkg 1.15.4).
- DEB_HOST_ARCH_ENDIAN
- A classe endian da máquina anfitriã (ittle /
big; desde dpkg 1.15.4).
- DEB_HOST_GNU_CPU
- A parte CPU GNU de DEB_HOST_GNU_TYPE.
- DEB_HOST_GNU_SYSTEM
- A parte de system GNU de DEB_HOST_GNU_TYPE.
- DEB_HOST_GNU_TYPE
- O tipo de sistema GNU da máquina
anfitriã.
- DEB_HOST_MULTIARCH
- O tipo de sistema GNU clarificado da máquina
anfitriã, usado para caminhos do sistema de ficheiros (desde dpkg
1.16.0).
- DEB_TARGET_ARCH
- A arquitectura Debian da máquina de destino (desde
dpkg 1.17.14).
- DEB_TARGET_ARCH_ABI
- O nome ABI Debian da máquina alvo (desde dpkg
1.18.11).
- DEB_TARGET_ARCH_LIBC
- O nome libc Debian da máquina alvo (desde dpkg
1.18.11).
- DEB_TARGET_ARCH_OS
- O nome de sistema Debian da máquina de destino
(desde dpkg 1.17.14).
- DEB_TARGET_ARCH_CPU
- O nome de CPU de Debian da máquina de destino (desde
dpkg 1.17.14).
- DEB_TARGET_ARCH_BITS
- O tamanho do ponteiro da máquina de destino (em
bits, desde dpkg 1.17.14).
- DEB_TARGET_ARCH_ENDIAN
- A classe endian da máquina de destino (ittle / big;
desde dpkg 1.17.14).
- DEB_TARGET_GNU_CPU
- A parte CPU GNU de DEB_TARGET_GNU_TYPE (desde dpkg
1.17.14).
- DEB_TARGET_GNU_SYSTEM
- A parte de system GNU de DEB_TARGET_GNU_TYPE (desde
dpkg 1.17.14).
- DEB_TARGET_GNU_TYPE
- O tipo de sistema GNU da máquina de destino (desde
dpkg 1.17.14).
- DEB_TARGET_MULTIARCH
- O tipo de sistema GNU clarificado da máquina de
destino, usado para caminhos do sistema de ficheiros (desde dpkg
1.17.14).
Todos estes ficheiros têm de estar presentes para o
dpkg-architecture funcionar. A sua localização pode ser
sobreposta durante o funcionamento com a variável de ambiente
DPKG_DATADIR. Estas tabelas contêm um pseudo-campo
Version de formato na sua primeira linha para marcar o seu formato,
para que os analisadores possam verificar se o compreendem, tal como "#
Version=1.0".
- /usr/share/dpkg/cputable
- Tabela de nomes de CPU conhecidas e o mapear delas para o
seu nome GNU. Formato versão 1.0 (desde dpkg 1.13.2).
- /usr/share/dpkg/ostable
- Tabela de nomes de sistemas operativos conhecidos e o
mapear deles para o seu nome GNU. Formato versão 2.0 (desde dpkg
1.18.11).
- /usr/share/dpkg/tupletable
- Mapeamento entre tuples de arquitectura Debian e nomes de
arquitectura Debian. Versão de formato 1.0 (desde dpkg
1.18.11).
- /usr/share/dpkg/abitable
- Tabela de sobreposições de atributos ABI de
arquitectura Debian. Versão de formato 2.0 (desde dpkg
1.18.11).
- /usr/share/dpkg/architecture.mk
- Fragmento do Makefile cuja propriedade define e exporta
todas as variáveis que o dpkg-architecture gera como
resultado (desde dpkg 1.16.1).
dpkg-buildpackage aceita a opção
-a e passa-a para
dpkg-architecture. Outros exemplos:
CC=i386-gnu-gcc dpkg-architecture -c debian/rules build
eval $(dpkg-architecture -u)
Verifica se a arquitectura actual ou da máquina especificada é
igual a uma arquitectura:
dpkg-architecture -elinux-alpha
dpkg-architecture -amips -elinux-mips
Verifica se a arquitectura actual ou da máquina especificada é um
sistema Linux.
dpkg-architecture -ilinux-any
dpkg-architecture -ai386 -ilinux-any
As variáveis de ambiente definidas pelo
dpkg-architecture
são passadas para
debian/rules como variáveis do make
(veja a documentação do make). No entanto, você
não deve confiar nelas, porque prejudicam a invocação
manual do script. Em vez disso, você deve sempre inicializa-las usando
dpkg-architecture com a opção
-q. Aqui
estão alguns exemplos, que também mostram como você pode
melhorar o suporte a compilação cruzada no seu pacote:
Obter o tipo de sistema GNU e reencaminha-lo para ./configure:
DEB_BUILD_GNU_TYPE ?= $(shell dpkg-architecture -qDEB_BUILD_GNU_TYPE)
DEB_HOST_GNU_TYPE ?= $(shell dpkg-architecture -qDEB_HOST_GNU_TYPE)
[...]
ifeq ($(DEB_BUILD_GNU_TYPE), $(DEB_HOST_GNU_TYPE))
confflags += --build=$(DEB_HOST_GNU_TYPE)
else
confflags += --build=$(DEB_BUILD_GNU_TYPE) \
--host=$(DEB_HOST_GNU_TYPE)
endif
[...]
./configure $(confflags)
Fazer algo apenas para uma arquitectura específica:
DEB_HOST_ARCH ?= $(shell dpkg-architecture -qDEB_HOST_ARCH)
ifeq ($(DEB_HOST_ARCH),alpha)
[...]
endif
ou se você apenas precisar de verificar o tipo de CPU ou SO, use as
variáveis
DEB_HOST_ARCH_CPU ou
DEB_HOST_ARCH_OS
Note que você também pode confiar num retalho externo do Makefile
para definir apropriadamente todas as variáveis que o
dpkg-architecture pode fornecer.
include /usr/share/dpkg/architecture.mk
ifeq ($(DEB_HOST_ARCH),alpha)
[...]
endif
Em qualquer dos casos, você nunca deverá usar o
dpkg
--print-architecture para obter informação de arquitectura
durante uma compilação de pacote.
- DPKG_DATADIR
- Se definida, será usada como o directório de
dados do dpkg, onde as tabelas de arquitectura estão
localizadas (desde 1.14.17). A predefinição é
«/usr/share/dpkg».
- 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).
Todos comandos e nomes de opções longos disponíveis apenas
desde dpkg 1.17.17.
dpkg-buildpackage(1).
Américo Monteiro
Se encontrar algum erro na tradução deste documento, por favor
comunique para Américo Monteiro <
[email protected]>.