最終更新日: 2017-04-22 土 22:54
ホーム | 文書トップ | 目次

NTEmacsビルド(25.1 その2)

Table of Contents

概要

  • 2016.10.8 MSYS2にてビルド
  • 簡易IME対応
  • シンボル情報削除(ファイルサイズ削減)
  • 添付DLL見直し

ソースの入手

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

build_msys2_shell_bassui.png

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)

ビルドオプションは 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 for a BSD-compatible install... /usr/bin/install -c

(中略)

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 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

(略)

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=25.1
## Used in $archlibdir.
configuration=i686-w64-mingw32
EXEEXT=.exe
C_SWITCH_SYSTEM=-mtune=pentium4

(略)

prefix=/c/usr/emacs

(略)

make

make

$ make bootstrap

make install

$ make install

configureで指定した prefix の下にインストールされる。(例 C:\usr\emacs)

DLLのコピー

必要なDLLファイルについて

MSYS2がインストールされていないPCでも動作可能にする為、依存するDLLを emacsのexeファイルがあるフォルダにコピーする。

下記のファイルを emacs.exe があるディレクトリにコピーする。

(2016.10.8追記) 某掲示板にて、dllの添付が不足している為、tiff、svgが表示できない、TLSが使えない、との指摘あり。指摘ありがとうございます。

参考にして、dllを追加。

  • 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
  • 2016.10.8 追加
    • libcairo-2.dll
    • libcroco-0.6-3.dll
    • libffi-6.dll
    • libgio-2.0-0.dll
    • libgmodule-2.0-0.dll
    • libgmp-10.dll
    • libhogweed-4-2.dll
    • libidn-11.dll
    • libintl-8.dll
    • liblzma-5.dll
    • libnettle-6-2.dll
    • libp11-kit-0.dll
    • libpango-1.0-0.dll
    • libpangocairo-1.0-0.dll
    • libpangowin32-1.0-0.dll
    • libpcre-1.dll
    • libpixman-1-0.dll
    • libtasn1-6.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
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-2.dll      /c/usr/emacs/bin
cp /c/msys64/mingw32/bin/libidn-11.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-2.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

特記事項

ただし、

  • tiffは表示できるようになったが、svgは表示できず。
  • libgcc_s_sjlj-1.dll は msys64/mingw32/bin/ 以下に見つかれなかったので入れていない。
  • libgnutls-30.dll は gnutls-3.4.13-w32 から入れるとのことであったが、私の環境では TLSの動作が確認できた為、MSYS2版をそのまま置いている。

バイナリ

こちら から提供中

参考

msys2のダウンロードからemacsビルドまで一括で行うシェル作ってみた。

ホーム | 文書トップ | 目次
Created by Emacs 27.1 (Org mode 9.3)