Возможно undefined макрос: AC_MSG_ERROR

У меня есть следующее в файле configure.ac:

AC_CHECK_PROGS(MAKE,$MAKE make gmake,error)
if test "x$MAKE" = "xerror" ;then
  AC_MSG_ERROR([cannot find a make command])
fi

Это было в нашем проекте в течение длительного времени, но в некоторых настройках я получаю эту ошибку:

configure.ac:45: error: possibly undefined macro: AC_MSG_ERROR
  If this token and others are legitimate, please use m4_pattern_allow.
  See the Autoconf documentation.

Недавно добавленные строки:

AC_CONFIG_MACRO_DIR([m4])
LT_INIT

Может ли кто-нибудь объяснить причину этой ошибки и как отследить проблему?

EDIT: Добавление сведений о различиях.

Коробка, которая работает:

uname -a Linux host1 2.6.38-13-generic #53-Ubuntu SMP Mon Nov 28 19:33:45 UTC 2011 x86_64 x86_64 x86_64 GNU/Linux

automake: 1.11.1
autoconf: 2.67
m4: 1.4.14
libtoolize: 2.2.6b

Коробка, которая не работает:

Linux host2 2.6.32-35-generic-pae #78-Ubuntu SMP Tue Oct 11 17:01:12 UTC 2011 i686 GNU/Linux

automake: 1.11.1
autoconf: 2.65
m4: 1.4.13
libtoolize: 2.2.6b

НОВЫЙ РЕДАКТ: только 32-битные машины испытывают эту трудность.

ОБНОВЛЕНО Я могу воспроизвести проблему на машине CentOS с autoconf 2.67, automake 1.11.1, libtool 2.2.6b и m4 1.4.14. Это просто ошибка с 32-битными машинами?

Ответ 1

У меня была эта же проблема и выяснилось, что пакет pkg-config отсутствует.

После установки пакета все генерируется правильно.

Ответ 2

Рекомендуется использовать autoreconf -fi вместо ручного вызова aclocal;autoconf;automake; #and whatever else для правильного заполнения aclocal.m4 и т.д.

Добавление ACLOCAL_AMFLAGS = -I m4 (toplevel Makefile.am) и AC_CONFIG_MACRO_DIR([m4]) в настоящее время по-прежнему не является обязательным, если вы не используете какие-либо собственные файлы m4, но, конечно же, это затихнет proocess:)

Ответ 3

У меня была эта проблема с моим собственным configure.ac, но в этом случае (и в интересах любого здесь из Google) это произошло потому, что я случайно процитировал AC_MSG_ERROR, поэтому он обрабатывался как строка:

AX_BOOST_BASE([1.42], [], [AC_MSG_ERROR([Could not find Boost])])

Как только я удалил квадратные скобки вокруг макроса AC_MSG_ERROR, он работал:

AX_BOOST_BASE([1.42], [], AC_MSG_ERROR([Could not find Boost]))

Те комментарии, которые вы должны установить pkg-config или какой-то пакет, не имеют смысла. Предполагается, что AC_MSG_ERROR работает и дает вам полезное сообщение типа "Вам нужно установить пакет XYZ", но из-за какой-то проблемы AC_MSG_ERROR не работает. Установка пакета XYZ, безусловно, заставит ошибку уйти, но только потому, что, как только пакет там, больше не нужно печатать сообщение об ошибке!

Таким образом, установка pkg-config или конкретного пакета просто обходит проблему, она на самом деле не исправляет ее.

Ответ 4

Я столкнулся с этой же проблемой в CentOS 7

В этом случае проблема исчезла после установки libcurl-devel (libcurl уже был установлен на этом компьютере)

Ответ 5

У меня также была аналогичная проблема. Мое решение -

apt-get install libcurl4-openssl-dev

(у меня установлен libcurl allready) работал у меня хотя бы..

Ответ 6

Вы настраиваете локальный каталог m4? например.

> aclocal -I m4 --install

Некоторые пакеты поставляются с оболочкой autogen.sh или initgen.sh script для запуска glibtoolize, autoheader, autoconf, automake. Здесь autogen.sh script Я использую:

#! /bin/sh

case `uname` in Darwin*) glibtoolize --copy ;;
  *) libtoolize --copy ;; esac

autoheader
aclocal -I m4 --install
autoconf

automake --foreign --add-missing --force-missing --copy

ИЗМЕНИТЬ

Вам может потребоваться добавить ACLOCAL_AMFLAGS = -I m4 на верхний уровень Makefile.am.

Ответ 7

Ошибка генерируется autom4te. Если все правильно настроено, часть кода, генерирующего эту ошибку, никогда не увидит "AC_MSG_ERROR", потому что она должна была быть расширена на m4 до этой точки. Вы говорите, что ошибка происходит только "в некоторых настройках". Я бы предположил, что в этих настройках ваша установка autoconf является fubar. Возможно, у вас установлена ​​несовместимая версия m4.

Ответ 8

Использование MacOS X

sudo port install pkgconfig

было решением!

Ответ 9

В Mac OS X el капитан с brew попробуйте:
brew установить pkgconfig

Это сработало для меня.

Ответ 10

Для Debian. Необходимые пакеты: m4 automake pkg-config libtool

Ответ 11

Это случилось со мной, когда я забыл в аргументах локально заданного макроса. Проработанные часы, пытаясь понять это (едва знакомы с автотюшками)...

AC_CHECK_MACRO([Foo]
    AC_LOCAL_DO([......

должно быть

AC_CHECK_MACRO([Foo],      # <-- Notice comma, doh!
    AC_LOCAL_DO([......

Похоже, он должен был дать мне ошибку или такой, но я полагаю, что это макропроцессор, он может делать только то, что сказано.

Ответ 12

У меня была та же проблема на Ubuntu (error: possibly undefined macro: AC_MSG_ERROR), но ответы выше не работали для меня. Я нашел решение здесь

Это сделал трюк:

$ LANG=C LC_CTYPE=C ./autogen.sh

Ответ 13

Моя проблема решена после установки pkg-config на Mac (brew install pkg-config)

Ответ 14

Я решил это с помощью yum install libtool

Ответ 15

У меня была такая же проблема с портом MacOS "openocd" (локально модифицированный Portfile для использования репозитория git) на только что установленной машине.

Постоянное исправление легко, определите зависимость от pkgconfig в Portfile:   depends_lib-append port: pkgconfig