Usando uma versão específica do programa no configure

3

Eu gostaria de instalar o bison em uma máquina onde não tenho privilégios de root. Quando tentei usar configure , recebi o seguinte erro:

checking for GNU M4 that supports accurate traces... configure: error: no acceptable m4 could be found in $PATH.
GNU M4 1.4.6 or later is required; 1.4.16 or newer is recommended.
GNU M4 1.4.15 uses a buggy replacement strstr on some systems.
Glibc 2.9 - 2.12 and GNU M4 1.4.11 - 1.4.15 have another strstr bug.

Descobri que minha versão do M4 é 1.4.13. Eu instalei uma versão mais recente (1.4.17) para minha pasta pessoal e queria que o configure usasse esta versão local, para fazer isso achei isso no script de configuração:

M4          Location of GNU M4 1.4.6 or later. Defaults to the first program
            of 'm4', 'gm4', or 'gnum4' on PATH that meets Autoconf needs.

Então usei o comando:

../configure --prefix=$HOME/local/bison M4='$HOME/local/m4/bin/'

O que eu suponho que não há problema em fazer (corrija-me se estiver errado).

Depois disso, recebi este erro:

checking for flex... flex
checking whether lex is flex... no
checking lex output file root... lex.yy
checking lex library... none needed
checking whether yytext is a pointer... no
configure: error: Flex is required

Eu instalei o flex localmente em $HOME/local/flex e tentei modificar a variável PATH .

PATH=$HOME/local/flex/bin/:$PATH

, mas ainda recebo o mesmo erro. Então eu não sei como dizer ao configure para usar este local. Eu não acho que desta vez há opções para isso, como havia para m4 . E mesmo se houvesse, eu ainda estaria interessado se for possível especificar um local (es) para configure para procurar programas arbitrários (com preferencialmente maior prioridade que /usr/bin )?

    
por user1335014 12.12.2014 / 18:12

1 resposta

2

Você está perto.

Primeiro, a variável M4 precisa ser definida para o caminho do arquivo de programa M4 real, não para o diretório em que ela está. Provavelmente, um uso mais comum para essa variável do que o seu caso é selecionar vários programas M4 que já estão no PATH , então você precisa nomear o executável real. É comum em sistemas operacionais do tipo BSD ter a plataforma m4 e, em seguida, um programa GNU M4, talvez chamado gm4 , por exemplo. Você pode querer usar a versão GNU do M4 enquanto constrói o GNU Bison, e esta variável permite que você faça isso. O script, caso contrário, encontraria a versão do BSD primeiro, em nosso sistema de exemplo.

Em segundo lugar, acho que sua modificação PATH está sendo ignorada. A menos que você export o PATH , o novo valor estará disponível apenas para o shell. Você tem duas maneiras de corrigir isso:

 export PATH=$HOME/local/flex/bin/:$PATH

ou:

 PATH=$HOME/local/flex/bin/:$PATH ../configure --flags-and-stuff-here

A segunda versão faz a alteração apenas para o script configure . Qualquer programa que o script inicie não verá o PATH alterado, a menos que ele exporte o novo valor.

Pessoalmente, eu faria isso da primeira maneira em um de seus scripts de inicialização (por exemplo, ~/.bash_profile ), porque você também desejará a sua versão pessoal do Flex depois de instalar o Bison. Efetue logout, depois volte e tente executar flex para testá-lo. Se isso funcionar, o script Bison configure também deverá encontrar essa versão.

    
por 12.12.2014 / 18:41