posiblemente macro indefinida: AC_MSG_ERROR


113

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, aparece 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 localizar el problema?

EDITAR: agregando 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 soy capaz de reproducir el problema en una máquina con CentOS autoconf 2.67, automake 1.11.1, libtool 2.2.6b, y m4 1.4.14. ¿Es esto solo un error con máquinas de 32 bits?


¿Por qué es esto un problema? Construye tus tarballs con autoconf 2.67. ¡Solo necesita tener autoconf instalado en una máquina!
William Pursell

1
Soy consciente de que puedo solucionar el problema fácilmente, solo estoy tratando de asegurarme de que sea un problema con una casilla y no un problema en nuestro configure.ac u otros archivos de configuración.
dbeer

Sé que autoconf 2.64 se consideró bastante defectuoso. Posiblemente esté experimentando un error en 2.65.
William Pursell

1
Puedo reproducir el problema en otra máquina de 32 bits con autoconf 2.67, automake 1.11.1, libtool 2.2.6by m4 1.4.14
dbeer

1
No puedo imaginarme que esto ayude: pero ¿has probado AC_CHECK_PROGS ([MAKE], [$ MAKE make gmake], [error])? Definitivamente suena como un problema de m4, y citar completamente las cosas en m4 solo puede ayudar. Esta línea en particular probablemente no sea la culpable, pero huele a un problema de citas en alguna parte. ¿Puedes publicar el configure.ac completo?
William Pursell

Respuestas:


256

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

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


2
¡Gracias! Resumiendo mi caso, para el próximo chico en los mismos zapatos. En aras de tener compilaciones reproducibles, tengo que usar una cadena de herramientas de rutas personalizadas para todas las herramientas del sistema de compilación GNU. El equivalente a instalar pkg-config fue no solo modificar PATH sino también agregar "-I /toolchain_local/pkg-config-0.23/share/aclocal"a la autoreconflínea de comandos. Me tomó un tiempo darme cuenta de que pkg-config no instala solo binarios. rpm -ql pkgconfigayudado.
Assambar

7
Tuve que instalar libtool.
Mitar

11
Para su información, técnicamente esto no está solucionando el problema. En este caso, AC_MSG_ERRORestaba intentando decir "necesita instalar pkg-config" pero por alguna razón no pudo imprimir este mensaje (dando el error acerca de AC_MSG_ERROR). Al instalar, pkg-configya no era necesario imprimir un mensaje de error, por lo AC_MSG_ERRORque se omitió la línea y todo funciona. Está bien si está instalando el paquete de otra persona, pero si es su propio código, aún no ha solucionado el problema :-)
Malvineous

19
Me he encontrado con este problema antes y la instalación del autoconf-archivepaquete solucionó el problema.
jonthalpy

5
Vaya, este es un ejemplo de autoreconfig que arroja un mensaje de error realmente malo.
John Greene

31

Se recomienda usarlo en autoreconf -filugar de llamar manualmente aclocal;autoconf;automake; #and whatever elsepara completar correctamente aclocal.m4 y así sucesivamente.

Agregar ACLOCAL_AMFLAGS = -I m4(al Makefile.am de nivel superior) 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 :)


Tenemos archivos m4, por lo que es necesario para nosotros. Además, cambiar cosas a autoreconf -fi produce el mismo error.
dbeer

1
Si tiene archivos m4, ACLOCAL_AMFLAGS y AC_CONFIG_MACRO_DIR es exactamente lo que debe hacer. (Y colocando los archivos en m4 /, resp. El directorio que especificó)
jørgensen

Gracias, autoreconf -ficompilamos PCRE.
uınbɐɥs

Tenía este mismo problema y descubrí que me había perdido a cabo el ajuste ACLOCAL_AMFLAGSen Makefile.am- gracias!
simpleigh

2
Las herramientas automáticas están tan rotas ... Ninguna de estas tonterías tiene sentido. ¿Cómo puede ser que en 30 años las cosas sigan tan rotas?
jww

27

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

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

Una vez que eliminé los corchetes alrededor de la AC_MSG_ERRORmacro, funcionó:

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

Esos comentarios que dicen que debería instalar pkg-configo algún paquete no son el punto. Se AC_MSG_ERRORsupone que funciona y te da un mensaje útil como "Necesitas instalar el paquete XYZ", pero debido a algún problema, AC_MSG_ERRORno funciona. La instalación del paquete XYZ ciertamente hará que el error desaparezca, pero solo porque una vez que el paquete está allí, ¡ya no es necesario imprimir un mensaje de error!

Entonces, la instalación de pkg-configun paquete en particular simplemente evita el problema, en realidad no lo soluciona.


12

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

apt-get install libcurl4-openssl-dev

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


11

He experimentado este mismo problema en CentOS 7

En tal caso, el problema surgió después de la instalación de libcurl-devel( libcurlya estaba instalado en esta máquina)


6

Tuve el mismo problema en RHEL7.5 con otto-de / libvmod-uuid

Se solucionó instalando paquetes "autoconf-archive"


Necesitaba el paquete Debian "autoconf-archive" para compilar powertop v2,31-rc1.
dileks

3

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

> aclocal -I m4 --install

Algunos paquetes vienen con un script de shell autogen.sho initgen.shpara ejecutar glibtoolize, autoheader, autoconf, automake. Aquí hay un autogen.shguión 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 m4al nivel superior Makefile.am.


¿Autoreconf no selecciona el libtoolize adecuado en Darwin?
William Pursell

Estoy configurando un directorio 'm4' local. Agregué -I m4 --install to aclocal, pero obtengo el mismo error. Este es mi script autogen.sh: libtoolize -c -f autoheader -f aclocal -I m4 --install autoconf -f automake --foreign --add-missing --force-missing --copy
dbeer

1
@dbeer, agregó la ACLOCAL_AMFLAGSvariable?
Brett Hale

@WilliamPursell no, no es así. MacOS presenta el libtool GNU como 'glibtool', y el proporcionado por Apple (que no se comporta como espera un libtool GNU) como 'libtool'. Tenga en cuenta que también libtoolize se instala como 'glibtoolize'. Esto se puede anular especificando las macro LIBTOOLIZE y LIBTOOL. A pesar de que esta muestra de autogen es buena, a menudo es mejor simplemente ejecutar autoreconf -fi y dejar que adivine / recupere el indicador -I de la ejecución anterior, especialmente cuando el software no es suyo.
LeoTh3o

3

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


2

El error lo genera 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. Dice que el error solo ocurre "en algunas configuraciones". Sugeriría que en esas configuraciones, su instalación de autoconf sea fubar. Posiblemente tengas instalada una versión incompatible de m4.


Estoy en autoconf 2.65 y m4 1.4.13. ¿Son estos compatibles?
dbeer

m4 1.4.13 es lo suficientemente nuevo y no es probable que sea el problema. ¿Puede determinar en qué se diferencian las configuraciones en las que ve la advertencia de aquellas en las que no?
William Pursell

Acabo de agregar parte de la información sobre eso a mi pregunta: ¿puedes pensar en algo más relevante? No tengo muchos conocimientos sobre herramientas automáticas.
dbeer

Recién notado: las máquinas de 32 bits parecen ser las que tienen dificultades.
dbeer

2

Usando MacOS X

sudo port install pkgconfig

fue la solución!


3
esta respuesta está desactualizada, use brew en lugar de port
xiamx

2

En Mac OS X el captain con brew, intente:
brew install pkgconfig

Esto funcionó para mí.


2

Hay dos posibles razones para ese problema:

  1. no instaló un local.
    solución: instalar libtool

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

    1. utilícelo aclocal --print-ac-dirpara verificar la ruta actual a un local. (Por lo general, debe ser "/ usr / share / aclocal" o "/ usr / share / aclocal")
    2. Luego, verifique si hay archivos * .m4.
    3. Si no es así, cp los archivos * .m4 correspondientes a esta ruta. (Quizás cp /usr/share/aclocal/*.m4 /usr/local/share/aclocal/o cp /usr/local/share/aclocal/*.m4 /usr/share/aclocal/)

Espero eso ayude


1

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

Eso hizo el truco:

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

1

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



0

Esto me sucedió cuando olvidé un, en los argumentos de una macro definida localmente. Pasé horas tratando de resolverlo (apenas familiarizado con las herramientas automáticas) ...

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 le dice.


0

Perdí unas pocas horas en este. Mi conclusión:

  • Dependiendo de la versión y otras condiciones locales, autoconf escupirá el mensaje sobre AC_MSG_ERROR undefined cuando encuentre CUALQUIER macro indefinida . El AC_MSG_ERROR es una pista falsa. Las causas de una macro indefinida pueden ser:
    • Un error tipográfico en el nombre de una macro en el archivo, o una macro local que no se envió con el tarball
    • Falta un paquete que vendría con un conjunto de macros autoconf, una de las cuales se usa en el archivo. pkg-config es a menudo el que falta (debido a, por ejemplo, PKG_CHECK_MODULES), pero podría ser cualquier otro paquete que proporcione una macro necesaria pero ausente. Lo malo, por supuesto, es que esto sucede antes de que el script de configuración aún no existente pueda buscar el paquete faltante ...

0

Tuve problemas similares al intentar compilar amtk y utthpmock con jhbuild.

Necesitaba instalar la versión más reciente de autoconf-archive. Las instrucciones están en https://github.com/autoconf-archive/autoconf-archive/blob/master/README-maint . Hice un adicional sudo make installal final.

El último paso fue actualizar mi ACLOCAL_PATH:

echo 'export ACLOCAL_PATH=$ACLOCAL_PATH:/usr/local/share/aclocal' >> ~/.bashrc

Después de a source ~/.bashrc, finalmente se encontraron todas las macros y las compilaciones tuvieron éxito.


-1

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

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

Al usar nuestro sitio, usted reconoce que ha leído y comprende nuestra Política de Cookies y Política de Privacidad.
Licensed under cc by-sa 3.0 with attribution required.