« ハッシュタグを自動追加する 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 »

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

コメント

コメントを書く

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

トラックバック

この記事のトラックバックURL:
http://app.cocolog-nifty.com/t/trackback/78033/49865329

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

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

Social connection

  • Check

最近のトラックバック

2017年9月
          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

これも見とるよ

その他

無料ブログはココログ