[ << ] [ >> ]           [Top] [Contents] [Index] [ ? ]

8. Manual Configuration

一部のOS機能は、テストプログラムを実行しても自動的に判定できません。 たとえば、オブジェクトファイルのフォーマットや、コンパイラや リンカに渡さねばならない特殊なオプションなどがそうです。 unameの出力結果を調べたり、特定のシステムにしかない ライブラリを調べるなどのアドホックな手段を使って、 このようなOSの機能をチェックすることができます。 Autoconfは推測することのできないOS機能の判定のために、 統一された方法を提供しています。

8.1 Specifying the System Type  Specifying the system type.
8.2 Getting the Canonical System Type  Getting the canonical system type.
8.3 System Type Variables  Variables containing the system type.
8.4 Using the System Type  What to do with the system type.


8.1 Specifying the System Type

他のGNU configureスクリプトと同様、 Autoconfによって生成されたconfigure スクリプトは正規化されたシステムタイプ名によって 動作を決定することができます。 システムタイプ名は以下のフォーマットになっています:

 
cpu-company-system

configureは通常、configureの動作している システムタイプ名を判定することができます。このために、 configureconfig.guessというスクリプトを実行します。 このスクリプトはunameコマンドや、Cプリプロセッサが あらかじめ定義しているシンボルを使ってシステムタイプ名を 割り出します。

あるいは、ユーザはconfigureのコマンドライン引数に システムタイプ名を指定することができます。 クロスコンパイル時にはこれは必ず必要です。 最も複雑な場合、3つのシステムタイプ名が関係します。 これらを指定するためのオプションは以下のとおり:

--build=build-type
パッケージを自動設定し、コンパイルするマシンのシステムタイプ名 (ほとんどの場合必要ないです);

--host=host-type
パッケージが実行されるシステムタイプ名;

--target=target-type
パッケージ中のコンパイラ関連ツールがコード生成を行う場合、 生成するコード種別のシステムタイプ名。

ユーザが(オプション名なしで)システムタイプ名をconfigureの 引数として与えた場合、その値がhost/target/buildのシステムタイプ名の デフォルト値として使われます。`--build'などのオプションを指定 しなかった場合、この値が使われます。targetとbuildのシステムタイプ名は、 targetまたはbuildを指定せずにhostを指定した場合、 hostのシステムタイプ名と同一になります。 クロスコンパイルを行う場合、クロスコンパイル用ツール、特にCコンパイラの 名前を、configureのコマンドラインに指定する必要があります。 たとえば以下のように:

 
CC=m68k-coff-gcc configure --target=m68k-coff

configureは多くのシステムタイプについて、短い別名も認識します。 たとえば、`decstation'を`mips-dec-ultrix4.2'のかわりに コマンドラインに指定することができます。configureは システムタイプ名の正規化のため、config.subというスクリプトを 実行します。


8.2 Getting the Canonical System Type

以下のマクロを使うと、configureスクリプトの中でシステムタイプを 知ることができます。これらのマクロはconfig.guessというshell スクリプトを実行します。これにより、ユーザが指定しなかった、host/ target/buildシステムタイプ名などの情報を得ます。また、config.subを 実行することでユーザの指定したシステムタイプの別名を正規化します。 以下のマクロを利用する場合、これら2つのshellスクリプトをソースコードと ともに配布する必要があります。configureがこれらの スクリプトを探すディレクトリを指定するためのマクロ、 AC_CONFIG_AUX_DIRについてはSee section 3.2 Creating Output Files参照。 以下のマクロを利用しなかった場合、configureは 指定された`--host'、`--target'および`--build'の オプションを無視します。

Macro: AC_CANONICAL_SYSTEM
システムタイプを判定し、正規化されたシステムタイプ名を 出力変数に設定します。設定される変数については See section 8.3 System Type Variablesを参照。

Macro: AC_CANONICAL_HOST
AC_CANONICAL_SYSTEMの一部、ホストタイプに関する 部分だけを実行します。プログラムがコンパイラ関連の ツールでなければ、このマクロのやることだけでことが足ります。

Macro: AC_VALIDATE_CACHED_SYSTEM_TUPLE (cmd)
キャッシュファイルが、現在のホスト、ターゲットとビルドシステムに一致しな い場合、cmdを実行する、または、デフォルトエラーメッセージを出力し ます。


8.3 System Type Variables

AC_CANONICAL_SYSTEMを呼び出すと、以下の出力変数に システムタイプの情報が設定されます。AC_CANONICAL_HOSTの 実行語は、変数hostだけが設定されます。

build, host, target
正規化されたシステム名;

build_alias, host_alias, target_alias
ユーザが指定したシステム名、またはconfig.guessが 使われた場合には正規化されたシステム名;

build_cpu, build_vendor, build_os
host_cpu, host_vendor, host_os
target_cpu, target_vendor, target_os
正規化された名前の特定の部分だけが(便利のために)設定されます。


8.4 Using the System Type

正規化されたシステムタイプをどう使いますか? たいていは、システム依存の Cファイルを選択するために、`configure.in'の中のひとつまたは 複数のcase文で使います。そのようなファイルにはシステム名を もとにした名前をつけておきます。その後、 `host.h'や`target.c'などの汎用的な名前で そのファイルへの(シンボリック)リンクを作ります。 case文のパターンには以下のように、shellのワイルドカードが使えます。 ので、複数の場合をまとめて扱えます:

 
case "$target" in
i386-*-mach* | i386-*-gnu*) obj_format=aout emulation=mach bfd_gas=yes ;;
i960-*-bout) obj_format=bout ;;
esac

Macro: AC_LINK_FILES (source..., dest...)
AC_OUTPUTの際に、既存のファイルsourceに対する destという名前のリンクを作ります。リンクの種類は可能なら シンボリックリンク、さもなくばハードリンクになります。 destsourceに指定されるファイル名は ソースコードのトップレベルから、またはビルドディレクトリからの 相対表記でなければなりません。 このマクロは複数回呼んでも構いません。

例えば、以下を使うと:

 
AC_LINK_FILES(config/${machine}.h config/${obj_format}.h, host.h object.h)

現在のディレクトリに`host.h'という `srcdir/config/${machine}.h'へのリンクと、 `object.h'という`srcdir/config/${obj_format}.h'への リンクを作成します。

ホストのシステムタイプを使って、クロスコンパイル用のツールを みつけることができます。AC_CHECK_TOOLマクロがそのために する内容については、See section 4.1.2 Generic Program and File Checks参照。


[ << ] [ >> ]           [Top] [Contents] [Index] [ ? ]

This document was generated by Akihiro Sagawa on January, 21 2003 using texi2html