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

11. 手動のコンフィグレーション

数種類の特徴については,テストプログラムを実行するだけでは自動的に推測で きません.例えば,オブジェクトファイルのフォーマットの詳細や,コンパイラ やリンカに渡す必要がある特別なオプションもあります.そのように, configureunameプログラムの出力を調査させたり,特定の システムの特有のライブラリを探すといった,特別な手法を使用して特徴を調査 することが可能です.しかし,Autoconfは,推測できない特徴を扱うための一様 な形式の手法を提供しています.


11.1 システムタイプの指定

他のGNU configureスクリプトのように,Autoconfが生成 した configureスクリプトでは,システムタイプの標準名に基づいて 決定することが可能で,それは以下のような形式になります. `cpu-vendor-os'で,osは, `system'や`kernel-system'が可能です.

configureは,通常,実行しているシステムタイプの標準名を推測す ることが可能です.そうするために,config.guessと呼ばれるスクリ プトを呼び出し,それは,unameコマンドや,Cプリプロセッサが前もっ て定義したシンボルを使用して推測します.

その代わりとして,ユーザはconfigureへのコマンドライン引数で, システムタイプを指定可能です.それはクロスコンパイル時に必要です.クロス コンパイルで最も複雑な場合,三つのシステムタイプが呼び出されます.指定す るオプションは以下の通りです.

` --build=build-type'

パッケージがコンフィグレーションされコンパイルされるシステムのタイプです. デフォルトは,config.guessの実行結果になります.

` --host=host-type'

パッケージが実行されるシステムタイプです.デフォルトで,それはビルドマシ ンと同じになります.それを指定することでクロスコンパイルモードが使用可能 になります.

` --target=target-type'

コードを生成するパッケージ中のコンパイラツールに対するシステムのタイプで す(必要になることは滅多にありません).デフォルトはホストと同じです.

config.guessの結果に優先することを意図した場合, `--host'はクロスコンパイルを利用可能にするものなので, `--host'ではなく`--build'を使用してください.歴史的な理由 から,`--host'を渡してもビルド形式を変更します.そのため, --hostを指定するときは常に--buildも確実に指定してください. これは将来,修正されるでしょう.

 
./configure --build=i686-pc-linux-gnu --host=m68k-coff

上記でクロスコンパイルモードになりますが,以下のようなコンフィグレーショ ンでは,指定されているコンパイラで生成されるコートが実行不可能なので, configureは失敗するでしょう.

 
./configure CC=m68k-coff-gcc

configureは,多くのシステムタイプに対する短い別名を認識します. 例えば,`decstation'は`mips-dec-ultrix4.2'の代わりに使用するこ とが可能です. configureは,システムタイプの別名を標準化するた めにconfig.subと呼ばれるスクリプトを実行します.

このセクションでは,故意に時代遅れのインターフェースの記述を省略してきま した.ホストとクロスコンパイルを参照してください.


11.2 標準的なシステムタイプの取得

以下のマクロで,システムタイプがconfigureスクリプトで利用可能 になります.

変数`build_alias',`host_alias',そして`target_alias'は, 常に厳密な`--build',`--host',そして`--target'への 引数となります.特に,対応するAC_CANONICALマクロが実行されていて も,ユーザが使用していない場合は空のままになります.すべてのconfigureス クリプトは,これらの変数をどこででも使用可能です.これらは,ユーザとの対 話処理で使用されるべき変数です.

システムタイプを元にした特殊な環境を認識する必要がある場合,標準的なシス テム名を取得するために以下のマクロを実行してください.これらの変数はマク ロ呼び出しの前で設定されません.

これらのマクロを使用する場合,ソースコードと一緒にconfig.guessconfig.subを配布する必要があります.configureがこ れらのスクリプトを探すディレクトリを制御するために使用可能な AC_CONFIG_AUX_DIRマクロに関する情報は,See section 出力ファイルを生成する.

Macro: AC_CANONICAL_BUILD

標準的なビルドシステムタイプの変数のbuildと,それを識別する三つの 部分build_cpubuild_vendor,そしてbuild_osを求めま す.

`--build'が指定されている場合,buildbuild_aliasconfig.subで標準化されたものになり,それ以外では,シェルスク リプトconfig.guessで決定されます.

Macro: AC_CANONICAL_HOST

標準的なホストシステムタイプ変数のhostと,それを識別する三つの部 分host_cpuhost_vendor,そしてhost_osを求めます.

`--host'が指定されている場合,hosthost_aliasconfig.subで標準化されたものになり,それ以外では,シェルスクリ プトconfig.guessで決定されます.

Macro: AC_CANONICAL_TARGET

標準的なターゲットシステムタイプ変数のtarget,それを識別する三つ の部分target_cputarget_vendor,そしてtarget_os を 求めます.

`--target'が指定されている場合,targettarget_aliasconfig.subで標準化されたものになり,それ 以外では,デフォルトでhostになります.

下位互換性のコードのため,人為的なものがあることに注意してください.詳細 は,See section ホストとクロスコンパイル.


11.3 システムタイプを使用する

どのようにして標準的なシステムタイプを使用するのでしょう?通常,システム 特有の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 一般的なプログラムとファイルの調査.


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

This document was generated by Akihiro Sagawa on June, 15 2005 using texi2html 1.70.