Autotoolsの要点は、最終的にはと呼ばれるシェルスクリプトにコンパイルされる難解なM4マクロベースの言語を提供すること./configure
です。このコンパイル済みシェルスクリプトをソースコードと一緒に出荷できます。そのスクリプトは、環境を検出し、プログラムをビルドする準備をするためにすべてを実行する必要があります。Autotoolsは、テストを微調整してそのシェルスクリプトを更新したい人だけが必要とします。
GNUThisとGNUThatをシステムにインストールして動作させる必要がある場合は、Autotoolsのポイントが無効になります。もともとは、さまざまなUnixシステムへのプログラムの移植を簡素化するために発明されましたが、プログラムには何も含まれていませんでした。で生成されたシェルコードで使用される構造でさえ、./configure
壊れた古いシェルのほぼすべてで機能するように、非常に慎重に選択する必要がありました。
あなたが直面している問題は、Autotoolsの目的と最終的な./configure
スクリプトの役割を単に理解していない人々によって発明されたいくつかの壊れたMakefileステップが原因です。
回避策として、Makefileに移動し、いくつかの変更を加えて、これを邪魔にならないようにすることができます。例として、GNU AwkのGitヘッドを構築していて、これと同じ問題が発生しています。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の実際のビルド手順には、自動スタッフは必要ありません。Auto-stuffの一部が変更され、再処理が必要な場合に呼び出される一部のルールにのみ関係します。ただし、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
コマンドが表示されます。これらは正常終了を報告するので、完全に構成されたdarnedビルドを実行するのはそのジャンクを通り抜けるだけです。
私がやったmake gawk
失敗建てられ得るいくつかのサブディレクトリがあるので、このトリックは、それぞれのMakefileに対して繰り返す必要があります。
開発者からのプログラムの手付かずの公式tarballでこの種のことに遭遇した場合は、文句を言います。それはちょうどアンパックすべき、./configure
とmake
あなたはどんなAutomakeのかAutoconfの材料を何もパッチまたはインストールすることなく。
理想的には、Gitヘッドを引っ張ってもそのように動作する必要があります。