Cygwin上でEmacs 25.1をビルドする
動機
- CygwinにあるEmacsパッケージではWindows IMEが事実上使えないため, IMEパッチを当てたバイナリが欲しい.
- Cygwinを使用しているので, Cygwinに依存してしまっても問題なく, またMSYS2等を新たにインストールしたくない.
- どうせなら最新版(2016/10/9時点)が使ってみたかった.
前提
ソースコード取得
emacs 25.1のソースファイルをダウンロードする.
tarball
gitで取得する
-bオプションでemacs-25.1のブランチを指定する. 開発が進んでるので, HEADにはパッチが適用できない可能性がある.
git clone -b emacs-25.1 git://git.savannah.gnu.org/emacs.git
-
プロキシ等の関係でgitプロトコルが使えない場合, githubにミラーサイトがあるのでhttpsで取得することができる.
git clone -b emacs-25.1 https://github.com/emacs-mirror/emacs.git
IMEパッチを適用する
IMEパッチはrzl24ozi氏が公開しているものを使用する.
使用するパッチ
ここでは以下のパッチを使用する. 必須は1のみであり, 残りは適用しなくてもよい.
ダウンロードしたIMEパッチの適用
$ cd emacs/ $ patch -b -p0 < emacs-25.1-w32-ime.diff $ patch -b -p0 < emacs-25.1-disable-w32-ime.diff $ patch -b -p0 < emacs-25.1-cygwin-rsvg.diff
ビルドする
about patches and how to build emacs on Windows. (Japanese) · GitHub
README.txtにてCygwin版の手順をまとめてくださっているので, 順に実行する. Cygwinの各種パッケージ(autoconf, automake等)が必要になるため, setup.exe等でインストールしておく.
もしパッケージが不足していたらconfigureを実行したときに分かる. エラーメッセージを参照して, 不足したパッケージをインストールすればよい. 逆に不要な機能があれば configure スクリプトへ --without オプションを渡すことでビルドされないようにすることもできる.
autogen.sh
emacs-25.1-w32-ime.diff を適用すると configure.ac に変更が加わるため autogen.sh を実行する.
$ ./autogen.sh
configure
渡しているオプションについては, 以下の通り.
- --prefixでインストールするディレクトリを指定する. CygwinのパッケージのEmacsは/usrにインストールされるため, ここでは/usr/localにインストールしている.
- CFLAGSに-march=nativeを指定し, ビルドで使ってるCPUに合わせた最適化を行わせる. これを行わないならCFLAGSの指定自体が不要.
$ PKG_CONFIG_PATH=/usr/lib/pkgconfig CFLAGS='-g3 -O2 -gdwarf-2 -march=native' ./configure --prefix=/usr/local --with-w32 --without-dbus --without-compress-install --with-modules
正しくIMEパッチが適用されれば, 下記のように出力が追加される.
~省略~ Does Emacs support W32-IME? yes Does Emacs support RECONVERSION? yes Does Emacs support DOCUMENTFEED? yes ~省略~
ビルドおよびインストール
ここでは時間短縮のために-jオプションで8ジョブを同時実行するように指定している. ジョブ数は使用している環境のCPUに合わせて, コア数の2倍程度を指定すると良いとされている.
$ make -j 8 $ make install
設定
~/.emacs.d/init.elに以下のように記載する. init.elをCygwin以外でも使用しているため, system-typeの比較を行っているが必要なければ削除する.
(when (or (eq system-type 'cygwin) (eq system-type 'windows-nt)) (setq default-input-method "W32-IME") (w32-ime-initialize) (setq-default w32-ime-mode-line-state-indicator "[--]") (setq w32-ime-mode-line-state-indicator-list '("[--]" "[あ]" "[--]")) )
参考
GitHub - chuntaro/NTEmacs64: Windows 版 Emacs (通称 NTEmacs) の 64bit 版