vimをソースからコンパイルしてインストールしてみた

いわゆる野良ビルドってやつです。
前からやろうと思っていたけれど、yumやaptの世代なので自前でmakeとかほぼ経験なしで敬遠してた。しかし、if_rubyVim 7.2が欲しくなったのでやってみることに。
まずはソースを取得。

svn co https://vim.svn.sourceforge.net/svnroot/vim/vim7

普通に考えたらここで、 ./configure && make && sudo make install とかでいいのだろうけれど、重要なのは ./configure の引数。ここがよくわかってなかったので敬遠してた。
結論から言うと、今回は以下のようにした。

./configure \
--with-features=huge \
--enable-multibyte \
--enable-rubyinterp \
--enable-pythoninterp \
--enable-perlinterp \
--enable-gpm \
--enable-cscope \
--enable-fontset

以下、今回の作業を通してわかったこと。(大いに間違ってる可能性あり)。

  • --prefix=PATH でインストール先を指定する。
    • このディレクトリに bin/ や man/ ができる。
    • デフォルトは /usr/local
  • --enable-FEATURE で機能が有効になる。
  • --with-PACKAGE でパッケージが有効になる。
  • --disable-FEATURE --without-PACKAGE でそれぞれ無効になる。
  • FEATURE や PACKAGE の一覧は ./configure --help で見れる。
  • --with-features で大まかな機能を決める。
    • tiny, small, normal, big, huge の中から選ぶ。右に行くほど大きい。デフォルトは normal。
    • 具体的にどれで何の機能が入るのかはよく分からなかったorz
  • --enable-rubyinterp を入れるには ruby-devel が別途必要。
    • 他の interp でも必要だと思われる(最初から入っていたので未確認)。
  • --enable-perlinterp を入れるには perl 側に ExtUtils::Embed モジュールが必要。

以下 FEATURE と PACKAGE のリスト。 --help から抜粋。

Optional Features:
--disable-option-checking ignore unrecognized --enable/--with options
--disable-FEATURE do not include FEATURE (same as --enable-FEATURE=no)
--enable-FEATURE[=ARG] include FEATURE [ARG=yes]
--disable-darwin Disable Darwin (Mac OS X) support.
--disable-selinux Don't check for SELinux support.
--disable-xsmp Disable XSMP session management
--disable-xsmp-interact Disable XSMP interaction
--enable-mzschemeinterp Include MzScheme interpreter.
--enable-perlinterp Include Perl interpreter.
--enable-pythoninterp Include Python interpreter.
--enable-tclinterp Include Tcl interpreter.
--enable-rubyinterp Include Ruby interpreter.
--enable-cscope Include cscope interface.
--enable-workshop Include Sun Visual Workshop support.
--disable-netbeans Disable NetBeans integration support.
--enable-sniff Include Sniff interface.
--enable-multibyte Include multibyte editing support.
--enable-hangulinput Include Hangul input support.
--enable-xim Include XIM input support.
--enable-fontset Include X fontset output support.
--enable-gui=OPTS X11 GUI default=auto OPTS=auto/no/gtk/gtk2/gnome/gnome2/motif/athena/neXtaw/photon/carbon
--enable-gtk-check If auto-select GUI, check for GTK default=yes
--enable-gtk2-check If GTK GUI, check for GTK+ 2 default=yes
--enable-gnome-check If GTK GUI, check for GNOME default=no
--enable-motif-check If auto-select GUI, check for Motif default=yes
--enable-athena-check If auto-select GUI, check for Athena default=yes
--enable-nextaw-check If auto-select GUI, check for neXtaw default=yes
--enable-carbon-check If auto-select GUI, check for Carbon default=yes
--disable-gtktest Do not try to compile and run a test GTK program
--disable-acl Don't check for ACL support.
--disable-gpm Don't use gpm (Linux mouse daemon).
--disable-sysmouse Don't use sysmouse (mouse in *BSD console).
--disable-nls Don't support NLS (gettext()).

Optional Packages:
--with-PACKAGE[=ARG] use PACKAGE [ARG=yes]
--without-PACKAGE do not use PACKAGE (same as --with-PACKAGE=no)
--with-mac-arch=ARCH current, intel, ppc or both
--with-local-dir=PATH search PATH instead of /usr/local for local libraries.
--without-local-dir do not search /usr/local for local libraries.
--with-vim-name=NAME what to call the Vim executable
--with-ex-name=NAME what to call the Ex executable
--with-view-name=NAME what to call the View executable
--with-global-runtime=DIR global runtime directory in 'runtimepath'
--with-modified-by=NAME name of who modified a release version
--with-features=TYPE tiny, small, normal, big or huge (default: normal)
--with-compiledby=NAME name to show in :version message
--with-plthome=PLTHOME Use PLTHOME.
--with-python-config-dir=PATH Python's config directory
--with-tclsh=PATH which tclsh to use (default: tclsh8.0)
--with-x use the X Window System
--with-gtk-prefix=PFX Prefix where GTK is installed (optional)
--with-gtk-exec-prefix=PFX Exec prefix where GTK is installed (optional)
--with-gnome-includes=DIR Specify location of GNOME headers
--with-gnome-libs=DIR Specify location of GNOME libs
--with-gnome Specify prefix for GNOME files
--with-motif-lib=STRING Library for Motif
--with-tlib=library terminal library to be used

ええと、ここにあるものは指定しない限り有効にならないって認識でいいんですかね?
もう少し漁ったら src/Makefile 内の

# CONFIGURE - configure arguments {{{1

って行以降に一部の項目についての詳しそうな説明を発見。さすがに長いので転載は省略。
以下、今回の作業で詰まったところ。

./configure

いざ ./configure して src/auto あたりに出てくる成果物を確認すると、 rubyinterp が有効になってないっぽい。どうやら ruby-devel が必要のようで。そりゃそうだ。

yum -y install ruby-devel

これで rubyinterp も有効になった。

make

make すると途中でコンパイルエラー。そうすんなりいかせて貰えないのですね…。
perl.h とかがないと言われた。 find したら見つかったので、 -I で指定されてないのが問題のようだ。
src/auto/config.log を調べると、 RUBY_CFLAGS や PYTHON_CFLAGS に -I オプションが指定されているのに対して PERL_CFLAGS の中身は空。恐らくこれが原因だろうと睨んで PERL_CFLAGS を設定している箇所を grep して探す。
たどっていくと、ExtUtils::Embed モジュールを使っている箇所を発見。しかし私の環境には入っていなかった。これが必要なようだ。 cpan でいいと思うが、軟弱者なので yum で入れる。

yum -y install perl-ExtUtils-Embed

これでようやく make 通過。しかし ExtUtils::Embed とか知らんですよ。

sudo make install

何事もなく完了。

慣れてないとはいえ、この程度の作業に1日以上もかかってしまうあたりまだまだだなぁと感じた。特に英語の読解はキツイ…全然できないので。それだけで相当疲れた。まあともあれようやく +rubyVim 7.2 が使える。
長々と書いたせいでまとまりのない内容になってしまった。昔から文章をまとめるのは苦手なんです…。