macro possivelmente indefinida: AC_MSG_ERROR

113

Tenho o seguinte em 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

Isso está em nosso projeto há muito tempo, mas em algumas configurações, recebo este erro:

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.

As linhas que foram adicionadas recentemente acima disso:

AC_CONFIG_MACRO_DIR([m4])
LT_INIT

Alguém pode explicar o que causa esse erro e como rastrear o problema?

EDIT: Adicionando detalhes sobre as diferenças.

Caixa que funciona:

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

Caixa que não funciona:

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

NOVA EDIÇÃO: apenas máquinas de 32 bits têm essa dificuldade.

Atualizado eu sou capaz de reproduzir o problema em uma máquina CentOS com autoconf 2.67, automake 1.11.1, libtool 2.2.6b, e m4 1.4.14. Isso é apenas um bug em máquinas de 32 bits?

dbeer
fonte
Por que isso é um problema? Construa seus tarballs com o autoconf 2.67. Você só precisa ter o autoconf instalado em uma máquina!
William Pursell de
1
Estou ciente de que posso contornar o problema facilmente, só estou tentando ter certeza de que é um problema com uma caixa e não um problema em nosso configure.ac ou outros arquivos de configuração.
dbeer de
Eu sei que o autoconf 2.64 foi considerado bastante bugado. Possivelmente, você está enfrentando um bug no 2.65.
William Pursell de
1
Consigo reproduzir o problema em outra máquina de 32 bits com autoconf 2.67, automake 1.11.1, libtool 2.2.6b e m4 1.4.14
dbeer
1
Não consigo imaginar isso ajudando: mas você já tentou AC_CHECK_PROGS ([MAKE], [$ MAKE make gmake], [error])? Definitivamente soa como um problema do m4, e citar totalmente as coisas para o m4 só pode ajudar. Esta linha em particular provavelmente não é a culpada, mas cheira a um problema de citação em algum lugar. Você pode postar o configure.ac completo?
William Pursell de

Respostas:

256

Eu tive esse mesmo problema e descobri que o pkg-configpacote estava faltando.

Depois de instalar o pacote, tudo gerou corretamente.

mutsu
fonte
2
Obrigado! Descrevendo meu caso, para o próximo cara no mesmo lugar. Para ter compilações reproduzíveis, tenho que usar uma cadeia de ferramentas de caminhos personalizados para todas as ferramentas do GNU Build System. O equivalente a instalar o pkg-config não era apenas modificar o PATH, mas também adicionar "-I /toolchain_local/pkg-config-0.23/share/aclocal"à autoreconflinha de comando. Levei algum tempo para perceber que o pkg-config não instala apenas binários. rpm -ql pkgconfigajudou.
Assambar
7
Eu tive que instalar libtool.
Mitar
11
Para sua informação, tecnicamente, isso não está resolvendo o problema. Neste caso, ele AC_MSG_ERRORestava tentando dizer "você precisa instalar o pkg-config", mas por algum motivo não foi possível imprimir esta mensagem (dando o erro sobre AC_MSG_ERROR). Ao instalar pkg-confignão havia mais necessidade de imprimir uma mensagem de erro, então a AC_MSG_ERRORlinha foi pulada e tudo funcionou. Tudo bem se você estiver instalando o pacote de outra pessoa, mas se for seu próprio código, você ainda não corrigiu o problema :-)
Malvineous
19
Já encontrei esse problema antes e a instalação do autoconf-archivepacote resolveu o problema.
jonthalpy
5
Uau, este é um exemplo de configuração automática emitindo uma mensagem de erro muito ruim.
John Greene,
31

Recomenda-se usar em autoreconf -fivez de chamar manualmente aclocal;autoconf;automake; #and whatever elsepara preencher corretamente aclocal.m4 e assim por diante.

Adicionar ACLOCAL_AMFLAGS = -I m4(ao Makefile.am de nível superior) e AC_CONFIG_MACRO_DIR([m4])atualmente ainda é opcional se você não usar nenhum arquivo m4 próprio, mas é claro, fazê-lo irá silenciar o processo :)

Jørgensen
fonte
Temos arquivos m4, então isso é necessário para nós. Além disso, alterar as coisas para autoreconf -fi produz o mesmo erro.
dbeer
1
Se você tiver arquivos m4, ACLOCAL_AMFLAGS e AC_CONFIG_MACRO_DIR é exatamente o que você deve fazer. (E colocando os arquivos em m4 /, resp. O diretório que você especificou)
jørgensen
Obrigado, autoreconf -fifeito compilar PCRE.
uınbɐɥs
Eu tive esse mesmo problema exato e descobriu que eu tinha perdido a definir ACLOCAL_AMFLAGSem Makefile.am- muito obrigado!
simpleigh
2
Autotools estão tão quebrados ... Nada dessa porcaria faz sentido. Como pode ser que em 30 anos as coisas ainda estejam assim quebradas?
jww
27

Eu tive esse problema com o meu configure.ac, mas neste caso (e para o benefício de qualquer pessoa aqui do Google) foi porque eu havia citado acidentalmente o, AC_MSG_ERRORentão ele estava sendo tratado como uma string:

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

Depois de remover os colchetes ao redor da AC_MSG_ERRORmacro, funcionou:

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

Aqueles comentários dizendo que você deve instalar pkg-configou algum pacote estão perdendo o ponto. O AC_MSG_ERRORdeve funcionar e dar a você uma mensagem útil como "Você precisa instalar o pacote XYZ", mas por causa de algum problema, o AC_MSG_ERRORnão funciona. Instalar o pacote XYZ certamente fará com que o erro desapareça, mas somente porque uma vez que o pacote está lá, não há mais necessidade de imprimir uma mensagem de erro!

Portanto, a instalação de pkg-configum pacote específico simplesmente contorna o problema, mas na verdade não o corrige.

Malvino
fonte
12

eu também tive um problema semelhante .. minha solução é

apt-get install libcurl4-openssl-dev

(eu já tinha o libcurl instalado) funcionou para mim pelo menos ..

BeatingBytes
fonte
11

Eu tive este mesmo problema no CentOS 7

Em alguns casos, o problema desapareceu após a instalação de libcurl-devel( libcurljá estava instalado nesta máquina)

jap1968
fonte
6

Tive o mesmo problema no RHEL7.5 com otto-de / libvmod-uuid

Foi corrigido com a instalação de pacotes "autoconf-archive"

Sawit Meekwamdee
fonte
Eu precisava do pacote Debian "autoconf-archive" para construir o powertop v2,31-rc1.
dileks
3

Você está configurando um m4diretório local ' '? por exemplo,

> aclocal -I m4 --install

Alguns pacotes vêm com um script autogen.shou initgen.shshell para executar glibtoolize, autoheader, autoconf, automake. Aqui está um autogen.shscript que 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

EDITAR

Você pode precisar adicionar ACLOCAL_AMFLAGS = -I m4ao nível superior Makefile.am.

Brett Hale
fonte
O autoreconf não seleciona a libtoolize apropriada no Darwin?
William Pursell
Estou configurando um diretório 'm4' local. Eu adicionei -I m4 --install to aclocal, mas recebo o mesmo erro. Este é o meu script autogen.sh: libtoolize -c -f autoheader -f aclocal -I m4 --install autoconf -f automake --foreign --add-missing --force-missing --copy
dbeer
1
@dbeer, adicionou a ACLOCAL_AMFLAGSvariável?
Brett Hale
@WilliamPursell não, não importa. MacOS apresenta a GNU libtool como 'glibtool', e a fornecida pela Apple (que não se comporta como esperado por uma GNU libtool) como 'libtool'. Observe que também o libtoolize é instalado como 'glibtoolize'. Isso pode ser substituído especificando a macro LIBTOOLIZE e LIBTOOL. Apesar deste exemplo autogen ser bom, geralmente é melhor simplesmente executar autoreconf -fi e deixá-lo adivinhar / recuperar o sinalizador -I da execução anterior, especialmente quando o software não é seu.
LeoTh3o
3

Para o Debian. Os pacotes necessários são: m4 automake pkg-config libtool

ETech
fonte
2

O erro é gerado pelo autom4te. Se as coisas estiverem configuradas corretamente, a parte do código que gera esse erro nunca deve ver 'AC_MSG_ERROR', porque deveria ter sido expandido em m4 antes desse ponto. Você diz que o erro só acontece "em algumas configurações". Eu sugeriria que nessas configurações, a instalação do autoconf seja fubar. Possivelmente, você tem uma versão incompatível do m4 instalada.

William Pursell
fonte
Estou no autoconf 2.65 e m4 1.4.13. São compatíveis?
dbeer
m4 1.4.13 é novo o suficiente e provavelmente não é o problema. Você pode determinar o que é diferente entre as configurações em que você vê o aviso e aquelas em que não vê?
William Pursell
Acabei de adicionar algumas informações sobre isso à minha pergunta - você consegue pensar em mais alguma coisa relevante? Não tenho muito conhecimento quando se trata de ferramentas automáticas.
dbeer
Apenas notei - as máquinas de 32 bits parecem ser as que apresentam dificuldade.
dbeer
2

Usando MacOS X

sudo port install pkgconfig

foi a solução!

Johann Horvat
fonte
3
esta resposta está desatualizada, use brew em vez de port
xiamx
2

No Mac OS X el capitain com brew, tente:
brew install pkgconfig

Isso funcionou para mim.

us_david
fonte
2

Existem duas razões possíveis para esse problema:

  1. não instalou aclocal.
    solução : instalar libtool

    • Para ubuntu: sudo apt-get install libtool
    • Para centos: sudo yum install libtool
  2. o caminho para LIBTOOL.m4 é um erro.
    solução:

    1. use aclocal --print-ac-dirpara verificar o caminho atual para aclocal. (Normalmente deve ser "/ usr / share / aclocal" ou "/ usr / share / aclocal")
    2. Em seguida, verifique se existem arquivos * .m4.
    3. Caso contrário, cp os arquivos * .m4 correspondentes a este caminho. (Talvez cp /usr/share/aclocal/*.m4 /usr/local/share/aclocal/ou cp /usr/local/share/aclocal/*.m4 /usr/share/aclocal/)

Espero que ajude

Cifang
fonte
1

Eu tive o mesmo problema no Ubuntu ( error: possibly undefined macro: AC_MSG_ERROR), mas as respostas acima não funcionaram para mim. Eu encontrei a solução aqui

Isso funcionou:

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

Meu problema foi resolvido depois de instalar o pkg-config no Mac (brew install pkg-config)

Pavan Challa
fonte
1

Eu resolvi isso por yum install libtool

VictorV
fonte
depois que eu terminar de compilar pkg-config
VictorV
0

Isso aconteceu comigo quando esqueci um, nos argumentos para uma macro definida localmente. Passei horas tentando descobrir (mal familiarizado com ferramentas automáticas) ...

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

deveria ter ficado

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

Parece que deveria ter me dado um erro ou algo parecido, mas suponho que sendo um processador de macro, ele só pode fazer o que é dito.

rodo
fonte
0

Acabei de perder algumas horas com este. Minha conclusão:

  • Dependendo da versão e de quaisquer outras condições locais, o autoconf cuspirá a mensagem sobre AC_MSG_ERROR undefined quando encontrar QUALQUER macro indefinido . O AC_MSG_ERROR é uma pista falsa. As causas para uma macro indefinida podem ser:
    • Um erro de digitação no nome de uma macro no arquivo ou uma macro local que não foi enviada com o tarball
    • Falta um pacote que deve vir com um conjunto de macros autoconf, uma das quais é usada no arquivo. O pkg-config geralmente é o que está faltando (por causa de, por exemplo, PKG_CHECK_MODULES), mas pode ser qualquer outro pacote fornecendo uma macro necessária, mas ausente. O pior, é claro, é que isso acontece antes que o script configure ainda não existente possa verificar o pacote ausente ...
medoc
fonte
0

Tive problemas semelhantes ao tentar construir amtk e utthpmock com jhbuild.

Eu precisava instalar a versão mais recente do autoconf-archive. As instruções estão em https://github.com/autoconf-archive/autoconf-archive/blob/master/README-maint . Eu fiz um adicional sudo make installno final.

A última etapa foi atualizar meu ACLOCAL_PATH:

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

Depois de a source ~/.bashrc, todas as macros foram finalmente encontradas e as compilações foram bem-sucedidas.

Laurenz
fonte
-1

Eu tive o mesmo problema com a porta Macports "openocd" (modifiquei localmente o Portfile para usar o repositório git) em uma máquina recém-instalada.

A correção permanente é fácil, defina uma dependência para pkgconfig no Portfile: depends_lib-append port: pkgconfig

Michael Dreher
fonte