NTEmacsビルド(25.1 その1)
Table of Contents
概要
- 2016.9.18 MSYS2にてビルド
- 簡易IME対応
ソースの入手
GNU ミラーサイト 例えば、ftp://ftp.ring.gr.jp/pub/GNU/emacs/ からダウンロードする。
ミラーにまだ置かれていない場合には http://ftp.gnu.org/gnu/emacs/ からダウンロード。
- emacs-25.1.tar.gz を任意のディレクトリ(例 D:¥ドライブ直下)に展開する。
ビルド方法
ソースの下記ファイルにインストール方法が載っている
- INSTALL
- nt/INSTALL
- nt/INSTALL.W64
IMEパッチ
上記ページの”IMEの未確定文字のインライン表示”に記載している通り、src/w32fns.c にて、「WM_IME_STARTCOMPOSITION ハンドラ内部で break; するのではなく、goto dflt; する」という変更を行う。
上記を参考にして作成したパッチが emacs-25.1-windows-ime-simple.patch である。
適用する場合は、ソースツリーのトップディレクトリにファイルを置き、下記を実行する
patch -b -p0 < emacs-25.1-windows-ime-simple.patch
MSYS2
インストール
必要なパッケージ
32bit版
pacman -S base-devel ¥ mingw-w64-i686-toolchain ¥ mingw-w64-i686-xpm-nox ¥ mingw-w64-i686-libtiff ¥ mingw-w64-i686-giflib ¥ mingw-w64-i686-libpng ¥ mingw-w64-i686-libjpeg-turbo ¥ mingw-w64-i686-librsvg ¥ mingw-w64-i686-libxml2 ¥ mingw-w64-i686-gnutls
64bit版
pacman -S base-devel ¥ mingw-w64-x86_64-toolchain ¥ mingw-w64-x86_64-xpm-nox ¥ mingw-w64-x86_64-libtiff ¥ mingw-w64-x86_64-giflib ¥ mingw-w64-x86_64-libpng ¥ mingw-w64-x86_64-libjpeg-turbo ¥ mingw-w64-x86_64-librsvg ¥ mingw-w64-x86_64-libxml2 ¥ mingw-w64-x86_64-gnutls
<a name="configure" id="configure">
コンフィギュレーション
シェルの起動
ビルド対象に合わせていずれかを起動する
- 32bit版をビルドする場合には、mingw32.exe
- 64bit版をビルドする場合には、mingw64.exe
autogen.sh
$ ./autogen.sh Checking whether you have the necessary tools... (Read INSTALL.REPO for more details on building Emacs) Checking for autoconf (need at least version 2.65)... ok Checking for automake (need at least version 1.11)... ok Your system has the required tools. Running 'autoreconf -fi -I m4' ... You can now run './configure'.
configure(32bit)
PKG_CONFIG_PATH=/mingw32/lib/pkgconfig ./configure --prefix=/c/usr/emacs --without-imagemagick --without-dbus
configure実行結果
Configured for 'i686-w64-mingw32'.
Where should the build process find the source code? .
What compiler should emacs be built with? gcc -g3 -O2 -gdwarf-2
Should Emacs use the GNU version of malloc? no
(The GNU allocators don't work with this system configuration.)
Should Emacs use a relocating allocator for buffers? no
Should Emacs use mmap(2) for buffer allocation? yes
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 cairo? 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? 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 have dynamic modules support? no
Does Emacs use toolkit scroll bars? yes
Does Emacs support Xwidgets (requires gtk3)? no
checking that generated files are newer than configure... done
configure: creating ./config.status
config.status: creating nt/emacs.rc
config.status: creating nt/emacsclient.rc
config.status: creating ./doc/man/emacs.1
config.status: creating Makefile
config.status: creating lib/Makefile
config.status: creating lib-src/Makefile
config.status: creating oldXMenu/Makefile
config.status: creating doc/emacs/Makefile
config.status: creating doc/misc/Makefile
config.status: creating doc/lispintro/Makefile
config.status: creating doc/lispref/Makefile
config.status: creating src/Makefile
config.status: creating lwlib/Makefile
config.status: creating lisp/Makefile
config.status: creating leim/Makefile
config.status: creating nextstep/Makefile
config.status: creating nt/Makefile
config.status: creating admin/charsets/Makefile
config.status: creating admin/unidata/Makefile
config.status: creating admin/grammars/Makefile
config.status: creating src/config.h
config.status: executing depfiles commands
config.status: executing src/epaths.h commands
config.status: executing src/.gdbinit commands
config.status: executing doc/emacs/emacsver.texi commands
config.status: executing etc-refcards-emacsver.tex commands
Makefileより抜粋
CC=gcc
CFLAGS=-g3 -O2 -gdwarf-2
CPPFLAGS = -mtune=pentium4 -DUSE_CRT_DLL=1 -I ${abs_top_srcdir}/nt/inc
LDFLAGS =
version=25.1
## Used in $archlibdir.
configuration=i686-w64-mingw32
EXEEXT=.exe
C_SWITCH_SYSTEM=-mtune=pentium4
prefix=/c/usr/emacs
configure(64bit)
コマンドライン
PKG_CONFIG_PATH=/mingw64/lib/pkgconfig ./configure --prefix=/c/usr/emacs --without-imagemagick --without-dbus
configure実行結果
Makefileより抜粋
make
make
$ make bootstrap
make install
$ make install
configureで指定した prefix の下にインストールされる。(例 C:¥usr¥emacs)
DLLのコピー
MSYS2がインストールされていないPCでも動作可能にする為、依存するDLLを emacsのexeファイルがあるフォルダにコピーする。
下記の16ファイルを emacs.exe があるディレクトリにコピーする。
- C:¥msys64¥mingw32¥bin から
- libgcc_s_dw2-1.dll
- libgdk_pixbuf-2.0-0.dll
- libgif-7.dll
- libglib-2.0-0.dll
- libgnutls-30.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
cp /c/msys64/mingw32/bin/libgcc_s_dw2-1.dll /c/usr/emacs/bin cp /c/msys64/mingw32/bin/libgdk_pixbuf-2.0-0.dll /c/usr/emacs/bin cp /c/msys64/mingw32/bin/libgif-7.dll /c/usr/emacs/bin cp /c/msys64/mingw32/bin/libglib-2.0-0.dll /c/usr/emacs/bin cp /c/msys64/mingw32/bin/libgnutls-30.dll /c/usr/emacs/bin cp /c/msys64/mingw32/bin/libgobject-2.0-0.dll /c/usr/emacs/bin cp /c/msys64/mingw32/bin/libiconv-2.dll /c/usr/emacs/bin cp /c/msys64/mingw32/bin/libjpeg-8.dll /c/usr/emacs/bin cp /c/msys64/mingw32/bin/libpng16-16.dll /c/usr/emacs/bin cp /c/msys64/mingw32/bin/librsvg-2-2.dll /c/usr/emacs/bin cp /c/msys64/mingw32/bin/libtiff-5.dll /c/usr/emacs/bin cp /c/msys64/mingw32/bin/libwinpthread-1.dll /c/usr/emacs/bin cp /c/msys64/mingw32/bin/libxml2-2.dll /c/usr/emacs/bin cp /c/msys64/mingw32/bin/libXpm-noX4.dll /c/usr/emacs/bin cp /c/msys64/mingw32/bin/zlib1.dll /c/usr/emacs/bin
バイナリ
こちら から提供中
参考
MSYS2で必要な環境が揃っていないと、下記のように configure で失敗する
$ PKG_CONFIG_PATH=/mingw32/lib/pkgconfig ./configure --without-imagemagick --without-dbus configure: loading site script /mingw32/etc/config.site checking for xcrun... no checking for GNU Make... make checking for a BSD-compatible install... /usr/bin/install -c checking whether build environment is sane... yes checking for a thread-safe mkdir -p... /usr/bin/mkdir -p checking for gawk... gawk checking whether make supports nested variables... (cached) yes checking build system type... i686-w64-mingw32 checking host system type... i686-w64-mingw32 checking the compiler's target... x86_64-pc-msys configure: error: Emacs does not support 'x86_64-pc-msys' systems. If you think it should, please send a report to bug-gnu-emacs@gnu.org. Check 'etc/MACHINES' for recognized configuration names.