Вся суть Autotools заключается в том, чтобы предоставить загадочный язык на основе макросов M4, который в конечном итоге компилируется в сценарий оболочки, называемый ./configure
. Вы можете отправить этот скомпилированный сценарий оболочки с исходным кодом, и этот сценарий должен делать все для обнаружения среды и подготовки программы к сборке. Автоинструменты должны потребоваться только тем, кто хочет настроить тесты и обновить этот сценарий оболочки.
Это побеждает смысл Autotools, если в системе должны быть установлены GNU This и GNU That, чтобы они работали. Первоначально он был изобретен для упрощения переноса программ на различные системы Unix, на которые нельзя было рассчитывать, что в них что-то будет. Даже конструкции, используемые сгенерированным кодом оболочки, ./configure
должны были быть очень тщательно отобраны, чтобы гарантировать, что они будут работать на каждой сломанной старой оболочке практически везде.
Проблема, с которой вы столкнулись, связана с некоторыми неработающими шагами Makefile, изобретенными людьми, которые просто не понимают, для чего нужны Autotools и роль финального ./configure
скрипта.
В качестве обходного пути вы можете зайти в Makefile и внести некоторые изменения, чтобы избавиться от этого. В качестве примера я создаю Git-заголовок GNU Awk и сталкиваюсь с той же проблемой. Однако я применил этот патч Makefile.in
и успешно могу 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@
По сути, я изменил все так, чтобы безобидная true
команда оболочки заменяла все программы автозаполнения.
Фактические шаги сборки для Gawk не нуждаются в автозаполнении! Он задействован только в некоторых правилах, которые вызываются, если части автозаполнения изменились и требуют повторной обработки. Однако Makefile структурирован таким образом, что при отсутствии инструментов он не работает.
Перед патчем выше:
$ ./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
После патча:
$ ./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.
[...]
Вот и все. Как видите, CDPATH=
командные строки находятся там, где вызывается Автозаполнение, где вы видите true
команды. Они сообщают об успешном завершении, поэтому он просто проваливается через этот мусор, чтобы выполнить проклятую сборку, которая идеально настроена.
Я сделал это, make gawk
потому что есть некоторые подкаталоги, которые создаются, но не работают; этот трюк нужно повторить для соответствующих файлов Makefile.
Если вы столкнетесь с подобными вещами с чистым официальным архивом программы от его разработчиков, то пожалейте. Его нужно просто распаковать, ./configure
и make
вам не нужно ничего исправлять или устанавливать какие-либо материалы Automake или Autoconf.
В идеале, их Git-голова тоже должна вести себя таким же образом.