Как запустить autotools из нестандартного каталога?

Как запустить autotools из нестандартного каталога?

Я пытаюсь собрать библиотеку на удаленном сервере CI, но у меня нет прав root. Библиотека требует установки пакетов autoconf, automake и libtool. Я не могу сделать это с помощью apt-get install, поэтому я попытался обойти эту проблему: загрузить пакеты .deb и экспортировать PATH, чтобы можно было найти autoconf, libtoolize и т. д.

Проблема в том, что в двоичных файлах этих пакетов жестко прописаны некоторые пути к дополнительным скриптам (установленным как часть пакетов). Теперь я получаю эту ошибку:

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

Есть ли способ изменить этот путь по умолчанию с помощью переменной среды (таким же образом, как здесь)https://superuser.com/a/1144948/62460)?

Я попробовал экспортировать $pkgltdldir, но это не сработало.

решение1

В скрипте оболочки libtoolize (версии 2.4.2 и 2.4.6) жестко закодированы четыре переменные:

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

Вскоре после этого следует следующий раздел:

# 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"

Таким образом, установка $_lt_pkgdatadir в каталог libtool будет работать (у меня работает, но только если каталог aclocal находится в подкаталоге libltdl с именем m4).

Учитывая это, ваше решение с sed кажется вполне разумным.

решение2

Я столкнулся с той же проблемой здесь:

Сборка lighttpd-1.4.59 от имени пользователя, не являющегося пользователем root

мобильный$ ./autogen.sh

main::scan_file() вызван слишком рано для проверки прототипа в /usr/bin/aclocal строка 622. autom4te: невозможно открыть autom4te.cache/requests:Доступ запрещенaclocal: /usr/bin/autom4te завершился неудачей со статусом выхода: 1 autoreconf: aclocal завершился неудачей со статусом выхода: 1 сборка требует autoconf automake libtool m4 pcre pcre-devel pkg-config

Сборка lighttpd-1.4.59 от имени пользователя root

root# ./autogen.sh

main::scan_file() вызван слишком рано для проверки прототипа в /usr/bin/aclocal строка 622. libtoolize:$pkgltdldir не является каталогом: `/syslol/share/libtool'autoreconf: libtoolize завершился неудачно, код выхода: 1 сборка требует autoconf automake libtool m4 pcre pcre-devel pkg-config

The./autogen.shпытается найти `/syslol/share/libtool' каталог libtool из указанного пути.

Поэтому создайте дерево каталогов `/syslol/share/libtool' следующее

root# mkdir -p /syslol/share/libtool

Давайте найдем каталог libtool

root# find / -type d -name libtool

/share/libtool

Добавьте символическую ссылку на каталог `/share/libtool'

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

Запустите сборку второй раз

root# ./autogen.sh

main::scan_file() вызван слишком рано для проверки прототипа в /usr/bin/aclocal строка 622. libtoolize: $aclocaldir не является каталогом: `/syslol/share/aclocal'autoreconf: libtoolize завершился неудачно, код выхода: 1 сборка требует autoconf automake libtool m4 pcre pcre-devel pkg-config

Это показывает, что нам также необходимо связать каталог aclocal с этим путем.`/syslol/share/aclocal'

Создайте aclocal в каталоге /syslol/share

root# mkdir -p /syslol/share/aclocal

Давайте найдем местоположение каталога aclocal:

root# find / -type d -name aclocal

/share/aclocal

/usr/local/share/aclocal

/usr/share/aclocal

Хорошовыбрать/share/aclocal/путь для ссылки

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

Третий пробный прогон:

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

Мы исправили проблему с путями, хотя все еще естьпроблема автопроизводителя Придется обновлять Автопроизводительдля успешной сборки.

Файлы версии распределенного automake можно найти по адресуВерсиии для тока я нашел вАвтомейк версия 1.13

Давайте заменим версию automake версии 1.11.2 на версию 1.13

Резервное копирование исходного двоичного файла

мобильный$, который производит авто

/usr/bin/automake

корень # mv /usr/bin/automake /usr/bin/automake1.11.2

Создание нового файла конфигурации automake с содержимым версии 1.13

root # cat > /usr/bin/automake

вставьте сюда содержимое сайта

^D

Добавить разрешение на выполнение

root # chmod +x /usr/bin/automake

Четвертый сборник

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.

У нас есть успешная сборка

Связанный контент