Emacs 23.1 がリリースされたので、Windows 用の NTEmacs 23.1 をビルドするときの個人的な手順メモ。
IME 対応などのパッチを使わない点を除けば、上記のページで広松さんが公開してくださっている手順と同じです。
ほかの部分も、ぼくが NTEmacs 22 を作っていた上記の手順とだいたい同じです。
Cygwin
コンパイルには Cygwin 1.5 の gcc 3.4.4-3, MinGW パッケージ, GNU Make 3.80 を使います。
$ uname -a
CYGWIN_NT-5.1 aspirin 1.5.25(0.156/4/2) 2008-11-18 15:24 i686 Cygwin
$ gcc --version
gcc (GCC) 3.4.4 (cygming special, gdc 0.12, using dmd 0.125)
Copyright (C) 2004 Free Software Foundation, Inc.
This is free software; see the source for copying conditions. There is NO
warranty; not even for MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.
$ make --version
GNU Make 3.80
Copyright (C) 2002 Free Software Foundation, Inc.
This is free software; see the source for copying conditions.
There is NO warranty; not even for MERCHANTABILITY or FITNESS FOR A
PARTICULAR PURPOSE.
$ cygcheck -s | egrep '^(gcc|mingw|make)'
gcc 3.4.4-3
gcc-core 3.4.4-3
gcc-g++ 3.4.4-3
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
Cygiwn 1.5 は UTF-8 Cygwin の cygwin1.dll を利用させてもらっています。たぶん NTEmacs のビルドには関係ないですが。
Cygwin 1.7 は現時点でリリースされておらず、環境を作っていないので状況は分かりません。もうすぐリリースなのかな。もう MinGW アプリケーション作れるのだろうか…。
gcc は alternatives 対応直前の gcc-3.4.4-3 を使います。一連の gcc のパッケージのバージョンを keep しておきます。
gcc-3.4.4-999 を使う場合には alternatives の symlink (ショートカット)をどうにかするか、configure.bat を修正して、COMPILER=gcc-3 を指定する必要があると思います(未確認)。
gcc-4 系は現時点では MinGW アプリケーションを作るための "-mno-cygwin" フラグがサポートから外されているので使用できません。
MinGW はどのパッケージが最低限必要なのか調べていないので、mingw と名のつくパッケージを適当に…。
GNU Make は、emacs/nt/INSTALL によれば 3.81 は使えないらしいので 3.80 に keep してあります。
その他の Cygwin のパッケージは、サーバ系と X 関係、フォント、グラフィック関係を除いて自分が使うものをテキトーに入れてます。
画像サポート用のライブラリ DLL
emacs/nt/INSTALL の "* Optional image library support" を参考にして、DLL とヘッダファイルを用意します。
実験的サポートの SVG は入れてません。
$ \ls -Rgo src/GnuWin32
src/GnuWin32:
total 3524
drwx------+ 3 0 Feb 8 16:57 DLL
-rwx------+ 1 189242 May 15 2005 jpeg-6b-4-bin.zip
-rwx------+ 1 38186 May 15 2005 jpeg-6b-4-lib.zip
-rw-r--r-- 1 401037 Jun 5 05:53 libpng-1.2.37-bin.zip
-rw-r--r-- 1 134939 Jun 5 05:55 libpng-1.2.37-lib.zip
-rwx------+ 1 285963 Mar 2 2007 libungif-4.1.4-1-bin.zip
-rwx------+ 1 12272 Mar 2 2007 libungif-4.1.4-1-lib.zip
-rwx------+ 1 928480 Mar 2 2007 libungif-4.1.4-1-src.zip
-rwx------+ 1 687244 Mar 31 2006 tiff-3.8.2-1-bin.zip
-rwx------+ 1 38372 Mar 31 2006 tiff-3.8.2-1-lib.zip
-rwx------+ 1 35884 Feb 15 2005 xpm-3.5.1-1-bin.zip
-rwx------+ 1 42484 Feb 15 2005 xpm-3.5.1-1-lib.zip
-rwx------+ 1 622191 Feb 15 2005 xpm-3.5.1-1-src.zip
-rwx------+ 1 99777 Jul 26 2005 zlib-1.2.3-bin.zip
-rwx------+ 1 71569 Jul 26 2005 zlib-1.2.3-lib.zip
src/GnuWin32/DLL:
total 1297
drwx------+ 2 0 May 9 2008 X11
-rwx------+ 1 16189 Oct 25 2005 gif_lib.h
-rwx------+ 1 1800 May 14 2005 jconfig.h
-rwx------+ 1 14488 May 15 2005 jerror.h
-rwx------+ 1 14567 May 14 2005 jmorecfg.h
-rwx------+ 1 127488 May 15 2005 jpeg62.dll
-rwx------+ 1 46359 May 15 2005 jpeglib.h
-rwx------+ 1 2245 Jun 4 22:41 libpng12-config
-rwx------+ 1 4645 Jun 4 22:55 libpng12.def
-rwx------+ 1 260096 Jun 4 22:48 libpng12.dll
-rwx------+ 1 376832 Mar 28 2006 libtiff3.dll
-rwx------+ 1 31232 Mar 1 2007 libungif4.dll
-rwx------+ 1 153839 Jun 4 22:40 png.h
-rwx------+ 1 45382 Jun 4 22:40 pngconf.h
-rwx------+ 1 4959 Oct 25 2004 simx.h
-rwx------+ 1 33725 Dec 27 2005 tiff.h
-rwx------+ 1 2968 Mar 23 2006 tiffconf.h
-rwx------+ 1 23216 Mar 28 2006 tiffio.h
-rwx------+ 1 410 Mar 23 2006 tiffvers.h
-rwx------+ 1 52224 Feb 13 2005 xpm4.dll
-rwx------+ 1 75264 Jul 20 2005 zlib1.dll
src/GnuWin32/DLL/X11:
total 16
-rwx------+ 1 16286 Jan 25 2004 xpm.h
Emacs のソースのチェックアウト
リリースの tarball を入手するか、CVS / git リポジトリから emacs モジュールをチェックアウトします。
Emacs 23.1 で使用する branch は EMACS_23_1_RC です。
CVS
$ cd ~/src/anoncvs
$ cvs -z3 -d:pserver:anonymous@cvs.savannah.gnu.org:/sources/emacs \
> checkout emacs
$ cd emacs
$ cvs update -r EMACS_23_1_RC
git
$ cd ~/src/git
$ git clone git://git.savannah.gnu.org/emacs.git
$ cd emacs
$ git checkout --track origin/EMACS_23_1_RC
gmake.defs の修正
Cygwin 環境でビルドするために nt/gmake.defs を修正します。Cygwin で検索すると出てくるので分かりやすいです。
$ cd nt
$ git --no-pager diff gmake.defs
diff --git a/nt/gmake.defs b/nt/gmake.defs
index 018ca15..d860c42 100644
--- a/nt/gmake.defs
+++ b/nt/gmake.defs
@@ -84,9 +84,9 @@ MAKETYPE=gmake
# remedied before putting this cygpath kludge back in.
# Convert CURDIR to native file name, if in Cygwin format
-#ifeq "$(shell cygpath $(CURDIR))" "$(CURDIR)"
-#CURDIR := $(shell cygpath -m $(CURDIR))
-#endif
+ifeq "$(shell cygpath $(CURDIR))" "$(CURDIR)"
+CURDIR := $(shell cygpath -m $(CURDIR))
+endif
THISDIR = .
@@ -276,7 +276,7 @@ ifeq "$(ARCH)" "i386"
ifdef NOOPT
ARCH_CFLAGS = -c $(DEBUG_FLAG) $(NOCYGWIN)
else
-ARCH_CFLAGS = -c $(DEBUG_FLAG) $(NOCYGWIN) $(MCPU_FLAG) -O2 \
+ARCH_CFLAGS = -c $(DEBUG_FLAG) $(NOCYGWIN) $(MCPU_FLAG) -O3 \
# -fbuiltin \
# -finline-functions \
# -fomit-frame-pointer
上記後半の -O3 optimization の修正と、以下の configure.bat の修正は必要なわけではないです。
$ git --no-pager diff configure.bat
diff --git a/nt/configure.bat b/nt/configure.bat
index 56b8570..21e683a 100755
--- a/nt/configure.bat
+++ b/nt/configure.bat
@@ -325,10 +325,10 @@ set COMPILER=gcc
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.
+Rem and prescott 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
+echo gcc -c -O3 -mtune=prescott junk.c >>config.log
+gcc -c -O3 -mtune=prescott junk.c >>config.log 2>&1
if not errorlevel 1 goto gccMtuneOk
echo The failed program was: >>config.log
type junk.c >>config.log
@@ -336,8 +336,8 @@ set mf=-mcpu=i686
rm -f junk.c junk.o
goto gccdebug
:gccMtuneOk
-echo GCC supports -mtune=pentium4 >>config.log
-set mf=-mtune=pentium4
+echo GCC supports -mtune=prescott >>config.log
+set mf=-mtune=prescott
rm -f junk.c junk.o
:gccdebug
rem Check for DWARF-2 debug info support, else default to stabs
なんでいじったのか覚えていないけど、たぶん Cygwin 1.5 の gcc-4 が使えるようになるのを期待して準備していたような…。 make 時に ARCH_CFLAGS を指定するほうが綺麗なのかも。
configure
$ cd ~/src/git/emacs/nt
$ LANG=C ./configure.bat --with-gcc --no-cygwin --no-debug \
> --cflags=-I/cygdrive/c/Users/yu-ji/src/GnuWin32/DLL \
> --prefix=C:/emacs/23 \
> 2>&1 | tee config.log.yu-ji
うまくいけば "building with PNG support" とかの表示とともに makefile ができあがります。
make して install
$ LANG=C make bootstrap
$ LANG=C make info
$ LANG=C make install
info を作るとき以外は LANG=C の指定いらないかも。tarball からのインストールなら bootstrap は不要らしいです。
bootstrap のあと、../src/oo-spd/i386/emacs.exe が出来てるはずなので -q つけて起動したりして、ちゃんと動くか確認します。
画像用の DLL を PATH の通ったディレクトリか emacs.exe と同じディレクトリにコピーして、NTEmacs 自体のインストールはこれで完了です。
その他の elisp とか
以下はぼくが使っている elisp とかのインストール手順メモ。
emacs-clientw.vbs
上記ページを参考にして emacs-clientw.vbs を使っています。
Emacs の server がいれば emacsclientw -n を、いなければ runemacs するスクリプトです。
'
' C:\emacs\23\bin\emacs-clientw.vbs
'
Set objShell = WScript.CreateObject("WScript.Shell")
Set fso = CreateObject("Scripting.FileSystemObject")
If WScript.Arguments.Count = 1 Then
strComputer = "."
Set objWMIService = GetObject("winmgmts:\\" & strComputer & "\root\cimv2")
Set colItems = objWMIService.ExecQuery("Select * From Win32_Process")
Dim isRunning
isRunning = False
For Each objItem in colItems
If InStr(objItem.CommandLine, "emacs.exe") Then
isRunning = True
End If
Next
If isRunning Then
objShell.Run("""" & fso.GetParentFolderName(WScript.ScriptFullName) & "/emacsclientw.exe"" -n """ & WScript.Arguments(0) & """")
Else
objShell.Run("""" & fso.GetParentFolderName(WScript.ScriptFullName) & "/runemacs.exe"" """ & WScript.Arguments(0) & """")
End If
Else
objShell.Run(fso.GetParentFolderName(WScript.ScriptFullName) & "/runemacs.exe")
End If
個人的には Emacs の外からファイルを開かせることはそれほど無いのですが、やっぱり使えないと困るときもあるので。
APEL
Daredevil SKK で使われている APEL
$ cd ~/src/anoncvs/apel
$ cvs update -dP
$ cvs diff -u makeit.bat | nkf -w
Index: makeit.bat
===================================================================
RCS file: /cvs/root/apel/makeit.bat,v
retrieving revision 1.1
diff -u -r1.1 makeit.bat
--- makeit.bat 1 Feb 2001 03:19:36 -0000 1.1
+++ makeit.bat 25 Mar 2009 01:27:54 -0000
@@ -102,9 +102,10 @@
rem --- なお、DEFAULT_MAKE_ARG に可能な値は make1.bat を御覧ください。
rem --- (Please see make1.bat for possible values of DEFAULT_MAKE_ARG.)
-set PREFIX=
-set EMACS=
-set LISPDIR=
+set PREFIX=c:\emacs
+set EMACS=%PREFIX%\23\bin\emacs.exe
+set LISPDIR=%PREFIX%\site-lisp
+set VERSION_SPECIFIC_LISPDIR=%PREFIX%\23\site-lisp
set DEFAULT_MAKE_ARG=
$ ./makeit.bat install
Daredevil SKK / ddskk
Emacs 内では ddskk を、Windows の他のアプリケーションでは skkime を使っています。
$ cd ~/src/anoncvs/skk/main
$ cvs update -dP
$ cvs diff -u makeit.bat | nkf -w
Index: makeit.bat
===================================================================
RCS file: /circus/cvsroot/skk/main/makeit.bat,v
retrieving revision 1.4
diff -u -r1.4 makeit.bat
--- makeit.bat 3 Oct 2008 15:03:39 -0000 1.4
+++ makeit.bat 25 Mar 2009 01:39:39 -0000
@@ -102,9 +102,10 @@
rem --- なお、DEFAULT_MAKE_ARG に可能な値は make1.bat を御覧ください。
rem --- (Please see make1.bat for possible values of DEFAULT_MAKE_ARG.)
-set PREFIX=
-set EMACS=
-set LISPDIR=
+set PREFIX=c:\emacs
+set EMACS=%PREFIX%\23\bin\emacs.exe
+set LISPDIR=%PREFIX%\site-lisp
+set VERSION_SPECIFIC_LISPDIR=%PREFIX%\23\site-lisp
set DEFAULT_MAKE_ARG=
$ ./makeit.bat install
color-theme
site-lisp 以下に展開するだけ。
emacs-w3m
$ cd ~/src/anoncvs/emacs-w3m
$ cvs update -dP
$ ./configure \
> --with-lispdir=/cygdrive/c/emacs/23/site-lisp/w3m \
> --infodir=/cygdrive/c/emacs/23/info \
> 2>&1 | tee config.log.yu-ji
$ make
$ make install
Mew
$ cd ~/src/anoncvs/mew
$ cvs update -dP
$ ./configure \
--prefix=/cygdrive/c/emacs/23 \
--with-elispdir=/cygdrive/c/emacs/23/site-lisp/mew \
--with-etcdir=/cygdrive/c/emacs/23/site-lisp/mew/etc \
--infodir=/cygdrive/c/emacs/23/info \
--mandir=/usr/man \
2>&1 | tee config.log.yu-ji
$ make
$ make install && make install-info && make install-jinfo
info を自分で作るときは info/Makefile を修正したり、Cygwin じゃなくてコマンドプロンプトから作ったりの手順が必要っぽいです。環境によるかも。ちゃんと調べてないですが。
おしまい。
別の記事で載せてるフォント指定の設定はそのうち整理します。
関連記事
追記@Sun Aug 30 18:17:22 2009
「Emacs 23 で使用する branch は EMACS_23_1_RC」と書いてたのを修正。23.2 で新しい branch を切るか、このまま trunk から出すか、まだ決まってないっぽいです。メンテナは trunk からのつもりっぽい?
追記@Mon Jul 05 10:11:06 2010
この記事は Cygwin 1.5 の gcc 3 系を使って MinGW アプリケーションとして Emacs をビルドするものです。
Cygwin 1.5 の gcc 4 系および Cygwin 1.7 の gcc は MinGW アプリケーションのコンパイルをサポートしていません。
新たにビルド環境を整えるかたには、MSYS + MinGW によるビルドをお薦めします。
"msys mingw gcc emacs" あたりでぐぐってくだささい…。