スポンサーサイト

上記の広告は1ヶ月以上更新のないブログに表示されています。
新しい記事を書く事で広告が消せます。

NTEmacs 23.1.1のコンパイル


はじめに

 Windows上(Cygwin)でコンパイルしてみたので,作り方をメモしておきます.
 一部,記載内容が誤っていたり(コンパイルオプション),パッチファイルが正しくコピペできなかったり(タブが消えてしまう)していたので,少し書き直しています.
 またしても内容に誤り・不足がありました.ありがたいことに ここの方が指摘してくれたので,再度内容を修正します.(別途,インストール環境についても整理した方が良いかもしれませんね…)
 それから -D_UNICODE でビルドしたとき user-real-login-name が正しく取得できない対策パッチを2chより入手したので,そちらの方も追加しています.


source & patch準備

 作業ディレクトリに移動.今回は C:\tmpを作成し,そこで作業します.
[Path: /]# mkdir /c/tmp
[Path: /]# cd /c/tmp

 本体のソースファイルを取得します.ここでは Cygwinの wgetを使っていますが,ブラウザからダウンロードしてもOKです.
[Path: /c/tmp]# wget http://ftp.gnu.org/pub/gnu/emacs/emacs-23.1.tar.gz
[Path: /c/tmp]# ls -l emacs-23.1.tar.gz
-rw-r--r-- 1 katsu mkpasswd 42904117 Jul 30 10:37 emacs-23.1.tar.gz
[Path: /c/tmp]# tar zxf emacs-23.1.tar.gz

 NTEmacs JP Projectから IMEパッチを取得します.ちなみにここで wgetを使う場合,URLに「'」で囲むことを忘れないようにしましょう.(「'」がないとシェルが「&」などを構文解析してしまうため)
 あと,パッチの改行を念のため LFにしておきます.
[Path: /c/tmp]# wget 'http://sourceforge.jp/frs/redir.php?m=iij&f=%2Fntemacsjp%2F42999%2FEmacs-23.1-IME.patch.gz'
[Path: /c/tmp]# ls -l Emacs-23.1-IME.patch.gz
-rw-r--r-- 1 katsu mkpasswd 22164 Aug  5 23:32 Emacs-23.1-IME.patch.gz
[Path: /c/tmp]# gzip -d Emacs-23.1-IME.patch.gz
[Path: /c/tmp]# # nkfがある場合
[Path: /c/tmp]# nkf --overwrite -Lu Emacs-23.1-IME.patch
[Path: /c/tmp]# # nkfがないが,dos2unix(cygutils)がある場合
[Path: /c/tmp]# dos2unix Emacs-23.1-IME.patch
[Path: /c/tmp]# cksum Emacs-23.1-IME.patch
3577480817 100627 Emacs-23.1-IME.patch

 それから 2chのNTEmacsスレで入手した IME確定undo対策のパッチを用意します.
 ここから入手してでもOKです(配布条件等は分からないので,問題があれば削除しますが…)
 ちなみに,ファイル名は「Emacs-23_1-Undo_patch.txt」なっていますが,ダウンロード時にでも「Emacs-23.1-Undo.patch」に修正してください(FC2のアップローダーがピリオドをファイル名に入れられないらしいので,苦し紛れの対処です)
 新しいパッチはこちらになります.
[Path: /c/tmp]# wget http://blog-imgs-12.fc2.com/k/s/u/ksugita/Emacs-23_1-IME-mod_patch.txt
[Path: /c/tmp]# mv Emacs-23_1-IME-mod_patch.txt Emacs-23.1-IME-mod.patch
[Path: /c/tmp]# ls -l Emacs-23.1-IME-mod.patch
-rw-r--r-- 1 katsu mkpasswd 8513 Sep 13 05:52 Emacs-23.1-IME-mod.patch
[Path: /c/tmp]# # nkfがある場合
[Path: /c/tmp]# nkf --overwrite -Lu Emacs-23.1-IME-mod.patch
[Path: /c/tmp]# # nkfがないが,dos2unix(cygutils)がある場合
[Path: /c/tmp]# dos2unix Emacs-23.1-IME-mod.patch
[Path: /c/tmp]# cksum Emacs-23.1-IME-mod.patch
2044997569 8513 Emacs-23.1-IME-mod.patch

 Emacs-23.1-IME.patch,Emacs-23.1-IME-mod.patchの順にパッチを適用します.
[Path: /c/tmp]# patch -p2 < ./Emacs-23.1-IME.patch
patching file emacs-23.1/lib-src/makefile.w32-in
patching file emacs-23.1/lisp/loadup.el
patching file emacs-23.1/nt/configure.bat
patching file emacs-23.1/src/keyboard.c
patching file emacs-23.1/src/w32.c
patching file emacs-23.1/src/w32fns.c
patching file emacs-23.1/src/w32term.c
patching file emacs-23.1/src/w32term.h
patching file emacs-23.1/src/window.c
patching file emacs-23.1/lisp/international/w32-ime.el
[Path: /c/tmp]# patch -p2 < ./Emacs-23.1-IME-mod.patch
patching file emacs-23.1/src/w32.c
patching file emacs-23.1/src/w32fns.c
patching file emacs-23.1/src/w32term.c
patching file emacs-23.1/src/w32term.h


 Cygwinでmakeする場合,gmake.defsを修正する必要があります.パッチファイルを用意してもいいんですが,ここでは sedを使ったやり方を紹介します.
[Path: /c/tmp]# cd emacs-23.1/nt
[Path: /c/tmp/emacs-23.1/nt]# cp gmake.defs gmake.defs.back 
[Path: /c/tmp/emacs-23.1/nt]# sed -e 's/#ifeq /ifeq /g' -e 's/#CURDIR/CURDIR/g' -e 's/#endif/endif/g' gmake.defs.back > gmake.defs
[Path: /c/tmp/emacs-23.1/nt]# diff gmake.defs gmake.defs.back
87,89c87,89
< ifeq "$(shell cygpath $(CURDIR))" "$(CURDIR)"
< CURDIR                := $(shell cygpath -m $(CURDIR))
< endif
---
> #ifeq "$(shell cygpath $(CURDIR))" "$(CURDIR)"
> #CURDIR               := $(shell cygpath -m $(CURDIR))
> #endif


外部DLL準備

 画像フォーマットを対応させる場合,以下のファイルを入手します.ここでは C:\tmp\dllに格納します.
[Path: /c/tmp]# ls -lR /c/tmp/dll
/c/tmp/dll:
合計 1377
drwxr-xr-x 2 katsu mkpasswd      0 Aug 11 07:01 X11/
-rw-r--r-- 1 katsu mkpasswd  16189 Aug 11 06:55 gif_lib.h
-rw-r--r-- 1 katsu mkpasswd   1800 Aug 11 06:55 jconfig.h
-rw-r--r-- 1 katsu mkpasswd  14488 Aug 11 06:55 jerror.h
-rw-r--r-- 1 katsu mkpasswd  14567 Aug 11 06:56 jmorecfg.h
-rwxr-xr-x 1 katsu mkpasswd 127488 Aug 11 06:57 jpeg62.dll*
-rw-r--r-- 1 katsu mkpasswd  46359 Aug 11 06:57 jpeglib.h
-rwxr-xr-x 1 katsu mkpasswd   2245 Jun  4 22:41 libpng12-config*
-rw-r--r-- 1 katsu mkpasswd   4645 Aug 11 06:57 libpng12.def
-rwxr-xr-x 1 katsu mkpasswd 260096 Jun  4 22:48 libpng12.dll*
-rwxr-xr-x 1 katsu mkpasswd 376832 Aug 11 06:57 libtiff3.dll*
-rwxr-xr-x 1 katsu mkpasswd  31232 Aug 11 06:57 libungif4.dll*
-rw-r--r-- 1 katsu mkpasswd 153839 Jun  4 22:40 png.h
-rw-r--r-- 1 katsu mkpasswd  45382 Jun  4 22:40 pngconf.h
-rw-r--r-- 1 katsu mkpasswd   4959 Oct 25  2004 simx.h
-rw-r--r-- 1 katsu mkpasswd  33725 Aug 11 06:57 tiff.h
-rw-r--r-- 1 katsu mkpasswd   2968 Aug 11 06:57 tiffconf.h
-rw-r--r-- 1 katsu mkpasswd  23216 Aug 11 06:57 tiffio.h
-rw-r--r-- 1 katsu mkpasswd    410 Aug 11 06:57 tiffvers.h
-rwxr-xr-x 1 katsu mkpasswd  52224 Aug 11 06:57 xpm4.dll*
-rw-r--r-- 1 katsu mkpasswd   9544 Jul 20  2005 zconf.h
-rw-r--r-- 1 katsu mkpasswd  66188 Jul 18  2005 zlib.h
-rwxr-xr-x 1 katsu mkpasswd  75264 Jul 20  2005 zlib1.dll*

/c/tmp/dll/X11:
合計 16
-rw-r--r-- 1 katsu mkpasswd 16286 Jan 25  2004 xpm.h

 上記のファイルは,GnuWin32(http://gnuwin32.sourceforge.net/packages.html)から入手します.必要なファイルは以下のとおりです.

注意事項

 準備は以上になります.ここからはコンパイル作業になりますが,その前にgccがちゃんと動作するか確認してください.以下のように表示されれば問題ないと思います.
[Path: /c/tmp]# gcc --version
gcc-3 (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.

 cygwinのgcc 3.4.4-999をインストールしている自分は,以下のような手順を事前に行っています.もし,上記のように表示されない場合は試してみると良いでしょう.
[Path: /c/tmp]# cp -ip /usr/bin/cc-3.exe /usr/bin/cc.exe
[Path: /c/tmp]# cp -ip /usr/bin/cpp-3.exe /usr/bin/cpp.exe
[Path: /c/tmp]# cp -ip /usr/bin/gcc-3.exe /usr/bin/gcc.exe
[Path: /c/tmp]# cp -ip /usr/bin/gccbug-3 /usr/bin/gccbug
[Path: /c/tmp]# cp -ip /usr/bin/gcov-3.exe /usr/bin/gcov.exe
[Path: /c/tmp]# cp -ip /usr/bin/i686-pc-cygwin-gcc-3.exe /usr/bin/i686-pc-cygwin-gcc.exe
[Path: /c/tmp]# cp -ip /usr/bin/protoize-3.exe /usr/bin/protoize.exe
[Path: /c/tmp]# cp -ip /usr/bin/unprotoize-3.exe /usr/bin/unprotoize.exe
[Path: /c/tmp]# cp -ip /usr/bin/c++-3.exe /usr/bin/c++.exe
[Path: /c/tmp]# cp -ip /usr/bin/g++-3.exe /usr/bin/g++.exe
[Path: /c/tmp]# cp -ip /usr/bin/i686-pc-cygwin-c++-3.exe /usr/bin/i686-pc-cygwin-c++.exe
[Path: /c/tmp]# cp -ip /usr/bin/i686-pc-cygwin-g++-3.exe /usr/bin/i686-pc-cygwin-g++.exe

 Cygwinのmakeはバージョン 3.80を使うようにしてください.09' 8月時点の最新は 3.81ですが,NTEmacsのコンパイルには使えません(makeに失敗します)
 make 3.80は現在公式のCygwinサイトからは入手できようなので,Mozillaのサイトから辿れるparacodaあるいはgo-Monoから入手し,どこかPATHの通ったディレクトリにコピーしてください.(コピーはmake.exeのみでOK)
 参考までに,私の場合,/pub/bin/make380として 3.80の makeを用意しており,Emacsのコンパイル時に alias指定で対応しています.
[Path: /c/tmp]# which make
/usr/bin/make
[Path: /c/tmp]# make -version
GNU Make 3.81
Copyright (C) 2006  Free Software Foundation, Inc.
これはフリーソフトウェアです. 利用許諾についてはソースを
ご覧ください.
商業性や特定の目的への適合性の如何に関わらず, 無保証です.

This program built for i686-pc-cygwin
[Path: /c/tmp]# which make380
/pub/bin/make380
[Path: /c/tmp]# make380 -version
GNU Make 3.80
Copyright (C) 2002  Free Software Foundation, Inc.
これはフリーソフトウェアです. 利用許諾についてはソースを
ご覧ください.
商業性や特定の目的への適合性の如何に関わらず, 無保証です.
[Path: /c/tmp]# alias make=make380
[Path: /c/tmp]# make -version
GNU Make 3.80
Copyright (C) 2002  Free Software Foundation, Inc.
これはフリーソフトウェアです. 利用許諾についてはソースを
ご覧ください.
商業性や特定の目的への適合性の如何に関わらず, 無保証です.


コンパイル

 それではコンパイルの手順を説明します.まずconfigureでmakefileを作成します.最初にconfigure.batの改行はCRLFにして,それから configureを実行します.
 なお,configure.batの結果,「XXX header available, building with XXX support.」にならずに「xxx.h not found, building without XXX support.」と表示された場合,画像関連のライブラリが正しく設定できていないため,画像フォーマット対応のバイナリは作成できませんので注意してください.
 特に,simx.hは見逃しがちのようなので,忘れないようにしましょう(xpm-3.5.1-1-src.zipの src/xpm/3.5.1/libXpm-3.5.1-src/lib/simx.hにあります)
[Path: /c/tmp]# cd /c/tmp/emacs-23.1/nt
[Path: /c/tmp/emacs-23.1/nt]# # nkfがある場合
[Path: /c/tmp/emacs-23.1/nt]# nkf --overwrite -Lw configure.bat
[Path: /c/tmp/emacs-23.1/nt]# # nkfがないが,dos2unix(cygutils)がある場合
[Path: /c/tmp/emacs-23.1/nt]# unix2dos configure.bat
[Path: /c/tmp/emacs-23.1/nt]# ./configure.bat --prefix /pub/opt/emacs/23.1.1 --with-gcc --no-debug --no-cygwin --enable-w32-ime --cflags -DIME_CONTROL --cflags -DRECONVERSION --cflags -DCLIENTEDGE --cflags -D_UNICODE --cflags=-I/c/tmp/dll
Checking for 'cp'...
Checking for 'rm'...
Checking for Windows Version ...
Checking whether W32 API headers are too old...

c:\tmp\emacs-23.1\nt> gcc -DIME_CONTROL -DRECONVERSION -DCLIENTEDGE -D_UNICODE -I/c/tmp/ -DWINVER=0x0501 -mno-cygwin -c junk.c
Using 'gcc'
Checking for libpng...
...PNG header available, building with PNG support.
Checking for jpeg-6b...
...JPEG header available, building with JPEG support.
Checking for libgif...
...GIF header available, building with GIF support.
Checking for tiff...
...TIFF header available, building with TIFF support.
Checking for libXpm...
...XPM header available, building with XPM support.

<snip>

Emacs successfully configured.
Run `make' to build, then run `make install' to install.

 画像フォーマット対応が不要な場合は以下のように configure.batを実行してください.
[Path: /c/tmp]# cd /c/tmp/emacs-23.1/nt
[Path: /c/tmp/emacs-23.1/nt]# # nkfがある場合
[Path: /c/tmp/emacs-23.1/nt]# nkf --overwrite -Lw configure.bat
[Path: /c/tmp/emacs-23.1/nt]# # nkfがないが,unix2dos(cygutils)がある場合
[Path: /c/tmp/emacs-23.1/nt]# unix2dos configure.bat
[Path: /c/tmp/emacs-23.1/nt]# ./configure.bat --prefix /pub/opt/emacs/23.1.1 --with-gcc --no-debug --no-cygwin --enable-w32-ime --cflags -DIME_CONTROL --cflags -DRECONVERSION --cflags -DCLIENTEDGE --cflags -D_UNICODE --without-png --without-jpeg --without-gif --without-tiff --without-xpm

 makefileが作成できたら,makeを実行します.
 なお,makeの際,コンパイルオプションを指定すると環境によっては動作の軽いバイナリができます.
 ちなみに,私の環境(Intel Core2Duo 6600/Memory 2GB)でmake bootstrapは約35分かかりました.
[Path: /c/tmp/emacs-23.1/nt]# make -version
GNU Make 3.80
Copyright (C) 2002  Free Software Foundation, Inc.
これはフリーソフトウェアです. 利用許諾についてはソースを
ご覧ください.
[Path: /c/tmp/emacs-23.1/nt]# make ARCH_CFLAGS="-D_X86_=1 -c -mno-cygwin -march=pentium-m -msse3 -O3 -mfpmath=sse -pipe" bootstrap

 最後にmake installします.make installが成功したら,画像関係のDLLを emacs.exeと同じディレクトリにコピーして終了です.
[Path: /c/tmp/emacs-23.1/nt]# make install
[Path: /c/tmp/emacs-23.1/nt]# cd /c/tmp/dll
[Path: /c/tmp/dll]# cp *dll /pub/opt/emacs/23.1.1/bin

 NTEmacsの起動後に「M-: (eval 'image-types)」と実行して,「(png gif tiff jpeg xpm xbm pbm)」が表示されればOKです. pict090813-001.png
スポンサーサイト

テーマ : UNIX/Linux
ジャンル : コンピュータ

コメントの投稿

非公開コメント

リンク
最新コメント
カテゴリー
最近の記事
月別アーカイブ
ブログ内検索
最新トラックバック
上記広告は1ヶ月以上更新のないブログに表示されています。新しい記事を書くことで広告を消せます。