書式
dpkg-architecture [option...] [command]
説明
dpkg-architecture は、パッケージのビルドに用いられたビルドおよびホストのアーキテクチャを判別する機能を提供する。ビルドアーキテクチャは、常に dpkg(1) を呼び出すことで判別される。コマンドラインから設定することはできない。
ホストのアーキテクチャは -a もしくは -t オプションにより指定することができる。デフォルトは、外部プログラムの gcc(1) を呼び出して判別するが、CC や gcc が利用できない場合は、ビルドのアーキテクチャと同じ値が設定される。-a と -t オプションは、いずれかを指定すればよく、他方はその値に応じたデフォルト値に設定される。dpkg-architecture は、他方に対してデフォルト値に合致しない値が設定されると警告を発するため、実用上も、いずれか片方のみを指定することが好ましい。
コマンド
- -l
- 環境変数の値を 1 行に 1 つずつ、VARIABLE=value 形式で表示する。これは、デフォルトの動作である。
- -edebian-architecture
- アーキテクチャとの合致性を比較する。デフォルトでは、debian-architecture が現在のホストの Debian アーキテクチャと比較される。このオプションでは、アーキテクチャワイルドカードは展開されない。コマンドは、アーキテクチャが合致すると 0 を、合致しないと 1 を戻り値として返却する。
- -iarchitecture-wildcard
- アーキテクチャワイルドカードとして architecture-wildcard を展開し、現在の Debian アーキテクチャと比較することにより、アーキテクチャの同一性を確認する。コマンドは、アーキテクチャが合致すると 0 を、合致しないと 1 を戻り値として返却する。
- -qvariable-name
- 指定した単一の変数の値を表示する。
- -s
- 変数をエクスポートするコマンドを出力する。これは、eval を用いて環境変数を設定する際に使用することができる。
- -u
- -s と同様は逆に、すべての変数を未設定にするコマンドを表示する。
- -c command
- すべての変数が指定された値に設定された環境で、command を実行する。
- -L
- 有効なアーキテクチャ名の一覧を表示する。
- -?, --help
- 利用方法を表示して終了する。
- --version
- バージョン情報を表示して終了する。
オプション
- -adebian-architecture
- Debian アーキテクチャを設定する。
- -tgnu-system-type
- GNU システムタイプを設定する。
- -f
- スクリプトが使用する (例えば dpkg-architecture が使用する) 環境変数と同じ名前の環境変数が既に存在していた場合、この強制フラグを設定していない限り、既存の値がそのまま残される。このオプションにより、dpkg-architecture の呼び出し後に、別のスクリプト (例えば dpkg-buildpackage(1)) が実行される際に、変数の値を上書きすることが可能となる。
用語
- ビルド (build) マシン
- パッケージのビルドが実行されるマシン
- ホスト (host) マシン
- パッケージのビルドの対象となるマシン
- Debian アーキテクチャ
- Debian のアーキテクチャを示す文字列で、FTP アーカイブ内のバイナリツリーを指定する。例: i386, sparc, hurd-i386 。
- アーキテクチャワイルドカード
- アーキテクチャワイルドカードは、アーキテクチャ文字列のある部分に関して実際に存在している任意のアーキテクチャ文字列にマッチする特別なアーキテクチャ文字列である。一般的には、 <kernel>-<cpu> という形式をとる。例: linux-any, any-i386, hurd-any 。
- GNU システムタイプ
- ダッシュで区切られた 2 つの部分、CPU とシステム名からなるアーキテクチャを識別する文字列。例: i386-linux-gnu, sparc-linux-gnu, i386-gnu, x86_64-netbsd 。
変数
dpkg-architecture により設定される変数を以下に示す。- DEB_BUILD_ARCH
- ビルドマシンの Debian アーキテクチャ
- DEB_BUILD_ARCH_OS
- ビルドマシンの Debian システム名
- DEB_BUILD_ARCH_CPU
- ビルドマシンの Debian CPU 名
- DEB_BUILD_ARCH_BITS
- ビルドマシンのポインタサイズ (ビット単位)
- DEB_BUILD_ARCH_ENDIAN
- ビルドマシンのエンディアン (little / big)
- DEB_BUILD_GNU_CPU
- DEB_BUILD_GNU_TYPE の CPU の部分
- DEB_BUILD_GNU_SYSTEM
- DEB_BUILD_GNU_TYPE のシステムの部分
- DEB_BUILD_GNU_TYPE
- ビルドマシンの GNU システムタイプ
- DEB_BUILD_MULTIARCH
- ビルドマシンの GNU システムタイプ、ファイルシステムのパスに使用するよう整形済。
- DEB_HOST_ARCH
- ホストマシンの Debian アーキテクチャ
- DEB_HOST_ARCH_OS
- ホストマシンの Debian システム名
- DEB_HOST_ARCH_CPU
- ホストマシンの Debian CPU 名
- DEB_HOST_ARCH_BITS
- ホストマシンのポインタサイズ (ビット単位)
- DEB_HOST_ARCH_ENDIAN
- ホストマシンのエンディアン (little / big)
- DEB_HOST_GNU_CPU
- DEB_HOST_GNU_TYPE の CPU 部分
- DEB_HOST_GNU_SYSTEM
- DEB_HOST_GNU_TYPE のシステム部分
- DEB_HOST_GNU_TYPE
- ホストマシンの GNU システムタイプ
- DEB_HOST_MULTIARCH
- ホストマシンの GNU システムタイプ、ファイルシステムのパスに使用するよう整形済。
DEBIAN/RULES
dpkg-architecture によって設定された環境変数は、make 変数 (make のドキュメントを参照のこと) としてdebian/rules に渡される。しかし、スクリプトが手動で実行される場合を考慮すると、上記の点に依存すべきではない。dpkg-architecture の -q オプションを用いて、常に初期化を行うようにすべきである。パッケージのクロスコンパイルのサポートの改善方法を示す例を幾つか提示する:
GNU システムタイプを取得し、それを ./configure に引き渡す:
-
DEB_BUILD_GNU_TYPE := $(shell dpkg-architecture -qDEB_BUILD_GNU_TYPE) DEB_HOST_GNU_TYPE := $(shell dpkg-architecture -qDEB_HOST_GNU_TYPE) [...] configure --build=$(DEB_BUILD_GNU_TYPE) --host=$(DEB_HOST_GNU_TYPE)
特定のアーキテクチャに特化した処理を行う:
-
DEB_HOST_ARCH := $(shell dpkg-architecture -qDEB_HOST_ARCH) ifeq ($(DEB_HOST_ARCH),alpha) [...] endif
ただし、CPU か OS タイプのみをチェックしたい場合は、DEB_HOST_ARCH_CPU や DEB_HOST_ARCH_OS 変数を使用する。
dpkg-architecture が提供可能なすべての変数を適切に設定する目的で、外部の Makefile スニペットに依存することも可能である:
-
include /usr/share/dpkg/architecture.mk ifeq ($(DEB_HOST_ARCH),alpha) [...] endif
いかなる場合も、パッケージのビルド中にアーキテクチャ情報を取得する目的で、dpkg --print-architecture を使用すべきではない。
後方互換性
/usr/share/dpkg/architecture.mk Makefile スニペットは、dpkg-dev 1.16.1 以降で提供されている。DEB_*_ARCH_BITS と DEB_*_ARCH_ENDIAN 変数は、dpkg-dev 1.15.4 から導入された。そのため、これらを debian/rules で使用する時は、build-dependency として、dpkg-dev (>= 1.15.4) が必要となる。
DEB_HOST_ARCH_CPU と DEB_HOST_ARCH_OS 変数は、dpkg-dev 1.13.2 から導入された。
-e および -i オプションは、比較的新しいバージョンの dpkg-architecture (dpkg 1.13.13 以降) にのみ存在する。
例
dpkg-buildpackage は -a オプションを認識して、これをdpkg-architecture に引き渡す。以下に実行例を幾つか示す:- CC=i386-gnu-gcc dpkg-architecture -c debian/rules build
- eval `dpkg-architecture -u`
あるアーキテクチャが現在のアーキテクチャと同一かどうかのチェック:
- dpkg-architecture -elinux-alpha
- dpkg-architecture -amips -elinux-mips
現在のアーキテクチャ、もしくは -a で提供されたアーキテクチャが Linux かどうかのチェック:
- dpkg-architecture -ilinux-any
- dpkg-architecture -ai386 -ilinux-any
ファイル
dpkg-architecture が動作するためには、以下のファイルが存在している必要がある。ファイルの位置は、環境変数 DPKG_DATADIR を設定することで、実行時に変更することができる。- /usr/share/dpkg/cputable
- 認識される CPU 名と、GNU 名へのマッピングテーブル
- /usr/share/dpkg/ostable
- 認識される OS 名と、GNU 名へのマッピングテーブル
- /usr/share/dpkg/triplettable
- Debian アーキテクチャの文字列 (triplets) と Debian アーキテクチャ名とのマッピング