dpkg-architecture -
パッケージのビルドに用いられたアーキテクチャの設定と判別
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
アーキテクチャ名とのマッピング
関連項目¶
dpkg-buildpackage(1),
dpkg-cross(1)
翻訳者¶
高橋 基信 <monyo@monyo.com>. 喜瀬
浩 <kise@fuyuneko.jp>. 関戸 幸一
<sekido@mbox.kyoto-inet.or.jp>. 鍋谷 栄展
<nabe@debian.or.jp>. 倉澤 望
<nabetaro@debian.or.jp>. 石川 睦
<ishikawa@linux.or.jp>. 鵜飼 文敏
<ukai@debian.or.jp>. 中野 武雄
<nakano@apm.seikei.ac.jp>.
翻訳校正¶
Debian JP Documentation ML <debian-doc@debian.or.jp>.