El objetivo de Autotools es proporcionar un lenguaje arcano basado en macros M4 que finalmente se compila en un script de shell llamado ./configure
. Puede enviar este script de shell compilado con el código fuente y ese script debería hacer todo lo posible para detectar el entorno y preparar el programa para la construcción. Autotools solo debería ser requerido por alguien que quiera modificar las pruebas y actualizar ese script de shell.
Derrota el punto de Autotools si GNU This y GNU That deben estar instalados en el sistema para que funcione. Originalmente, se inventó para simplificar la migración de programas a varios sistemas Unix, de los que no se podía contar con nada. Incluso las construcciones utilizadas por el código de shell generado ./configure
tuvieron que seleccionarse con mucho cuidado para asegurarse de que funcionarían en cada shell antiguo roto en casi todas partes.
El problema con el que se está encontrando se debe a algunos pasos de Makefile rotos inventados por personas que simplemente no entienden para qué es Autotools y el papel del ./configure
script final .
Como solución alternativa, puede ir al Makefile y realizar algunos cambios para solucionarlo. Como ejemplo, estoy construyendo el jefe de Git de GNU Awk y me encuentro con el mismo problema. Makefile.in
Sin embargo, apliqué este parche y puedo con éxito make gawk
:
diff --git a / Makefile.in b / Makefile.in
index 5585046..b8b8588 100644
--- a/Makefile.in
+++ b/Makefile.in
@@ -312,12 +312,12 @@ distcleancheck_listfiles = find . -type f -print
# Directory for gawk's data files. Automake supplies datadir.
pkgdatadir = $(datadir)/awk
-ACLOCAL = @ACLOCAL@
+ACLOCAL = true
AMTAR = @AMTAR@
AM_DEFAULT_VERBOSITY = @AM_DEFAULT_VERBOSITY@
-AUTOCONF = @AUTOCONF@
-AUTOHEADER = @AUTOHEADER@
-AUTOMAKE = @AUTOMAKE@
+AUTOCONF = true
+AUTOHEADER = true
+AUTOMAKE = true
AWK = @AWK@
CC = @CC@
CCDEPMODE = @CCDEPMODE@
Básicamente, cambié las cosas para que el true
comando de shell inofensivo sustituya a todos los programas de Auto-stuff.
¡Los pasos de compilación reales para Gawk no necesitan las cosas automáticas! Solo está involucrado en algunas reglas que se invocan si algunas partes de Auto-stuff han cambiado y necesitan ser reprocesadas. Sin embargo, el Makefile está estructurado de tal manera que falla si las herramientas no están presentes.
Antes del parche anterior:
$ ./configure
[...]
$ make gawk
CDPATH="${ZSH_VERSION+.}:" && cd . && /bin/bash /home/kaz/gawk/missing aclocal-1.15 -I m4
/home/kaz/gawk/missing: line 81: aclocal-1.15: command not found
WARNING: 'aclocal-1.15' is missing on your system.
You should only need it if you modified 'acinclude.m4' or
'configure.ac' or m4 files included by 'configure.ac'.
The 'aclocal' program is part of the GNU Automake package:
<http:
It also requires GNU Autoconf, GNU m4 and Perl in order to run:
<http:
<http:
<http:
make: *** [aclocal.m4] Error 127
Después del parche:
$ ./configure
[...]
$ make gawk
CDPATH="${ZSH_VERSION+.}:" && cd . && true -I m4
CDPATH="${ZSH_VERSION+.}:" && cd . && true
gcc -std=gnu99 -DDEFPATH='".:/usr/local/share/awk"' -DDEFLIBPATH="\"/usr/local/lib/gawk\"" -DSHLIBEXT="\"so"\" -DHAVE_CONFIG_H -DGAWK -DLOCALEDIR='"/usr/local/share/locale"' -I. -g -O2 -DNDEBUG -MT array.o -MD -MP -MF .deps/array.Tpo -c -o array.o array.c
[...]
gcc -std=gnu99 -g -O2 -DNDEBUG -Wl,-export-dynamic -o gawk array.o awkgram.o builtin.o cint_array.o command.o debug.o dfa.o eval.o ext.o field.o floatcomp.o gawkapi.o gawkmisc.o getopt.o getopt1.o int_array.o io.o main.o mpfr.o msg.o node.o profile.o random.o re.o regex.o replace.o str_array.o symbol.o version.o -ldl -lm
$ ./gawk --version
GNU Awk 4.1.60, API: 1.2
Copyright (C) 1989, 1991-2015 Free Software Foundation.
[...]
Aquí vamos. Como puede ver, las CDPATH=
líneas de comando allí son donde se invoca el Auto-stuff, donde se ven los true
comandos. Estos informan una terminación exitosa, por lo que simplemente se cae por esa basura para hacer la maldita construcción, que está perfectamente configurada.
Lo hice make gawk
porque hay algunos subdirectorios que se crean y fallan; el truco debe repetirse para sus respectivos Makefiles.
Si te encuentras con este tipo de cosas con un tarball oficial y prístino del programa de sus desarrolladores, entonces quéjate. Simplemente debería descomprimirse ./configure
y make
sin tener que parchear nada o instalar ningún material de Automake o Autoconf.
Idealmente, un tirón de su cabeza Git también debería comportarse de esa manera.