¿Cómo ejecutar autotools desde un directorio no estándar?

¿Cómo ejecutar autotools desde un directorio no estándar?

Estoy intentando crear una biblioteca en un servidor CI remoto, pero no tengo privilegios de root. La biblioteca requiere la instalación de los paquetes autoconf, automake y libtool. No puedo hacer eso con apt-get install, así que intenté encontrar una solución alternativa: descargar los paquetes .deb y exportar las RUTAS para poder encontrar autoconf, libtoolize, etc.

El problema es que los archivos binarios de estos paquetes tienen algunas rutas a scripts adicionales (instalados como parte de los paquetes) codificados. Ahora me sale este error:

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

¿Hay alguna manera de cambiar esta ruta predeterminada con una variable de entorno (de la misma manera que aquí?https://superuser.com/a/1144948/62460)?

Intenté exportar $pkgltdldirpero no funcionó.

Respuesta1

En el script de shell libtoolize (versiones 2.4.2 y 2.4.6), cuatro variables están codificadas:

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

Poco después aparece la siguiente sección:

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

Por lo tanto, configurar $_lt_pkgdatadir en el directorio libtool funcionará (funciona para mí, pero solo si el directorio aclocal está en un subdirectorio de libltdl llamado m4).

Dado esto, su sed solución parece bastante sensata.

Respuesta2

Me encontré con el mismo problema aquí:

Construyendo lighttpd-1.4.59 como usuario no root

móvil$ ./autogen.sh

main::scan_file() llamado demasiado pronto para verificar el prototipo en /usr/bin/aclocal línea 622. autom4te: no se puede abrir autom4te.cache/requests:Permiso denegadoaclocal: /usr/bin/autom4te falló con el estado de salida: 1 autoreconf: aclocal falló con el estado de salida: 1 la compilación requiere autoconf automake libtool m4 pcre pcre-devel pkg-config

Construyendo lighttpd-1.4.59 como usuario root

raíz# ./autogen.sh

main::scan_file() llamó demasiado pronto para verificar el prototipo en /usr/bin/aclocal línea 622. libtoolize:$pkgltdldir no es un directorio: `/syslol/share/libtool'autoreconf: libtoolize falló con el estado de salida: 1 compilación requiere autoconf automake libtool m4 pcre pcre-devel pkg-config

El./autogen.shintenta localizar el `/syslol/share/libtool' directorio libtool del directorio de ruta proporcionado.

Por lo tanto, cree el árbol de directorios `/syslol/share/libtool' como sigue

raíz# mkdir -p /syslol/share/libtool

Busquemos el directorio libtool

raíz # buscar / -tipo d -nombre libtool

/compartir/libtool

Agregue un enlace simbólico para hacer referencia al directorio `/share/libtool'

raíz# ln -s /share/libtool/* /syslol/share/libtool/

Ejecute la compilación por segunda vez.

raíz# ./autogen.sh

main::scan_file() llamó demasiado pronto para verificar el prototipo en /usr/bin/aclocal línea 622. libtoolize: $aclocaldir no es un directorio: `/syslol/share/aclocal'autoreconf: libtoolize falló con el estado de salida: 1 compilación requiere autoconf automake libtool m4 pcre pcre-devel pkg-config

Esto muestra que también necesitamos vincular un directorio local a esta ruta.`/syslol/share/aclocal'

Cree aclocal dentro del directorio /syslol/share

raíz# mkdir -p /syslol/share/aclocal

Busquemos la ubicación del directorio aclocal:

raíz# buscar / -tipo d -nombre aclocal

/compartir/aclocal

/usr/local/share/aclocal

/usr/share/aclocal

Bienelegir el/share/aclocal/camino para vincular

raíz# ln -s /share/aclocal/* /syslol/share/aclocal/

Tercer simulacro:

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

Hemos solucionado el problema de la ruta., aunque todavía tengoproblema de autofabricación Tengo que actualizar Autohacerpara una construcción exitosa.

Los archivos de versión distribuida de automake se pueden encontrar enVersionesy para la actualidad encontré enAutomake versión 1.13

Reemplacemos la versión automake versión 1.11.2 con la versión 1.13

Copia de seguridad del binario original

móvil$ que marca automática

/usr/bin/automake

raíz # mv /usr/bin/automake /usr/bin/automake1.11.2

Creando un nuevo archivo de configuración de automake con contenido de la versión 1.13

raíz # gato > /usr/bin/automake

pegue el contenido del sitio aquí

^D

Agregar permiso de ejecución

raíz # chmod +x /usr/bin/automake

Cuarta recopilación

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.

Tenemos una construcción exitosa.

información relacionada