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
この対策でよいのかどうかはわかりませんが、こういうことがあったという報告です。