AC_FOO_IFELSE対AC_TRY_FOOAutoconf 2.50以来,内部コードでは,一方ではAC_PREPROC_IFELSE,
AC_COMPILE_IFELSE,AC_LINK_IFELSE,そして
AC_RUN_IFELSEを使用し,もう一方では反対されている
AC_TRY_CPP,AC_TRY_COMPILE,AC_TRY_LINK,そして
AC_TRY_RUNの代わりにAC_LANG_SOURCESと
AC_LANG_PROGRAMを使用しています.その動機は以下にあります.
AC_TRY_COMPILEなどは,その引数を
二重の引用符で囲みます.
構文の変更だけでなく,哲学的な変更もなされました.正確さの代償として速度 を用いたことを強調しておきますが,今日のAutoconfは,テスティングフレーム ワークの正確さを進展させていて,う〜ん...速度の代償になっています.
なされてはいない完全な例として,ヘッダファイルが,型,構造体,構
造体のメンバー,または関数といった特定の宣言を含んでいるかどうかを調べる
方法が以下にあります.ヘッダファイルで直接grepを実行する代わりに,
AC_EGREP_HEADERを使用してください.調査している`#include' 以
外のヘッダファイルでシンボルを定義しているシステムもあるでしょう.
(悪い)例として,シンボルが,ヘッダファイルで定義されているか,またはC プ リプロセッサで定義されているかを,Cプリプロセッサを調査すべきではない理 由がは以下にあります.
AC_EGREP_CPP(yes,
[#ifdef _AIX
yes
#endif
], is_aix=yes, is_aix=no)
上記の例では,適切に書かれている(i)AC_LANG_PROGRAMを使用し,(ii)
コンパイラを実行すべきです.
AC_COMPILE_IFELSE([AC_LANG_PROGRAM(
[[#if !defined _AIX
# error _AIX not defined
#endif
]])],
[is_aix=yes],
[is_aix=no])