我正在使用备用AC_COMPILE_IFELSE
,如下所示。
BAD_RESULT="fatal|error|unknown|unrecognized|illegal|ignored|not found|not exist|cannot find"
AC_DEFUN([XXX_COMPILE_IFELSE],
[AC_REQUIRE([AC_PROG_EGREP])
AC_COMPILE_IFELSE(
[$1],
[retval=0
if $EGREP -i -c -E "$BAD_RESULT" conftest.err >/dev/null; then retval=1; fi
],[retval=1]
)
AS_IF([test $retval = 0],[$2],[$3])]
)
当我autoreconf
创建configure
scipt时,替代方法会生成许多警告,例如:
configure.ac:812: warning: AC_LANG_CONFTEST: no AC_LANG_SOURCE call detected in body
../../lib/autoconf/lang.m4:194: AC_LANG_CONFTEST is expanded from...
../../lib/autoconf/general.m4:2591: _AC_COMPILE_IFELSE is expanded from...
../../lib/autoconf/general.m4:2607: AC_COMPILE_IFELSE is expanded from...
configure.ac:152: XXX_COMPILE_IFELSE is expanded from...
configure.ac:812: the top level
Autotools文档(here和here和here)没有讨论将语言放置在何处。我尝试在AC_COMPILE_IFELSE
和AC_LANG_PUSH([C++])
和AC_LANG_POP
的调用中保留书,但它没有消除警告。
我在哪里告诉机器该语言是C ++?
以下是使用XXX_COMPILE_IFELSE
的示例。
XXX_PROGRAM="#include <wmmintrin.h>
int main(int argc, char* argv[]) {
__m128i x;
x=_mm_aesenc_si128(x,x);
x=_mm_aesenclast_si128(x,x);
return 0;
}"
CXXFLAGS="-xarch=aes"
AC_MSG_CHECKING([if $CXXNAME supports $CXXFLAGS])
XXX_COMPILE_IFELSE(
[$XXX_PROGRAM],
[AC_MSG_RESULT([yes]); AC_SUBST([tr_RESULT], [1])],
[AC_MSG_RESULT([no]); AC_SUBST([tr_RESULT], [0])]
)
configure.ac
的头具有以下内容。自从切换到XXX_COMPILE_IFELSE
以来似乎还没有兑现。
AC_INIT([Crypto++], [7.1], ...)
AM_INIT_AUTOMAKE
AC_CONFIG_MACRO_DIR([m4])
AC_CONFIG_HEADERS([local.h])
AC_CONFIG_FILES([Makefile] [libcryptopp.pc])
AC_CONFIG_SRCDIR([configure.ac])
AM_PROG_AS
AC_PROG_LIBTOOL
LT_INIT
AC_PROG_CXX
AC_LANG([C++])
AC_PROG_GREP
## Assert this once to avoid surprises
AC_LANG_ASSERT([C++])