Vimを--enable-perlinterpでコンパイルする際のエラーに対処する
結論
–enable-perlinterpするならperl-ExtUtils-Embedが必要。
困ったこと
例えば新しい環境でperlインタプリタ付きのVimをコンパイルする。
perl-develはどう考えても必要なのでインストールしておく。
./configure --enable-fail-if-missing --with-features=huge --enable-perlinterp=yes
この状態でconfigureは通る。が、makeには失敗する。
/usr/bin/perl -e 'unless ( $] >= 5.005 ) { for (qw(na defgv errgv)) { print "#define PL_$_ $_\n" }}' > auto/if_perl.c
/usr/bin/perl /usr/share/perl5/ExtUtils/xsubpp -prototypes -typemap \
/usr/share/perl5/ExtUtils/typemap if_perl.xs >> auto/if_perl.c
Can't open perl script "/usr/share/perl5/ExtUtils/xsubpp": そのようなファイルやディレクトリはありません
perlのExtUtilsのxsubppが必要なのだな、とわかるので、それが含まれているperl-ExtUtils-MakeMakerをインストールする。
すると別の箇所で失敗するようになる。
objects/ex_docmd.o:(.rodata+0x4648): `ex_perl' に対する定義されていない参照です
objects/ex_docmd.o:(.rodata+0x4660): `ex_perldo' に対する定義されていない参照です
objects/main.o: 関数 `getout' 内:
/home/wolfdog/dev/vim/src/main.c:1484: `perl_end' に対する定義されていない参照です
objects/buffer.o: 関数 `free_buffer' 内:
/home/wolfdog/dev/vim/src/buffer.c:666: `perl_buf_free' に対する定義されていない参照です
objects/window.o: 関数 `win_free' 内:
/home/wolfdog/dev/vim/src/window.c:4528: `perl_win_free' に対する定義されていない参照です
collect2: エラー: ld はステータス 1 で終了しました
link.sh: Linking failed
このエラーメッセージ内の情報で調べてもほとんど有用な情報は出てこないので頭を抱える。
解決策
perl-ExtUtils-Embedをインストールすれば良い。というか、このパッケージはMakeMakerを含んでいるので、最初からこれだけインストールすれば問題ない。
余談
実はVimで–enable-perlinterp=yesするときに必要なもの、という観点で調べるとあっさり見つかった。
まあエラーメッセージに対応する情報を残しておく、ということで。