NTEmacsビルド(24.5 その2)
Table of Contents
本ビルドの概要
- rzl24ozi氏のIMEパッチ対応版
- 環境変数 PKG_CONFIG_PATH の指定
- -shared-libgcc により終了時のクラッシュ不具合対策
MSYS2にてビルド(2015.4.18)
環境構築
の通りにインストール
ソースの入手
GNU ミラーサイト 例えば、ftp://ftp.ring.gr.jp/pub/GNU/emacs/ からダウンロードする。
(今回、上記にはまだ置かれていなかったので http://ftp.gnu.org/gnu/emacs/ からダウンロードした)
- emacs-24.5.tar.gz を任意のディレクトリに展開する
<a name="imepatch" id="imepatch">
IMEパッチ
rzl24ozi 氏のIMEパッチ対応
- https://gist.github.com/rzl24ozi
- emacs-24.5-w32-ime.diff をダウンロード
- 上記のパッチを適用する場合は、ソースツリーのトップディレクトリにファイルを置き、下記を実行する
$ patch -b -p0 < emacs-24.5-w32-ime.diff $ autoconf
patching file ./configure.ac patching file ./lisp/international/w32-ime.el patching file ./lisp/language/japan-util.el patching file ./lisp/loadup.el patching file ./lisp/startup.el patching file ./src/frame.c patching file ./src/frame.h patching file ./src/keyboard.c patching file ./src/lisp.mk patching file ./src/w32fns.c patching file ./src/w32font.c patching file ./src/w32font.h patching file ./src/w32term.c patching file ./src/w32term.h patching file ./src/window.c patching file ./src/xdisp.c
<a name="configure" id="configure">
環境変数の指定
$ export MSYSTEM=MINGW32 $ export PKG_CONFIG_PATH=/mingw32/lib/pkgconfig
configure
何も指定しない場合は下記でよいのだが、
$ ./configure
/etc/PROBLEMS に、Emacs終了時にクラッシュする不具合についての記載がある。
\** Emacs crashes when exiting the Emacs session This was reported to happen when some optional DLLs, such as those used for displaying images or the GnuTLS library or zlib compression library, which are loaded on-demand, have a runtime dependency on the libgcc DLL, libgcc_s_dw2-1.dll. The reason seems to be a bug in libgcc which rears its ugly head whenever the libgcc DLL is loaded after Emacs has started. One solution for this problem is to find an alternative build of the same optional library that does not depend on the libgcc DLL. Another possibility is to rebuild Emacs with the -shared-libgcc switch, which will force Emacs to load libgcc_s_dw2-1.dll on startup, ahead of any optional DLLs loaded on-demand later in the session.
よって、これを回避する為、下記のオプションをつける。
-shared-libgcc 以外のオプションは、オプション無しで configure を実行した際に Makefile に記述されるオプションを元にしている。
$ ./configure CFLAGS="-O2 -shared-libgcc" --without-dbus
configure実行結果
Configured for `i686-pc-mingw32'. Where should the build process find the source code? . What compiler should emacs be built with? gcc -std=gnu99 -O2 -shared-libgcc Should Emacs use the GNU version of malloc? yes Should Emacs use a relocating allocator for buffers? yes Should Emacs use mmap(2) for buffer allocation? no What window system should Emacs use? w32 What toolkit should Emacs use? none Where do we find X Windows header files? NONE Where do we find X Windows libraries? NONE Does Emacs use -lXaw3d? no Does Emacs use -lXpm? yes Does Emacs use -ljpeg? yes Does Emacs use -ltiff? yes Does Emacs use a gif library? yes Does Emacs use a png library? yes Does Emacs use -lrsvg-2? yes Does Emacs use imagemagick? no Does Emacs support sound? yes Does Emacs use -lgpm? no Does Emacs use -ldbus? no Does Emacs use -lgconf? no Does Emacs use GSettings? no Does Emacs use a file notification library? yes (w32) Does Emacs use access control lists? yes Does Emacs use -lselinux? no Does Emacs use -lgnutls? yes Does Emacs use -lxml2? yes Does Emacs use -lfreetype? no Does Emacs use -lm17n-flt? no Does Emacs use -lotf? no Does Emacs use -lxft? no Does Emacs directly use zlib? yes Does Emacs use toolkit scroll bars? yes Does Emacs support W32-IME? yes Does Emacs support RECONVERSION? yes Does Emacs support DOCUMENTFEED? yes checking that generated files are newer than configure... done configure: creating ./config.status config.status: creating Makefile config.status: creating lib/Makefile config.status: creating lib-src/Makefile config.status: creating oldXMenu/Makefile config.status: creating doc/emacs/Makefile config.status: creating doc/misc/Makefile config.status: creating doc/lispintro/Makefile config.status: creating doc/lispref/Makefile config.status: creating src/Makefile config.status: creating lwlib/Makefile config.status: creating lisp/Makefile config.status: creating leim/Makefile config.status: creating nextstep/Makefile config.status: creating nt/Makefile config.status: creating admin/unidata/Makefile config.status: creating admin/grammars/Makefile config.status: creating src/config.h config.status: executing depfiles commands config.status: executing src/epaths.h commands config.status: executing src/.gdbinit commands
Makefileより抜粋
cache_file = /dev/null CONFIGURE_FLAGS = --cache-file=$(cache_file) CC=gcc -std=gnu99 CFLAGS=-O2 -shared-libgcc LDFLAGS= CPPFLAGS=-mtune=pentium4 -DUSE_CRT_DLL=1 -I ${abs_top_srcdir}/nt/inc EXEEXT=.exe
make
MSYS2のシェルで実行する。
$ make bootstrap
make install
$ make install
DLLのコピー
MSYS2がインストールされていないPCでも動作可能にする為、依存するDLLを emacsのexeファイルがあるフォルダにコピーする。
下記の16ファイルを emacs.exe があるディレクトリにコピーする。
- C:\msys32\mingw32\bin から
- libgcc_s_dw2-1.dll -shared-libgcc を指定した場合には不要・・・かと思ったが必要なようだ。無いとemacs自体が起動できない。
- libgdk_pixbuf-2.0-0.dll
- libgif-7.dll
- libglib-2.0-0.dll
- libgnutls-28.dll
- libgobject-2.0-0.dll
- libiconv-2.dll
- libjpeg-8.dll
- librsvg-2-2.dll
- libpng16-16.dll
- libtiff-5.dll
- libwinpthread-1.dll
- libxml2-2.dll
- libXpm-noX4.dll
- zlib1.dll
バイナリ
こちら から提供中
その他
基本的に、ビルド方法に関しては NTEmacsビルド(24.4) を踏襲。