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

6. Results of Tests

一度configureが特徴の存在を定義した場合、どのようにしてその情報を 記録するのでしょう。それは4種類あり、それらは、Cプリプロセッサシンボルの 定義、出力ファイルで変数をセット、configure実行時のキャッシュファ イルに結果を保存、テスト結果をユーザーに知らせるメッセージの出力です。

6.1 Defining C Preprocessor Symbols  Defining C preprocessor symbols.
6.2 Setting Output Variables  Replacing variables in output files.
6.3 Caching Results  Speeding up subsequent configure runs.
6.4 Printing Messages  Notifying users of progress or problems.


6.1 Defining C Preprocessor Symbols

特徴テストの応答をもたらす普通の行動は、テストの結果を示すCプリプロセッ サシンボルを定義することです。それはAC_DEFINEAC_DEFINE_UNQUOTEDと呼ばれるもので行います。

デフォルトで、AC_OUTPUTはマクロが定義したシンボルを出力変数 DEFSに置き、それぞれのシンボルで、それは `-Dsymbol=value'を含みます。Autoconf バージョン1と異な り、configureが実行中に定義する変数DEFSはありません。 AutoconfマクロがあるCプリプロセッサシンボルを既に定義しているかどうか調 べるため、以下の例のように適切なキャッシュ変数の値をテストしてください。

 
AC_CHECK_FUNC(vprintf, AC_DEFINE(HAVE_VPRINTF))
if test "$ac_cv_func_vprintf" != yes; then
AC_CHECK_FUNC(_doprnt, AC_DEFINE(HAVE_DOPRNT))
fi

AC_CONFIG_HEADERが呼び出される場合、DEFSを作る代わりにテン プレートファイルに#define文で正しい値を代入したヘッダファイルを AC_OUTPUTで作ってください。この種類の出力の詳細は、 See section 3.4 Configuration Header Files.

Macro: AC_DEFINE (variable [, value [, description]])
Cプリプロセッサ変数variableを定義します。valueが与えられる場 合は、variableにその値を(逐語的に)セットし、それ以外では1にセット します。valueは改行リテラルを含むべきではなく、 AC_CONFIG_HEADERを使わない場合はmakeが処理してしまうので、 `#'文字を含めるべきではありません。シェル変数(m4の引用符文字 `['や`]'を含む定義値が必要なもの)を使うために、代わりに AC_DEFINE_UNQUOTEDを使ってください。descriptionは、 AC_CONFIG_HEADERを使う場合のみ役に立ちます。この場合、 descriptionは、生成された`config.h.in'にマクロ定義前のコメン トとして置かれます。マクロを`acconfig.h'に記述する必要はありません。 次の例は、Cプリプロセッサ変数EQUATIONを文字定数 `"$a > $b"' と定義します。

 
AC_DEFINE(EQUATION, "$a > $b")

Macro: AC_DEFINE_UNQUOTED (variable [, value [, description]])
AC_DEFINEに似ていますが、3つのシェル拡張は、variablevalueで一度だけ実行されるもので、変数の拡張(`$')、コマンドの 代入(``')と、バックスラッシュエスケープ(`\')です。値のシングル とダブルクオートの文字列は特別な意味を持ちません。variablevalueがシェル変数の時は、AC_DEFINEの代わりにこのマクロを使っ てください。以下が例です。

 
AC_DEFINE_UNQUOTED(config_machfile, "${machfile}")
AC_DEFINE_UNQUOTED(GETGROUPS_T, $ac_cv_type_getgroups)
AC_DEFINE_UNQUOTED(${ac_tr_hdr})

Bourneシェルの構文の特異性のため、AC_DEFINEAC_DEFINE_UNQUOTEDの他のマクロやシェルコードからの呼び出しをるた め、セミコロンを使わないでください。それは、configureスクリプトの 結果、構文エラーの原因となります。以下のようにします。

 
AC_CHECK_HEADER(elf.h, AC_DEFINE(SVR4) LIBS="$LIBS -lelf")

あるいはこのようにします。

 
AC_CHECK_HEADER(elf.h,
  AC_DEFINE(SVR4)
  LIBS="$LIBS -lelf")

この代わりです。

 
AC_CHECK_HEADER(elf.h, AC_DEFINE(SVR4); LIBS="$LIBS -lelf")


6.2 Setting Output Variables

テストの結果を記録する一つの方法は、出力変数を設定することで、そ れは、configureが出力したファイルの中で、値が代入されたシェル変数 です。以下の2つのマクロが新しい出力変数を作ります。利用可能な出力変数 のリストは、See section 3.3.1 Preset Output Variables.

Macro: AC_SUBST (variable)
シェル変数から出力変数を作ります。AC_OUTPUTは変数variable を出力ファイルに代入します(通常、一つ以上の`Makefile'です)。これは、 AC_OUTPUTが呼び出されたとき、AC_OUTPUTがシェル変数 variableの値を持つ入力ファイルの`@variable@'のインス タンスを置換することを意味します。variableの値は改行を含むべきでは ありません。

Macro: AC_SUBST_FILE (variable)
シェル変数から出力ファイルを作るもう一つの方法です。出力ファイルに、シェ ル変数variableで名付けられたファイルの内容をAC_OUTPUTに挿入 させます(代入ではありません)。これは、AC_OUTPUTが呼び出されたとき、 AC_OUTPUTが、シェル変数variableの値を持つ入力ファイルの内容 を(`Makefile.in'のような)出力ファイルの`@variable@'の インスタンスを置換することを意味します。挿入するファイルがない場合、変数 を`/dev/null'にセットしてください。

このマクロは、`Makefile'に特別な依存を含むフラグを挿入したり、特定 のホストやターゲットのためのmakeディレクティブを`Makefile' に挿入するとき役に立ちます。例えば、`configure.in'に以下を含ませま す。

 
AC_SUBST_FILE(host_frag)dnl
host_frag=$srcdir/conf/sun4.mh

そして`Makefile.in'に以下を含ませます。

 
@host_frag@


6.3 Caching Results

様々なconfigureスクリプトで、同じ特徴を繰り返し調べる(あるは何度 も一つのスクリプトを実行する)ことを避けるため、configureは多くの 調査結果をcache fileに保存します。configureスクリプト実行時 にキャッシュファイルを見つけた場合、前の実行結果をそれから読みだし、これ らの再実行を避けます。結果として、configureは毎回調査を実行するよ り早くなります。

Macro: AC_CACHE_VAL (cache-id, commands-to-set-it)
cache-idで識別した調査結果が利用可能だということを保証します。調査 結果が読み込まれたキャッシュファイルにあり、configureに `--quiet'や`--silent'オプションが与えられていない場合、結果が キャッシュされていることを示すメッセージを出力します。それ以外ではシェル コマンドcommands-to-set-itを実行します。これらのコマンドは設定され た変数cache-id以外に副作用をしません。特に、そこでAC_DEFINE を呼び出すべきではありません。AC_CACHE_VALの呼び出しに続くコード はキャッシュ値に基づきそれを行います。同様に、例えば AC_MSG_CHECKINGのメッセージを出力しません。AC_CACHE_VALを 呼び出す前に行うので、調査結果がキャッシュから得られるかシェルコマンド実 行による定義からかにかかわらず、メッセージは出力されます。シェルコマンド を値を決定するために実行する場合、値はconfigureが出力ファイルを作 る直前に、キャッシュファイルに保存されます。cache-id変数の名前の選 び方は、See section 6.3.1 Cache Variable Names.

Macro: AC_CACHE_CHECK (message, cache-id, commands)
メッセージ出力に注意が必要なAC_CACHE_VALのラッパーです。このマク ロは、これらのマクロを使う最も普通の方法のための便利な略記法を提供します。 messageのためにAC_MSG_CHECKINGを呼び出すと、cache-idcommands引数を伴うAC_CACHE_VALと、cache-idを伴う AC_MSG_RESULTを呼び出します。

Macro: AC_CACHE_LOAD
存在するキャッシュファイルから値をロードする、または、キャッシュファイル がない場合、新しいキャッシュファイルを作ります。自動的にAC_INIT から呼び出されます。

Macro: AC_CACHE_SAVE
キャッシュファイルに全てのキャッシュ値を書き込みます。自動的に AC_OUTPUTから呼び出されますが、`configure.in'のキーポイント でAC_CACHE_SAVEを呼び出すため非常に役に立ちます。すぐにコンフィグ レーションスクリプトが中断する場合、そのようなチェックポイントでキャッシュ してください。

6.3.1 Cache Variable Names  Shell variables used in caches.
6.3.2 Cache Files  Files configure uses for caching.


6.3.1 Cache Variable Names

キャッシュ変数名は以下のフォーマットにするべきです:

 
package-prefix_cv_value-type_specific-value[_additional-options]

たとえば、`ac_cv_header_stat_broken'とか、 `ac_cv_prog_gcc_traditional'などのようになります。 変数名の各部分の意味は以下のとおり:

package-prefix
パッケージまたは組織名の略称です; 小文字な点は違いますが、 ローカルに使用しているAutoconfのマクロ名のはじめのprefixと同じです。 Autoconf標準配布に入っているマクロのキャッシュ変数では、 `ac'を使っています。

_cv_
このshell変数がキャッシュであることを示します。

value-type
キャッシュの値の種類です。合理的な名前づけシステムにするためについています。 Autoconfの使う種類名は7.2 Macro Namesに挙げられています。

specific-value
このテストが適応するキャッシュ値のクラスのメンバーです。例えば、関数 (`alloca')、プログラム(`gcc')や、出力変数(`INSTALL')です。

additional-options
このテストが適応する特定のメンバーの特定の動作です。例えば、 `broken'や`set'です。名前のこの部分は適応されない場合は削除さ れます。

キャッシュ変数に割り当てられた値は改行を含めてはいけません。通常、値は真 偽値(`yes'や`no')、あるいはファイルや関数の名前なので、重要な 制限ではありません。


6.3.2 Cache Files

キャッシュファイルは、あるシステム上で実行されたconfigureのテスト結果を 蓄えるshellスクリプトです。これにより、configureスクリプト間、 または複数回のconfigureの実行の間でテスト結果を共有できます。 異なるシステム上ではキャッシュファイルは役にたちません。 もしキャッシュファイルの内容がなんらかの理由で不正になった場合、 ユーザはキャッシュファイルを削除したり編集したりできます。

デフォルトでは、configureは`./config.cache'をキャッシュファイルとして 使います。もしなければ新規に作成されます。configureは キャッシュファイルの切替えのため、`--cache-file=file'という オプションを受け付けます; configureがサブディレクトリにある configureスクリプトを呼び出す際には、このオプションを使って スクリプト間でキャッシュを共有します。 AC_CONFIG_SUBDIRSマクロを使ってサブディレクトリの設定を する方法については、See section 3.5 Configuring Other Packages in Subdirectoriesを参照してください。

`--cache-file=/dev/null'とすることで、configureのデバッグのために キャッシュを無効にできます。`config.status'は`--recheck' オプションが指定された場合を除いてキャッシュファイルを参照しません。 `config.status'に`--recheck'には、configureが 再実行されます。デバッグ期間が長くなりそうな場合には、以下のように キャッシュ関連マクロをconfigure.inの先頭で再定義することで、 configureスクリプトがキャッシュ読み込み/書き出しをしないように できます。

 
define([AC_CACHE_LOAD], )dnl
define([AC_CACHE_SAVE], )dnl
AC_INIT(whatever)
 ... rest of configure.in ...

特定のシステム用のキャッシュファイルを配布しようとするのはよくないことです。 あまりにもエラーが発生しやすく、管理コストがあまりに高すぎます。 自動判別できないOS機能については、正規化されたシステムタイプ名を得て リンクするファイルを選ぶ方法を使いましょう(see section 8. Manual Configuration 参照)。この方法は標準化されています。

あるシステム向けのキャッシュファイルは、configureスクリプトを 実行するごとに内容が追加されていきます; 初期状態では空です。 configureを実行すると、configureは新しいテスト結果と キャッシュファイルの内容をマージします。サイト向け初期化スクリプトの中で、 デフォルトで利用されるものでない、サイト単位のキャッシュファイルを 指定することができます。サイト単位のキャッシュファイルは、 同じCコンパイラが利用されている限り、透過的に働きます (see section 9.5 Setting Site Defaults参照)。

configureスクリプトやconfigure.inから呼び出されるマクロがコンフィグレー ションプロセスを中断する場合、数回のキーポイントでのキャッシュのチェック ポイントは役に立ちます。そうすると、(希望通り)以前にエラーを引き起こした 部分を修正したコンフィグレーションスクリプトを再実行する時間を、大幅に削 除します。

 
 ... AC_INIT, etc. ...
dnl checks for programs
AC_PROG_CC
AC_PROG_GCC_TRADITIONAL
 ... more program checks ...
AC_CACHE_SAVE

dnl checks for libraries
AC_CHECK_LIB(nsl, gethostbyname)
AC_CHECK_LIB(socket, connect)
 ... more lib checks ...
AC_CACHE_SAVE

dnl Might abort...
AM_PATH_GTK(1.0.2, , exit 1)
AM_PATH_GTKMM(0.9.5, , exit 1)


6.4 Printing Messages

configureスクリプトは、configureを実行しているユーザに 各種の情報を知らせる必要があります。以下のマクロは各種の状況に適した方法で メッセージを出力します。以下の全てのマクロの引数は、shell用に ダブルクォートで囲まれます。このため、shellは変数とbackquoteの置換を 行います。カンマを含むメッセージは、m4のquote文字である角括弧で メッセージを囲めば出力できます。

 
AC_MSG_RESULT([never mind, I found the BASIC compiler])

これらのマクロはshellコマンドのechoのwarpperです。 configureスクリプトでは、ほとんどの場合 ユーザにメッセージを出力するのにechoを直接使う必要はありません。 ここで挙げたマクロを使えば、メッセージの出力時期と出力されかたを 簡単に変えることができます。メッセージ出力マクロの定義を変えれば、 全ての呼び出し側マクロの出力を変えられます。

Macro: AC_MSG_CHECKING (feature-description)
configureが、ある特定のOS機能をチェックしていることをユーザに 知らせます。このマクロは`checking 'ではじまり、`...'で終る、 改行なしのメッセージを出力します。このマクロの後にはAC_MSG_RESULTを 呼び出し、チェック結果と改行を出力する必要があります。 feature-descriptionはたとえば `whether the Fortran compiler accepts C++ comments'とか、 `for c89'とかがよいでしょう。

このマクロはconfigureが`--quiet'オプション、または `--silent'オプションつきで実行された場合、なにも出力しません。

Macro: AC_MSG_RESULT (result-description)
ユーザにテスト結果を知らせます。result-descriptionは ほとんど常に、キャッシュ変数の値で、たいてい`yes'か`no'か ファイル名になります。このマクロはAC_MSG_CHECKINGに続いて 呼び出される必要があります。また、result-descriptionに 指定するメッセージはAC_MSG_CHECKINGの出力したメッセージを 終結させるさせるものでなければなりません。

このマクロはconfigureが`--quiet'オプション、または `--silent'オプションつきで実行された場合、なにも出力しません。

Macro: AC_MSG_ERROR (error-description)
ユーザにconfigureが中断してしまうようなエラーに関して知らせます。 このマクロは標準エラー出力にエラーメッセージを出力し、 configureを終了します。exit statusは0でない値になります。 error-descriptionはたとえば`invalid value $HOME for \$HOME' などのようなテキストがいいでしょう。

Macro: AC_MSG_WARN (problem-description)
configureのユーザに問題になり得る点を知らせます。 このマクロは標準エラー出力にメッセージを出力します; configureは以後も実行を続けます。 ので、AC_MSG_WARNを呼び出すマクロは、 警告する内容に関して、デフォルトの(代用の)ふるまいを 提供するべきです。problem-descriptionはたとえば `ln -s seems to make hard links'のようなテキストがいいでしょう。

以下のふたつのマクロはobsoleteです。 AC_MSG_CHECKINGAC_MSG_RESULTを使いましょう。

Macro: AC_CHECKING (feature-description)
このマクロはAC_MSG_CHECKINGと似ていますが、AC_CHECKINGfeature-descriptionのあとに改行を出力します。 このマクロは主に、複数並んだOS機能チェックの全体としての目的を 出力するのに使えます。たとえば:

 
AC_CHECKING(if stack overflow is detectable)

Macro: AC_VERBOSE (result-description)
このマクロはAC_MSG_RESULTと似ています。 ただし、AC_VERBOSEAC_MSG_CHECKINGではなく、 AC_CHECKINGに続いて呼び出される、という点だけが違います。 メッセージはtabに続いて出力されます。 このマクロはobsoleteです。


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

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