Next: , Up: Writing Tests


6.1 言語の選択

Autoconfが生成したconfigureスクリプトは,Cコンパイラとその特徴 をデフォルトで調査します.他のプログラム言語を使用するパッケージ(一つ以 上で,例えば,CとC++)は,それぞれの言語のコンパイラの特徴をテストする必 要があります.以下のマクロはconfigure.ac内のそれ以降のテストで使 用されるプログラミング言語のコンパイラを決定します.

— Macro: AC_LANG (language)

languageで指定されている,コンパイラ,プリプロセッサ,そしてファイ ル拡張子をコンパイルテストで使用します.

サポートされている言語は以下のとおりです.

C
CCCPPを使用してコンパイルテストを行ない,テストプログラ ムでは.cの拡張子を使用します.コンパイルフラグを使用します. CPPではCPPFLAGSCCではCPPFLAGSCFLAGSの両方を使用します.
C++
CXXCXXCPPを使用してコンパイルテストを行ない,テストプロ グラムでは.Cの拡張子を使用します.コンパイルフラグを使用します. CXXPPではCPPFLAGSCXXではCPPFLAGSCXXFLAGSの両方を使用します.
Fortran 77
F77を使用してコンパイルテストを行ない,テストプログラムでは .fの拡張子を使用します.コンパイルフラグを使用します. FFLAGSです.
Fortran
FCを使用してコンパイルテストを行ない,テストプログラムでは .fの拡張子(またはAC_FC_SRCEXTで設定されているもの)を使用し ます.コンパイルフラグを使用します.FCFLAGSです.

— Macro: AC_LANG_PUSH (language)

現在の言語を(AC_LANGに設定するように)スタックに記録してから, languageを選択します.このマクロとAC_LANG_POPを,一時的に特 定の言語に切替える必要があるマクロで使用してください.

— Macro: AC_LANG_POP ([language])

AC_LANG_PUSHで設定するように,スタックのトップに保存されている言 語に選択し,スタックからそれを削除します.

language与えられている場合,それは言語をそのまま指定します. 分かっているときは,Autoconfが間違いを検出するので(case...にすべきで すが),それを指定することは良い考えです.

          AC_LANG_PUSH(Fortran 77)
          # Perform some tests on Fortran 77.
          # ...
          AC_LANG_POP(Fortran 77)
— Macro: AC_LANG_ASSERT (language)

現在の言語がlanguageであることを十分に調査します.言語指定のマクロ で不適切な言語での呼び出しを避けるため使用すべきです.

このマクロは,autoconf時のみで実行され,configure時 に時間がかかることはありません.残念ながら,Autoconfは二つのレイヤーの言 語があるため1,マクロのAC_LANG_PUSH/AC_LANG_POP は“最適化” されず,そのため,できるだけコードのラッパーを行なうために それらを使用することを避け,代わりに,ユーザがマクロを現在の言語で実行す ることを要求し,AC_LANG_ASSERTで調査するようにして下さい.いずれ にせよ,Fortran 77コンパイラの結果を期待している,ユーザが実行している Fortranマクロを理解する助けとなるでしょう...

— Macro: AC_REQUIRE_CPP

現在のテストに使用されるプリプロセッサが見つかることを保証します.現在の 言語に依存して,AC_PROG_CPPまたはAC_PROG_CXXCPPのいずれか の引数を用いて,AC_REQUIRE(see Prerequisite Macros)を呼び出し てください.


Footnotes

[1] M4は特別な条件文となっているShのコードに注目しない ので,十分に良いと感じられる最適化でも,実行時の結果が間違っているものに なる可能性があります.