möglicherweise undefiniertes Makro: AC_MSG_ERROR

113

Ich habe folgendes in 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

Dies ist schon lange in unserem Projekt, aber in einigen Einstellungen erhalte ich den folgenden Fehler:

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.

Die Zeilen, die kürzlich darüber hinzugefügt wurden:

AC_CONFIG_MACRO_DIR([m4])
LT_INIT

Kann jemand erklären, was diesen Fehler verursacht und wie das Problem aufgespürt werden kann?

BEARBEITEN: Hinzufügen von Details zu den Unterschieden.

Box, die funktioniert:

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

Box, die nicht funktioniert:

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

NEUE BEARBEITUNG: Nur 32-Bit-Maschinen haben diese Schwierigkeit.

UPDATED Ich bin in der Lage , das Problem auf einem CentOS Maschine mit reproduzieren autoconf 2.67, automake 1.11.1, libtool 2.2.6b, und m4 1.4.14. Ist das nur ein Fehler bei 32-Bit-Maschinen?

Bier
quelle
Warum ist das ein Problem? Bauen Sie Ihre Tarballs mit autoconf 2.67. Sie müssen nur Autoconf auf einem Computer installiert haben!
William Pursell
1
Ich bin mir bewusst, dass ich das Problem leicht umgehen kann. Ich versuche nur sicherzustellen, dass es sich um ein Problem mit der einen Box handelt und nicht um ein Problem in unserer configure.ac- oder anderen Konfigurationsdateien.
Bier
Ich weiß, dass Autoconf 2.64 als ziemlich fehlerhaft angesehen wurde. Möglicherweise tritt in 2.65 ein Fehler auf.
William Pursell
1
Ich bin in der Lage, das Problem auf einem anderen 32-Bit-Computer mit Autoconf 2.67, Automake 1.11.1, Libtool 2.2.6b und M4 1.4.14
dbeer
1
Ich kann mir diese Hilfe nicht vorstellen: Aber haben Sie AC_CHECK_PROGS ([MAKE], [$ MAKE make gmake], [error]) ausprobiert? Es klingt definitiv wie ein m4-Problem, und das vollständige Zitieren von Dingen zu m4 kann nur helfen. Diese bestimmte Zeile ist wahrscheinlich nicht der Schuldige, aber sie riecht irgendwo nach einem Zitatproblem. Können Sie die vollständige Datei configure.ac veröffentlichen?
William Pursell

Antworten:

256

Ich hatte das gleiche Problem und stellte fest, dass das pkg-configPaket fehlte.

Nach der Installation des Pakets wurde alles korrekt generiert.

mutsu
quelle
2
Vielen Dank! Umriss meinen Fall für den nächsten Mann in den gleichen Schuhen. Um reproduzierbare Builds zu erhalten, muss ich eine Toolchain mit benutzerdefinierten Pfaden zu allen GNU Build System-Tools verwenden. Das Äquivalent zur Installation von pkg-config bestand nicht nur darin, PATH zu ändern, sondern auch "-I /toolchain_local/pkg-config-0.23/share/aclocal"der autoreconfBefehlszeile hinzuzufügen . Ich habe einige Zeit gebraucht, um festzustellen, dass pkg-config nicht nur Binärdateien installiert. rpm -ql pkgconfiggeholfen.
Assambar
7
Ich musste installieren libtool.
Mitar
11
Nur zu Ihrer Information, technisch gesehen behebt dies das Problem nicht. In diesem Fall AC_MSG_ERRORwurde versucht zu sagen, dass Sie pkg-config installieren müssen, aber aus irgendeinem Grund konnte diese Nachricht nicht gedruckt werden (was den Fehler betrifft AC_MSG_ERROR). Durch die Installation musste pkg-configkeine Fehlermeldung mehr gedruckt werden, sodass die AC_MSG_ERRORZeile übersprungen wurde und alles funktioniert. Gut, wenn Sie das Paket eines anderen installieren, aber wenn es Ihr eigener Code ist, haben Sie das Problem immer noch nicht behoben :-)
Malvineous
19
Ich habe dieses Problem bereits festgestellt, und die Installation des autoconf-archivePakets hat das Problem behoben.
Jonthalpyie
5
Wow, dies ist ein Beispiel für die automatische Konfiguration, die eine wirklich schlechte Fehlermeldung ausspuckt.
John Greene
31

Es wird empfohlen, autoreconf -fianstelle von manuell aufzurufen aclocal;autoconf;automake; #and whatever else, um aclocal.m4 usw. ordnungsgemäß zu füllen.

Das Hinzufügen ACLOCAL_AMFLAGS = -I m4(zur obersten Ebene von Makefile.am) AC_CONFIG_MACRO_DIR([m4])ist derzeit noch optional, wenn Sie keine eigenen m4-Dateien verwenden. Wenn Sie dies jedoch tun, wird der Vorgang zum Schweigen gebracht :)

jørgensen
quelle
Wir haben m4-Dateien, das ist für uns erforderlich. Das Ändern von autoreconf -fi führt ebenfalls zu demselben Fehler.
Bier
1
Wenn Sie über m4-Dateien verfügen, sollten Sie genau ACLOCAL_AMFLAGS und AC_CONFIG_MACRO_DIR verwenden. (Und die Dateien in m4 / bzw. das von Ihnen angegebene
Verzeichnis einfügen
Danke, autoreconf -fiPCRE kompiliert.
uınbɐɥs
Ich hatte genau das gleiche Problem und stellte fest, dass ich das Einsetzen verpasst ACLOCAL_AMFLAGShatte Makefile.am- danke!
Simpleigh
2
Autotools sind so kaputt ... Nichts von diesem Mist macht Sinn. Wie kann es in 30 Jahren sein, dass die Dinge immer noch so kaputt sind?
JWW
27

Ich hatte dieses Problem mit meinem eigenen configure.ac, aber in diesem Fall (und zum Nutzen aller hier von Google) lag es daran, dass ich das versehentlich zitiert hatte, AC_MSG_ERRORsodass es als Zeichenfolge behandelt wurde:

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

Nachdem ich die eckigen Klammern um das AC_MSG_ERRORMakro entfernt hatte, funktionierte es:

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

Diese Kommentare, die besagen, dass Sie pkg-configein Paket installieren sollten, verfehlen den Punkt. Das AC_MSG_ERRORsoll funktionieren und Ihnen eine hilfreiche Meldung wie "Sie müssen das Paket XYZ installieren" geben, aber aufgrund eines Problems AC_MSG_ERRORfunktioniert das nicht. Durch die Installation des Pakets XYZ wird der Fehler sicherlich behoben, aber nur, wenn das Paket erst einmal vorhanden ist, muss keine Fehlermeldung mehr gedruckt werden!

Die Installation pkg-configoder ein bestimmtes Paket umgeht das Problem also nur, es behebt es nicht wirklich.

Malvineous
quelle
12

Ich hatte auch ein ähnliches Problem. Meine Lösung ist zu

apt-get install libcurl4-openssl-dev

(Ich hatte libcurl bereits installiert) arbeitete zumindest für mich ..

BeatingBytes
quelle
11

Ich habe das gleiche Problem unter CentOS 7 erlebt

In einigen Fällen ist das Problem nach der Installation von libcurl-devel( libcurlwurde bereits auf diesem Computer installiert) behoben.

jap1968
quelle
6

Ich hatte das gleiche Problem auf RHEL7.5 mit otto-de / libvmod-uuid

Es wurde durch die Installation von "autoconf-archive" -Paketen behoben

Sawit Meekwamdee
quelle
Ich brauchte das Debian-Paket "autoconf-archive", um powertop v2,31-rc1 zu erstellen.
Dileks
3

Richten Sie ein lokales m4Verzeichnis ein? z.B,

> aclocal -I m4 --install

Einige Pakete enthalten ein autogen.shoder ein initgen.shShell-Skript zum Ausführen von glibtoolize, autoheader, autoconf, automake. Hier ist ein autogen.shSkript, das ich benutze:

#! /bin/sh

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

autoheader
aclocal -I m4 --install
autoconf

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

BEARBEITEN

Möglicherweise müssen Sie ACLOCAL_AMFLAGS = -I m4der obersten Ebene hinzufügen Makefile.am.

Brett Hale
quelle
Wählt autoreconf nicht die richtige Libtoolize für Darwin aus?
William Pursell
Ich richte ein lokales 'm4'-Verzeichnis ein. Ich habe -I m4 --install zu aclocal hinzugefügt, aber ich erhalte den gleichen Fehler. Das ist mein autogen.sh Skript: libtoolize -c -f -f autoheader aclocal -I m4 --install autoconf -f auto --foreign --add fehlende --force-missing --copy
dbeer
1
@dbeer, die ACLOCAL_AMFLAGSVariable hinzugefügt ?
Brett Hale
@ WilliamPursell nein, das tut es nicht. MacOS bietet das GNU-Libtool als "Glibtool" und das von Apple bereitgestellte (das sich nicht wie von einem GNU-Libtool erwartet verhält) als "Libtool". Beachten Sie, dass auch libtoolize als 'glibtoolize' installiert ist. Dies kann durch Angabe von LIBTOOLIZE und LIBTOOL-Makro überschrieben werden. Obwohl dieses Autogen-Beispiel gut ist, ist es oft besser, einfach autoreconf -fi auszuführen und das -I-Flag aus dem vorherigen Lauf erraten / wiederherstellen zu lassen, insbesondere wenn die Software nicht Ihre ist.
LeoTh3o
3

Für Debian. Erforderliche Pakete sind: m4 automake pkg-config libtool

ETech
quelle
2

Der Fehler wird von autom4te generiert. Wenn die Dinge richtig eingerichtet sind, sollte der Teil des Codes, der diesen Fehler erzeugt, niemals 'AC_MSG_ERROR' sehen, da er vor diesem Punkt um m4 erweitert worden sein sollte. Sie sagen, der Fehler tritt nur "in einigen Setups" auf. Ich würde vorschlagen, dass in diesen Setups Ihre Autoconf-Installation fubar ist. Möglicherweise ist eine inkompatible Version von m4 installiert.

William Pursell
quelle
Ich bin auf autoconf 2.65 und m4 1.4.13. Sind diese kompatibel?
Bier
m4 1.4.13 ist neu genug und wahrscheinlich nicht das Problem. Können Sie feststellen, was sich an den Setups unterscheidet, in denen Sie die Warnung sehen, von denen, in denen Sie dies nicht tun?
William Pursell
Ich habe meiner Frage nur einige Informationen dazu hinzugefügt. Können Sie sich noch etwas Relevantes vorstellen? Ich bin nicht sehr gut informiert, wenn es um Autotools geht.
Bier
Gerade bemerkt - 32-Bit-Maschinen scheinen diejenigen mit Schwierigkeiten zu sein.
Bier
2

Verwenden von MacOS X.

sudo port install pkgconfig

war die Lösung!

Johann Horvat
quelle
3
Diese Antwort ist veraltet, verwenden Sie
Brew
2

Versuchen Sie unter Mac OS X el Kapitän mit Gebräu:
Brew Brew install pkgconfig

Das hat bei mir funktioniert.

us_david
quelle
2

Es gibt zwei mögliche Gründe für dieses Problem:

  1. hat aclocal nicht installiert.
    Lösung: Installieren Sie libtool

    • Für Ubuntu: sudo apt-get install libtool
    • Für Centos: sudo yum install libtool
  2. Der Pfad zu LIBTOOL.m4 ist fehlerhaft.
    Lösung:

    1. verwenden aclocal --print-ac-dir Sie diese Option, um den aktuellen Pfad zu aclocal zu überprüfen. (Normalerweise sollte dies "/ usr / share / aclocal" oder "/ usr / share / aclocal" sein.)
    2. Überprüfen Sie dann, ob * .m4-Dateien vorhanden sind.
    3. Wenn nicht, cp entsprechende * .m4-Dateien zu diesem Pfad. (Vielleicht cp /usr/share/aclocal/*.m4 /usr/local/share/aclocal/oder cp /usr/local/share/aclocal/*.m4 /usr/share/aclocal/)

Ich hoffe es hilft

Cifang
quelle
1

Ich hatte das gleiche Problem unter Ubuntu ( error: possibly undefined macro: AC_MSG_ERROR), aber die obigen Antworten haben bei mir nicht funktioniert. Ich habe hier die Lösung gefunden

Das hat funktioniert:

$ LANG=C LC_CTYPE=C ./autogen.sh
mschoenebeck
quelle
1

Mein Problem ist behoben, nachdem ich pkg-config auf einem Mac installiert habe (braue install pkg-config)

Pavan Challa
quelle
1

Ich habe das gelöst durch yum install libtool

VictorV
quelle
nachdem ich fertig kompiliert habe pkg-config
VictorV
0

Dies passierte mir, als ich a in den Argumenten für ein lokal definiertes Makro vergaß. Verbrachte Stunden damit, es herauszufinden (kaum mit Autotools vertraut) ...

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

gewesen sein sollte

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

Scheint, als hätte es mir einen Fehler oder ähnliches geben sollen, aber ich nehme an, dass es als Makroprozessor nur das kann, was es sagt.

Abzieher
quelle
0

Ich habe gerade ein paar Stunden verloren. Meine Schlussfolgerung:

  • Abhängig von der Version und den anderen lokalen Bedingungen gibt autoconf die Nachricht über AC_MSG_ERROR undefiniert aus, wenn auf ein undefiniertes Makro gestoßen wird . Der AC_MSG_ERROR ist ein roter Hering. Die Ursachen für ein undefiniertes Makro können sein:
    • Ein Tippfehler in einem Makronamen in der Datei oder ein lokales Makro, das nicht mit dem Tarball geliefert wurde
    • Es fehlt ein Paket, das mit einer Reihe von Autoconf-Makros geliefert worden wäre, von denen eines in der Datei verwendet wird. pkg-config fehlt häufig (z. B. aufgrund von PKG_CHECK_MODULES), dies kann jedoch jedes andere Paket sein, das ein benötigtes, aber nicht vorhandenes Makro bereitstellt. Das Bösartige ist natürlich, dass dies geschieht, bevor das noch nicht vorhandene Konfigurationsskript nach dem fehlenden Paket suchen kann ...
medoc
quelle
0

Ich hatte ähnliche Probleme beim Versuch, amtk und utthpmock mit jhbuild zu erstellen.

Ich musste die neueste Version von autoconf-archive installieren. Anweisungen finden Sie unter https://github.com/autoconf-archive/autoconf-archive/blob/master/README-maint . Ich habe sudo make installam Ende eine zusätzliche gemacht .

Der letzte Schritt war, meine zu aktualisieren ACLOCAL_PATH:

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

Nach a source ~/.bashrcwurden endlich alle Makros gefunden und die Builds waren erfolgreich.

Laurenz
quelle
-1

Ich hatte das gleiche Problem mit dem Macports-Port "openocd" (lokal die Portdatei geändert, um das Git-Repository zu verwenden) auf einem frisch installierten Computer.

Die dauerhafte Korrektur ist einfach. Definieren Sie eine Abhängigkeit von pkgconfig in der Portdatei: abhängige_Lib-Append-Port: pkgconfig

Michael Dreher
quelle