prawdopodobnie niezdefiniowane makro: AC_MSG_ERROR

113

W configure.ac mam następujące elementy:

AC_CHECK_PROGS(MAKE,$MAKE make gmake,error)
if test "x$MAKE" = "xerror" ;then
  AC_MSG_ERROR([cannot find a make command])
fi

To było w naszym projekcie od dłuższego czasu, ale w niektórych konfiguracjach pojawia się ten błąd:

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.

Linie, które zostały ostatnio dodane powyżej:

AC_CONFIG_MACRO_DIR([m4])
LT_INIT

Czy ktoś może wyjaśnić, co powoduje ten błąd i jak wyśledzić problem?

EDYCJA: Dodawanie szczegółów dotyczących różnic.

Pudełko, które działa:

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

Pudełko, które nie działa:

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

NOWA EDYCJA: tylko komputery 32-bitowe mają tę trudność.

Zaktualizowany jestem w stanie odtworzyć problemu na maszynie z CentOS autoconf 2.67, automake 1.11.1, libtool 2.2.6b, i m4 1.4.14. Czy to tylko błąd dotyczący komputerów 32-bitowych?

dbeer
źródło
Dlaczego to jest problem? Zbuduj swoje tarballe za pomocą autoconf 2.67. Wystarczy, że zainstalujesz autoconf na jednym komputerze!
William Pursell
1
Wiem, że mogę łatwo obejść ten problem, po prostu staram się upewnić, że jest to problem z jednym pudełkiem, a nie problemem w naszym configure.ac lub innych plikach konfiguracyjnych.
dbeer
Wiem, że autoconf 2.64 został uznany za dość wadliwy. Prawdopodobnie masz błąd w wersji 2.65.
William Pursell
1
Jestem w stanie odtworzyć problem na innej 32-bitowej maszynie z autoconf 2.67, automake 1.11.1, libtool 2.2.6b i m4 1.4.14
dbeer
1
Nie wyobrażam sobie takiej pomocy: ale czy wypróbowałeś AC_CHECK_PROGS ([MAKE], [$ MAKE make gmake], [błąd])? Zdecydowanie brzmi to jak problem z m4, a pełne cytowanie rzeczy do m4 może tylko pomóc. Ten konkretny wiersz prawdopodobnie nie jest winowajcą, ale gdzieś pachnie jak kwestia cytowania. Czy możesz opublikować pełny plik configure.ac?
William Pursell

Odpowiedzi:

256

Miałem ten sam problem i stwierdziłem, że pkg-configbrakuje tego pakietu.

Po zainstalowaniu pakietu wszystko zostało wygenerowane poprawnie.

mutsu
źródło
2
Dzięki! Przedstawiam moją sprawę dla następnego faceta w tych samych butach. Aby mieć powtarzalne kompilacje, muszę użyć zestawu niestandardowych ścieżek do wszystkich narzędzi systemu budowania GNU. Odpowiednikiem instalacji pkg-config było nie tylko zmodyfikowanie PATH, ale także dodanie "-I /toolchain_local/pkg-config-0.23/share/aclocal"do autoreconfwiersza poleceń. Zajęło mi trochę czasu, zanim zdałem sobie sprawę, że pkg-config nie instaluje tylko plików binarnych. rpm -ql pkgconfigpomógł.
Assambar
7
Musiałem zainstalować libtool.
Mitar
11
Po prostu do Twojej wiadomości, technicznie rzecz biorąc, to nie rozwiązuje problemu. W tym przypadku program AC_MSG_ERRORpróbował powiedzieć „musisz zainstalować pkg-config”, ale z jakiegoś powodu nie mógł wydrukować tego komunikatu (podając błąd o AC_MSG_ERROR). Po zainstalowaniu pkg-confignie było już potrzeby drukowania komunikatu o błędzie, więc AC_MSG_ERRORwiersz został pominięty i wszystko działa. W porządku, jeśli instalujesz pakiet innej osoby, ale jeśli jest to twój własny kod, nadal nie rozwiązałeś problemu :-)
Malvineous
19
Napotkałem ten problem już wcześniej i zainstalowanie autoconf-archivepakietu rozwiązało problem.
jonthalpy
5
Wow, to jest przykład autorekonfiguracji wypluwający naprawdę zły komunikat o błędzie.
John Greene,
31

Zaleca się używanie autoreconf -fizamiast ręcznego wywoływania, aclocal;autoconf;automake; #and whatever elseaby poprawnie wypełnić plik aclocal.m4 i tak dalej.

Dodanie ACLOCAL_AMFLAGS = -I m4(do najwyższego poziomu Makefile.am) i AC_CONFIG_MACRO_DIR([m4])obecnie jest nadal opcjonalne, jeśli nie używasz własnych plików m4, ale oczywiście wycisza proces :)

jørgensen
źródło
Mamy pliki m4, więc jest to dla nas wymagane. Również zmiana rzeczy na autoreconf -fi powoduje ten sam błąd.
dbeer
1
Jeśli masz pliki m4, ACLOCAL_AMFLAGS i AC_CONFIG_MACRO_DIR są dokładnie tym, co powinieneś zrobić. (I umieszczanie plików w m4 /, odpowiednio w katalogu, który podałeś)
jørgensen
Dzięki, autoreconf -fiskompilowałem PCRE.
uınbɐɥs
Miałem dokładnie ten sam problem i okazało się, że ja przegapiłem ustawienie ACLOCAL_AMFLAGSw Makefile.am- dzięki!
simpleigh
2
Autotools są tak zepsute ... Żadne z tych bzdur nie ma sensu. Jak to możliwe, że za 30 lat sprawy są nadal tak zepsute?
jww
27

Miałem ten problem z własnym configure.ac, ale w tym przypadku (i dla dobra każdego z Google) wynikało to z tego, że przypadkowo zacytowałem AC_MSG_ERRORznak, więc był traktowany jako ciąg:

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

Po usunięciu nawiasów kwadratowych wokół AC_MSG_ERRORmakra zadziałało:

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

Te komentarze mówiące, że powinieneś zainstalować pkg-configlub jakiś pakiet, nie mają sensu. AC_MSG_ERRORMa pracy i daje pomocne wiadomości jak „Musisz zainstalować pakiet XYZ”, ale z powodu jakiegoś problemu, AC_MSG_ERRORnie działa. Zainstalowanie pakietu XYZ z pewnością usunie błąd, ale tylko dlatego, że gdy pakiet już się pojawi, nie ma już potrzeby drukowania komunikatu o błędzie!

Tak więc instalacja pkg-configlub konkretny pakiet po prostu omija problem, a tak naprawdę go nie rozwiązuje.

Malvineous
źródło
12

ja też miałem podobny problem .. moim rozwiązaniem jest

apt-get install libcurl4-openssl-dev

(miałem już zainstalowane libcurl) działało przynajmniej dla mnie ..

BeatingBytes
źródło
11

Doświadczyłem tego samego problemu pod CentOS 7

W takim przypadku problem zniknął po instalacji libcurl-devel( libcurlbył już zainstalowany na tym komputerze)

jap1968
źródło
6

Miałem ten sam problem na RHEL7.5 z otto-de / libvmod-uuid

Zostało to naprawione poprzez zainstalowanie pakietów „autoconf-archive”

Sawit Meekwamdee
źródło
Potrzebowałem pakietu Debiana "autoconf-archive", aby zbudować powertop v2,31-rc1.
dileks
3

Czy konfigurujesz lokalny m4katalog „ ”? na przykład,

> aclocal -I m4 --install

Niektóre pakiety zawierają skrypt powłoki autogen.shlub initgen.shdo uruchamiania programów glibtoolize, autoheader, autoconf, automake. Oto autogen.shskrypt, którego używam:

#! /bin/sh

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

autoheader
aclocal -I m4 --install
autoconf

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

EDYTOWAĆ

Konieczne może być dodanie ACLOCAL_AMFLAGS = -I m4do najwyższego poziomu Makefile.am.

Brett Hale
źródło
Czy autoreconf nie wybiera odpowiedniego libtoolize na Darwinie?
William Pursell
Konfiguruję lokalny katalog „m4”. Dodałem -I m4 --install do aclocal, ale pojawia się ten sam błąd. To jest mój skrypt autogen.sh: libtoolize -c -f autoheader -f aclocal -I m4 --install autoconf -f automake --foreign --add-missing --force-missing --copy
dbeer
1
@dbeer, dodał ACLOCAL_AMFLAGSzmienną?
Brett Hale
@WilliamPursell nie, tak nie jest. MacOS zawiera bibliotekę GNU libtool jako „glibtool”, a dostarczoną przez Apple (która nie zachowuje się tak, jak oczekuje się od biblioteki GNU) jako „libtool”. Zauważ, że również libtoolize jest instalowane jako 'glibtoolize'. Można to zmienić, określając makro LIBTOOLIZE i LIBTOOL. Pomimo tego, że ta próbka autogenu jest dobra, często lepiej jest po prostu uruchomić autoreconf -fi i pozwolić mu zgadnąć / odzyskać flagę -I z poprzedniego uruchomienia, zwłaszcza gdy oprogramowanie nie jest twoje.
LeoTh3o
3

Dla Debiana. Wymagane pakiety to: m4 automake pkg-config libtool

ETech
źródło
2

Błąd jest generowany przez autom4te. Jeśli wszystko jest skonfigurowane poprawnie, część kodu, która generuje ten błąd, nigdy nie powinna widzieć „AC_MSG_ERROR”, ponieważ przed tym punktem powinna zostać rozszerzona o m4. Mówisz, że błąd występuje tylko „w niektórych konfiguracjach”. Sugerowałbym, że w tych konfiguracjach twoja instalacja autoconf jest fubar. Prawdopodobnie masz zainstalowaną niekompatybilną wersję m4.

William Pursell
źródło
Jestem na autoconf 2.65 i m4 1.4.13. Czy są one zgodne?
dbeer
m4 1.4.13 jest wystarczająco nowy i raczej nie stanowi problemu. Czy możesz określić, co różni się w konfiguracjach, w których widzisz ostrzeżenie, od tych, w których go nie widzisz?
William Pursell
Właśnie dodałem część informacji na ten temat do mojego pytania - czy możesz wymyślić coś jeszcze istotnego? Nie mam zbyt dużej wiedzy, jeśli chodzi o automatyczne narzędzia.
dbeer
Właśnie zauważyłem - maszyny 32-bitowe wydają się być tymi, które mają trudności.
dbeer
2

Korzystanie z MacOS X

sudo port install pkgconfig

było rozwiązaniem!

Johann Horvat
źródło
3
ta odpowiedź jest nieaktualna, użyj naparu zamiast portu
xiamx
2

Na Mac OS X el captain with brew, spróbuj:
brew install pkgconfig

To zadziałało dla mnie.

us_david
źródło
2

Istnieją dwie możliwe przyczyny tego problemu:

  1. nie zainstalował aclocal.
    rozwiązanie : zainstaluj libtool

    • Dla ubuntu: sudo apt-get install libtool
    • Dla centów: sudo yum install libtool
  2. ścieżka do LIBTOOL.m4 to błąd.
    rozwiązanie:

    1. użyj aclocal --print-ac-dirdo sprawdzenia bieżącej ścieżki do aclocal (zwykle powinno to być „/ usr / share / aclocal” lub „/ usr / share / aclocal”)
    2. Następnie sprawdź, czy są pliki * .m4.
    3. Jeśli nie, cp odpowiadające plikom * .m4 do tej ścieżki (może cp /usr/share/aclocal/*.m4 /usr/local/share/aclocal/lub cp /usr/local/share/aclocal/*.m4 /usr/share/aclocal/)

Mam nadzieję, że to pomoże

Cifang
źródło
1

Miałem ten sam problem na Ubuntu ( error: possibly undefined macro: AC_MSG_ERROR), ale powyższe odpowiedzi nie działały. Tutaj znalazłem rozwiązanie

To załatwiło sprawę:

$ LANG=C LC_CTYPE=C ./autogen.sh
mschoenebeck
źródło
1

Mój problem został rozwiązany po zainstalowaniu pkg-config na Macu (napisz instalację pkg-config)

Pavan Challa
źródło
1

Rozwiązałem to przez yum install libtool

VictorV
źródło
po zakończeniu kompilacji pkg-config
VictorV
0

Zdarzyło mi się to, gdy zapomniałem a w argumentach dla lokalnie zdefiniowanego makra. Spędziłem godziny, próbując to rozgryźć (ledwo zaznajomiony z automatycznymi narzędziami) ...

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

powinien był być

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

Wygląda na to, że powinien spowodować błąd lub coś podobnego, ale przypuszczam, że będąc makroprocesorem, może robić tylko to, co mu każą.

wycieraczka gumowa
źródło
0

Właśnie straciłem na tym kilka godzin. Mój wniosek:

  • W zależności od wersji i innych warunków lokalnych, autoconf wypluje komunikat o niezdefiniowanym AC_MSG_ERROR, gdy napotka JAKIEKOLWIEK niezdefiniowane makro . AC_MSG_ERROR to czerwony śledź. Przyczyny niezdefiniowanego makra mogą być następujące:
    • Literówka w nazwie makra w pliku lub lokalne makro, które nie zostało dostarczone z paczką
    • Brak pakietu, który zawierałby zestaw makr autoconf, z których jedno jest używane w pliku. Często brakuje pakietu pkg-config (z powodu np. PKG_CHECK_MODULES), ale może to być dowolny inny pakiet dostarczający potrzebne, ale nieobecne makro. Błędne jest oczywiście to, że dzieje się to zanim wciąż nieistniejący skrypt konfiguracyjny może sprawdzić brakujący pakiet ...
medoc
źródło
0

Miałem podobne problemy, gdy próbowałem zbudować amtk i utthpmock za pomocą jhbuild.

Musiałem zainstalować najnowszą wersję autoconf-archive. Instrukcje znajdują się pod adresem https://github.com/autoconf-archive/autoconf-archive/blob/master/README-maint . Na sudo make installkoniec zrobiłem dodatkowe .

Ostatnim krokiem była aktualizacja mojego ACLOCAL_PATH:

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

Po a source ~/.bashrcwszystkie makra zostały w końcu znalezione i kompilacja się powiodła.

Laurenz
źródło
-1

Miałem ten sam problem z portem Macports „openocd” (lokalnie zmodyfikował Portfile, aby korzystał z repozytorium git) na świeżo zainstalowanej maszynie.

Trwała poprawka jest łatwa, zdefiniuj zależność do pkgconfig w Portfile: depend_lib-append port: pkgconfig

Michael Dreher
źródło