NOME¶
dpkg-architecture - imposta e determina l'architettura per la compilazione dei
pacchetti
SINTASSI¶
dpkg-architecture [
opzione...] [
comando]
DESCRIZIONE¶
dpkg-architecture fornisce una funzionalità per determinare e
impostare l'architettura host e di compilazione per la compilazione dei
pacchetti.
L'architettura di compilazione è sempre determinata da una chiamata
esterna a
dpkg(1) e non può essere impostata dalla riga di
comando.
È possibile specificare l'architettura ospite fornendo una o entrambe le
opzioni
--host-arch e
--host-type. Quella predefinita viene
determinata da una chiamata esterna a
gcc(1) oppure, se entrambi
CC e gcc non sono disponibili, è la stessa dell'architettura di
compilazione. È sufficiente una di
--host-arch e
--host-type, il valore dell'altra viene impostato da un valore
predefinito utilizzabile. In effetti è spesso meglio specificarne una
sola, dato che
dpkg-architecture dà un avvertimento se la scelta
non corrisponde al valore predefinito.
COMANDI¶
- -l, --list
- Stampa le variabili d'ambiente, una per riga, nel formato
VARIABILE=valore. Questa è l'azione predefinita.
- -e, --equal architettura
- Controlla l'uguaglianza dell'architettura (a partire da dpkg 1.13.13).
Confronta l'architettura Debian ospite attuale o specificata con
architettura, per verificare se sono uguali. Questa azione non
espande l'espressione jolly per l'architettura. Il comando termina con uno
stato di uscita di 0 se corrispondono e 1 altrimenti.
- -i, --is espressionejolly-architettura
- Controlla l'identità dell'architettura (a partire da dpkg 1.13.13).
Confronta l'architettura Debian ospite attuale o specificata con
espressionejolly-architettura dopo aver fatto l'espansione
dell'espressione jolly per l'architettura, per verificare se
corrispondono. Il comando termina con uno stato di uscita di 0 se
corrispondono e 1 altrimenti.
- -q, --query nome-variabile
- Stampa il valore di una singola variabile.
- -s, --print-set
- Stampa un comando di esportazione. Può essere usata per impostare
le variabili d'ambiente usando eval.
- -u, --print-unset
- Stampa un comando simile a --print-unset ma per deimpostare tutte
le variabili.
- -c, --command comando
- Esegue un comando in un ambiente che ha tutte le variabili
impostate al valore determinato.
- -L, --list-known
- Stampa un elenco di nomi di architettura validi. Eventualmente ristretto
da una o più delle opzioni di corrispondenza
--match-wildcard, --match-bits o --match-endian (a
partire da dpkg 1.17.14).
- -?, --help
- Mostra il messaggio sull'uso ed esce.
- --version
- Mostra la versione ed esce.
OPZIONI¶
- -a, --host-arch architettura
- Imposta l'architettura host Debian.
- -t, --host-type tipo-sistema-gnu
- Imposta il tipo di sistema GNU ospite.
- -A, --target-arch architettura
- Imposta l'architettura Debian di destinazione. Ciò è
necessario solamente quando si compila una cross-toolchain, una che
sarà compilata sull'architettura di compilazione, da eseguire
sull'architettura ospite per compilare codice per l'architettura di
destinazione.
- -T, --target-type tipo-sistema-gnu
- Imposta il tipo di sistema GNU di destinazione.
- -W, --match-wildcard
espressionejolly-architettura
- Limita le architetture elencate da --list-known a quelle che
corrispondono alla espressione jolly specificata per l'architettura (a
partire da dpkg 1.17.14).
- -B, --match-bits bit-architettura
- Limita le architetture elencate da --list-known a quelle con i bit
CPU specificati (a partire da dpkg 1.17.14). O 32 o 64.
- -E, --match-endian endian-architettura
- Limita le architetture elencate da --list-known a quelle con la
modalità endian specificata (a partire da dpkg 1.17.14). O
little o big.
- -f, --force
- I valori impostati da variabili d'ambiente esistenti con nomi uguali a
quelli usati dagli script vengono rispettati (cioè usati da
dpkg-architecture), tranne se viene usata questa opzione.
Ciò permette all'utente di sovrascrivere un valore anche quando la
chiamata a dpkg-architecture è nascosta in qualche altro
script (per esempio dpkg-buildpackage(1)).
TERMINOLOGIA¶
- macchina di compilazione
- La macchina usata per creare il pacchetto.
- macchina ospite
- La macchina per cui è compilato il pacchetto.
- macchina di destinazione
- La macchina per cui compila il compilatore.
- architettura Debian
- La stringa dell'architettura Debian che specifica l'albero binario
nell'archivio FTP. Esempi: i386, sparc, hurd-i386.
- espressione jolly per l'architettura
- Un'espressione jolly per l'architettura è una speciale stringa
dell'architettura che corrisponde a qualsiasi effettiva architettura che
ne fa parte. La forma generica è <kernel>-<cpu>.
Esempi: linux-any, any-i386, hurd-any.
- tipo di sistema GNU
- Una stringa che specifica l'architettura composta di due parti separate da
un trattino: cpu e sistema. Esempi: i386-linux-gnu, sparc-linux-gnu,
i386-gnu, x86_64-netbsd.
VARIABILI¶
dpkg-architecture imposta le seguenti variabili:
- DEB_BUILD_ARCH
- L'architettura Debian della macchina di compilazione.
- DEB_BUILD_ARCH_OS
- Il nome di sistema Debian della macchina di compilazione (a partire da
dpkg 1.13.2).
- DEB_BUILD_ARCH_CPU
- Il nome Debian per la CPU della macchina di compilazione (a partire da
dpkg 1.13.2).
- DEB_BUILD_ARCH_BITS
- La dimensione del puntatore della macchina di compilazione (in bit; a
partire da dpkg 1.15.4).
- DEB_BUILD_ARCH_ENDIAN
- La modalità endian della macchina di compilazione (little o big; a
partire da dpkg 1.15.4).
- DEB_BUILD_GNU_CPU
- La parte CPU di DEB_BUILD_GNU_TYPE.
- DEB_BUILD_GNU_SYSTEM
- La parte sistema di DEB_BUILD_GNU_TYPE.
- DEB_BUILD_GNU_TYPE
- Il tipo di sistema GNU della macchina di compilazione.
- DEB_BUILD_MULTIARCH
- Il tipo di sistema GNU chiarito della macchina di compilazione usato per i
percorsi del file system (a partire da dpkg 1.16.0).
- DEB_HOST_ARCH
- L'architettura Debian della macchina ospite.
- DEB_HOST_ARCH_OS
- Il nome di sistema Debian della macchina ospite (a partire da dpkg
1.13.2).
- DEB_HOST_ARCH_CPU
- Il nome Debian per la CPU della macchina host (a partire da dpkg
1.13.2).
- DEB_HOST_ARCH_BITS
- La dimensione del puntatore della macchina ospite (in bit; a partire da
dpkg 1.15.4).
- DEB_HOST_ARCH_ENDIAN
- La modalità endian della macchina ospite (little o big; a partire
da dpkg 1.15.4).
- DEB_HOST_GNU_CPU
- La parte CPU di DEB_HOST_GNU_TYPE.
- DEB_HOST_GNU_SYSTEM
- La parte sistema di DEB_HOST_GNU_TYPE.
- DEB_HOST_GNU_TYPE
- Il tipo di sistema GNU della macchina ospite.
- DEB_HOST_MULTIARCH
- Il tipo di sistema GNU chiarito della macchina ospite usato per i percorsi
del file system (a partire da dpkg 1.16.0).
- DEB_TARGET_ARCH
- L'architettura Debian della macchina di destinazione (a partire da dpkg
1.17.14).
- DEB_TARGET_ARCH_OS
- Il nome di sistema Debian della macchina di destinazione (a partire da
dpkg 1.17.14).
- DEB_TARGET_ARCH_CPU
- Il nome Debian per la CPU della macchina di destinazione (a partire da
dpkg 1.17.14).
- DEB_TARGET_ARCH_BITS
- La dimensione del puntatore della macchina di destinazione (in bit; a
partire da dpkg 1.17.14).
- DEB_TARGET_ARCH_ENDIAN
- La modalità endian della macchina di destinazione (little o big; a
partire da dpkg 1.17.14).
- DEB_TARGET_GNU_CPU
- La parte CPU di DEB_TARGET_GNU_TYPE (a partie da dpkg
1.17.14).
- DEB_TARGET_GNU_SYSTEM
- La parte sistema di DEB_TARGET_GNU_TYPE (a partire da dpkg
1.17.14).
- DEB_TARGET_GNU_TYPE
- Il tipo di sistema GNU della macchina di destinazione (a partire da dpkg
1.17.14).
- DEB_TARGET_MULTIARCH
- Il tipo di sistema GNU chiarito della macchina di destinazione usato per i
percorsi del file system (a partire da dpkg 1.17.14).
FILE¶
Tabelle delle architetture¶
Tutti questi file devono essere presenti affinché
dpkg-architecture possa funzionare. La loro posizione può essere
sovrascritta al momento dell'esecuzione con la variabile d'ambiente
DPKG_DATADIR.
- /usr/share/dpkg/cputable
- Tabella dei nomi di CPU conosciuti a mappatura al loro nome GNU.
- /usr/share/dpkg/ostable
- Tabella dei nomi di sistema operativo conosciuti e mappatura al loro nome
GNU.
- /usr/share/dpkg/triplettable
- Mappatura delle triplette per architettura Debian e nomi di architettura
Debian.
Supporto per pacchettizzazione¶
- /usr/share/dpkg/architecture.mk
- Frammento di makefile che imposta ed esporta in modo corretto tutte le
variabili prodotte in output da dpkg-architecture (a partire da
dpkg 1.16.1).
ESEMPI¶
dpkg-buildpackage accetta l'opzione
-a e la passa a
dpkg-architecture. Altri esempi:
- CC=i386-gnu-gcc dpkg-architecture -c debian/rules build
- eval `dpkg-architecture -u`
Controlla se l'architettura ospite corrente o specificata è uguale ad
un'architettura:
- dpkg-architecture -elinux-alpha
- dpkg-architecture -amips -elinux-mips
Controlla se l'architettura ospite corrente o specificata è un sistema
Linux:
- dpkg-architecture -ilinux-any
- dpkg-architecture -ai386 -ilinux-any
Uso in debian/rules¶
Le variabili d'ambiente impostate da
dpkg-architecture vengono passate a
debian/rules come variabili make (vedere la documentazione di make).
Tuttavia non si deve fare affidamento su di esse, dato che ciò rende
non funzionanti le invocazioni manuali dello script. Le si dovrebbe invece
inizializzare sempre usando
dpkg-architecture con l'opzione
-q.
Ecco alcuni esempi, che mostrano anche come migliorare il supporto per la
cross-compilazione nei propri pacchetti:
Recuperare il tipo di sistema GNU e passarlo a ./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)
Fare qualcosa solo per un'architettura specifica:
DEB_HOST_ARCH ?= $(shell dpkg-architecture -qDEB_HOST_ARCH)
ifeq ($(DEB_HOST_ARCH),alpha)
[...]
endif
oppure se è necessario solo controllare il tipo di CPU o sistema
operativo, usare le variabili
DEB_HOST_ARCH_CPU o
DEB_HOST_ARCH_OS.
Notare che ci si può anche appoggiare su un frammento di Makefile esterno
per impostare correttamente tutte le variabili che possono essere fornite da
dpkg-architecture.
include /usr/share/dpkg/architecture.mk
ifeq ($(DEB_HOST_ARCH),alpha)
[...]
endif
In ogni caso non si dovrebbe mai usare
dpkg --print-architecture per
ottenere informazioni sull'architettura durante la compilazione di un
pacchetto.
NOTE¶
Tutti i nomi lunghi di comandi e opzioni disponibili solo a partire da dpkg
1.17.17.
VEDERE ANCHE¶
dpkg-buildpackage(1),
dpkg-cross(1).