emacs23.1 を Windowsでビルド

参考にしたページ
http://homepage.mac.com/matsuan_tamachan/emacs/BuildNtemacs.html
u-ch: NTEmacs 23 を作ってみたメモ。

以下、~/emacs23.1-build/ 以下にtar ballを展開してビルド作業をすると仮定

[~/emacs23.1-build]% tar xvzf emacs-23.1.tar.gz

環境

Make は 3.8.1 だとビルドできないので、 3.8.0 を用意する
以下、ビルドした環境。
※このバージョンのgccは、/etc/alternatives へのリンクになっているので、nt/configure.bat に修正を施す必要がある。
 詳細は、「configure.bat のgcc対応」の項目を参照

gcc                             3.4.4-999
gcc-core                        3.4.4-999
gcc-g++                         3.4.4-999
gcc-mingw                       20040810-1
gcc-mingw-core                  20050522-1
gcc-mingw-g++                   20050522-1
make                            3.80-1
mingw-bzip2                     1.0.5-3
mingw-libbz2-devel              1.0.5-3
mingw-libbz2_1                  1.0.5-3
mingw-runtime                   3.15.2-1
mingw-zlib                      1.2.3-3
mingw-zlib-devel                1.2.3-3
mingw-zlib0                     1.2.3-3

画像サポート DLL 準備

GnuWin32 Packages から画像系のパッケージを取得

develアーカイブからヘッダファイル、binアーカイブから dllを取得。
何故かxpmのdevelに simx.hが不足していたので、source を取得し、dlls/X11/ にコピーした。
~/emacs23.1-build に、 dlls ディレクトリを作成し、その中に展開。

[~/emacs23.1-build]% mkdir dlls
[~/emacs23.1-build/dlls]% ls -lRgo

 drwx------+ 2      0 Aug  4 23:23 X11/
 -rwx------+ 1  16189 Oct 25  2005 gif_lib.h*
 -rwx------+ 1   1800 May 15  2005 jconfig.h*
 -rwx------+ 1  14488 May 15  2005 jerror.h*
 -rwx------+ 1  14567 May 15  2005 jmorecfg.h*
 -rwx------+ 1 127488 May 15  2005 jpeg62.dll*
 -rwx------+ 1  46359 May 15  2005 jpeglib.h*
 -rwx------+ 1   2245 Jun  5 05:41 libpng-config*
 drwx------+ 2      0 Aug  4 23:23 libpng12/
 -rwx------+ 1   2245 Jun  5 05:41 libpng12-config*
 -rwx------+ 1 260096 Jun  5 05:48 libpng12.dll*
 -rwx------+ 1 260096 Jun  5 05:48 libpng3.dll*
 -rwx------+ 1 376832 Mar 28  2006 libtiff3.dll*
 -rwx------+ 1  31232 Mar  2  2007 libungif4.dll*
 -rwx------+ 1 153839 Jun  5 05:40 png.h*
 -rwx------+ 1  45382 Jun  5 05:40 pngconf.h*
 -rwx------+ 1  33725 Dec 27  2005 tiff.h*
 -rwx------+ 1   2968 Mar 24  2006 tiffconf.h*
 -rwx------+ 1  23216 Mar 28  2006 tiffio.h*
 -rwx------+ 1    410 Mar 23  2006 tiffvers.h*
 -rwx------+ 1  52224 Feb 14  2005 xpm4.dll*
 -rwx------+ 1   9544 Jul 21  2005 zconf.h*
 -rwx------+ 1  66188 Jul 18  2005 zlib.h*
 -rwx------+ 1  75264 Jul 21  2005 zlib1.dll*
 
 ./X11:
 -rwx------+ 1  4959 Oct 25  2004 simx.h*
 -rwx------+ 1 16286 Jan 25  2004 xpm.h*
 
 ./libpng12:
 -rwx------+ 1 153839 Jun  5 05:40 png.h*
 -rwx------+ 1  45382 Jun  5 05:40 pngconf.h*

※libpng12は不要かも

IMEパッチ

Emacs-23.1-IME.patch (NTEmacsjp-users 96) - NTEmacs JP Project - OSDN から、Emacs-23.1-IME.patch.gz を取得

~/emacs23.1-build に Emacs-23.1-IME.patch を置き、lf改行に変更後、パッチを当てる。

[~/emacs23.1-build]% nkf --overwrite -Lu Emacs-23.1-IME.patch
[~/emacs23.1-build]% cd emacs-23.1
[~/emacs23.1-build/emacs-23.1]% patch -p0 < ../Emacs-23.1-IME.patch

emacs-23.1/nt/gmake.defs 修正

 -#ifeq "$(shell cygpath $(CURDIR))" "$(CURDIR)"
 -#CURDIR                := $(shell cygpath -m $(CURDIR))
 -#endif
 +ifeq "$(shell cygpath $(CURDIR))" "$(CURDIR)"
 +CURDIR         := $(shell cygpath -m $(CURDIR))
 +endif

configure.bat のgcc対応

gccが/etc/alternatives へのリンクになっているので、素のままでは、configure.batから実行出来ない。
以下の(力業)パッチを当てる

 --- ../emacs-23.1.org/nt/configure.bat	2009-08-06 13:29:05.061912900 +0900
 +++ nt/configure.bat	2009-08-06 13:30:23.116085200 +0900
 @@ -141,7 +141,7 @@
  goto again
  rem ----------------------------------------------------------------------
  :withgcc
 -set COMPILER=gcc
 +set COMPILER=gcc-3
  shift
  goto again
  rem ----------------------------------------------------------------------
 @@ -293,11 +293,11 @@
  rem   Auto-detect compiler if not specified, and validate GCC if chosen.
  :checkcompiler
  if (%COMPILER%)==(cl) goto compilercheckdone
 -if (%COMPILER%)==(gcc) goto checkgcc
 +if (%COMPILER%)==(gcc-3) goto checkgcc
  
  echo Checking whether 'gcc' is available...
  echo main(){} >junk.c
 -gcc -c junk.c
 +gcc-3 -c junk.c
  if exist junk.o goto checkgcc
  
  echo Checking whether 'cl' is available...
 @@ -316,10 +316,10 @@
  echo #include "cygwin/version.h" >junk.c
  echo main(){} >>junk.c
  echo gcc -c junk.c >>config.log
 -gcc -c junk.c >>config.log 2>&1
 +gcc-3 -c junk.c >>config.log 2>&1
  if not exist junk.o goto chkapi
  echo gcc -mno-cygwin -c junk.c >>config.log
 -gcc -mno-cygwin -c junk.c >>config.log 2>&1
 +gcc-3 -mno-cygwin -c junk.c >>config.log 2>&1
  if exist junk.o set nocygwin=Y
  
  :chkapi
 @@ -348,10 +348,10 @@
  set cf=%usercflags% -mno-cygwin
  :chkapi2
  echo on
 -gcc %cf% -c junk.c
 +gcc-3 %cf% -c junk.c
  @echo off
  @echo gcc %cf% -c junk.c >>config.log
 -gcc %cf% -c junk.c >>config.log 2>&1
 +gcc-3 %cf% -c junk.c >>config.log 2>&1
  set cf=
  if exist junk.o goto gccOk
  echo The failed program was: >>config.log
 @@ -367,14 +367,14 @@
  goto end
  
  :gccOk
 -set COMPILER=gcc
 +set COMPILER=gcc-3
  echo Using 'gcc'
  rm -f junk.c junk.o
  Rem It is not clear what GCC version began supporting -mtune
  Rem and pentium4 on x86, so check this explicitly.
  echo main(){} >junk.c
  echo gcc -c -O2 -mtune=pentium4 junk.c >>config.log
 -gcc -c -O2 -mtune=pentium4 junk.c >>config.log 2>&1
 +gcc-3 -c -O2 -mtune=pentium4 junk.c >>config.log 2>&1
  if not errorlevel 1 goto gccMtuneOk
  echo The failed program was: >>config.log
  type junk.c >>config.log
 @@ -389,7 +389,7 @@
  rem Check for DWARF-2 debug info support, else default to stabs
  echo main(){} >junk.c
  echo gcc -c -gdwarf-2 -g3 junk.c >>config.log
 -gcc -c -gdwarf-2 -g3 junk.c >>config.log 2>&1
 +gcc-3 -c -gdwarf-2 -g3 junk.c >>config.log 2>&1
  if not errorlevel 1 goto gccdwarf
  echo The failed program was: >>config.log
  type junk.c >>config.log
 @@ -588,7 +588,7 @@
  rem ----------------------------------------------------------------------
  :genmakefiles
  echo Generating makefiles
 -if %COMPILER% == gcc set MAKECMD=gmake
 +if %COMPILER% == gcc-3 set MAKECMD=gmake
  if %COMPILER% == cl set MAKECMD=nmake
  
  rem   Pass on chosen settings to makefiles.

ビルド

[~/emacs23.1-build/emacs-23.1/nt]% LANG=C ./configure.bat --enable-w32-ime --with-gcc --no-cygwin --no-debug --cflags -D_UNICODE --cflags -DRECONVERSION --cflags=-I/usr/local/include --cflags=-I~/emacs23-build/dlls/ --prefix=c:/path/to/install
[~/emacs23.1-build/emacs-23.1/nt]% LANG=C make bootstrap

インストール

[~/emacs23.1-build/emacs-23.1/nt]% make install
[~/emacs23.1-build/emacs-23.1/nt]% cp ~/emacs23-build/dlls/*.dll c:/path/to/install/bin/