Mac 環境構築 その5 - vim のコンパイル [mac]
Mac 環境構築シリーズ,前回から随分間隔があいてしまった.ゆっくり Mac の設定をする時間が取れなかったのもあるけど,vim のコンパイルで結構手間取ってしまったのだ.結論として,現時点で完全に解決はしていないが,ここまでの作業をまとめておきたいと思う.
vim は +migemo でコンパイルしたいので,まずは qkc (cmigemo のインストールで必要) を入れて cmigemo のインストールを行う.
$ fink install qkc
cmigemo のソースコードはこちら.
KaoriYa.net
tarball を解凍して ./configure, make osx-install で完了 (下記の例では開発版を使用).
$ wget http://kaoriya.net/dist/var/cmigemo-1.3c.tar.bz2 $ tar xjvf cmigemo-1.3c.tar.bz2 $ cd cmigemo-1.3c $ ./configure $ sudo make osx-install
さて本題.
vim のコンパイルはいつものようにソースコードとパッチを取得して,パッチをあてて,好みのオプションで configure して make && sudo make install ではい終わり,だと思っていたらこれが一筋縄では行かなかった.
まず Intel Mac で vim をコンパイルするにはいくつかの work around を必要とするようだ.私が最初に辿りついたのは,「ちくくんblog」さんのこの記事 で,元ネタは vim-mac ML とのこと.
vim-mac ML を覗いてみると,関連しそうなのはこの辺りの投稿だった.
vim-mac (#3703) : Re: vim for OS X/Intel?
vim-mac (#3709) : Re: Patch to fix compilation on intel macs
vim-mac (#3713) : Re: Patch to fix compilation on intel macs
あと,興味がある方はこちらも一読されると良いだろう.
Technical Note TN2137: Building Universal Binaries from "configure"-based Open Source Projects
以上を踏まえて,vim のコンパイルをまとめてみる (作業ディレクトリは /tmp とする).
ソースコードとパッチを取得.
$ cd /tmp $ wget ftp://ftp.vim.org/pub/vim/unix/vim-6.4.tar.bz2 $ wget ftp://ftp.vim.org/pub/vim/extra/vim-6.4-extra.tar.gz $ wget ftp://ftp.vim.org/pub/vim/extra/vim-6.4-lang.tar.gz $ mkdir patches $ cd patches $ wget 'ftp://ftp.vim.org/pub/vim/patches/6.4/6.4.*' $ cd ..
tarball を解凍してパッチをあてる.
$ tar xjvf vim-6.4.tar.bz2 $ tar xzvf vim-6.4-extra.tar.gz $ tar xzvf vim-6.4-lang.tar.gz $ cd vim64 $ for f in ../patches/6.4.* ; do for> patch -p0 < $f for> done
上記,vim-mac ML の #3709 と #3713 のパッチをあてる.自分でコピペして diff file を作ってもいいし,これぐらいであれば手動で編集しても手間ではないだろう.
(※)
上記,vim-mac ML の #3703 を参考に CFLAGS を設定してから,configure (--with-features 以降の configure オプションはお好みで).
$ export CFLAGS="-O -isysroot /Developer/SDKs/MacOSX10.4u.sdk -arch i386 -arch ppc" $ ./configure --disable-dependency-tracking --enable-multibyte --enable-gui=carbon --with-features=big
最後に make && make install.
$ make && sudo make install
…とまあこれでひとまず Vim.app ができるわけだ.
$ file ./src/Vimしてみると,
./src/Vim: Mach-O executable i386と表示され,universal 化されていないようだが,この Intel Mac でしか使わないので気にしないことにする.こだわる方は vim-mac ML #3703 にハック方法があるので参考にされると良いだろう.
私の悩みはここから.
私は普段 vim に香り屋パッチをあてて使用しているが,これだとコンパイルエラーが出るようだ.
作業的には configure する前の上記 (※) のタイミングで香り屋パッチをあてる.現時点での最新パッチは 6.4.000 だ.
KaoriYa.net
$ cd /tmp $ wget http://www.kaoriya.net/dist/vim-6.4-difj.tar.bz2 $ tar xjvf vim-6.4-difj.tar.bz2 $ cd vim-6.4-difj $ cp -Rp * ../vim64/ $ cd ../vim64 $ patch -p0 < diffs/kaoriya.diff
src/Makefile の 1162行目,
CARBONGUI_DEFS -DFEAT_GUI_MAC -arch ppc -fno-common -fpascal-stringsは
CARBONGUI_DEFS -DFEAT_GUI_MAC -arch i386 -arch ppc -fno-common -fpascal-stringsとしておく (念の為).
これで make すると,gui_mac.c でエラーが発生する (長いので適当に省略).
gui_mac.c: In function 'gui_mch_init': gui_mac.c:3086: error: invalid storage class for function 'tsmproc_pre' gui_mac.c:3088: error: invalid storage class for function 'tsmproc_post' gui_mac.c:3092: error: 'tsmproc_pre' undeclared (first use in this function) gui_mac.c:3092: error: (Each undeclared identifier is reported only once gui_mac.c:3092: error: for each function it appears in.) gui_mac.c:3093: error: 'tsmproc_post' undeclared (first use in this function) gui_mac.c: In function 'gui_mch_init': gui_mac.c:2934: warning: 'InitCursor' is deprecated (declared at /Developer/SDKs/MacOSX10.4u.sdk/System/Library/Frameworks/ApplicationServices.framework/Frameworks/QD.framework/Headers/Quickdraw.h:2059) gui_mac.c:2981: warning: 'SetRect' is deprecated (declared at /Developer/SDKs/MacOSX10.4u.sdk/System/Library/Frameworks/ApplicationServices.framework/Frameworks/QD.framework/Headers/Quickdraw.h:2401) gui_mac.c:3036: warning: 'NewRgn' is deprecated (declared at /Developer/SDKs/MacOSX10.4u.sdk/System/Library/Frameworks/ApplicationServices.framework/Frameworks/QD.framework/Headers/Quickdraw.h:2877) gui_mac.c:3080: warning: 'TEStyleNew' is deprecated (declared at /Developer/SDKs/MacOSX10.4u.sdk/System/Library/Frameworks/Carbon.framework/Frameworks/HIToolbox.framework/Headers/TextEdit.h:1405) gui_mac.c:3086: error: invalid storage class for function 'tsmproc_pre' gui_mac.c:3088: error: invalid storage class for function 'tsmproc_post' gui_mac.c:3092: warning: 'NewTSMTEPreUpdateUPP' is deprecated (declared at /Developer/SDKs/MacOSX10.4u.sdk/System/Library/Frameworks/Carbon.framework/Frameworks/HIToolbox.framework/Headers/TSMTE.h:118) gui_mac.c:3092: error: 'tsmproc_pre' undeclared (first use in this function) gui_mac.c:3092: error: (Each undeclared identifier is reported only once gui_mac.c:3092: error: for each function it appears in.) gui_mac.c:3093: warning: 'NewTSMTEPostUpdateUPP' is deprecated (declared at /Developer/SDKs/MacOSX10.4u.sdk/System/Library/Frameworks/Carbon.framework/Frameworks/HIToolbox.framework/Headers/TSMTE.h:129) gui_mac.c:3093: error: 'tsmproc_post' undeclared (first use in this function) lipo: can't open input file: /var/tmp//ccpc9YHb.out (No such file or directory) make[1]: *** [objects/gui_mac.o] Error 1 make: *** [first] Error 2
中身を詳しく解析するのは時間がかかりそうだったので,ひとまず私は src/gui_mac.c の 3072行目,
#ifdef USE_IM_CONTROLを
#if 0とすることで逃げてしまった.私は gvim はほとんど使わない (ターミナルから vim を使う) ので,gui_mac.c のエラーをこうして逃げても問題が起きるかどうかは微妙だが,いずれにしてもお勧めできる対応方法ではない.
ありゃ,しかも ./src/Vim --version してみたら,migemo も -migemo になっているではないか.調べてみたら configure 時のログで,
checking for migemo_open in -lmigemo... noになっている.migemo.h は見つけられているようだが…
というわけで,現時点ではここまで.
完全ではないが,とりあえず使えそうな vim はできたので解析は後回しにして他の作業を進めたいと思う.
【2006/04/16 追記】
vim70d (+kaoriya) のコンパイルに成功しました.
Peace Pipe: 【続編】Mac 環境構築 その5 - vim のコンパイル [mac]
0 コメント:
コメントを投稿