数種類の特徴については,テストプログラムを実行するだけでは自動的に推測
できません.例えば,オブジェクトファイルのフォーマットの詳細や,コンパ
イラやリンカに渡す必要がある特別なオプションもあります.そのように,
@command{configure}にuname
プログラムの出力を調査させたり,特定
のシステムの特有のライブラリを探すといった,特別な手法を使用して特徴を
調査することが可能です.しかし,Autoconfは,推測できない特徴を扱うため
の一様な形式の手法を提供しています.
他の@acronym{GNU} @command{configure}スクリプトのように,Autoconfが生 成した @command{configure}スクリプトでは,システムタイプの標準名に基づ いて決定することが可能で,それは以下のような形式になります. `cpu-vendor-os'で,osは, `system'や`kernel-system'が可能です.
@command{configure}は,通常,実行しているシステムタイプの標準名を推測
することが可能です.そうするために,@command{config.guess}と呼ばれるス
クリプトを呼び出し,それは,uname
コマンドや,Cプリプロセッサが
前もって定義したシンボルを使用して推測します.
その代わりとして,ユーザは@command{configure}へのコマンドライン引数で, システムタイプを指定可能です.それはクロスコンパイル時に必要です.クロ スコンパイルで最も複雑な場合,三つのシステムタイプが呼び出されます.指 定するオプションは以下の通りです.
@command{config.guess}の結果に優先することを意図した場合,
@option{--host}はクロスコンパイルを利用可能にするものなので,
@option{--host}ではなく@option{--build}を使用してください.歴史的な理
由から,@option{--host}を渡してもビルド形式を変更します.そのため,
--host
を指定するときは常に--build
も確実に指定してくださ
い.これは将来,修正されるでしょう.
./configure --build=i686-pc-linux-gnu --host=m68k-coff
上記でクロスコンパイルモードになりますが,以下のようなコンフィグレーショ ンでは,指定されているコンパイラで生成されるコートが実行不可能なので, @command{configure}は失敗するでしょう.
./configure CC=m68k-coff-gcc
@command{configure}は,多くのシステムタイプに対する短い別名を認識しま す.例えば,`decstation'は`mips-dec-ultrix4.2'の代わりに使用 することが可能です. @command{configure}は,システムタイプの別名を標準 化するために@command{config.sub}と呼ばれるスクリプトを実行します.
このセクションでは,故意に時代遅れのインターフェースの記述を省略してき ました.section ホストとクロスコンパイルを参照してください.
以下のマクロで,システムタイプが@command{configure}スクリプトで利用可 能になります.
変数`build_alias',`host_alias',そして`target_alias'は,
常に厳密な@option{--build},@option{--host},そして@option{--target}へ
の引数となります.特に,対応するAC_CANONICAL
マクロが実行されて
いても,ユーザが使用していない場合は空のままになります.すべての
configureスクリプトは,これらの変数をどこででも使用可能です.これらは,
ユーザとの対話処理で使用されるべき変数です.
システムタイプを元にした特殊な環境を認識する必要がある場合,標準的なシ ステム名を取得するために以下のマクロを実行してください.これらの変数は マクロ呼び出しの前で設定されません.
これらのマクロを使用する場合,ソースコードと一緒に
@command{config.guess} と@command{config.sub}を配布する必要があります.
@command{configure}がこれらのスクリプトを探すディレクトリを制御するた
めに使用可能なAC_CONFIG_AUX_DIR
マクロに関する情報は,
See section 出力ファイルを生成する.
build
と,それを識別する三つ
の部分build_cpu
,build_vendor
,そしてbuild_os
を求
めます.
@option{--build}が指定されている場合,build
はbuild_alias
の@command{config.sub}で標準化されたものになり,それ以外では,シェルス
クリプト@command{config.guess}で決定されます.
host
と,それを識別する三つの
部分host_cpu
,host_vendor
,そしてhost_os
を求めま
す.
@option{--host}が指定されている場合,host
はhost_alias
の
@command{config.sub}で標準化されたものになり,それ以外では,シェルスク
リプト@command{config.guess}で決定されます.
target
,それを識別する三
つの部分target_cpu
,target_vendor
,そして
target_os
を求めます.
@option{--target}が指定されている場合,target
は
target_alias
の@command{config.sub}で標準化されたものになり,そ
れ以外では,デフォルトでhost
になります.
下位互換性のコードのため,人為的なものがあることに注意してください.詳 細は,See section ホストとクロスコンパイル.
どのようにして標準的なシステムタイプを使用するのでしょう?通常,システ
ム特有のCファイルを選択するために`configure.ac'で,一つ以上の
case
文を使用します.AC_CONFIG_LINKS
を使用し,システム名
に基づくこれらのファイルを,`host.h'や`target.c'のような一般
的な名前にリンクしてください(see section コンフィグレーションのリンクを作成する).case
文のパターンでは,以下の断片部分のように,複数の状態を分類するためシェ
ルのワイルドカードを使用することが可能です.
case $target in i386-*-mach* | i386-*-gnu*) obj_format=aout emulation=mach bfd_gas=yes ;; i960-*-bout) obj_format=bout ;; esac
そして,その後で`configure.ac'では以下のように使用します.
AC_CONFIG_LINKS(host.h:config/$machine.h object.h:config/$obj_format.h)
上記の例では,いくつかのアーキテクチャ($build
)でビルドされ,別
のもの($host
)で実行することが可能なツールから持ってこられている
ため,$target
を使用していて,第三のアーキテクチャ
($target
)に対するデータを扱っていることにに注意してください.そ
のようなツールは,通常コンパイラスイートの一部で,それは特殊な
$target
に対するコードを生成します.
しかし,$target
はほとんどのパッケージで意味が無いようにすべきで
す.プログラムを実行するシステムを決定の基本にしたい場合,以下の抜粋部
分のように,$host
変数を使用していることを確かめてください.
case $host in *-*-msdos* | *-*-go32* | *-*-mingw32* | *-*-cygwin* | *-*-windows*) MUMBLE_INIT="mumble.ini" ;; *) MUMBLE_INIT=".mumbleinit" ;; esac AC_SUBST([MUMBLE_INIT])
クロスコンパイルツールを探すため,ホストシステムタイプを使用することも
可能です.そうするためのAC_CHECK_TOOL
マクロの情報は,
See section 一般的なプログラムとファイルの調査.
Go to the first, previous, next, last section, table of contents.