NTEmacsビルド(26.1) その3
Table of Contents
概要
- 2019.1.6 MSYS2にてビルド
- 最小限IME対応2
ソースの入手
GNU http://ftp.gnu.org/gnu/emacs/ からダウンロード。
- emacs-26.1.tar.gz を任意のディレクトリ(例 D:¥ドライブ直下)に展開する。
ビルド方法
ソースの下記ファイルにインストール方法が載っている
- INSTALL
- nt/INSTALL
- nt/INSTALL.W64
IMEパッチ
パッチは emacs-26.1-windows-ime-minimum2.patch である。
適用する場合は、ソースツリーのトップディレクトリにファイルを置き、下記を実行する
$ patch -b -p0 < emacs-26.1-windows-ime-minimum2.patch patching file lisp/international/w32-ime.el patching file lisp/loadup.el patching file lisp/startup.el patching file src/keyboard.c patching file src/w32fns.c patching file src/w32term.c patching file src/w32term.h
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
コンフィギュレーション
シェルの起動
ビルド対象に合わせていずれかを起動する
C:¥msys64 以下の、
- 32bit版をビルドする場合には、mingw32.exe
- 64bit版をビルドする場合には、mingw64.exe
autogen.sh
emacs-26.1 ディレクトリ直下にて実行
$ ./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 Your system has the required tools. Running 'autoreconf -fi -I m4' ... You can now run './configure'.
configure(32bit)
ビルドオプションは INSTALL.W64 を参考にした。 CFLAGS="-s"は”実行可能ファイルからすべてのシンボル・テーブルと再配置情報を削除する”の意味。
configureを実行した際にデフォルトで指定されるオプション(-g3 -O2 -gdwarf-2)に対して、"-s"を追加した。
これによりexeファイルサイズがかなり小さくなる。
$ PKG_CONFIG_PATH=/mingw32/lib/pkgconfig ./configure CFLAGS="-s -g3 -O2 -gdwarf-2" --prefix=/c/usr/emacs --without-imagemagick --without-dbus
configure実行結果
$ PKG_CONFIG_PATH=/mingw32/lib/pkgconfig ./configure CFLAGS="-s -g3 -O2 -gdwarf-2" --prefix=/c/usr/emacs --without-imagemagick --without-dbus
configure: loading site script /mingw32/etc/config.site
checking for xcrun... no
checking for GNU Make... make
checking build system type... i686-w64-mingw32
checking host system type... i686-w64-mingw32
checking the compiler's target... i686-w64-mingw32
(略)
checking for library containing timer_settime... no
checking for timer_settime... no
checking for variable-length arrays... yes
checking for __mktime_internal... no
checking for gcc option to disable position independent executables... -no-pie
Configured for 'i686-w64-mingw32'.
Where should the build process find the source code? .
What compiler should emacs be built with? gcc -s -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 -llcms2? no
Does Emacs use imagemagick (version 6)? 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 use -lsystemd? 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
Does Emacs have threading support in lisp? yes
configure: creating ./config.status
config.status: creating nt/emacs.rc
config.status: creating nt/emacsclient.rc
config.status: creating src/emacs-module.h
config.status: creating Makefile
config.status: creating lib/gnulib.mk
config.status: creating ./doc/man/emacs.1
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 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
configure: WARNING: This configuration installs a 'movemail' program
that retrieves POP3 email via only insecure channels.
To omit insecure POP3, you can use './configure --without-pop'.
nt/Makefileより抜粋
(略)
CC=gcc
CFLAGS=-s -g3 -O2 -gdwarf-2
CPPFLAGS = -mtune=pentium4 -DUSE_CRT_DLL=1 -I ${abs_top_srcdir}/nt/inc
LDFLAGS =
version=26.1
## Used in $archlibdir.
configuration=i686-w64-mingw32
EXEEXT=.exe
C_SWITCH_SYSTEM=-mtune=pentium4
(略)
prefix=/c/usr/emacs
(略)
make
make bootstrap
$ make bootstrap
make install
$ make install
configureで指定した prefix の下にインストールされる。(例 C:¥usr¥emacs)
DLLのコピー
DLLファイルについて
依存するDLLを emacsのexeファイルがあるフォルダにコピーする。
msysからのコピー
C:¥msys64¥mingw32¥bin から 下記のファイルを emacs.exe があるディレクトリにコピーする。
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 cp /c/msys64/mingw32/bin/libcairo-2.dll /c/usr/emacs/bin cp /c/msys64/mingw32/bin/libcroco-0.6-3.dll /c/usr/emacs/bin cp /c/msys64/mingw32/bin/libffi-6.dll /c/usr/emacs/bin cp /c/msys64/mingw32/bin/libgio-2.0-0.dll /c/usr/emacs/bin cp /c/msys64/mingw32/bin/libgmodule-2.0-0.dll /c/usr/emacs/bin cp /c/msys64/mingw32/bin/libgmp-10.dll /c/usr/emacs/bin cp /c/msys64/mingw32/bin/libhogweed-4.dll /c/usr/emacs/bin cp /c/msys64/mingw32/bin/libidn2-0.dll /c/usr/emacs/bin cp /c/msys64/mingw32/bin/libintl-8.dll /c/usr/emacs/bin cp /c/msys64/mingw32/bin/liblzma-5.dll /c/usr/emacs/bin cp /c/msys64/mingw32/bin/libnettle-6.dll /c/usr/emacs/bin cp /c/msys64/mingw32/bin/libp11-kit-0.dll /c/usr/emacs/bin cp /c/msys64/mingw32/bin/libpango-1.0-0.dll /c/usr/emacs/bin cp /c/msys64/mingw32/bin/libpangocairo-1.0-0.dll /c/usr/emacs/bin cp /c/msys64/mingw32/bin/libpangowin32-1.0-0.dll /c/usr/emacs/bin cp /c/msys64/mingw32/bin/libpcre-1.dll /c/usr/emacs/bin cp /c/msys64/mingw32/bin/libpixman-1-0.dll /c/usr/emacs/bin cp /c/msys64/mingw32/bin/libtasn1-6.dll /c/usr/emacs/bin cp /c/msys64/mingw32/bin/libfreetype-6.dll /c/usr/emacs/bin cp /c/msys64/mingw32/bin/libpangoft2-1.0-0.dll /c/usr/emacs/bin cp /c/msys64/mingw32/bin/libfontconfig-1.dll /c/usr/emacs/bin cp /c/msys64/mingw32/bin/libgio-2.0-0.dll /c/usr/emacs/bin cp /c/msys64/mingw32/bin/libgobject-2.0-0.dll /c/usr/emacs/bin cp /c/msys64/mingw32/bin/libpangocairo-1.0-0.dll /c/usr/emacs/bin
GnuTLSライブラリが見つからない
しかし、上記だと emacsの起動時に下記のようなメッセージが表示される
gnutls.c: [1] (Emacs) GnuTLS library not found
よって、下記から GnuTLS for Windows をダウンロードする。
"Latest w32 version on gitlab" から artifacts.zip をダウンロード。
展開し、win32-build¥bin¥ から下記をemacs.exe があるディレクトリにコピー
- iconv.dll
- libffi-6.dll
- libgcc_s_sjlj-1.dll
- libgmp-10.dll
- libgnutls-30.dll
- libgnutlsxx-28.dll
- libhogweed-4.dll
- libidn2-0.dll
- libnettle-6.dll
- libp11-kit-0.dll
- libwinpthread-1.dll
下記8ファイルは前にコピーしたものに上書きする
- libffi-6.dll
- libgmp-10.dll
- libgnutls-30.dll
- libhogweed-4.dll
- libidn2-0.dll
- libnettle-6.dll
- libp11-kit-0.dll
- libwinpthread-1.dll
svg表示NG
下記から librsvg をダウンロードする。
librsvg-2.40.1-2-w32-bin.zip を展開し、¥bin 以下の dll をemacs.exe があるディレクトリにコピー
- libcairo-2.dll
- libcroco-0.6-3.dll
- libffi-6.dll
- libgdk_pixbuf-2.0-0.dll
- libgio-2.0-0.dll
- libglib-2.0-0.dll
- libgmodule-2.0-0.dll
- libgobject-2.0-0.dll
- libiconv-2.dll
- libintl-8.dll
- libpango-1.0-0.dll
- libpangocairo-1.0-0.dll
- libpangowin32-1.0-0.dll
- libpixman-1-0.dll
- libpng16-16.dll
- librsvg-2-2.dll
- libxml2-2.dll
- zlib1.dll
下記18ファイルは前にコピーしたものに上書きする
- libcairo-2.dll
- libcroco-0.6-3.dll
- libffi-6.dll
- libgdk_pixbuf-2.0-0.dll
- libgio-2.0-0.dll
- libglib-2.0-0.dll
- libgmodule-2.0-0.dll
- libgobject-2.0-0.dll
- libiconv-2.dll
- libintl-8.dll
- libpango-1.0-0.dll
- libpangocairo-1.0-0.dll
- libpangowin32-1.0-0.dll
- libpixman-1-0.dll
- libpng16-16.dll
- librsvg-2-2.dll
- libxml2-2.dll
- zlib1.dll
結果オーライというかだいぶいい加減だが、上記手順で、png,tiff,gif,jpg,svg の表示ができた
IMEの挙動
「Windows 10 April 2018 Update」でIMEの切り替えができなくなって日本語入力ができなくなることがある。 「Emacsのウインドウをマウスで移動させるか、サイズ変更する」ことでで入力できるようになる。
バイナリ
こちら から提供中
参考
- NTEmacs を 24.4 にバージョンアップ
- gnutls.c: [1] (Emacs) GnuTLS library not found の件
- 「「Windows 10 April 2018 Update」で複数の不具合が確認される」記事へのコメント (スラド)