macro éventuellement non définie: AC_MSG_ERROR


113

J'ai ce qui suit dans 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

Cela fait longtemps dans notre projet, mais dans certaines configurations, j'obtiens cette erreur:

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.

Les lignes récemment ajoutées au-dessus:

AC_CONFIG_MACRO_DIR([m4])
LT_INIT

Quelqu'un peut-il expliquer ce qui cause cette erreur et comment localiser le problème?

EDIT: Ajout de détails sur les différences.

Boîte qui fonctionne:

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

Boîte qui ne fonctionne pas:

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

NOUVELLE MODIFICATION: seules les machines 32 bits rencontrent cette difficulté.

MIS À JOUR Je suis en mesure de reproduire le problème sur une machine CentOS avec autoconf 2.67, automake 1.11.1, libtool 2.2.6bet m4 1.4.14. Est-ce juste un bug avec les machines 32 bits?


Pourquoi c'est un problème? Créez vos archives tar avec autoconf 2.67. Il vous suffit d'installer autoconf sur une seule machine!
William Pursell

1
Je suis conscient que je peux contourner le problème facilement, j'essaie simplement de m'assurer que c'est un problème avec la boîte unique et non un problème dans notre configure.ac ou d'autres fichiers de configuration.
dbeer

Je sais que autoconf 2.64 était considéré comme assez bogué. Vous rencontrez peut-être un bogue dans la version 2.65.
William Pursell

1
Je suis capable de reproduire le problème sur une autre machine 32 bits avec autoconf 2.67, automake 1.11.1, libtool 2.2.6b et m4 1.4.14
dbeer

1
Je ne peux pas imaginer cette aide: mais avez-vous essayé AC_CHECK_PROGS ([MAKE], [$ MAKE make gmake], [error])? Cela ressemble définitivement à un problème m4, et citer complètement les choses dans m4 ne peut que vous aider. Cette ligne particulière n'est probablement pas le coupable, mais cela sent quelque part un problème de citation. Pouvez-vous publier le configure.ac complet?
William Pursell

Réponses:


256

J'ai eu ce même problème et j'ai trouvé que pkg-config paquet était manquant.

Après avoir installé le package, tout s'est généré correctement.


2
Merci! Décrivant mon cas, pour le prochain gars dans les mêmes chaussures. Pour avoir des constructions reproductibles, je dois utiliser une chaîne d'outils de chemins personnalisés vers tous les outils GNU Build System. L'équivalent de l'installation de pkg-config n'était pas seulement de modifier PATH mais aussi d'ajouter "-I /toolchain_local/pkg-config-0.23/share/aclocal"à la autoreconfligne de commande. Il m'a fallu un certain temps pour réaliser que pkg-config n'installe pas que des binaires. rpm -ql pkgconfigaidé.
Assambar

7
J'ai dû installer libtool.
Mitar le

11
Techniquement, cela ne résout pas le problème. Dans ce cas, il AC_MSG_ERRORa essayé de dire "vous devez installer pkg-config" mais pour une raison quelconque, il n'a pas pu imprimer ce message (donnant l'erreur à propos de AC_MSG_ERROR). En installant, pkg-configil n'était plus nécessaire d'imprimer un message d'erreur, donc la AC_MSG_ERRORligne a été sautée et les choses fonctionnent. Bien si vous installez le package de quelqu'un d'autre, mais si c'est votre propre code, vous n'avez toujours pas résolu le problème :-)
Malvineous

19
J'ai déjà rencontré ce problème et l'installation du autoconf-archivepackage a résolu le problème.
jonthalpy

5
Wow, c'est un exemple d'autoreconfig crachant un très mauvais message d'erreur.
John Greene

31

Il est recommandé d'utiliser autoreconf -fiau lieu d'appeler manuellement aclocal;autoconf;automake; #and whatever elsepour remplir correctement aclocal.m4 et ainsi de suite.

L'ajout ACLOCAL_AMFLAGS = -I m4(au niveau supérieur Makefile.am) et AC_CONFIG_MACRO_DIR([m4])est actuellement toujours facultatif si vous n'utilisez pas vos propres fichiers m4, mais bien sûr, cela fera taire le processus :)


Nous avons des fichiers m4, donc c'est nécessaire pour nous. De plus, changer les choses en autoreconf -fi produit la même erreur.
dbeer

1
Si vous avez des fichiers m4, ACLOCAL_AMFLAGS et AC_CONFIG_MACRO_DIR sont exactement ce que vous devez faire. (Et mettre les fichiers dans m4 /, resp. Le
répertoire

Merci, autoreconf -fifait compiler PCRE.
uınbɐɥs

J'ai eu ce même problème et a trouvé que j'avais manqué la mise ACLOCAL_AMFLAGSen Makefile.am- merci!
simpleigh

2
Les outils automatiques sont tellement cassés ... Rien de tout cela n'a de sens. Comment se fait-il que dans 30 ans, les choses soient toujours aussi brisées?
jww

27

J'ai eu ce problème avec le mien configure.ac, mais dans ce cas (et pour le bénéfice de quiconque ici de Google), c'était parce que j'avais accidentellement cité le AC_MSG_ERRORdonc il était traité comme une chaîne:

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

Une fois que j'ai supprimé les crochets autour de la AC_MSG_ERRORmacro, cela a fonctionné:

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

Ces commentaires disant que vous devez installer pkg-configou certains packages manquent le point. Le AC_MSG_ERRORest censé fonctionner et vous donner un message utile comme "Vous devez installer le package XYZ", mais à cause d'un problème, le AC_MSG_ERRORne fonctionne pas. L'installation du package XYZ fera certainement disparaître l'erreur, mais uniquement parce qu'une fois le package là, il n'est plus nécessaire d'imprimer un message d'erreur!

Donc, installer pkg-configou un package particulier contourne simplement le problème, cela ne le résout pas réellement.


12

j'ai également eu un problème similaire .. ma solution est de

apt-get install libcurl4-openssl-dev

(j'avais déjà installé libcurl) a fonctionné pour moi au moins ..


11

J'ai rencontré ce même problème sous CentOS 7

Dans certains cas, le problème s'est produit après l'installation de libcurl-devel( libcurlétait déjà installé sur cette machine)


6

J'ai eu le même problème sur RHEL7.5 avec otto-de / libvmod-uuid

Il a été corrigé en installant les packages "autoconf-archive"


J'avais besoin du paquet Debian "autoconf-archive" pour construire powertop v2,31-rc1.
dileks le

3

Configurez-vous un m4répertoire local ' '? par exemple,

> aclocal -I m4 --install

Certains paquets sont livrés avec un script autogen.shou initgen.shshell pour exécuter glibtoolize, autoheader, autoconf, automake. Voici un autogen.shscript que j'utilise:

#! /bin/sh

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

autoheader
aclocal -I m4 --install
autoconf

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

ÉDITER

Vous devrez peut-être ajouter ACLOCAL_AMFLAGS = -I m4au niveau supérieur Makefile.am.


Est-ce que autoreconf ne sélectionne pas la bibliothèque appropriée sur Darwin?
William Pursell

Je mets en place un répertoire local 'm4'. J'ai ajouté -I m4 --install à aclocal, mais j'obtiens la même erreur. Voici mon script autogen.sh: libtoolize -c -f autoheader -f aclocal -I m4 --install autoconf -f automake --foreign --add-missing --force-missing --copy
dbeer

1
@dbeer, a ajouté la ACLOCAL_AMFLAGSvariable?
Brett Hale

@WilliamPursell non, ce n'est pas le cas. MacOS propose le libtool GNU comme «glibtool», et celui fourni par Apple (qui ne se comporte pas comme prévu par un libtool GNU) comme «libtool». Notez que libtoolize est également installé en tant que «glibtoolize». Cela peut être remplacé en spécifiant les macros LIBTOOLIZE et LIBTOOL. Bien que cet échantillon autogen soit bon, il est souvent préférable d'exécuter simplement autoreconf -fi et de le laisser deviner / récupérer l'indicateur -I de l'exécution précédente, en particulier lorsque le logiciel n'est pas le vôtre.
LeoTh3o

3

Pour Debian. Les packages requis sont: m4 automake pkg-config libtool


2

L'erreur est générée par autom4te. Si les choses sont correctement configurées, la partie du code qui génère cette erreur ne devrait jamais voir «AC_MSG_ERROR», car elle aurait dû être étendue par m4 avant ce point. Vous dites que l'erreur ne se produit que "dans certaines configurations". Je suggérerais que dans ces configurations, votre installation autoconf soit fubar. Vous avez peut-être une version incompatible de m4 installée.


Je suis sur autoconf 2.65 et m4 1.4.13. Sont-ils compatibles?
dbeer

m4 1.4.13 est assez récent et n'est probablement pas le problème. Pouvez-vous déterminer ce qui est différent dans les configurations dans lesquelles vous voyez l'avertissement de celles dans lesquelles vous ne voyez pas?
William Pursell du

Je viens d'ajouter quelques informations à ce sujet à ma question - pouvez-vous penser à autre chose de pertinent? Je ne connais pas très bien les outils automatiques.
dbeer

Juste remarqué - les machines 32 bits semblent être celles qui ont du mal.
dbeer

2

Utilisation de MacOS X

sudo port install pkgconfig

était la solution!


3
cette réponse est obsolète, utilisez brew au lieu de port
xiamx

2

Sur Mac OS X el captain avec brew, essayez:
brew install pkgconfig

Cela a fonctionné pour moi.


2

Il y a deux raisons possibles à ce problème:

  1. n'a pas installé aclocal.
    solution : installer libtool

    • Pour ubuntu: sudo apt-get install libtool
    • Pour les centos: sudo yum install libtool
  2. le chemin vers LIBTOOL.m4 est une erreur.
    Solution:

    1. utilisez aclocal --print-ac-dirpour vérifier le chemin actuel vers aclocal. (Il devrait généralement être "/ usr / share / aclocal" ou "/ usr / share / aclocal")
    2. Vérifiez ensuite s'il existe des fichiers * .m4.
    3. Sinon, cp les fichiers * .m4 correspondants à ce chemin. (Peut cp /usr/share/aclocal/*.m4 /usr/local/share/aclocal/- être ou cp /usr/local/share/aclocal/*.m4 /usr/share/aclocal/)

J'espère que ça aide


1

J'ai eu le même problème sur Ubuntu (error: possibly undefined macro: AC_MSG_ERROR ) mais les réponses ci-dessus n'ont pas fonctionné pour moi. J'ai trouvé la solution ici

Cela a fait l'affaire:

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

1

Mon problème est résolu après l'installation de pkg-config sur Mac (brew install pkg-config)



0

Cela m'est arrivé lorsque j'ai oublié un, dans les arguments pour une macro définie localement. J'ai passé des heures à essayer de le comprendre (à peine familiarisé avec les outils automatiques) ...

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

aurait du être

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

On dirait qu'il aurait dû me donner une erreur ou autre, mais je suppose qu'en tant que macro-processeur, il ne peut faire que ce qu'il dit.


0

Je viens de perdre quelques heures sur celui-ci. Ma conclusion:

  • Selon la version et quelles que soient les autres conditions locales, autoconf crachera le message concernant AC_MSG_ERROR undefined lorsqu'il rencontrera TOUTE macro non définie . L'AC_MSG_ERROR est un hareng rouge. Les causes d'une macro non définie peuvent être:
    • Une faute de frappe dans un nom de macro dans le fichier ou une macro locale qui n'a pas été fournie avec l'archive tar
    • Il manque un package qui serait fourni avec un ensemble de macros autoconf, dont l'une est utilisée dans le fichier. pkg-config est souvent celui qui manque (à cause, par exemple, de PKG_CHECK_MODULES), mais cela pourrait être n'importe quel autre paquet fournissant une macro nécessaire mais absente. La chose vicieuse bien sûr, c'est que cela se produit avant que le script de configuration encore inexistant puisse vérifier le paquet manquant ...

0

J'ai eu des problèmes similaires en essayant de construire amtk et utthpmock avec jhbuild.

J'avais besoin d'installer la version la plus récente d'autoconf-archive. Les instructions sont disponibles sur https://github.com/autoconf-archive/autoconf-archive/blob/master/README-maint . J'ai fait un autresudo make install à la fin.

La dernière étape consistait à mettre à jour mon ACLOCAL_PATH:

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

Après a source ~/.bashrc, toutes les macros ont finalement été trouvées et les builds ont réussi.


-1

J'ai eu le même problème avec le port Macports "openocd" (modifié localement le Portfile pour utiliser le dépôt git) sur une machine fraîchement installée.

Le correctif permanent est simple, définissez une dépendance à pkgconfig dans le fichier Portfile: depend_lib-append port: pkgconfig

En utilisant notre site, vous reconnaissez avoir lu et compris notre politique liée aux cookies et notre politique de confidentialité.
Licensed under cc by-sa 3.0 with attribution required.