あなたがやろうとしていることの問題はAC_CHECK_SIZEOF
、実際には という名前の変数を定義していないことSIZEOF_INT
です。2.68 では、必要な変数ac_cv_sizeof_int
の名前は になっていますが、それ以降のバージョンでは名前が変更される可能性があるため、これを使用しないでください。値は confdefs.h にも書き込まれるため、取得する別の方法は次のとおりです。
AC_PROG_AWK
AC_CHECK_SIZEOF([int])
SIZEOF_INT=$($AWK '/SIZEOF_INT/{print $3}' confdefs.h)
AC_SUBST([SIZEOF_INT])
(confdefs.h の読み取りも文書化されていない動作であり、autoconf の将来のバージョンで変更される可能性がありますが、おそらく $ac_cv_sizeof_int を見るよりも安定しています。おそらく、安定性も劣ります。;) YMMV)
マクロを定義するには (命名規則に関する私のコメントに注意してください)、次のようにします。
AC_DEFUN([wrp_CHECK_SIZEOF_AND_SUBST], [
AC_REQUIRE([AC_PROG_AWK])
AC_CHECK_SIZEOF([$1])
m4_toupper(SIZEOF_$1)=$($AWK '
/SIZEOF_[]m4_toupper($1)/{print $[]3}' confdefs.h)
AC_SUBST(m4_toupper(SIZEOF_$1))
])
上記のバージョンは を処理しませんint *
が、簡単にするために、より一般的なバージョンに置き換えるのではなく、そのままにしておきます。
AC_DEFUN([wrp_CHECK_SIZEOF_AND_SUBST], [
AC_REQUIRE([AC_PROG_AWK])
AC_CHECK_SIZEOF([$1])
m4_pushdef([name],SIZEOF_[]m4_toupper(m4_translit($1,[ *],[_p])))
name=$($AWK '/name/{print $[]3}' confdefs.h)
AC_SUBST(name)
m4_popdef([name])
])
注:$()
移植可能な構成スクリプトでは表記を避けるべきであり、バッククォートに置き換える必要があると思います。ただし、バッククォートは恐ろしいものです。