[ << ] | [ >> ] | [Top] | [Contents] | [Index] | [ ? ] |
一度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. |
特徴テストの応答をもたらす普通の行動は、テストの結果を示すCプリプロセッ
サシンボルを定義することです。それはAC_DEFINE
や
AC_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.
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") |
AC_DEFINE
に似ていますが、3つのシェル拡張は、variableと
valueで一度だけ実行されるもので、変数の拡張(`$')、コマンドの
代入(``')と、バックスラッシュエスケープ(`\')です。値のシングル
とダブルクオートの文字列は特別な意味を持ちません。variableや
valueがシェル変数の時は、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_DEFINE
や
AC_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") |
テストの結果を記録する一つの方法は、出力変数を設定することで、そ
れは、configure
が出力したファイルの中で、値が代入されたシェル変数
です。以下の2つのマクロが新しい出力変数を作ります。利用可能な出力変数
のリストは、See section 3.3.1 Preset Output Variables.
AC_OUTPUT
は変数variable
を出力ファイルに代入します(通常、一つ以上の`Makefile'です)。これは、
AC_OUTPUT
が呼び出されたとき、AC_OUTPUT
がシェル変数
variableの値を持つ入力ファイルの`@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@ |
様々なconfigure
スクリプトで、同じ特徴を繰り返し調べる(あるは何度
も一つのスクリプトを実行する)ことを避けるため、configure
は多くの
調査結果をcache fileに保存します。configure
スクリプト実行時
にキャッシュファイルを見つけた場合、前の実行結果をそれから読みだし、これ
らの再実行を避けます。結果として、configure
は毎回調査を実行するよ
り早くなります。
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.
AC_CACHE_VAL
のラッパーです。このマク
ロは、これらのマクロを使う最も普通の方法のための便利な略記法を提供します。
messageのためにAC_MSG_CHECKING
を呼び出すと、cache-id
とcommands引数を伴うAC_CACHE_VAL
と、cache-idを伴う
AC_MSG_RESULT
を呼び出します。
AC_INIT
から呼び出されます。
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. |
キャッシュ変数名は以下のフォーマットにするべきです:
package-prefix_cv_value-type_specific-value[_additional-options] |
たとえば、`ac_cv_header_stat_broken'とか、 `ac_cv_prog_gcc_traditional'などのようになります。 変数名の各部分の意味は以下のとおり:
_cv_
キャッシュ変数に割り当てられた値は改行を含めてはいけません。通常、値は真 偽値(`yes'や`no')、あるいはファイルや関数の名前なので、重要な 制限ではありません。
キャッシュファイルは、あるシステム上で実行された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) |
configure
スクリプトは、configure
を実行しているユーザに
各種の情報を知らせる必要があります。以下のマクロは各種の状況に適した方法で
メッセージを出力します。以下の全てのマクロの引数は、shell用に
ダブルクォートで囲まれます。このため、shellは変数とbackquoteの置換を
行います。カンマを含むメッセージは、m4
のquote文字である角括弧で
メッセージを囲めば出力できます。
AC_MSG_RESULT([never mind, I found the BASIC compiler]) |
これらのマクロはshellコマンドのecho
のwarpperです。
configure
スクリプトでは、ほとんどの場合
ユーザにメッセージを出力するのにecho
を直接使う必要はありません。
ここで挙げたマクロを使えば、メッセージの出力時期と出力されかたを
簡単に変えることができます。メッセージ出力マクロの定義を変えれば、
全ての呼び出し側マクロの出力を変えられます。
configure
が、ある特定のOS機能をチェックしていることをユーザに
知らせます。このマクロは`checking 'ではじまり、`...'で終る、
改行なしのメッセージを出力します。このマクロの後にはAC_MSG_RESULT
を
呼び出し、チェック結果と改行を出力する必要があります。
feature-descriptionはたとえば
`whether the Fortran compiler accepts C++ comments'とか、
`for c89'とかがよいでしょう。
このマクロはconfigure
が`--quiet'オプション、または
`--silent'オプションつきで実行された場合、なにも出力しません。
AC_MSG_CHECKING
に続いて
呼び出される必要があります。また、result-descriptionに
指定するメッセージはAC_MSG_CHECKING
の出力したメッセージを
終結させるさせるものでなければなりません。
このマクロはconfigure
が`--quiet'オプション、または
`--silent'オプションつきで実行された場合、なにも出力しません。
configure
が中断してしまうようなエラーに関して知らせます。
このマクロは標準エラー出力にエラーメッセージを出力し、
configure
を終了します。exit statusは0でない値になります。
error-descriptionはたとえば`invalid value $HOME for \$HOME'
などのようなテキストがいいでしょう。
configure
のユーザに問題になり得る点を知らせます。
このマクロは標準エラー出力にメッセージを出力します;
configure
は以後も実行を続けます。
ので、AC_MSG_WARN
を呼び出すマクロは、
警告する内容に関して、デフォルトの(代用の)ふるまいを
提供するべきです。problem-descriptionはたとえば
`ln -s seems to make hard links'のようなテキストがいいでしょう。
以下のふたつのマクロはobsoleteです。
AC_MSG_CHECKING
やAC_MSG_RESULT
を使いましょう。
AC_MSG_CHECKING
と似ていますが、AC_CHECKING
は
feature-descriptionのあとに改行を出力します。
このマクロは主に、複数並んだOS機能チェックの全体としての目的を
出力するのに使えます。たとえば:
AC_CHECKING(if stack overflow is detectable) |
AC_MSG_RESULT
と似ています。
ただし、AC_VERBOSE
はAC_MSG_CHECKING
ではなく、
AC_CHECKING
に続いて呼び出される、という点だけが違います。
メッセージはtabに続いて出力されます。
このマクロはobsoleteです。
[ << ] | [ >> ] | [Top] | [Contents] | [Index] | [ ? ] |