dpkg-architecture(1)

名前
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 オプションを用いて、常に初期化を行うようにすべきである。パッケージのクロスコンパイルのサポートの改善方法を示す例を幾つか提示する:

Retrieving the GNU system type and forwarding it to ./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)

Doing something only for a specific architecture:

    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 変数を使用する。

Note that you can also rely on an external Makefile snippet to properly set all the variables that dpkg-architecture can provide:

    include /usr/share/dpkg/architecture.mk
    ifeq ($(DEB_HOST_ARCH),alpha)
      [...]
    endif

In any case, you should never use dpkg --print-architecture to get architecture information during a package build.

後方互換性
The /usr/share/dpkg/architecture.mk Makefile snippet is provided by dpkg-dev since version 1.16.1.

DEB_*_ARCH_BITS と DEB_*_ARCH_ENDIAN 変数は、dpkg-dev 1.15.4 から導入された。そのため、これらを debian/rules で使用する時は、build-dependency として、dpkg-dev (>= 1.15.4) が必要となる。

The DEB_HOST_ARCH_CPU and DEB_HOST_ARCH_OS variables were introduced in 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>.