手元の OS がなぜか 32bit 版の Windows 7 なので IME パッチのあたった Emacs 24.4 が使えない。
しかたがないので自分でビルドした。参考にしたのはこのページ。
https://github.com/chuntaro/NTEmacs64
事前準備
ビルドのために MSYS2 は入れてある。まずは必要なパッケージのダウンロードとインストール。
$ pacman -Syu
$ pacman -S base-devel
$ pacman -S mingw-w64-i686
Emacs のビルド
よくわからないので CFLAG は -Ofast だけにした。
$ CFLAGS='-Ofast' ./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 -Ofast
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? yes
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
...
$ make bootstrap
...
$ make install
...
すると /usr/local (C:\msys32\usr\local) にインストールされる。
make bootstrap したけど configure のときの CFLAGS は効いてるんだろうか。
配布パッケージの作成
コマンドプロンプトを立ち上げ、環境変数 PATH をクリアしてから Dependency Walker (depends.exe) を実行する。
emacs.exe を Dependency Walker にドラッグアンドドロップして読み込ませる。と、エラーが出て読み込めなかった DLL が表示される。DLL はたいてい /mingw32/bin にあるので、それを emacs.exe と同じフォルダにコピーする。
DLL も依存関係で他の DLL を読もうとすることがあるので、やはり Dependency Walker でチェックして必要な DLL をコピーする。
いくつかの DLL は必要なときにしか参照されない。emacs を起動して変数 dynamic-library-alist の中身を確認する。DLL のリストを見て必要なものをコピーする。これらも同様に Dependency Walker で依存関係を確認する。
...バイナリにビルド時のホスト名とかユーザ名とか PATH とか埋め込まれてるな。公開するのは作りなおしてからにするか。