Next: , Previous: Running the Linker, Up: Writing Tests


6.6 実行時の動作の調査

当該関数に特定の能力やバグがあるかどうかといった,実行時にシステムがどの ような動作をするか調べる必要があることもあります.可能であれば,コンフィ グレーション時ではなくプログラムを実行するときそのような調査をしてくださ い.マシンのエンディアンのようなものは,プログラムの初期化時に調査するこ とが可能です.

コンフィグレーション時に実行時の動作を調査する必要が本当にある場合,結果 を決定するテストプログラムを書き,コンパイルしてAC_RUN_IFELSE を 使用して実行することも可能です.これは,クロスコンパイルでパッケージをコ ンフィグレーションする人々の妨げになるので,可能であれば,テストプログラ ムの実行は避けてください.

— Macro: AC_RUN_IFELSE (input, [action-if-found], [action-if-not-found], [action-if-cross-compiling])

programのコンパイルとリンクが正常終了し,実行時に0の終了ステータス が返る場合,シェルコマンドaction-if-trueを実行します.それ以外では, シェルコマンドaction-if-falseを実行します.

inputは,AC_LANG_PROGRAMとその仲間で作成することが可能です. 現在の言語(see Language Choice)のコンパイラフラグに加えて,リンク時 にはLDFLAGSLIBSも使用します.

使用されるコンパイラが,configureが実行されているシステムで実 行する実行形式を生成しない場合,テストプログラムは実行されません.オプショ ンのシェルコマンドaction-if-cross-compilingが与えられている場合, それらが変わりに実行されます.それ以外の場合,configureはエラー メッセージを出力し終了します.

action-if-falseセクションでは,プログラムの終了ステータスはシェル 変数‘$?’で利用可能ですが,127未満の正の値に制限するよう十分注意して ください.大きな値は,programでファイルに保存すべきです.また,こ の終了ステータスがprogramで,またはそのコンパイルの異常終了で,生 成されることを保証されていないことに注意してください.言い替えると,苛め られるのが好きな人だけこの機能を使用してください.それは,Autoconfの管理 者が飽き飽きするほど“バグの報告”を受けとることになったので,元に戻しま した.

慣習的に,予期せぬ異常終了はAC_MSG_FAILUREで報告します.

クロスコンパイルで実行時のテストが不可能な時は,使用する悲観的なデフォル ト値を提供してみてください.オプションの最後の引数をAC_RUN_IFELSE に渡すことでこうします.autoconfは, action-if-cross-compiling引数無しでAC_RUN_IFELSEを呼び出す ごとに,configureを生成するときに警告メッセージを出力します. 警告を無視してもかまいませんが,ユーザはクロスコンパイルでパッケージのコ ンフィグレーションが不可能になります.Autoconfで配布されるマクロには,こ の警告メッセージを生成するものもあります.

クロスコンパイルでコンフィグレーションするため,これらのパラメータの値を 標準的なシステム名を基に選択することも可能です(see Manual Configuration).または,テスト結果のキャッシュファイルをホストシステム に対する正しい値で設定してください(see Caching Results).

Autoconfとともに含まれている他のマクロに埋め込まれている, AC_RUN_IFELSEの呼び出しに対するデフォルトを提供するため,シェル変 数cross_compilingが‘yes’に設定されているかどうかを調査し,マ クロ呼び出しの代わりに結果を取得するため,代わりの手法を使用してください.