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/