Cyqwin を使用して 64 ビット Windows 7 で Emacs をビルドしようとしています。
Emacs 23.3 または 23.4
CYGWIN_NT-6.1-WOW64 1.7.11(0.260/5/3) 2012-02-24 14:05 i686 Cygwin
./configure ログからの情報:
What compiler should emacs be built with?
gcc -g -O2 -Wdeclarati
What operating system and machine description files should Emacs use?
`s/cygwin.h' and `m/intel386.h'
Makefile は問題なく作成できています。ただし、make プロシージャを実行すると、ビルドが数分間続き、特定の時点で 2 分間スタックしてからエラーが発生します。
Makefile:149: recipe for target `autoloads' failed
make[2]: *** [autoloads] Interrupt
Makefile:198: recipe for target `/cygdrive/c/emacs-23.3/src/../lisp/loaddefs.el' failed
make[1]: *** [/cygdrive/c/emacs-23.3/src/../lisp/loaddefs.el] Interrupt
Makefile:339: recipe for target `src' failed
make: *** [src] Interrupt
どちらの場合も (Emacs 23.3 と 23.4)、Makefile:149 は Emacs\lisp フォルダー内のメイクファイルの同じ部分を参照します。
149 autoloads: $(LOADDEFS) doit
150 , chmod +w $(lisp)/ps-print.el $(lisp)/emulation/tpu-edt.el \
151 $(lisp)/emacs-lisp/cl-loaddefs.el $(lisp)/mail/rmail.el \
152 $(lisp)/dired.el $(lisp)/ibuffer.el
153 wd=$(lisp); $(setwins_almost); \
154 echo Directories: $$wins; \
155 $(emacs) -l autoload --eval '(setq generated-autoload-file "$(lisp)/loaddefs.el")' -f batch-update-autoloads $$wins
バージョン 23.3 で。*.el ファイルの autoload を生成している間、建物が動かなくなります:
Generating autoloads for progmodes/cc-mode.el...
Generating autoloads for progmodes/cc-mode.el...done
Generating autoloads for progmodes/cc-styles.el...
Generating autoloads for progmodes/cc-styles.el...done
Generating autoloads for progmodes/cc-vars.el...
Generating autoloads for progmodes/cc-vars.el...done
Generating autoloads for international/ccl.el...
Makefile:149: recipe for target `autoloads' failed
make[2]: *** [autoloads] Interrupt
バージョン 23.4 では、ロード定義の保存中に建物がスタックします。
make[2]: Entering directory `/cygdrive/c/emacs-23.4/lisp'
chmod +w /cygdrive/c/emacs-23.4/lisp/ps-print.el /cygdrive/c/emacs-23.4/lisp/emulation/tpu-edt.el \
/cygdrive/c/emacs-23.4/lisp/emacs-lisp/cl-loaddefs.el /cygdrive/c/emacs-23.4/lisp/mail/rmail.el \
/cygdrive/c/emacs-23.4/lisp/dired.el /cygdrive/c/emacs-23.4/lisp/ibuffer.el
wd=/cygdrive/c/emacs-23.4/lisp; subdirs=`(cd $wd; find . -type d -print)`; for file in $subdirs; do case $file in */Old | */RCS | */CVS | */CVS/* | */.* | */.*/* | */=* | */obsolete | */term ) ;; *) wins="$wins $wd/$file" ;; esac; done ; \
echo Directories: $wins; \
EMACSLOADPATH=/cygdrive/c/emacs-23.4/lisp LC_ALL=C ../src/bootstrap-emacs.exe -batch --no-site-file --multibyte -l autoload --eval '(setq generated-autoload-file "/cygdrive/c/emacs-23.4/lisp/loaddefs.el")' -f batch-update-autoloads $wins
Directories: /cygdrive/c/emacs-23.4/lisp/. /cygdrive/c/emacs-23.4/lisp/./calc /cygdrive/c/emacs-23.4/lisp/./calendar /cygdrive/c/emacs-23.4/lisp/./cedet /cygdrive/c/emacs-23.4/lisp/./cedet/ede /cygdrive/c/emacs-23.4/lisp/./cedet/semantic /cygdrive/c/emacs-23.4/lisp/./cedet/semantic/analyze /cygdrive/c/emacs-23.4/lisp/./cedet/semantic/bovine /cygdrive/c/emacs-23.4/lisp/./cedet/semantic/decorate/cygdrive/c/emacs-23.4/lisp/./cedet/semantic/symref /cygdrive/c/emacs-23.4/lisp/./cedet/semantic/wisent /cygdrive/c/emacs-23.4/lisp/./cedet/srecode /cygdrive/c/emacs-23.4/lisp/./emacs-lisp /cygdrive/c/emacs-23.4/lisp/./emulation /cygdrive/c/emacs-23.4/lisp/./erc /cygdrive/c/emacs-23.4/lisp/./eshell /cygdrive/c/emacs-23.4/lisp/./gnus /cygdrive/c/emacs-23.4/lisp/./international /cygdrive/c/emacs-23.4/lisp/./language /cygdrive/c/emacs-23.4/lisp/./mail /cygdrive/c/emacs-23.4/lisp/./mh-e /cygdrive/c/emacs-23.4/lisp/./net /cygdrive/c/emacs-23.4/lisp/./nxml /cygdrive/c/emacs-23.4/lisp/./org /cygdrive/c/emacs-23.4/lisp/./play /cygdrive/c/emacs-23.4/lisp/./progmodes /cygdrive/c/emacs-23.4/lisp/./textmodes /cygdrive/c/emacs-23.4/lisp/./url
Saving file /cygdrive/c/emacs-23.4/lisp/loaddefs.el...
Makefile:149: recipe for target `autoloads' failed
make[2]: *** [autoloads] Interrupt
どうすればこのバグを修正できますか? 間違った C コンパイラ ? メイクファイルを変更しますか? いくつかのパラメーターで「make」を使用しますか?
助けや参考にしていただきありがとうございます。
** * ** * ** * *** PART2 * ** * ** * ** * **
わかりましたので、ここにあなたのアドバイスに従って続きがあります:
1#
make autoloads
このサブパーツはサブ makefile にあるため、そのままでは実行できないため、エラーが発生します。
$ make autoloads
chmod +w /cygdrive/c/emacs-23.4/lisp/ps-print.el /cygdrive/c/emacs-23.4/lisp/emulation/tpu-edt.el \
/cygdrive/c/emacs-23.4/lisp/emacs-lisp/cl-loaddefs.el /cygdrive/c/emacs-23.4/lisps/mail/rmail.el \
/cygdrive/c/emacs-23.4/lisp/dired.el /cygdrive/c/emacs-23.4/lisp/ibuffer.el
wd=/cygdrive/c/emacs-23.4/lisp; subdirs=`(cd $wd; find . -type d -print)`; for file in $subdirs; do case $file in */Old | */RCS | */CVS | */CVS/* | */.* | */.*/* | */=* | */obsolete | */term ) ;; *) wins="$wins $wd/$file" ;; esac; done; \
echo Directories: $wins; \
EMACSLOADPATH=/cygdrive/c/emacs-23.4/lisp LC_ALL=C ../src/emacs -batch --no-site-file --multibyte -l autoload --eval '(setq generated-autoload-file "/cygdrive/c/emacs-23.4/lisp/loaddefs.el")' -f batch-update-autoloads $wins
Directories: /cygdrive/c/emacs-23.4/lisp/. /cygdrive/c/emacs-23.4/lisp/./calc /cygdrive/c/emacs-23.4/lisp/./calendar /cygdrive/c/emacs-23.4/lisp/./cedet /cygdrive/c/emacs-23.4/lisp/./cedet/ede /cygdrive/c/emacs-23.4/lisp/./cedet/semantic /cygdrive/c/emacs-23.4/lisp/./cedet/semantic/analyze /cygdrive/c/emacs-23.4/lisp/./cedet/semantic/bovine /cygdrive/c/emacs-23.4/lisp/./cedet/semantic/decorate /cygdrive/c/emacs-23.4/lisp/./cedet/semantic/symref /cygdrive/c/emacs-23.4/lisp/./cedet/semantic/wisent /cygdrive/c/emacs-23.4/lisp/./cedet/srecode /cygdrive/c/emacs-23.4/lisp/./emacs-lisp /cygdrive/c/emacs-23.4/lisp/./emulation /cygdrive/c/emacs-23.4/lisp/./erc /cygdrive/c/emacs-23.4/lisp/./eshell /cygdrive/c/emacs-23.4/lisp/./gnus /cygdrive/c/emacs-23.4/lisp/./international /cygdrive/c/emacs-23.4/lisp/./language /cygdrive/c/emacs-23.4/lisp/./mail /cygdrive/c/emacs-23.4/lisp/./mh-e /cygdrive/c/emacs-23.4/lisp/./net /cygdrive/c/emacs-23.4/lisp/./nxml /cygdrive/c/emacs-23.4/lisp/./org /cygdrive/c/emacs-23.4/lisp/./play /cygdrive/c/emacs-23.4/lisp/./progmodes /cygdrive/c/emacs-23.4/lisp/./textmodes /cygdrive/c/emacs-23.4/lisp/./url
/bin/sh: line 2: ../src/emacs: No such file or directory
Makefile:149: recipe for target `autoloads' failed
make: *** [autoloads] Error 127
私が何か間違ったことをしている場合は、私を修正してください。
2# 事実上削除$(LOADDEFS) doit
しても結果は変わらない
3# 最初の部分だけ実行するには
autoloads:
chmod +w $(lisp)/ps-print.el $(lisp)/emulation/tpu-edt.el \
$(lisp)/emacs-lisp/cl-loaddefs.el $(lisp)/mail/rmail.el \
$(lisp)/dired.el $(lisp)/ibuffer.el
自動ロード内でエラーなしで解決し、
ただし、20秒後にしばらくフリーズし、別のエラーが発生します
(この問題の説明は次のとおりです)
4# 2 番目の部分のみを実行するには:
autoloads:
wd=$(lisp); $(setwins_almost); \
echo Directories: $$wins; \
$(emacs) -l autoload --eval '(setq generated-autoload-file "$(lisp)/loaddefs.el")' -f batch-update-autoloads $$wins
元のエラーでクラッシュしました
5# 3# のようにオートロードを実行するには
wd=$(lisp);
エラーなしで自動ロードしますが、後で3#と同じエラーが発生します
6#wd=$(lisp);$(setwins_almost);
エラーなしで autoloads を使用して autoloads を実行します。後で 3# と同じエラーが発生します
7#行も追加
echo Directories: $$wins;
エラーなしで自動ロードしますが、後で3#と同じエラーが発生します
8# 行も追加
$(emacs) -l autoload --eval '(setq generated-autoload-file "$(lisp)/loaddefs.el")' -f batch-update-autoloads $$wins
もちろん、元のエラー
2 番目のエラーの説明 (パート 3#):
make[2]: Entering directory `/cygdrive/c/emacs-23.4/lisp'
Compiling /cygdrive/c/emacs-23.4/src/../lisp/abbrev.el
>>Error occurred processing /cygdrive/c/emacs-23.4/src/../lisp/abbrev.el: Symbol's value as variabl e is void ((warning-series))
Makefile:1478: recipe for target `compile-onefile' failed
make[2]: *** [compile-onefile] Error 1
make[2]: Leaving directory `/cygdrive/c/emacs-23.4/lisp'
Makefile:195: recipe for target `/cygdrive/c/emacs-23.4/src/../lisp/abbrev.elc' failed
make[1]: *** [/cygdrive/c/emacs-23.4/src/../lisp/abbrev.elc] Error 2
make[1]: Leaving directory `/cygdrive/c/emacs-23.4/src'
Makefile:339: recipe for target `src' failed
make: *** [src] Error 2
その前に、多くの *.el ファイルがコンパイルされます
Makefile の一部lisp/
# The src/Makefile.in has its own set of dependencies and when they decide
# that one Lisp file needs to be re-compiled, we had better recompile it as
# well, otherwise every subsequent make will again call us, until we finally
# end up deciding that yes, the file deserves recompilation.
# One option is to try and reproduce exactly the same dependencies here as
# we have in src/Makefile.in, but it turns out to be painful
# (e.g. src/Makefile.in may have a dependency for ../lisp/foo.elc where we
# only know of $(lisp)/foo.elc). So instead we provide a direct way for
# src/Makefile.in to rebuild a particular Lisp file, no questions asked.
# Use byte-compile-refresh-preloaded to try and work around some of
# the most common problems of not bootstrapping from a clean state.
1477 compile-onefile:
1478 @echo Compiling $(THEFILE)
1479 @# Use byte-compile-refresh-preloaded to try and work around some of
1480 @# the most common bootstrapping problems.
1481 @$(emacs) -l bytecomp -f byte-compile-refresh-preloaded $(BYTE_COMPILE_EXTRA_FLAGS) -f batch-byte-compile $(THEFILE)
Makefile には ELC ファイルのリストがあります。
## Explicitly list the .elc files, for the sake of parallel builds.
## http://lists.gnu.org/archive/html/bug-gnu-emacs/2008-05/msg00016.html
## This can probably be done more elegantly, but needs to be portable.
ELCFILES = \
$(lisp)/abbrev.elc \
$(lisp)/abbrevlist.elc \
$(lisp)/add-log.elc \
$(lisp)/align.elc \
$(lisp)/allout.elc \
$(lisp)/ansi-color.elc \
$(lisp)/apropos.elc \
$(lisp)/arc-mode.elc \
...
$(lisp)/info.elc \
$(lisp)/informat.elc \
$(lisp)/international/ccl.elc \
$(lisp)/international/characters.elc \
$(lisp)/international/fontset.elc \
$(lisp)/international/isearch-x.elc \
Makefile は何らかの理由で *.el ファイルをおそらく *.elc ファイルから再作成しますが、すべての *.el ファイルは既にそこにあります。OK今、1つではなく2つのエラーがあります:)(もちろん接続されていない場合)
ありがとうございました。