Autotools'un tüm amacı, nihayetinde adı verilen bir kabuk betiğine derlenen gizli bir M4-makro tabanlı dil sağlamaktır ./configure
. Bu derlenmiş kabuk komut dosyasını kaynak koduyla birlikte gönderebilirsiniz ve bu komut dosyası ortamı algılamak ve programı oluşturmak için hazırlamak için her şeyi yapmalıdır. Otomatik araçlar yalnızca testleri değiştirmek ve bu kabuk betiğini yenilemek isteyen biri tarafından istenmelidir.
GNU This ve GNU That, çalışması için sisteme yüklenmesi gerekiyorsa, Autotools noktasını yener. Başlangıçta, programların çeşitli Unix sistemlerine taşınmasını basitleştirmek için icat edildi, bu sistemlerde herhangi bir şey olduğu düşünülmüyordu. Oluşturulan kabuk kodu tarafından kullanılan yapılar bile, ./configure
hemen hemen her yerde kırık eski kabuklar üzerinde çalışacaklarından emin olmak için çok dikkatli seçilmeliydi.
Karşılaştığınız sorun, Autotools'un ne işe yaradığını ve son ./configure
betiğin rolünü anlamayan insanlar tarafından icat edilen bazı bozuk Makefile adımlarından kaynaklanıyor .
Geçici bir çözüm olarak, Makefile'a gidebilir ve bunu ortadan kaldırmak için bazı değişiklikler yapabilirsiniz. Örnek olarak, GNU Awk'in Git kafasını oluşturuyorum ve aynı problemle karşılaşıyorum. Makefile.in
Ancak bu yamayı şuraya uyguladım ve başarılı bir şekilde 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@
Temel olarak, zararsız true
kabuk komutunun tüm Otomatik doldurma programlarının yerine geçmesi için bazı şeyleri değiştirdim .
Gawk için gerçek derleme adımları Otomatik doldurmaya ihtiyaç duymaz! Yalnızca Otomatik Öğelerin bazı kısımları değiştiğinde ve yeniden işlenmesi gerektiğinde çağrılan bazı kurallarda yer alır. Ancak Makefile, araçlar mevcut değilse başarısız olacak şekilde yapılandırılmıştır.
Yukarıdaki yamadan önce:
$ ./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
Yamadan sonra:
$ ./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.
[...]
Oraya gidiyoruz. Gördüğünüz gibi, CDPATH=
komut satırları Otomatik şeyler'in çağrıldığı, true
komutları gördüğünüz yerdedir . Bunlar, başarılı bir sonlandırma bildirir ve bu nedenle, mükemmel bir şekilde yapılandırılmış, yamulmuş yapıyı yapmak için bu gereksiz yere düşer.
Yaptım make gawk
çünkü başarısız olan bazı alt dizinler var; hile, ilgili Makefiles için tekrarlanmalıdır.
Bu tür bir şeyle geliştiricilerinden programın bozulmamış, resmi bir tarball'uyla karşılaşıyorsanız, şikayet edin. Sadece açmak gerekir, ./configure
ve make
herhangi Automake veya Autoconf malzemeleri şey yama veya yüklemek zorunda kalmadan.
İdeal olarak Git kafalarının çekilmesi de bu şekilde davranmalıdır.