Text::MeCab 0.12でコンパイル失敗

Perl 5.8.5のマシンでText::MeCabをmakeしたらうまくいかなかったので調べてみました。

$ perl Makefile.PL
ExtUtils::MakeMaker version 6.25 required--this is only version 6.17 at Makefile.PL line 8.
BEGIN failed--compilation aborted at Makefile.PL line 8.

ExtUtils::MakeMakerのバージョンが古いと怒られているわけですが、MakeMakerはPerl本体と共に配布されているため、おいそれと単体でバージョンアップするわけにもいきません。これを実行しているマシンのOSはRed Hat Enterprise Linux AS 4なので、Perlはパッケージ管理下にあるため、Perlそのものも勝手にバージョンアップするわけにも行かなかったりします。
そこで、Makefile.PLからExtUtils::MakeMakerのバージョンの指定を削除して再び挑戦してみました。

$ perl Makefile.PL
Path to mecab config? [/usr/bin/mecab-config]
detected mecab version 0.92
Using compiler flags ' -DMECAB_MAJOR_VERSION=0 -DMECAB_MINOR_VERSION=92'...
Using linker flags '-L/usr/lib -lmecab -lstdc++'...
Text::MeCab needs to know what encoding you built your dictionary with
to properly execute tests.

Encoding of your mecab dictionary? (shift_jis, euc-jp, utf8) [euc-jp] utf8
Using utf8 as your dictionary encoding
Checking if your kit is complete...
Looks good
Writing Makefile for Text::MeCab

Makefileの生成は成功しました。makeしてみると次のようになります。

$ make
cp lib/Text/MeCab/Node.pod blib/lib/Text/MeCab/Node.pod
cp lib/Text/MeCab.pm blib/lib/Text/MeCab.pm
cp lib/Text/MeCab.xs blib/lib/Text/MeCab.xs
/usr/bin/perl /usr/lib/perl5/5.8.5/ExtUtils/xsubpp  -typemap /usr/lib/perl5/5.8.5/ExtUtils/typemap  MeCab.xs > MeCab.xsc && mv MeCab.xsc MeCab.c
gcc -c   -DMECAB_MAJOR_VERSION=0 -DMECAB_MINOR_VERSION=92 -I src -O2 -g -pipe -m32 -fsigned-char   -DVERSION=\"0.12\" -DXS_VERSION=\"0.12\" -fPIC "-I/usr/lib/perl5/5.8.5/ppc-linux-thread-multi/CORE"   MeCab.c
Running Mkbootstrap for Text::MeCab ()
chmod 644 MeCab.bs
rm -f blib/arch/auto/Text/MeCab/MeCab.so
gcc  -shared -L/usr/local/lib MeCab.o  -o blib/arch/auto/Text/MeCab/MeCab.so   -lmecab
chmod 755 blib/arch/auto/Text/MeCab/MeCab.so
cp MeCab.bs blib/arch/auto/Text/MeCab/MeCab.bs
chmod 644 blib/arch/auto/Text/MeCab/MeCab.bs
Manifying blib/man3/Text::MeCab::Node.3pm
Manifying blib/man3/Text::MeCab.3pm
/usr/bin/perl "-Iblib/arch" "-Iblib/lib" Build.PL Build
Path to mecab config? [/usr/bin/mecab-config]
detected mecab version 0.92
Using compiler flags ' -DMECAB_MAJOR_VERSION=0 -DMECAB_MINOR_VERSION=92'...
Using linker flags '-L/usr/lib -lmecab -lstdc++'...
Text::MeCab needs to know what encoding you built your dictionary with
to properly execute tests.

Encoding of your mecab dictionary? (shift_jis, euc-jp, utf8) [euc-jp] utf8
Using utf8 as your dictionary encoding
Deleting _build
Creating custom builder _build/lib/MyModuleBuilder.pm in _build/lib
Too early to specify a build action 'Build'.  Do 'Build Build' instead.
make: *** [Build] エラー 9

ビルドに成功したのですが、その後に、Build.PLが変に実行されてエラーが出ています。Build.PLっていらないのではないでしょうか?
ということで、Build.PLを削除して始めからやり直したらエラーなしにビルドが成功しました。

結果として次の対策を行いました。

  • Makefile.PLからExtUtils::MakeMakerのバージョンの指定を削除した。
  • Build.PLを削除した。
  • MANIFESTからBuild.PLの記述を除去した。

これをまとめたパッチを作りました。
http://www.emaillab.org/spamassassin/tools/Text-MeCab-0.12-remove-Build.PL.patch

この対策でよいのかどうかはわかりませんが、こういうことがあったという報告です。