2015年2月26日木曜日

32bit 版の Emacs 24.4 をビルドしてみた

手元の 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 とか埋め込まれてるな。公開するのは作りなおしてからにするか。

0 件のコメント :

コメントを投稿