« ハッシュタグを自動追加する twicli プラグインを作った | トップページ | FreeBSD 8.1-RELEASE on Oracle VM VirtualBox 4.0 »

2010年10月28日 (木)

MinGW を使った Vim のビルドに挑戦

Windows で MinGW を使った Vim のビルドに挑戦してみました。


また、 Kaoriya 版 Vim 7.2 のパッチを Mercurial の MQ で管理してみます。


前準備


MinGW は C と C++ のコンパイラのみインストールしました。


ほかに GnuWin32 もインストール済みです。


ソースコードの取得


まず Vim のリポジトリを Mercurial SCM で複製します。


私は TortoiseHg に付いているコマンドを使ってますが。



hg clone https://vim.googlecode.com/hg/ vim
cd vim

Kaoriya 版のパッチの取り込み


vim オリジナルが vim ディレクトリに、Kaoriya 版が vim72-kaoriya-w32j ディレクトリにあるとします。


Kaoriya 版のパッチが Mercurial でどのリビジョンを対象にしているか調べます。



hg log --keyword "7.2.416"

対象のリビジョンに更新します。



hg update e9c9f37be306

MQ にパッチを取り込みます。事前にエクステンションを有効にしておく必要があります。


MQ について、詳しくはこちら。




hg init --mq
hg qimport ..\vim72-kaoriya-w32j\patches\kaoriya-hg.diff
hg commit --mq -m "hg qimport ..\vim72-kaoriya-w32j\patches\kaoriya-hg.diff"

thinca さんの記事で公開されているリビジョンに更新します。




hg update 3331756e4232

thinca さんのパッチを MQ に取り込みます。



hg qimport --force --name kaoriya-hg.diff http://gist.github.com/raw/470028/cb2c6a95120e3527fab148d550c5b02feca1dada/kaoriya.diff

以下のファイルのエンコーディングが正しく反映されなかったので、パッチファイル (.hg\patches\kaoriya-hg.diff) を直接開いて、これらのファイルの個所をオリジナルの Kaoriya パッチに戻しました。



  • runtime/tutor/tutor.ja.euc

  • runtime/tutor/tutor.ja.sjis

  • src/kaoriya.mnf

  • src/po/ja.po

  • src/po/ja.sjis.po


パッチファイルを Vim で開くときに、以下のようにバイナリモードにすると安全です。



:set binary
:e

直したパッチを適用して、パッチの更新をしておき、適用解除します。



hg qpush
hg qrefresh
hg qpop

パッチを MQ にコミットします。



hg commit --mq -m "hg qimport --force --name kaoriya-hg.diff http://gist.github.com/raw/470028/cb2c6a95120e3527fab148d550c5b02feca1dada/kaoriya.diff"

default ブランチの最新のリビジョン (このとき Vim 7.3.035) に更新します。



hg update default

パッチを適用します。



hg qpush

一部、パッチの適用に失敗したので、.rej ファイルを見ながら修正して、



hg qrefresh
hg qpop
hg commit --mq -m "Vim 7.3.035"

パッチの修正


src/po/ja.sjis.po は書式が古いようなので (今はバックスラッシュのエスケープが不要らしい)、src/po/ja.po を元に直します。


src/po/ja.po を開き、以下の行を探します。



"Content-Type: text/plain; charset=euc-jp\n"

これを以下のように変え、src/po/ja.sjis.po のファイルに Shift_JIS エンコーディングで保存します。

"Content-Type: text/plain; charset=cp932\n"

パッチを作って MQ にコミットします。



hg qnew ja.sjis.po
hg commit --mq -m "remove backslash escape from ja.sjis.po"

取り敢えず make


いよいよ make です。



cd src
mingw32-make -f Make_ming.mak OLE=yes

コンパイルエラーが出ちゃいました。



gcc -c -Iproto -DWIN32 -DWINVER=0x0400 -D_WIN32_WINNT=0x0400 -DHAVE_PATHDEF -DFE
AT_BIG -DHAVE_GETTEXT -DHAVE_LOCALE_H -DDYNAMIC_GETTEXT -DFEAT_OLE -DFEAT_CSCOPE
-DFEAT_NETBEANS_INTG -DFEAT_GUI_W32 -DFEAT_CLIPBOARD -DFEAT_MBYTE -DFEAT_MBYTE_
IME -DDYNAMIC_IME -DDYNAMIC_ICONV -pipe -w -march=i386 -Wall -O3 -fomit-frame-po
inter -freg-struct-return -s gui_w32.c -o gobj/gui_w32.o
In file included from gui_w32.c:47:0:
gui_w48.c:3431:1: error: static declaration of 'convert_filter' follows non-stat
ic declaration
gui_w48.c:3285:14: note: previous declaration of 'convert_filter' was here
mingw32-make: *** [gobj/gui_w32.o] Error 1

static 宣言になっているから関数が見えないというような意味かと思い、山勘で直してみました。



diff --git a/src/gui_w48.c b/src/gui_w48.c
--- a/src/gui_w48.c
+++ b/src/gui_w48.c
@@ -3427,7 +3427,7 @@
*
* Keep in sync with convert_filterW() above!
*/
- static char_u *
+ char_u *
convert_filter(char_u *s)
{
char_u *res;

やり直してみます。



mingw32-make -f Make_ming.mak clean
mingw32-make -f Make_ming.mak OLE=yes

今度はエラーが出ずに終了したので、これを新しくパッチにして MQ にコミットしました。


日本語のメッセージの反映


今度は日本語のメッセージのファイルを作ります。



cd src\po
set LANGUAGE=ja.sjis
set VIMRUNTIME=..\..\runtime
mingw32-make -f Make_ming.mak
mingw32-make -f Make_ming.mak ja.sjis.mo
set LANGUAGE=ja
copy ja.sjis.mo ja.mo
mingw32-make -f Make_ming.mak install

また関連 DLL を Kaoriya 版からコピーします。



copy ..\vim72-kaoriya-w32j\intl.dll src\libintl.dll
copy ..\vim72-kaoriya-w32j\iconv.dll src\

Kaoriya 版の便利スクリプトの取り込み


Kaoriya 版だけに入っているスクリプトをコピーします。



robocopy ..\vim72-kaoriya-w32j . *.vim /s /xc /xn /xo /xx
robocopy ..\vim72-kaoriya-w32j . *rc

これらのスクリプトを MQ でパッチ化します。



hg qnew kaoriya-scripts
hg add glob:**.vim
hg add vimrc
hg add gvimrc
hg qrefresh
hg commit --mq

Bitbucket に入れてみた


書き出してみると結構手順が多いのと、自分が楽をするために、 MQ リポジトリを
Bitbucket に入れてみました。


この場合、手順としてはこんな感じになります。



hg clone https://vim.googlecode.com/hg/ vim
cd vim
hg init --mq
hg pull --mq -u http://bitbucket.org/watagashi/vimpatches
hg qpush --all

Vim 本体の最新のリビジョンをプルするときは、事前に qpop しておくのを忘れないように。



hg qpop --all
hg pull -u
hg pull --mq -u http://bitbucket.org/watagashi/vimpatches
hg qpush --all

ビルドはこんな感じのバッチで。



« ハッシュタグを自動追加する twicli プラグインを作った | トップページ | FreeBSD 8.1-RELEASE on Oracle VM VirtualBox 4.0 »

プログラミング」カテゴリの記事

コメント

コメントを書く

(ウェブ上には掲載しません)

トラックバック


この記事へのトラックバック一覧です: MinGW を使った Vim のビルドに挑戦:

« ハッシュタグを自動追加する twicli プラグインを作った | トップページ | FreeBSD 8.1-RELEASE on Oracle VM VirtualBox 4.0 »

Social connection

  • Check

最近のトラックバック

2019年8月
        1 2 3
4 5 6 7 8 9 10
11 12 13 14 15 16 17
18 19 20 21 22 23 24
25 26 27 28 29 30 31

これも見とるよ

その他

無料ブログはココログ