Wie führe ich Autotools aus einem nicht standardmäßigen Verzeichnis aus?

Wie führe ich Autotools aus einem nicht standardmäßigen Verzeichnis aus?

Ich versuche, eine Bibliothek auf einem Remote-CI-Server zu erstellen, habe aber keine Root-Berechtigungen. Die Bibliothek erfordert die Installation der Pakete autoconf, automake und libtool. Das geht mit apt-get install nicht, also habe ich versucht, das Problem zu umgehen: die .deb-Pakete herunterzuladen und PATHs zu exportieren, damit autoconf, libtoolize usw. gefunden werden können.

Das Problem besteht darin, dass die Binärdateien in diesen Paketen einige Pfade zu zusätzlichen Skripten (die als Teil der Pakete installiert sind) fest codiert haben. Jetzt erhalte ich diesen Fehler:

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

Gibt es eine Möglichkeit, diesen Standardpfad mit einer Umgebungsvariable zu ändern (auf die gleiche Weise wie hierhttps://superuser.com/a/1144948/62460)?

Ich habe versucht, es zu exportieren, $pkgltdldiraber das hat nicht funktioniert.

Antwort1

Im Shellskript libtoolize (Version 2.4.2 und 2.4.6) sind vier Variablen fest codiert:

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

Kurz darauf folgt folgender Abschnitt:

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

Das Festlegen von $_lt_pkgdatadir auf das Libtool-Verzeichnis funktioniert daher (funktioniert bei mir – aber nur, wenn sich das aclocal-Verzeichnis in einem Unterverzeichnis von libltdl mit dem Namen m4 befindet).

Vor diesem Hintergrund erscheint Ihre Sed-Lösung durchaus sinnvoll.

Antwort2

Ich bin hier auf dasselbe Problem gestoßen:

Erstellen von lighttpd-1.4.59 als Nicht-Root-Benutzer

mobile$ ./autogen.sh

main::scan_file() wurde zu früh aufgerufen, um den Prototyp in /usr/bin/aclocal Zeile 622 zu prüfen. autom4te: autom4te.cache/requests kann nicht geöffnet werden:Zugriff verweigertaclocal: /usr/bin/autom4te ist fehlgeschlagen mit Exit-Status: 1 autoreconf: aclocal ist fehlgeschlagen mit Exit-Status: 1 Build erfordert Autoconf Automake Libtool m4 pcre pcre-devel pkg-config

Erstellen von lighttpd-1.4.59 als Root-Benutzer

Wurzel# ./autogen.sh

main::scan_file() wurde zu früh aufgerufen, um den Prototyp in /usr/bin/aclocal Zeile 622 zu prüfen. libtoolize:$pkgltdldir ist kein Verzeichnis: „/syslol/share/libtool“autoreconf: libtoolize ist mit Exit-Status fehlgeschlagen: 1 Build erfordert Autoconf Automake Libtool M4 PCRE PCRE-Devel Pkg-Config

Der./autogen.shversucht, das ` zu lokalisieren/syslol/share/libtool' Libtool-Verzeichnis aus dem angegebenen Pfadverzeichnis.

Erstellen Sie dazu den Verzeichnisbaum `/syslol/share/libtool' wie folgt

root# mkdir -p /syslol/share/libtool

Suchen wir das Libtool-Verzeichnis

root# finden / -Typ d -name libtool

/teilen/libtool

Fügen Sie einen symbolischen Link hinzu, um auf das Verzeichnis „/share/libtool“ zu verweisen.

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

Führen Sie den Build ein zweites Mal aus

Wurzel# ./autogen.sh

main::scan_file() wurde zu früh aufgerufen, um den Prototyp in /usr/bin/aclocal Zeile 622 zu prüfen. libtoolize: $aclocaldir ist kein Verzeichnis: `/syslol/share/aclocal'autoreconf: libtoolize ist mit Exit-Status fehlgeschlagen: 1 Build erfordert Autoconf Automake Libtool M4 PCRE PCRE-Devel Pkg-Config

Dies zeigt, dass wir auch ein lokales Verzeichnis mit diesem Pfad verknüpfen müssen`/syslol/share/aclocal'

Erstellen Sie aclocal im Verzeichnis /syslol/share

root# mkdir -p /syslol/share/aclocal

Suchen wir den Speicherort des Verzeichnisses aclocal:

root# finden / -Typ d -name aclocal

/teilen/aclocal

/usr/lokal/share/aclocal

/usr/share/aclocal

Alsowählen Sie das/share/aclocal/Pfad zur Verlinkung

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

Dritter Probelauf:

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

Wir haben das Pfadproblem behoben, haben aber immer nochAutomake-Problem Müssen aktualisieren Automarkefür einen erfolgreichen Build.

Verteilte Automake-Versionsdateien finden Sie unterVersionenund für den Strom fand ich beiAutomake Version 1.13

Ersetzen wir die Version Automake Version 1.11.2 durch Version 1.13

Sichern Sie die ursprüngliche Binärdatei

Handy$ welches Automarke

/usr/bin/automake

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

Erstellen einer neuen Automake-Konfigurationsdatei mit Inhalt der Version 1.13

root # cat > /usr/bin/automake

Inhalt der Site hier einfügen

^D

Ausführungsberechtigung hinzufügen

root # chmod +x /usr/bin/automake

Vierte Zusammenstellung

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.

Wir haben einen erfolgreichen Build

verwandte Informationen