NTEmacsビルド(24.4)
Table of Contents
24.4以降のWindow用ビルドについて
これまでEmacsのWindows用ビルドはソースツリーの ntディレクトリ以下の、configure.bat を実行してコンフィギュレーションを行っていた。
24.4ではこのバッチファイルを実行すると、下記のメッセージが表示される。
\****************************************************************
\*** THIS METHOD OF BUILDING EMACS IS NO LONGER SUPPORTED. **
\*** INSTEAD, FOLLOW THE INSTRUCTIONS FROM INSTALL. **
\****************************************************************
Continue running this script at your own risks ? (Y/N)y
これを継続しても、結局ビルドNGになる。
なので、上記メッセージに従い、nt/INSTALL を読んでみる。 ちなみに、従来(23.3以前)の INSTALL は INSTALL.OLD にrenameされている。
新しいINSTALLによると、 今後は、MSYS/MinGWでのビルドをサポートしていくという方針のようだ。 つまり、nt以下でなく、ソースのトップディレクトリから、configure を実行するということであり、ビルド方法が他のプラットフォームと共通化されるということである。 これ自体は好ましいことである。
MSYS2にてビルド
環境構築
の通りにインストール
ソースの入手
GNU ミラーサイト 例えば、ftp://ftp.ring.gr.jp/pub/GNU/emacs/ からダウンロードする
- emacs-24.4.tar.gz を任意のディレクトリに展開する
<a name="imepatch" id="imepatch">
IMEパッチ
簡易対応
- https://productforums.google.com/forum/#!topic/ime-ja/tgXztpe84ok
- 上記を参考にして作成したパッチ emacs-24.4-windows-ime-simple.patch これにより、少なくとも未確定の文字はインライン表示されるようになる。
- 上記のパッチを適用する場合は、ソースツリーのトップディレクトリにファイルを置き、下記を実行する
patch -b -p0 < emacs-24.4-windows-ime-simple.patch
rzl24ozi 氏のIMEパッチ対応
- 従来同等のIMEパッチを作成された方あり!
- https://gist.github.com/rzl24ozi
- emacs-24.4-w32-ime.diff をダウンロード
- 上記のパッチを適用する場合は、ソースツリーのトップディレクトリにファイルを置き、下記を実行する
$ patch -b -p0 < emacs-24.4-w32-ime.diff $ autoconf
configure
環境変数を変更する。 ちなみに、MSYS2のシェルで MSYSTEM の値は MSYS となっていた。
$ export MSYSTEM=MINGW32
$ ./configure
- IMEパッチ(簡易対応)適用時
Configured for `i686-pc-mingw32'. Where should the build process find the source code? . What compiler should emacs be built with? gcc -std=gnu99 -g3 -O2 -gdwarf-2 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? no 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? no 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
- IMEパッチ(rzl24ozi)適用時
Configured for `i686-pc-mingw32'. Where should the build process find the source code? . What compiler should emacs be built with? gcc -std=gnu99 -g3 -O2 -gdwarf-2 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? no 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? no 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
- emacsのshellからだとautoreconfで失敗するので、MSYS2のシェルで実行する。
$ make bootstrap
make install
$ make install
DLLのコピー
MSYS2がインストールされていないPCでも動作可能にする為、依存するDLLを emacsのexeファイルがあるフォルダにコピーしたい。
DLLの特定を行った。特定のプロセスはこちら
下記の16ファイルを emacs.exe があるディレクトリにコピーする。
- C:\msys32\mingw32\bin から
- libgcc_s_dw2-1.dll
- 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
バイナリ
こちら から提供中
その他
gnutls
configure で -lgnutls が no になってしまう
$ pacman -Sl | grep tls mingw32 mingw-w64-i686-gnutls 3.3.9-1 [インストール済み]
MSYS2には gnutls インストールされているはずなのだが、チェックでNGになってしまう。
http://ftp.gnu.org/pub/gnu/emacs/windows/ によると
You can get pre-built binaries (including any dependency DLLs) at http://sourceforge.net/projects/ezwinports/files/.
ということなのだが、、提供しているバイナリファイルはほぼMSYS2の中身と同じで、これを使用したとしても結果は同じではないかと推測する。
参考
- chuntaro/NTEmacs64 かなり参考にさせてもらいました。