Como executar autotools a partir de um diretório fora do padrão?

Como executar autotools a partir de um diretório fora do padrão?

Estou tentando construir uma biblioteca em um servidor de CI remoto, mas não tenho privilégios de root. A biblioteca requer a instalação dos pacotes autoconf, automake e libtool. Não consigo fazer isso com o apt-get install, então tentei fazer uma solução alternativa: baixar os pacotes .deb e exportar PATHs para que autoconf, libtoolize, etc.

O problema é que os binários nesses pacotes possuem alguns caminhos para scripts adicionais (instalados como parte dos pacotes) codificados. Agora recebo este erro:

libtoolize: $pkgltdldir is not a directory: `/usr/share/libtool'

Existe uma maneira de alterar este caminho padrão com uma variável de ambiente (da mesma forma que aquihttps://superuser.com/a/1144948/62460)?

Tentei exportar $pkgltdldir, mas não funcionou.

Responder1

No shell script libtoolize (versão 2.4.2 e 2.4.6), quatro variáveis ​​são codificadas:

   datadir=/usr/share
   pkgdatadir=/usr/share/libtool
   pkgltdldir=/usr/share/libtool
   aclocaldir=/usr/share/aclocal

Logo depois há a seguinte seção:

# Allow the user to override the master libtoolize repository:
if test -n "$_lt_pkgdatadir"; then
    pkgltdldir="$_lt_pkgdatadir"
    pkgdatadir="$_lt_pkgdatadir/libltdl"
    aclocaldir="$_lt_pkgdatadir/libltdl/m4"

Definir $_lt_pkgdatadir para o diretório libtool funcionará (funciona para mim - mas apenas se o diretório aclocal estiver em um subdiretório de libltdl chamado m4).

Diante disso, sua solução sed parece bastante sensata.

Responder2

Encontrei o mesmo problema aqui:

Construindo lighttpd-1.4.59 como usuário não root

celular $ ./autogen.sh

main::scan_file() chamado muito cedo para verificar o protótipo na linha /usr/bin/aclocal 622. autom4te: não é possível abrir autom4te.cache/requests:Permissão negadaaclocal: /usr/bin/autom4te falhou com status de saída: 1 autoreconf: aclocal falhou com status de saída: 1 compilação requer autoconf automake libtool m4 pcre pcre-devel pkg-config

Construindo lighttpd-1.4.59 como usuário root

raiz#./autogen.sh

main::scan_file() chamado muito cedo para verificar o protótipo em /usr/bin/aclocal linha 622. libtoolize:$pkgltdldir não é um diretório: `/syslol/share/libtool'autoreconf: libtoolize falhou com status de saída: 1 compilação requer autoconf automake libtool m4 pcre pcre-devel pkg-config

O./autogen.shtenta localizar o `/syslol/share/libtool'diretório libtool do diretório de caminho fornecido.

Portanto, crie a árvore de diretórios `/syslol/share/libtool' do seguinte modo

raiz # mkdir -p /syslol/share/libtool

Vamos encontrar o diretório libtool

root# encontrar / -type d -name libtool

/share/libtool

Adicione um link simbólico para referenciar o diretório `/share/libtool'

root# ln -s /share/libtool/* /syslol/share/libtool/

Execute a compilação uma segunda vez

raiz#./autogen.sh

main::scan_file() chamado muito cedo para verificar o protótipo em /usr/bin/aclocal linha 622. libtoolize: $aclocaldir não é um diretório: `/syslol/share/aclocal'autoreconf: libtoolize falhou com status de saída: 1 compilação requer autoconf automake libtool m4 pcre pcre-devel pkg-config

Isso mostra que também precisamos vincular o diretório aclocal a este caminho`/syslol/share/aclocal'

Crie aclocal dentro do diretório /syslol/share

root# mkdir -p /syslol/share/aclocal

Vamos encontrar a localização do diretório aclocal:

root# encontrar / -type d -name aclocal

/compartilhar/aclocal

/usr/local/share/aclocal

/usr/share/aclocal

Bemescolha o/share/aclocal/caminho para vincular

root# ln -s /share/aclocal/* /syslol/share/aclocal/

Terceiro ensaio:

root# ./autogen.sh

main::scan_file() called too early to check prototype at /usr/bin/aclocal line 622.
`'libtoolize: putting auxiliary files in `.'.
libtoolize: copying file `./ltmain.sh'
libtoolize: putting macros in AC_CONFIG_MACRO_DIR, `m4'.
libtoolize: copying file `m4/libtool.m4'
libtoolize: copying file `m4/ltoptions.m4'
libtoolize: copying file `m4/ltsugar.m4'
libtoolize: copying file `m4/ltversion.m4'
libtoolize: copying file `m4/lt~obsolete.m4'
main::scan_file() called too early to check prototype at /usr/bin/aclocal line 622.
Unescaped left brace in regex is deprecated here (and will be fatal in Perl 5.30), passed through in regex; marked by <-- HERE in m/\${ <-- HERE ([^ \t=:+{}]+)}/ at /usr/bin/automake line 4153.
configure.ac:24: require Automake 1.13, but have 1.11.2
autoreconf: automake failed with exit status: 1
build requires autoconf automake libtool m4 pcre pcre-devel pkg-config

Corrigimos o problema do caminho, embora ainda tenhaproblema de criação automática Precisa atualizar Automakepara uma construção bem sucedida.

Arquivos de versão distribuída do automake podem ser encontrados emVersõese para corrente eu encontrei emAutomake versão 1.13

Vamos substituir a versão automake versão 1.11.2 pela versão 1.13

Faça backup do binário original

celular $ que automake

/usr/bin/automake

raiz # mv /usr/bin/automake /usr/bin/automake1.11.2

Criando um novo arquivo de configuração do automake com conteúdo da versão 1.13

raiz # gato > /usr/bin/automake

cole o conteúdo do site aqui

^ D

Adicionar permissão de execução

raiz # chmod +x /usr/bin/automake

Quarta compilação

root # ./autogen.sh

main::scan_file() called too early to check prototype at /usr/bin/aclocal line 622.
libtoolize: putting auxiliary files in `.'.
libtoolize: copying file `./ltmain.sh'
libtoolize: putting macros in AC_CONFIG_MACRO_DIR, `m4'.
libtoolize: copying file `m4/libtool.m4'
libtoolize: copying file `m4/ltoptions.m4'
libtoolize: copying file `m4/ltsugar.m4'
libtoolize: copying file `m4/ltversion.m4'
libtoolize: copying file `m4/lt~obsolete.m4'
main::scan_file() called too early to check prototype at /usr/bin/aclocal line 622.
Now type './configure ...' and 'make' to compile.

Temos uma construção de sucesso

informação relacionada