Мы пытаемся проверить доступность -pthread
и устанавливаем флаг как в CXXFLAGS
, так и в LDFLAGS
. Мы не хотим использовать ax_pthread
, потому что он использует неправильный компилятор и устанавливает неправильные флаги для проекта C++. И согласно значению флага -pthread при компиляции, -pthread
является наиболее переносимым, поэтому мы хотим использовать его как для CXXFLAGS
, так и для LDFLAGS
.
Сценарий, который мы добавили в configure.ac
:
AC_ARG_ENABLE(tls,
AS_HELP_STRING([--enable-tls], [enable thread storage (default is yes)]),
ac_enable_tls=$enableval,
ac_enable_tls=yes)
AM_CONDITIONAL(HAS_PTHREADS, test $ac_enable_tls = yes)
if test "$ac_enable_tls" = "yes"; then
SAVED_CXXFLAGS="$CXXFLAGS"
CXXFLAGS="-pthread"
AC_MSG_CHECKING([for pthread support])
AC_COMPILE_IFELSE([AC_LANG_PROGRAM([])],
[AC_MSG_RESULT([-pthread]) && AC_SUBST([AM_CXXFLAGS], ["-pthread"]) && AC_SUBST([AM_LDFLAGS], ["-pthread"])],
[AC_MSG_FAILURE(["--enable-tls=yes but pthreads are not available"])]
)
CXXFLAGS="$SAVED_CXXFLAGS"
fi
Это приводит к:
./configure: line 16173: syntax error near unexpected token `&&'
./configure: line 16173: ` && AM_LDFLAGS="-pthread"'
autoreconf --warnings=all
не выдает предупреждений, связанных с тестом.
Я предполагаю, что проблема заключается в попытке сделать три вещи в AC_COMPILE_IFELSE
и [action-if-true]
. Документы Autoconf AC_COMPILE_IFELSE
не говорят нам, как действовать в такой ситуации, и не содержат примеров.
Мы хотим выполнить три действия в [action-if-true]
:
- Распечатать сообщение
pthread
AM_CXXFLAGS += -pthread
AM_LDFLAGS += -pthread
Как выполнить несколько действий в [action-if-true]
?