autotools autoconf

autotools - posible macro indefinida: AC_MSG_ERROR



autoconf (16)

¿Está configurando un directorio local '' m4 ''? p.ej,

> aclocal -I m4 --install

Algunos paquetes vienen con un autogen.sh shell autogen.sh o initgen.sh para ejecutar glibtoolize, autoheader, autoconf, automake. Aquí hay un script autogen.sh que uso:

#! /bin/sh case `uname` in Darwin*) glibtoolize --copy ;; *) libtoolize --copy ;; esac autoheader aclocal -I m4 --install autoconf automake --foreign --add-missing --force-missing --copy

EDITAR

Es posible que deba agregar ACLOCAL_AMFLAGS = -I m4 al Makefile.am nivel superior.

Tengo lo siguiente en 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

Esto ha estado en nuestro proyecto durante mucho tiempo, pero en algunas configuraciones, me sale este error:

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.

Las líneas que se agregaron recientemente encima de esto:

AC_CONFIG_MACRO_DIR([m4]) LT_INIT

¿Alguien puede explicar qué causa este error y cómo rastrear el problema?

EDITAR: Agregar detalles sobre las diferencias.

Caja que funciona:

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

Caja que no funciona:

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

NUEVA EDICIÓN: solo las máquinas de 32 bits experimentan esta dificultad.

ACTUALIZADO Puedo reproducir el problema en una máquina CentOS con autoconf 2.67 , automake 1.11.1 , libtool 2.2.6b y m4 1.4.14 . ¿Es esto solo un error con las máquinas de 32 bits?


El error es generado por autom4te. Si las cosas están configuradas correctamente, la parte del código que genera ese error nunca debería ver ''AC_MSG_ERROR'', porque debería haber sido expandido por m4 antes de ese punto. Usted dice que el error solo ocurre "en algunas configuraciones". Sugeriría que en esas configuraciones, su instalación autoconf es fubar. Posiblemente tengas una versión incompatible de m4 instalada.


En Mac OS X el capitán con brew, intente:
brew install pkgconfig

Esto funcionó para mí.


Esto me sucedió cuando olvidé a, en los argumentos para una macro definida localmente. Pasé horas tratando de descubrirlo (apenas familiarizado con autotools) ...

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

debería haber sido

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

Parece que debería haberme dado un error o algo así, pero supongo que al ser un macroprocesador solo puede hacer lo que se dice.


Hay dos posibles razones para ese problema:

  1. no instaló aclocal.
    solución: instalar libtool

    • Para ubuntu: sudo apt-get install libtool
    • Para centos: sudo yum install libtool
  2. el camino a LIBTOOL.m4 es un error.
    solución:

    1. use aclocal --print-ac-dir para verificar la ruta actual a aclocal. (Generalmente debe ser "/ usr / share / aclocal" o "/ usr / share / aclocal")
    2. Luego verifica si hay archivos * .m4.
    3. Si no, cp archivos * .m4 correspondientes a esta ruta. (Tal vez cp /usr/share/aclocal/*.m4 /usr/local/share/aclocal/ o cp /usr/local/share/aclocal/*.m4 /usr/share/aclocal/ )

Espero eso ayude


He experimentado este mismo problema bajo CentOS 7

En el caso de mayo, el problema se disparó después de la instalación de libcurl-devel ( libcurl ya estaba instalado en esta máquina)


Lo resolví por yum install libtool


Mi problema se resuelve después de instalar pkg-config en Mac (brew install pkg-config)


Para Debian. Los paquetes necesarios son: m4 automake pkg-config libtool


Se recomienda utilizar autoreconf -fi lugar de llamar manualmente a aclocal;autoconf;automake; #and whatever else # y aclocal;autoconf;automake; #and whatever else para poblar apropiadamente aclocal.m4 y así sucesivamente.

Agregar ACLOCAL_AMFLAGS = -I m4 (a toplevel Makefile.am) y AC_CONFIG_MACRO_DIR([m4]) actualmente sigue siendo opcional si no usa ningún archivo m4 propio, pero por supuesto, hacerlo silenciará el proceso :)


También tuve un problema similar ... mi solución es

apt-get install libcurl4-openssl-dev

(tuve libcurl ya instalado) funcionó para mí al menos ..


Tuve el mismo problema con el puerto de Macports "openocd" (modificó localmente el archivo de puerto para usar el repositorio de git) en una máquina recién instalada.

La solución permanente es fácil, defina una dependencia de pkgconfig en el archivo de puerto: depends_lib-append port: pkgconfig


Tuve el mismo problema en Ubuntu ( error: possibly undefined macro: AC_MSG_ERROR ) pero las respuestas anteriores no me funcionaron. Encontré la solución here

Eso hizo el truco:

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


Tuve el mismo problema y descubrí que faltaba el paquete pkg-config .

Después de instalar el paquete, todo se generó correctamente.


Tuve este problema con mi propio configure.ac , pero en este caso (y para el beneficio de cualquier persona aquí de Google) fue porque había citado accidentalmente el AC_MSG_ERROR por lo que estaba siendo tratado como una cadena:

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

Una vez que AC_MSG_ERROR los corchetes alrededor de la macro AC_MSG_ERROR , funcionó:

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

Esos comentarios que dicen que debes instalar pkg-config o algún paquete no tienen sentido. Se supone que AC_MSG_ERROR funciona y le brinda un mensaje útil como "Necesita instalar el paquete XYZ", pero debido a algún problema, el AC_MSG_ERROR no funciona. Instalar el paquete XYZ ciertamente hará que el error desaparezca, pero solo porque una vez que el paquete está allí, ya no hay necesidad de imprimir un mensaje de error.

Entonces, instalar pkg-config o un paquete en particular simplemente elude el problema, en realidad no lo soluciona.


Usando MacOS X

sudo port install pkgconfig

fue la solución!