次: Changed Macro Writing, 前: Changed Macros, 上: Autoconf 1
シェル変数のDEFSを調査することで,前のテストの結果を調査していた
場合,それらのテストに対するキャッシュ変数の値を調査することに切り替える
必要があります.DEFSはconfigure実行中にも存在しません.
それは出力ファイルを生成するときのみ作成されます.バージョン1からのこの
違いは,正確にその変数を引用符で囲むことが,あまりに厄介で,
AC_DEFINEを毎回呼び出すことは,非効率だと分かったためです.
See Cache Variable Names.
例えば,Autoconfバージョン1に対して書かれた,configure.acの一部は 以下のようになります.
AC_HAVE_FUNCS(syslog)
case "$DEFS" in
*-DHAVE_SYSLOG*) ;;
*) # syslog is not in the default libraries. See if it's in some other.
saved_LIBS="$LIBS"
for lib in bsd socket inet; do
AC_CHECKING(for syslog in -l$lib)
LIBS="$saved_LIBS -l$lib"
AC_HAVE_FUNCS(syslog)
case "$DEFS" in
*-DHAVE_SYSLOG*) break ;;
*) ;;
esac
LIBS="$saved_LIBS"
done ;;
esac
バージョン2に対する書き方は以下のようになります.
AC_CHECK_FUNCS(syslog)
if test $ac_cv_func_syslog = no; then
# syslog is not in the default libraries. See if it's in some other.
for lib in bsd socket inet; do
AC_CHECK_LIB($lib, syslog, [AC_DEFINE(HAVE_SYSLOG)
LIBS="$LIBS -l$lib"; break])
done
fi
引用符の前にバックスラッシュを加えることで,AC_DEFINE_UNQUOTED で
バグが生じる場合,それを削除する必要があります.今は予想通りに動作し,
(バックスラッシュ以外の)引用符を特別扱いしません.See Setting Output Variables.
現在,Autoconfマクロが設定した真偽値のシェル変数のすべては,真の値に対し て`yes'が使用され.偽に対してはほとんど`no'を使用しますが,下 位互換性のため,代わりに空の文字列を使用するものもあります.真に対して1 や`t'にシェル変数が設定されることを期待する場合,テストを変更する必 要があります.