144 votes

peut-être une macro non définie : AC_MSG_ERROR

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 partie de notre projet depuis longtemps, 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 qui ont été récemment ajoutées au-dessus de cela :

AC_CONFIG_MACRO_DIR([m4])
LT_INIT

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

EDITAR: Ajouter des détails sur les différences.

Une 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 ÉDITION : seules les machines 32 bits rencontrent cette difficulté.

MISE À JOUR Je suis capable de reproduire le problème sur une machine CentOS avec autoconf 2.67 , automake 1.11.1 , libtool 2.2.6b et m4 1.4.14 . S'agit-il seulement d'un bogue avec les machines 32 bits ?

0 votes

Pourquoi est-ce un problème ? Construisez vos archives avec autoconf 2.67. Vous n'avez besoin d'avoir autoconf installé que sur une seule machine !

1 votes

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

0 votes

Je sais qu'autoconf 2.64 était considéré comme assez bogué. Il est possible que vous rencontriez un bogue dans la version 2.65.

314voto

mutsu Points 596

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

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

0 votes

J'ai eu le même problème, notamment ce message d'erreur : "Si ce jeton et d'autres sont légitimes, veuillez utiliser m4_pattern_allow. Voir la documentation d'Autoconf." et c'était aussi un cas de pkg-config manquant.

2 votes

Merci. J'expose mon cas, pour le prochain gars dans la même situation. Pour avoir des constructions reproductibles, je dois utiliser une chaîne d'outils avec des chemins personnalisés vers tous les outils du système de construction GNU. 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" au autoreconf en ligne de commande. Il m'a fallu un certain temps pour réaliser que pkg-config n'installe pas que des binaires. rpm -ql pkgconfig aidé.

0 votes

Merci beaucoup. J'ai eu ce problème en essayant de compiler glusterfs sur une toute nouvelle version de FreeBSD (qui utilise maintenant pkgconf, et fonctionne avec).

33voto

jørgensen Points 5370

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

Ajout de ACLOCAL_AMFLAGS = -I m4 (au niveau supérieur Makefile.am) et AC_CONFIG_MACRO_DIR([m4]) est actuellement toujours optionnel si vous n'utilisez pas de fichiers m4 propres, mais bien sûr, le faire réduira le processus au silence :)

0 votes

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.

1 votes

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 dir que vous avez spécifié)

0 votes

Merci, autoreconf -fi a fait compiler PCRE.

11voto

jap1968 Points 2849

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

Dans ce cas, le problème a disparu après l'installation de l'application libcurl-devel ( libcurl était déjà installé sur cette machine)

3voto

Brett Hale Points 9724

Êtes-vous en train de mettre en place un système local ' m4 répertoire ? par exemple,

> aclocal -I m4 --install

Certains paquets sont livrés avec un autogen.sh o initgen.sh shell script pour exécuter glibtoolize, autoheader, autoconf, automake. Voici un autogen.sh script 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

EDITAR

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

0 votes

Est-ce que autoreconf ne sélectionne pas la bonne libtoolize sur Darwin ?

0 votes

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

1 votes

@dbeer, a ajouté le ACLOCAL_AMFLAGS variable ?

2voto

William Pursell Points 56211

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 devrait avoir été développée par m4 avant ce point. Vous dites que l'erreur ne se produit que "dans certaines configurations". Je suggère que dans ces configurations, votre installation d'autoconf est défectueuse. Il est possible que vous ayez installé une version incompatible de m4.

0 votes

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

0 votes

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 entre les configurations dans lesquelles vous voyez l'avertissement et celles dans lesquelles vous ne le voyez pas ?

0 votes

J'ai juste ajouté quelques informations à ma question. Pouvez-vous penser à autre chose de pertinent ? Je n'ai pas beaucoup de connaissances en matière d'autotools.

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X