autoheader
「スキャン」しないことに注意してくださいconfigure.ac
。むしろ、(によって間接的に呼び出される)および(によって呼び出される)への低レベルの呼び出しをキャッチするために、トレースモードで実行configure.ac
されます。したがって、すべてが通過するため、を無視しないでください。ただし、マクロが実際に受け取る方法で引数を確認します。m4
AC_DEFINE_TRACE_LITERAL
AC_DEFINE
AH_OUTPUT
AC_CHECK_HEADERS
m4
autoheader
m4_foreach
AC_DEFINE
:への呼び出しと:の呼び出しをトレースすることで、コードの問題を確認できAC_CHECK_HEADERS
ます。configure.ac
%cat configure.ac
AC_INIT(somelib.so、1.0、someone@somewhere.com)
m4_foreach_w([hdr]、[[foo.h] [bar.h]]、[
AC_DEFINE([HAVE_] m4_translit(m4_toupper(hdr)、[/。]、[__])、[1]、
[] hdr [が利用可能な場合は1に定義])
AC_CHECK_HEADERS([hdr])
])
AC_CONFIG_HEADERS([config.h])
AC_OUTPUT
%autoconf -t AC_DEFINE -t AC_CHECK_HEADERS
configure.ac:3:AC_DEFINE:HAVE_FOO_H:1:foo.hが使用可能な場合は1に定義します
configure.ac:3:AC_CHECK_HEADERS:hdr
configure.ac:3:AC_DEFINE:STDC_HEADERS:1:ANSI Cヘッダーファイルがある場合は、1に定義します。
configure.ac:3:AC_CHECK_HEADERS:sys/types.h sys / stat.h stdlib.h string.h memory.h strings.h inttypes.h stdint.h unistd.h ::: $ ac_includes_default
configure.ac:3:AC_DEFINE:HAVE_BAR_H:1:bar.hが使用可能な場合は1に定義
configure.ac:3:AC_CHECK_HEADERS:hdr
したがって、これは引数としてAC_CHECK_HEADERS
2回呼び出されることがわかります。hdr
AC_DEFINEの呼び出し中に、hdr
正しく展開されました。これhdr
は、への呼び出しでもう一度引用されAC_CHECK_HEADERS
、その拡張を妨げているためです。
私はそれをこのように修正します:
m4_foreach_w([hdr],[[foo.h] [bar.h]], [
AC_DEFINE([HAVE_]m4_translit(m4_toupper(hdr),[/.],[__]),[1],
[Define to 1 if ]hdr[ is available])
AC_CHECK_HEADERS(hdr)
])
(ただし、foo.hおよびbar.hという名前がマクロをトリガーしないことを前提としています。)