Skip to content

Instantly share code, notes, and snippets.

@rzl24ozi
Last active September 18, 2016 11:15
Show Gist options
  • Save rzl24ozi/1dd94943f638e84ef1c0 to your computer and use it in GitHub Desktop.
Save rzl24ozi/1dd94943f638e84ef1c0 to your computer and use it in GitHub Desktop.
about patches and how to build emacs on Windows. (Japanese)
※以下は emacs-25 リリース前のものなので現在では内容が古くなっているかもしれません。
emacs-25(以降)の README.txt も参照してみてください。
■各パッチについて
emacs-24.5-*.diff は emacs-24.5 に対するパッチです。
□emacs-24.5-x64.diff (https://gist.github.com/rzl24ozi/68c29ac4fe64f1aa8887)
GNU emacs(x64) (http://hp.vector.co.jp/authors/VA052357/emacs.html)
に同梱のパッチ
(GNU emacs(x64) インストール後に C:\Program Files\GNU\Emacs23\distfiles\
下にあるもの)
を(全てではありませんが) emacs-24.5 の mingw版、cygwin版(emacs-w32)
に適用できるようにしたものです。
#ファイル名に x64 がついてますが 32bit 版でも使用できます。
GNU emacs(x64) のダイナミックロード機能は私にはうまく動かせなかったので
含まれていませんが、cmigemo 組み込みについては GNU emacs(x64)
のダイナミックロード機能追加前の方法で組み込めるようにしています。
MSYS2 や cygwin のパッケージの jpeg は libjpeg-turbo のようですが
この場合イメージフィットオプション (GNU emacs(x64)のページ参照) が
効かないようです。イメージフィットオプションを試してみるなら
http://www.ijg.org/ からソースを取得し自ビルドして使用するなどして
ください。
元の GNU emacs(x64) のパッチの lisp/site-init.el, lisp/site-start.el
は sample/lisp/site-init.el, sample/lisp/site-start.el に移動しました。
configure に以下のオプションを追加しています。
W32-IME, RECONVERSION, DOCUMENTFEED, cmigemo組み込み
がデフォルトで有効ですが無効にしたい場合に以下を指定してください。
--without-w32-ime : W32-IME無効(同時にRECONVERSION、DOCUMENTFEEDも無効)
--without-reconversion : RECONVERSION無効(同時にDOCUMENTFEEDも無効)
--without-documentfeed : DOCUMENTFEED無効
--without-cmigemo : cmigemo組み込み無効
以下は emacs-24.5-x64.diff での修正分を分割したものです。
- emacs-24.5-w32-ime.diff (https://gist.github.com/rzl24ozi/a282260d2dd136daab14)
IME関連
- emacs-24.5-cmigemo.diff (https://gist.github.com/rzl24ozi/d3937f7db645c74f9a42)
cmigemo 組み込み
- emacs-24.5-image-fit.diff (https://gist.github.com/rzl24ozi/fd6bc3cd4963044b661c)
イメージフィットオプション
- emacs-24.5-cygwin-rsvg.diff (https://gist.github.com/rzl24ozi/30c13cff407318d1b69a)
cygwin版 emacs-w32 に rsvg 組み込み追加
□emacs-24.5-mingw-imagemagick.diff (https://gist.github.com/rzl24ozi/d588b40217b80e3dae65)
mingw版 emacs に imagemagick を組み込めるようにします。
□emacs-24.5-disable-w32-ime.diff (https://gist.github.com/rzl24ozi/f0c6cb3f20b9733b3d3f)
mingw版 emacs、cygwin版 emacs-w32 に 以下の関数を追加します。
(disable-w32-ime) ; IME無効化(IMEをONにできなくなります)
(enable-w32-ime) ; IME無効化を元に戻す
(w32-ime-disabled-p) ; IMEが無効化されている場合 t を返す
□emacs-24.5-ImmDisableIME.diff (https://gist.github.com/rzl24ozi/20aa4cfaaa7256bd3aa3)
起動時に ImmDisableIME () を使用して IME を無効化します。IME 有効にはできません。
W32-IMEイラネ な人向け。やっていることは
http://d.hatena.ne.jp/pekke/20140525/1401001174
にあるものと同じです。
■w32-imeパッチ済バイナリ
w32-imeパッチ済バイナリが以下で公開されています。IMEパッチ版を手っ取り早く動かしたい方はどうぞ。
mingw64版: chuntaro 氏により https://github.com/chuntaro/NTEmacs64 にて
mingw32版: Wurly 氏により http://cha.la.coocan.jp/doc/NTEmacs.html にて
cygwin版(32bit): gnupack (http://sourceforge.jp/projects/gnupack/) に
w32-ime, cygwin-rsvg, disable-w32-ime パッチ済 emacs-w32 が同梱
■MinGW 版のビルド
MSYS2 インストールについて詳細は
http://sourceforge.net/p/msys2/wiki/MSYS2%20installation/
などご参照ください。
その他、chuntaro 氏が https://github.com/chuntaro/NTEmacs64 にて
公開されているビルド手順など参考にさせていただきました。
ありがとうございます。こちらもご参照ください。
□MSYS2
MSYS2 インストーラー
https://sourceforge.net/projects/msys2/files/Base/x86_64/ の msys2-x86_64-YYYYMMDD.exe (64bit Windows の場合)
https://sourceforge.net/projects/msys2/files/Base/i686/ の msys2-i686-YYYYMMDD.exe (32bit Windows の場合)
(YYYYMMDDは年月日)
をダウンロード、実行しインストール。インストーラーがうまく動かないようなら別の日付のものを試してみてください。
インストーラー終了時 MSYS2 実行中のチェックを入れたまま完了、起動した MSYS2 シェルで
$ pacman -Syuu
としてシステムを更新。終わったら Alt+F4 で終了。
□emacs のビルド
cygwin をインストールしている環境で cygwin の bin などを PATH に入れて
いるとうまくビルドできないことがあるようなので cygwin は PATH から除外
しておいてください。
ビルドの邪魔になることがあるのでセキュリティソフトなどは一時的に停止しておいた方がよいかと思います。
以下は 64bit 版のビルドになります。
32bit 版のビルドであれば mingw32.exe を起動し x86_64 を i686 に読みかえて作業してください。
Windows が 32bit 版の場合は当然 64bit 版のビルドは無理なので 32bit 版をビルドしてください。
MSYS2 インストール先の mingw64.exe を起動し、
$ pacman -S base-devel
$ pacman -S mingw-w64-x86_64
$ pacman -S mingw-w64-x86_64-gcc
$ pacman -S mingw-w64-x86_64-giflib
$ pacman -S mingw-w64-x86_64-gnutls
$ pacman -S mingw-w64-x86_64-librsvg
$ pacman -S mingw-w64-x86_64-xpm-nox
でビルド関連のパッケージをインストール。
emacs-24.5 ソースを展開しソーストップディレクトリに移動。
必要に応じパッチを当ててください。
configure.ac を変更するパッチを当てた場合は
$ ./autogen.sh
を実行し configure を生成しなおしておいてください。
emacs-24.5 ソーストップディレクトリで
$ ./configure --host=x86_64-w64-mingw32 --prefix=(emacsインストール場所)
$ make
$ make install
で emacs 本体のインストール完了。
32bit 版では emacs が終了時にクラッシュすることがあるようなので
LDFLAGS=-shared-libgcc を指定しておいた方がよいでしょう。
--prefix は x:/... の形式で指定すると src/epaths.h の PATH_SITELOADSEARCH
の設定に失敗し site-lisp が load-path のデフォルトに入らなくなります。
/x/... のように指定してください。
デフォルトで CFLAGS が -g3 -O2 になるのでビルドされた emacs の
ファイルサイズがデバッグ情報のため大きくなります。
気になるようなら configure 時に CFLAGS=-O2 などと指定してください。
デフォルトで make install 時に .info や .el が圧縮されますが圧縮したくない
場合は configure に --without-compress-install を指定するか、
$ make GZIP_PROG="" install
でインストールしてください。
[imagemagick組み込み]
emacs-24.5-mingw-imagemagick.diff を当てた場合は ImageMagick が組み込めますが、emacs 本体が ImageMagick-6
までにしか対応していないようなので MSYS2 パッケージの mingw-w64-x86_64-imagemagick 最新版は使えません。
以前の ImageMagick-6 のときに何故かうまく画像が表示できなかったこともあり私は ImageMagick を以下のように
自ビルドしています。
パッケージの mingw-w64-x86_64-imagemagick をインストールしていたら
$ pacman -Rs mingw-w64-x86_64-imagemagick
で削除。
http://www.imagemagick.org/download/releases/
から ImageMagick-6.8.9-10 ソースをダウンロードし展開、ソーストップディレクトリに移動して
$ ./configure --host=x86_64-w64-mingw32 --enable-hdri --with-rsvg --prefix=(ImageMagickインストール場所)
$ make install
emacs の configure 実行時に PKG_CONFIG_PATH を
PKG_CONFIG_PATH=(ImageMagickインストール場所)/lib/pkgconfig:$PKG_CONFIG_PATH
に設定、emacs の make 時に PATH に (ImageMagickインストール場所)/bin を追加しておいてください。
ここではとりあえずソースに修正を加えずビルドできたバージョンの imagemagick を使用しましたが
https://sourceforge.net/projects/msys2/files/REPOS/MINGW/Sources/
の mingw-w64-x86_64-imagemagick-6 パッケージのソース(いずれ削除されるかもしれませんが)に含まれているパッチを
参考にすれば ImageMagick-6.9.* はビルドできるかと思います。新しめのものの方がいいとかであればお試しください。
[cmigemo組み込み]
emacs-24.5-x64.diff または emacs-24.5-cmigemo.diff を当てた場合は
cmigemo が組み込めます。組み込む場合は
https://osdn.jp/projects/nkf/downloads/64158/nkf-2.1.4.tar.gz/
から nkf のソースを取得してmake、インストールしておき
http://www.kaoriya.net/software/cmigemo (https://github.com/koron/cmigemo)
から C/Migemo のソースコードを取得して展開、ソーストップディレクトリに
移動して
$ ./configure --prefix=(cmigemoインストール場所)
$ make mingw-install
でインストール。
emacs の configure 実行時に
$ CPPFLAGS=-I(cmigemoインストール場所)/include ./confiugre ...
のように指定してください。
[DLLなどのコピー]
MSYS2 環境外でも使えるように dynamic-library-alist にある dll とそれらが
依存する dll、emacs 本体が依存する dll を /mingw64/ 下 (32bit 版であれば /mingw32/ 下) から
(emacsインストール場所)/bin/ 下へコピーしておいてください。
dll の依存関係は Dependency Walker (http://www.dependencywalker.com/)
などでわかります。
私の場合は以下をコピーしました。
gnutls のバージョンが上がって dll のファイル名が dynamic-library-alist に
あるものと一致しなくなっています。
dynamic-library-alist を修正するか、libgnutls-30.dll を libgnutls-28.dll に
リネームして対処してください。
libgcc_s_seh-1.dll # 64bit版の場合
libgcc_s_dw2-1.dll # 32bit版の場合
libXpm-noX4.dll
libbz2-1.dll
libcairo-2.dll
libcroco-0.6-3.dll
libexpat-1.dll
libffi-6.dll
libfontconfig-1.dll
libfreetype-6.dll
libgdk_pixbuf-2.0-0.dll
libgif-7.dll
libgio-2.0-0.dll
libglib-2.0-0.dll
libgmodule-2.0-0.dll
libgmp-10.dll
libgnutls-30.dll # dynamic-library-alist の修正 または libgnutls-28.dll にリネームが必要
libgobject-2.0-0.dll
libgraphite2.dll
libharfbuzz-0.dll
libhogweed-4-2.dll
libiconv-2.dll
libidn-11.dll
libintl-8.dll
libjpeg-8.dll
liblzma-5.dll
libnettle-6-2.dll
libp11-kit-0.dll
libpango-1.0-0.dll
libpangocairo-1.0-0.dll
libpangoft2-1.0-0.dll
libpangowin32-1.0-0.dll
libpcre-1.dll
libpixman-1-0.dll
libpng16-16.dll
librsvg-2-2.dll
libstdc++-6.dll
libtasn1-6.dll
libtiff-5.dll
libwinpthread-1.dll
libxml2-2.dll
zlib1.dll
imagemagick を組み込んだ場合はさらに
libgomp-1.dll
および (ImageMagickインストール場所)/bin から
libMagickCore-6.Q16HDRI-2.dll
libMagickWand-6.Q16HDRI-2.dll
を、cmigemo を組み込んだ場合は (cmigemoインストール場所)/bin から
migemo.dll
をコピーしておいてください。
cmigemo を組み込んだ場合は
(cmigemoインストール場所)/share/migemo/utf-8/*
も (emacsインストール先)/share/emacs/24.5/etc/migemo/utf-8/ 下へコピー
しておいてください。
cmigemo.el を load すれば migemo のインクリメンタル検索ができます。
cmigemo.el は emacs-24.5-x64.diff や emacs-24.5-cmigemo.diff を当てた後の
site-lisp/ 下にあります。
■cygwin emacs-w32 のビルド
ビルド関連のライブラリはパッケージの *-devel をインストールしておけば
よいです。pkg-config, autoconf, automake 他、ビルドに必要なコマンド類
もパッケージからインストールしておいてください。
configure.ac を変更するパッチを当てた場合は configure 実行前に
$ ./autogen.sh
を実行して configure を生成しなおしておいてください。
emacs-24.5-x64.diff や emacs-24.5-cmigemo.diff を当てた場合に cmigemo を
組み込むなら
https://osdn.jp/projects/nkf/downloads/64158/nkf-2.1.4.tar.gz/
から nkf のソースを取得してmake、インストールしておき
http://www.kaoriya.net/software/cmigemo (https://github.com/koron/cmigemo)
から C/Migemo ソースコードを取得、
$ ./configure
$ make cyg-install
でインストールしておいてください。
emacs-24.5 ソーストップディレクトリで
$ ./configure --with-w32 --prefix=(emacsインストール場所)
$ make
$ make install
でインストール完了です。
以上
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment