(2019-12-08追記: 新しいものを書きました Windows用のEmacs26.3をMSYS2でビルドする方法(IMEパッチ、ImageMagick-6))
新しいPCにしてからEmacsの適当なWindows用バイナリを試してみたのですが、gnutlsが使えなかったりIMEまわりが不安定だったりどれが最新だか分からなかったり色々したので諦めて自分でビルドすることにしました。SSDになったことですし!
ビルドの方法については nt/INSTALL や nt/INSTALL.W64 が一次情報となり、詳しいと思います。私はW64の方を参考にしました。
日本語では次のページが参考になりました。
- emacs-25.0.92に対するIMEパッチを公開されている rzl24ozi’s gists の about patches and how to build emacs on Windows. (Japanese)
- NTEmacs / Emacs for Windows の NTEmacsビルド(24.5 その3)
- chuntaro/NTEmacs64: Windows 版 Emacs (通称 NTEmacs) の 64bit 版
特にIMEパッチを提供されている rzl24ozi’s gists のREADME.txtが最も参考になりました。
以下、私がビルドした時の手順です。
ソースコードは emacs.git - Emacs source repository (GitHubならemacs/nt at master - emacs-mirror/emacs)、リリース版なら http://ftp.gnu.org/gnu/emacs/ からダウンロード可能です。 (Gitで落とすときは改行コードを変換しないように注意(autocrlf=false))
Gitでは全て落とすとリポジトリがかなりの容量になるそうなので、 --depth 1
を指定してみました。それでも時間はちょっとかかりますね。
git clone --depth 1 git://git.savannah.gnu.org/emacs.git --config core.autocrlf=false
emacs-25ブランチなら次のようにします(masterは少し不具合があるのでこちらの方が良いかも)。
git clone --depth=1 -b emacs-25 git://git.savannah.gnu.org/emacs.git --config core.autocrlf=false
ビルドの前にMSYS2のインストールとパッケージの設定が必要です。 MSYS2 に書かれていることに加えて nt/INSTALL.W64 に書かれているパッケージをインストールしました。
- MSYS2ダウンロード: http://sourceforge.net/projects/msys2/files/latest/download?source=files
- MSYS2インストール: msys2-x86_64-20160205.exeを実行
- MSYS2のbashから pacman -Sy
-
パッケージのインストール
pacman -S base-devel \ mingw-w64-x86_64-toolchain \ mingw-w64-x86_64-xpm-nox \ mingw-w64-x86_64-libtiff \ mingw-w64-x86_64-giflib \ mingw-w64-x86_64-libpng \ mingw-w64-x86_64-libjpeg-turbo \ mingw-w64-x86_64-librsvg \ mingw-w64-x86_64-libxml2 \ mingw-w64-x86_64-gnutls
(1回でうまく入らないことあり)
私の場合、ここでautocrlf=trueにしていたことに気がついたので、その解消をしました。 cloneしたディレクトリで git config core.autocrlf false
して、.git以外全て消して、 git reset --hard
しました。
そしてビルド。
- (重要)
mingw64_shell.bat
(スタートメニューからMinGW-w64 Win64 Shell)を実行してMinGW64環境へ切り替える(これをしないとmake段階でエラーになります) -
後はだいたい以下のような感じ
./autogen.sh ./autogen.sh git #こうしろと言われたので ./autogen.sh #こうしろと言われたので PKG_CONFIG_PATH=/mingw64/lib/pkgconfig ./configure --prefix=/c/<checkout-dir> --without-imagemagick make -j4 #4コアで make install prefix=/c/<install-dir> <install-dir>/bin/runemacs #起動
最適化するなら chuntaro/NTEmacs64: Windows 版 Emacs (通称 NTEmacs) の 64bit 版 にあるようにCFLAGSを指定して以下のようにすれば良い。
PKG_CONFIG_PATH=/mingw64/lib/pkgconfig CFLAGS='-Ofast -march=x86-64 -mtune=corei7' ./configure --prefix=/c/<checkout-dir>/ --without-imagemagick
- (おっと、パッチを当ててなかった)rzl24ozi’s gists から emacs-25.0.92-x64.diff をダウンロード
- ソースコードのあるディレクトリトップで
patch -b -p0 < emacs-25.0.92-x64.diff
(patchはCygwinでテキストマウントを使っていると色々ハマるので注意) -
いくつかのHunkが失敗したり曖昧だったりするので一つ一つ確認して修正
現時点でリジェクトされたのは次の2箇所のみでした。前後の内容が変わってしまって失敗しただけなので、手作業で修正すれば難しくありません。 (ちなみにemacs-25ブランチなら特にリジェクト無くパッチが当たる模様。masterは不具合もあるのでそっちの方が良いかも)
--- ./src/Makefile.in.orig 2016-03-02 19:21:43.000000000 +0900 +++ ./src/Makefile.in 2016-03-26 11:17:17.908757300 +0900 @@ -396,7 +396,7 @@ region-cache.o sound.o atimer.o \ doprnt.o intervals.o textprop.o composite.o xml.o $(NOTIFY_OBJ) \ $(XWIDGETS_OBJ) \ - profiler.o decompress.o \ + profiler.o decompress.o cmigemo.o \ $(MSDOS_OBJ) $(MSDOS_X_OBJ) $(NS_OBJ) $(CYGWIN_OBJ) $(FONT_OBJ) \ $(W32_OBJ) $(WINDOW_SYSTEM_OBJ) $(XGSELOBJ) obj = $(base_obj) $(NS_OBJC_OBJ)
--- ./src/w32fns.c.orig 2016-03-02 19:21:43.000000000 +0900 +++ ./src/w32fns.c 2016-03-26 11:17:17.988761000 +0900 @@ -52,6 +52,11 @@ #include "w32.h" #endif +#ifdef USE_W32_IME +#include "fontset.h" +#include "w32font.h" +#endif + #include <commctrl.h> #include <commdlg.h> #include <shellapi.h>
-
再度makeしてmake installでok
作成するexeのサイズを小さくするなら
make install-strip
とする。make install-strip prefix=/c/<install-dir>/
うん、ちゃんとIME使える!