macro possibilmente non definita: AC_MSG_ERROR


113

Ho quanto segue 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

Questo è stato nel nostro progetto per molto tempo, ma in alcune configurazioni ottengo questo errore:

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.

Le righe che sono state aggiunte di recente sopra questo:

AC_CONFIG_MACRO_DIR([m4])
LT_INIT

Qualcuno può spiegare cosa causa questo errore e come rintracciare il problema?

EDIT: aggiunta di dettagli sulle differenze.

Scatola che funziona:

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

Scatola che non funziona:

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

NUOVA MODIFICA: solo le macchine a 32 bit sperimentano questa difficoltà.

Aggiornato sono in grado di riprodurre il problema su una macchina CentOS con autoconf 2.67, automake 1.11.1, libtool 2.2.6b, e m4 1.4.14. È solo un bug con macchine a 32 bit?


Perché questo è un problema? Costruisci i tuoi tarball con autoconf 2.67. Hai solo bisogno di avere autoconf installato su una macchina!
William Pursell

1
Sono consapevole di poter aggirare facilmente il problema, sto solo cercando di assicurarmi che sia un problema con l'unica scatola e non un problema nel nostro configure.ac o altri file di configurazione.
dbeer

So che autoconf 2.64 era considerato abbastanza difettoso. Forse stai riscontrando un bug in 2.65.
William Pursell

1
Sono in grado di riprodurre il problema su un'altra macchina a 32 bit con autoconf 2.67, automake 1.11.1, libtool 2.2.6b e m4 1.4.14
dbeer

1
Non riesco a immaginare questo aiuto: ma hai provato AC_CHECK_PROGS ([MAKE], [$ MAKE make gmake], [error])? Sembra decisamente un problema di m4 e citare completamente le cose a m4 può solo aiutare. Questa particolare riga probabilmente non è il colpevole, ma da qualche parte puzza come un problema di citazione. Puoi pubblicare il file configure.ac completo?
William Pursell

Risposte:


256

Ho avuto lo stesso problema e ho scoperto che pkg-configmancava il pacchetto.

Dopo aver installato il pacchetto, tutto viene generato correttamente.


2
Grazie! Delineando il mio caso, per il prossimo ragazzo con le stesse scarpe. Per il bene di avere build riproducibili, devo usare una toolchain di percorsi personalizzati per tutti gli strumenti di GNU Build System. L'equivalente dell'installazione di pkg-config non era solo per modificare PATH ma anche per aggiungere "-I /toolchain_local/pkg-config-0.23/share/aclocal"alla autoreconfriga di comando. Mi ci è voluto del tempo per rendermi conto che pkg-config non installa solo i binari. rpm -ql pkgconfigaiutato.
Assambar

7
Ho dovuto installare libtool.
Mitar

11
Solo FYI tecnicamente questo non risolve il problema. In questo caso AC_MSG_ERRORstava cercando di dire "è necessario installare pkg-config" ma per qualche motivo non è stato possibile stampare questo messaggio (dando l'errore about AC_MSG_ERROR). Installando pkg-confignon c'era più bisogno di stampare un messaggio di errore, quindi la AC_MSG_ERRORlinea è stata saltata e le cose funzionano. Va bene se stai installando il pacchetto di qualcun altro, ma se è il tuo codice, non hai ancora risolto il problema :-)
Malvineous

19
Ho riscontrato questo problema in passato e l'installazione del autoconf-archivepacchetto ha risolto il problema.
jonthalpy

5
Wow, questo è un esempio di autoreconfig che sputa un messaggio di errore davvero pessimo.
John Greene

31

Si consiglia di utilizzare autoreconf -fiinvece di chiamare manualmente aclocal;autoconf;automake; #and whatever elseper popolare correttamente aclocal.m4 e così via.

L'aggiunta di ACLOCAL_AMFLAGS = -I m4(al Toplevel Makefile.am) ed AC_CONFIG_MACRO_DIR([m4])è attualmente ancora facoltativa se non si utilizzano file m4 propri, ma ovviamente, così facendo si zittirà il processo :)


Abbiamo file m4, quindi è necessario per noi. Inoltre, cambiare le cose in autoreconf -fi produce lo stesso errore.
dbeer

1
Se hai file m4, ACLOCAL_AMFLAGS e AC_CONFIG_MACRO_DIR è esattamente quello che dovresti fare. (E mettendo i file in m4 /, risp. La
directory

Grazie, ha autoreconf -fifatto compilare PCRE.
uınbɐɥs

Ho avuto questo stesso problema e ha scoperto che avevo perso fuori impostazione ACLOCAL_AMFLAGSin Makefile.am- grazie!
Simpleigh

2
Gli strumenti automatici sono così rotti ... Nessuna di queste stronzate ha senso. Come può essere che tra 30 anni le cose siano ancora così rotte?
jww

27

Ho avuto questo problema con il mio configure.ac, ma in questo caso (e per il beneficio di chiunque qui da Google) è stato perché avevo accidentalmente citato il AC_MSG_ERRORquindi è stato trattato come una stringa:

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

Una volta rimosse le parentesi quadre attorno alla AC_MSG_ERRORmacro, ha funzionato:

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

Quei commenti che dicono che dovresti installare pkg-configo qualche pacchetto non hanno il punto. L' AC_MSG_ERRORdovrebbe funzionare e si invia un messaggio utile come "È necessario installare il pacchetto XYZ", ma a causa di qualche problema, il AC_MSG_ERRORnon funziona. L'installazione del pacchetto XYZ farà sicuramente scomparire l'errore, ma solo perché una volta che il pacchetto è lì, non è più necessario stampare un messaggio di errore!

Quindi l'installazione pkg-configo un particolare pacchetto aggira il problema, in realtà non lo risolve.


12

ho avuto anche un problema simile .. la mia soluzione è

apt-get install libcurl4-openssl-dev

(avevo libcurl già installato) ha funzionato almeno per me ..


11

Ho riscontrato lo stesso problema con CentOS 7

In alcuni casi, il problema si è risolto dopo l'installazione di libcurl-devel( libcurlera già installato su questa macchina)


6

Ho avuto lo stesso problema su RHEL7.5 con otto-de / libvmod-uuid

È stato risolto installando i pacchetti "autoconf-archive"


Avevo bisogno del pacchetto Debian "autoconf-archive" per compilare powertop v2,31-rc1.
dileks

3

Stai configurando una m4directory " " locale ? per esempio,

> aclocal -I m4 --install

Alcuni pacchetti vengono forniti con uno script di shell autogen.sho initgen.shper eseguire glibtoolize, autoheader, autoconf, automake. Ecco uno autogen.shscript che 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

MODIFICARE

Potrebbe essere necessario aggiungere ACLOCAL_AMFLAGS = -I m4al livello superiore Makefile.am.


Autoreconf non seleziona la corretta libtoolize su Darwin?
William Pursell

Sto configurando una directory "m4" locale. Ho aggiunto -I m4 --install ad aclocal, ma ottengo lo stesso errore. Questo è il mio script autogen.sh: libtoolize -c -f autoheader -f aclocal -I m4 --install autoconf -f automake --foreign --add-missing --force-missing --copy
dbeer

1
@dbeer, ha aggiunto la ACLOCAL_AMFLAGSvariabile?
Brett Hale

@WilliamPursell no, non è così. MacOS presenta GNU libtool come "glibtool" e quello fornito da Apple (che non si comporta come previsto da una GNU libtool) come "libtool". Nota che anche libtoolize è installato come 'glibtoolize'. Questo può essere sovrascritto specificando la macro LIBTOOLIZE e LIBTOOL. Nonostante questo esempio di autogen sia buono, spesso è meglio eseguire semplicemente autoreconf -fi e lasciare che indovini / recuperi il flag -I dall'esecuzione precedente, specialmente quando il software non è tuo.
LeoTh3o

3

Per Debian. I pacchetti richiesti sono: m4 automake pkg-config libtool


2

L'errore è generato da autom4te. Se le cose sono impostate correttamente, la parte del codice che genera quell'errore non dovrebbe mai vedere "AC_MSG_ERROR", perché avrebbe dovuto essere espansa da m4 prima di quel punto. Dici che l'errore si verifica solo "in alcune configurazioni". Suggerirei che in quelle configurazioni, l'installazione di autoconf sia fubar. Forse hai una versione incompatibile di m4 installata.


Sono su autoconf 2.65 e m4 1.4.13. Sono compatibili?
dbeer

m4 1.4.13 è abbastanza nuovo e probabilmente non è il problema. Puoi determinare cosa c'è di diverso nelle configurazioni in cui vedi l'avviso da quelle in cui non lo vedi?
William Pursell

Ho appena aggiunto alcune delle informazioni su questo alla mia domanda: puoi pensare a qualcos'altro di rilevante? Non sono molto esperto quando si tratta di autotools.
dbeer

Appena notato - le macchine a 32 bit sembrano essere quelle con difficoltà.
dbeer

2

Utilizzando MacOS X

sudo port install pkgconfig

era la soluzione!


3
questa risposta è obsoleta, usa brew invece di port
xiamx

2

Su Mac OS X el captain con brew, prova:
brew install pkgconfig

Questo ha funzionato per me.


2

Ci sono due possibili ragioni per questo problema:

  1. non ha installato aclocal.
    soluzione : installa libtool

    • Per ubuntu: sudo apt-get install libtool
    • Per centos: sudo yum install libtool
  2. il percorso per LIBTOOL.m4 è un errore.
    soluzione:

    1. utilizzare aclocal --print-ac-dirper controllare il percorso corrente di aclocal. (di solito dovrebbe essere "/ usr / share / aclocal" o "/ usr / share / aclocal")
    2. Quindi controlla se ci sono file * .m4.
    3. In caso contrario, cp corrispondente ai file * .m4 a questo percorso (forse cp /usr/share/aclocal/*.m4 /usr/local/share/aclocal/o cp /usr/local/share/aclocal/*.m4 /usr/share/aclocal/)

Spero che sia d'aiuto


1

Ho avuto lo stesso problema su Ubuntu ( error: possibly undefined macro: AC_MSG_ERROR) ma le risposte sopra non hanno funzionato per me. Ho trovato la soluzione qui

Questo ha funzionato:

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

1

Il mio problema è stato risolto dopo aver installato pkg-config su Mac (brew install pkg-config)


1

Ho risolto questo problema yum install libtool


dopo aver finito di compilare pkg-config
VictorV

0

Questo mi è successo quando ho dimenticato un, negli argomenti per una macro definita localmente. Ho passato ore a cercare di capirlo (a malapena familiarità con gli autotools) ...

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

avrebbe dovuto essere

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

Sembra che avrebbe dovuto darmi un errore o qualcosa del genere, ma suppongo che essendo un processore di macro possa fare solo ciò che gli viene detto.


0

Ho perso solo qualche ora con questo. La mia conclusione:

  • A seconda della versione e di qualsiasi altra condizione locale, autoconf sputerà il messaggio su AC_MSG_ERROR undefined quando incontra QUALSIASI macro non definita . AC_MSG_ERROR è una falsa pista. Le cause di una macro indefinita possono essere:
    • Un errore di battitura nel nome di una macro nel file o una macro locale che non è stata fornita con il tarball
    • Manca un pacchetto che sarebbe arrivato con una serie di macro autoconf, una delle quali è usata nel file. pkg-config è spesso quello mancante (a causa, ad esempio, di PKG_CHECK_MODULES), ma questo potrebbe essere qualsiasi altro pacchetto che fornisce una macro necessaria ma assente. La cosa viziosa, ovviamente, è che questo accade prima che lo script di configurazione ancora non esistente possa verificare la presenza del pacchetto mancante ...

0

Ho avuto problemi simili durante il tentativo di compilare amtk e utthpmock con jhbuild.

Avevo bisogno di installare la versione più recente di autoconf-archive. Le istruzioni sono su https://github.com/autoconf-archive/autoconf-archive/blob/master/README-maint . sudo make installAlla fine ne ho fatto un'ulteriore .

L'ultimo passaggio è stato aggiornare il mio ACLOCAL_PATH:

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

Dopo un source ~/.bashrc, tutte le macro sono state finalmente trovate e le build sono state eseguite correttamente.


-1

Ho avuto lo stesso problema con il port di Macports "openocd" (modificato localmente il Portfile per utilizzare il repository git) su una macchina appena installata.

La correzione permanente è semplice, definisci una dipendenza da pkgconfig nel Portfile: depend_lib-append port: pkgconfig

Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.