[ << ] | [ >> ] | [Top] | [Contents] | [Index] | [ ? ] |
一部の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. |
他のGNU configure
スクリプトと同様、
Autoconfによって生成されたconfigure
スクリプトは正規化されたシステムタイプ名によって
動作を決定することができます。
システムタイプ名は以下のフォーマットになっています:
cpu-company-system |
configure
は通常、configure
の動作している
システムタイプ名を判定することができます。このために、
configure
はconfig.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
というスクリプトを
実行します。
以下のマクロを使うと、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'の
オプションを無視します。
AC_CANONICAL_SYSTEM
の一部、ホストタイプに関する
部分だけを実行します。プログラムがコンパイラ関連の
ツールでなければ、このマクロのやることだけでことが足ります。
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
正規化されたシステムタイプをどう使いますか? たいていは、システム依存の
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 |
AC_OUTPUT
の際に、既存のファイルsourceに対する
destという名前のリンクを作ります。リンクの種類は可能なら
シンボリックリンク、さもなくばハードリンクになります。
destとsourceに指定されるファイル名は
ソースコードのトップレベルから、またはビルドディレクトリからの
相対表記でなければなりません。
このマクロは複数回呼んでも構いません。
例えば、以下を使うと:
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] | [ ? ] |