Вся суть 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
команд оболонки замінила всі програми Auto-stuff.
Фактичні кроки збірки для 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
тому, що є кілька підкаталогів, які будуються, які виходять з ладу; фокус потрібно повторити для відповідних Make-файлів.
Якщо ви стикаєтесь із подібними речами із незайманою, офіційною tarball програми від її розробників, то скаржтесь. Його слід просто розпакувати, ./configure
і make
без необхідності виправляти що-небудь або встановлювати будь-які матеріали Automake або Autoconf.
В ідеалі, потягнення голови Git також повинно вести себе так.