Não foi possível encontrar o install-sh, install.sh ou shtool no ac-aux

81

Esta é a minha primeira vez tentando compilar e instalar qualquer coisa em uma máquina Linux. Eu obtive a versão mais recente do https://github.com/processone/exmpp via git e li as instruções que afirmam:

2. Construa e instale

Exmpp usa as ferramentas automáticas. Portanto, o processo é bastante comum:

$ ./configure
$ make
$ sudo make install

depois do tipo ./configureeu recebo o erro

Não foi possível encontrar o install-sh, install.sh ou shtool no ac-aux

O Google foi de pouca ou nenhuma ajuda. Não tenho certeza do que devo fazer. Qualquer ajuda seria muito apreciada

Micah
fonte

Respostas:

109

Eu consegui criar o script de configuração usando as seguintes ferramentas:

libtoolize --force
aclocal
autoheader
automake --force-missing --add-missing
autoconf
./configure

Eu não tenho todas as dependências, então não posso testá-lo agora, mas geralmente é assim que você criaria um script de configuração a partir de um arquivo ac.

sebastian_k
fonte
2
As instruções no README foram provavelmente copiadas às cegas de outro lugar. Tenho que admitir que não entendo todos os detalhes da cadeia de ferramentas do autoconf; é basicamente uma coleção de macros que são geradas e usadas para criar seu script de configuração (que, por sua vez, define o cenário para o processo de compilação e instalação). Eu nunca tive que afinar essas coisas, por isso não sou especialista, mas há algumas explicações bastante extensas aqui
sebastian_k
12
Nota aos programadores: pare de usar a cadeia de ferramentas automake. Por favor .
Qix
1
@Qix, você poderia, por favor, nos explicar por que?
Sergei
4
@Sergei é bagunçado, lento e quebra constantemente. Desordena define e é incrivelmente mágico . Sua maneira de lidar com dependências (ou a falta delas) fornece mensagens de erro enigmáticas, e os arquivos produzidos são ilegíveis na melhor das hipóteses e, na pior das hipóteses, quebrados de maneira assustadora.
Qix
4
@Sergei CMake é o mais viável neste momento na minha opinião. Tenho certeza de que haverá algo melhor no futuro (próximo).
Qix
40

Bem, eu tentei a resposta de sebastian_k e não funcionou para mim ( ./configurefalhei no meio do caminho com um erro extremamente estranho).

No entanto, o que funcionou para mim foi copiar as instruções usadas neste log de construção que encontrei

A versão curta (para que você não precise percorrer você mesma) é:

$ autoreconf -vif
$ ./configure --prefix=/usr/lib/erlang/lib
$ make
$ sudo make install
entropia
fonte
16
+1. autoreconf -ié a resposta correta (o ve fsão geralmente opcional)
Nemo
2
+1. Esta é a única resposta que funcionou para mim.
Weberc2
@ Nemo nice. A resposta aceita tecnicamente funciona, mas a sua é a mais simples de longe.
Avindra Goolcharan 5/11
9

Esta pergunta, e a maioria das outras respostas aqui, surgem de um mal-entendido de como os projetos que usam o GNU Build System (aka Autotools) são distribuídos. De fato, no caso da biblioteca Erlang XMPP mencionada pelo OP, o mal-entendido parece estar da parte dos desenvolvedores.

Obtendo o software da maneira certa

Se tudo o que você deseja fazer é compilar e instalar um projeto lançado com o GNU Autotools, não deve fazer check-out no sistema de controle de origem . Em vez disso, você deve baixar o release de origem empacotado fornecido pelo desenvolvedor. Normalmente, eles tomam a forma de tarballs distribuídos no site do projeto. Para projetos hospedados inteiramente no GitHub, Savannah ou em algum serviço de hospedagem semelhante, esses tarballs geralmente são encontrados atrás de algum link chamado "Download" ou "Releases". Você descompacta o pacote e pronuncia alguma variante do ./configure && make && sudo make installencantamento padrão . Isso é tudo; você não precisa invocar nenhum dos GNU Autotools e nem precisa ter o GNU Autotools instalado no seu sistema.

A razão pela qual você, usuário, não precisa do GNU Autotools para compilar um projeto empacotado pelo Autotools é que o desenvolvedor usou os vários programas do Autotools para gerar um " pacote de distribuição" que pode ser usado para criar o software em qualquer Sistema Unix-like. O tarball de distribuição contém um configurescript altamente portátil que verifica o ambiente de construção, verifica dependências e constrói um Makefilepersonalizado para o seu sistema.

Então, quando você precisa do Autotools?

O único motivo para você precisar instalar e chamar o GNU Autotools por si mesmo é se você deseja fazer um trabalho de desenvolvimento em um projeto criado com o Autotools. E mesmo assim, você provavelmente não precisará do Autotools, a menos que altere as dependências do projeto. Nesse caso, você seria realmente precisa verificar a fonte original, fazer mudanças apropriadas aos Autotools-specific arquivos de entrada ( configure.ac, Makefile.am, etc.), e executar os Autotools sobre eles para gerar um novo configurearquivo. Se você deseja publicar independentemente o pacote revisado, use o Makefile gerado pelo Autotools para gerar um novo pacote de distribuição e, em seguida, publique esse pacote em algum lugar online.

O problema é que alguns desenvolvedores disponibilizam seu repositório de origem publicamente, mas deixam de publicar seus tarballs de distribuição (ou dificultam a localização de onde são publicados). Por exemplo, em vez de publicar seus tarballs de distribuição como GitHub Releases , o GitHub Releases da biblioteca Erlang XMPP são tarballs do repositório de origem bruta. Isso torna impossível compilar o projeto sem o GNU Autotools, derrotando todo o propósito de usar o Autotools.

Resumo de TL; DR

As GNU Autotools são algo que os desenvolvedores usam para criar pacotes portáteis de código fonte para os usuários. Os usuários devem baixar e compilar a partir desses pacotes de origem, não o código original do sistema de controle de origem. Se os desenvolvedores não fornecerem esses pacotes de código-fonte, eles não estarão usando o Autotools corretamente e devem ser gentilmente batidos com uma truta molhada até verem o erro de seus caminhos.

Psychonaut
fonte
Como esse longo post está relacionado à pergunta? O OP tentou usar as ferramentas automáticas? Eles baixaram alguns soft e rodaram ./configure && make && sudo make installcomo você sugeriu no segundo parágrafo.
precisa saber é o seguinte
3
É relevante porque o software baixado pelo OP não contém um script de configuração correto (e a versão mais recente no controle de origem, além dos tarballs liberados, não contém um script de configuração). Quase todas as respostas aqui estão dizendo ao OP para executar o Autotools. Embora isso possa solucionar o problema, é importante entender a causa raiz: os desenvolvedores são os responsáveis ​​pela execução do Autotools e eles não fizeram isso corretamente (ou de modo algum).
Psychonaut
1
Esta é uma boa resposta e, embora eu goste da frase "bateu levemente com uma truta molhada", pode ser mais apropriado mencionar explicitamente a resposta correta é relatar o bug a montante.
William Pursell
1
@WilliamPursell Suponho que o trocadilho se destina. :)
Psychonaut
4

Eu tive esse problema e achei que era devido à seguinte linha configure.ac:

AC_CONFIG_AUX_DIR([build-aux])

A linha não era ruim por si só, mas precisava ser movida para mais perto da parte superior do configure.acarquivo.

Craig McQueen
fonte
3

Faça o seguinte para corrigir esse problema,

sudo apt-get install autogen libtool shtool

Então faça a instalação

sh autogen.sh --prefix=prefered_install_path
make 
make install 
Ravi Hegde
fonte
2

Ao tentar compilar o GNU Octave do repositório Mercurial, você pode encontrar esse problema. A correção é executada ./bootstrapenquanto estiver na raiz da árvore de origem.

Ruslan
fonte
1

sudo apt-get install automake autoconf

trabalha com sucesso

Shafiul Karim Bulan
fonte
0

Eu tive um problema semelhante quando tentei ./configureum código-fonte e obtive o mesmo erro que o postado. Finalmente resolvi meus problemas digitando o código:

sudo apt-get install autotools-dev
retnan
fonte
2
Erro: Não foi possível localizar as ferramentas automáticas do pacote.
Mauricio Scheffer
O mesmo aqui. Erro: Não foi possível localizar as ferramentas automáticas do pacote. Votado. Desculpa.
PJunior
Eu já tenho esse pacote instalado, seja ele qual for. No entanto, o script de configuração é acionado.
Boann
0

Após instalar o autogenpacote, este erro foi resolvido na wolfSSLcompilação.

sudo apt-get install autogen libtool shtool
rashok
fonte
0

Eu tive um erro ligeiramente diferente:

configure: error: cannot find install-sh, install.sh, or shtool in "." "./.." "./../.."

Acontece que o configure não pôde encontrar build-aux/install-sh. Eu liguei assim

ln -s build-aux/install-sh .

então constrói.

Espero que ajude alguém lá fora!

Barmaley
fonte