Previous: AC_LIBOBJ vs LIBOBJS, Up: Autoconf 2.13


15.6.5 AC_FOO_IFELSEAC_TRY_FOO

Autoconf 2.50以来,内部コードでは,一方ではAC_PREPROC_IFELSEAC_COMPILE_IFELSEAC_LINK_IFELSE,そして AC_RUN_IFELSEを使用し,もう一方では反対されている AC_TRY_CPPAC_TRY_COMPILEAC_TRY_LINK,そして AC_TRY_RUNの代わりにAC_LANG_SOURCESAC_LANG_PROGRAMを使用しています.その動機は以下にあります.

構文の変更だけでなく,哲学的な変更もなされました.正確さの代償として速度 を用いたことを強調しておきますが,今日の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])