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

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

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

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

Есть ли способ изменить этот путь по умолчанию с помощью переменной среды (так же, как здесь /questions/330189/autoconf-libtool-i-neopredelennyij-acproglibtool/330198#330198)?

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

2 ответа

В сценарии оболочки 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 кажется довольно разумным.

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

Сборка 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 m4pcre pcre-devel pkg-config

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

корень# ./autogen.sh

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

./autogen.sh пытается найти каталог libtool ` /syslol/share/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/

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

корень# ./autogen.sh

main::scan_file() вызывается слишком рано для проверки прототипа в строке 622 /usr/bin/aclocal. libtoolize: $aclocaldir не является каталогом:` /syslol/share/aclocal' autoreconf: ошибка libtoolize со статусом выхода: требуется 1 сборка autoconf automake libtool m4 pcrepcre-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/доля/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 все еще остается. Для успешной сборки необходимо обновить Automake .

Файлы распространяемых версий automake можно найти в разделе «Версии» , а текущую версию я нашел в Automake версии 1.13.

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

Сделайте резервную копию исходного двоичного файла

mobile$, который автоматизирует

/usr/bin/automake

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

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

корень # cat > /usr/bin/automake

вставьте сюда контент с сайта

^ Д

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

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.

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

Другие вопросы по тегам