2006年4月16日日曜日

【続編】Mac 環境構築 その5 - vim のコンパイル [mac]

このエントリー で Intel Mac 用 vim のコンパイルを行った時,

私は普段 vim に香り屋パッチをあてて使用しているが,これだとコンパイルエラーが出るようだ.
--中略--
中身を詳しく解析するのは時間がかかりそうだったので,ひとまず私は src/gui_mac.c の 3072行目,
#ifdef USE_IM_CONTROL

#if 0
とすることで逃げてしまった.
--中略--
ありゃ,しかも ./src/Vim --version してみたら,migemo も -migemo になっているではないか.

という,なんとも中途半端な結果だった.

vim も遂にバージョン7がベータとなり (現時点では 70d),これを機に vim70d で作り直してみたのでご報告.前回作った時は Intel Mac に対しての対応状況も悪く,configure オプション や CFLAGS をいろいろハックしたが,現状ではかなり進歩した模様.

src/INSTALLmac.txt を読むと,デフォルトで universal binary を作るとのことだが,

$ ./configure --with-features=big --enable-multibyte && make
だと
$ file ./src/Vim
の結果は,
./src/Vim: Mach-O executable i386
だった.

$ ./configure --with-mac-arch=both --with-features=big --enable-multibyte && make
とすると
./src/Vim: Mach-O universal binary with 2 architectures
./src/Vim (for architecture i386): Mach-O executable i386
./src/Vim (for architecture ppc):  Mach-O executable ppc
となる.
めでたし,めでたし,というわけだ.

さて,ここから前回も苦戦した香り屋パッチをあててみよう.
vim7用の香り屋パッチは,既に提供されている Windows 用の香り屋版 vim から取得することができる.現時点では
http://www.kaoriya.net/testdir/vim7-daily-w32j.exe
と,テストディレクトリに入っているが,その時点の最新版を取得してこよう (そのうち Windows 版は正規に公開されるだろうし,vim6 の時のように UN*X 用の差分パッチとして公開してくれるかもしれない).

ちなみに Windows 用の 香り屋 vim から拝借したパッチは,src/auto/configure の部分が抜けているので,ここに関しては vim6 用の香り屋パッチを参考につけ足しておく (基本的にコピペで OK).

結論から言うと,パッチをあてて
$ ./configure --with-features=big --enable-multibyte && make && sudo make install
で,Intel 用の vim (+kaoriya) がインストールされる.


ここからは実験的要素なので興味のある方だけ読んで頂ければ良いが,試しに universal binary を作ろうと,--with-mac-arch=both を加えて configure すると config.log に
conftest.c:73:20: error: migemo.h: No such file or directory
と出る.

ということで,今度は
$ export CFLAGS="-I/usr/local/include"
してから configure すると,config.log には
/usr/bin/ld: -syslibroot: multiply specified
collect2: ld returned 1 exit status
/usr/bin/ld: -syslibroot: multiply specified
collect2: ld returned 1 exit status
lipo: can't open input file: /var/tmp//ccU4drZ5.out (No such file or directory)
とのこと.

ならばと,CFLAGS を
$ export CFLAGS="-I/usr/local/include -isysroot /Developer/SDKs/MacOSX10.4u.sdk"
とすると,無事 configure でき,make も通る…が,
$ file ./src/Vim
の結果は,
./src/Vim: Mach-O executable i386
で universal 化されていない.

むむ? しばらく首を傾げて
$ export CFLAGS="-I/usr/local/include -isysroot /Developer/SDKs/MacOSX10.4u.sdk  -arch i386 -arch ppc"
として強制的に universal 化しようとしてバカな私は始めて気付いたのだが,config.log によると
/usr/bin/ld: for architecture ppc
/usr/bin/ld: warning /usr/local/lib/libmigemo.dylib cputype (7, architecture i386) does not match cputype (18) for specified -arch flag: ppc (file not loaded)
/usr/bin/ld: Undefined symbols:
_migemo_open
collect2: ld returned 1 exit status
lipo: can't open input file: /var/tmp//ccEI7fPS.out (No such file or directory)
とのこと.つまり,cmigemo も universal 化されてないといけないわけですね...ってそりゃそうか.


なにはともあれ Intel Mac 用 vim (+kaoriya) のコンパイルには成功ということで,私の胸のつかえも取れましたとさ.


P.S.
Bram 氏の Google での成功と,vim コミュニティの今後の更なる発展を,心よりお祈りします.


0 コメント: