AC_DEFUN的语言放在哪里?

时间:2018-07-26 23:43:22

标签: c++ autotools autoconf

我正在使用备用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文档(hereherehere)没有讨论将语言放置在何处。我尝试在AC_COMPILE_IFELSEAC_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++])

0 个答案:

没有答案