MeCab最新版(0.98)ではText::MeCabのtestが通らないのでMeCab0.96にした

x86_64環境でText::MeCabがビルド出来ない、ってネタはググるとわりと出てくるんだけど、そうでない状況に出くわしたので記録として。

MeCab本体は最新版の0.98、Text::MeCabCPANにある0.20007でテスト。OSはCentOS5.4(x86_64)です。

まず、Makefile.PLは以下のように変更を加える。

        #LIBS         => [ split(/\s+/, $config->{libs}) ],
        LIBS         => `mecab-config --libs`,
        LD           => `mecab-config --cxx`,
        INC          => `mecab-config --cflags`,

これでmake && make testすると、

#   Failed test 'MECAB_NOR_NODE ok'
#   at t/01-sanity.t line 11.

#   Failed test 'MECAB_UNK_NODE ok'
#   at t/01-sanity.t line 12.

#   Failed test 'MECAB_BOS_NODE ok'
#   at t/01-sanity.t line 13.

#   Failed test 'MECAB_EOS_NODE ok'
#   at t/01-sanity.t line 14.
# Looks like you failed 4 tests of 42.
Dubious, test returned 4 (wstat 1024, 0x400)
Failed 4/42 subtests

となり、テストが通らない。どんなテストを実行してるかというと、

if (&Text::MeCab::MECAB_VERSION >= 0.90) {
    ok(eval { my $v = MECAB_NOR_NODE; 1 } && !$@, "MECAB_NOR_NODE ok");
    ok(eval { my $v = MECAB_UNK_NODE; 1 } && !$@, "MECAB_UNK_NODE ok");
    ok(eval { my $v = MECAB_BOS_NODE; 1 } && !$@, "MECAB_BOS_NODE ok");
    ok(eval { my $v = MECAB_EOS_NODE; 1 } && !$@, "MECAB_EOS_NODE ok");
}

複雑な処理をしてるとかじゃなくて、純粋に本体とのAPIとして機能してそうに見える。そして、わりとバージョン依存しそうな雰囲気が漂ってます。

Makefile.PLの設定をあれこれ変更してみたりしたけど、どうにもテストが通らない。適当な文章をparseするスクリプトなんかはふつうに動くので、コケてるテストの内容からしても妥協のしどころかなと思ったりもしました。

とは言えどうにかならんもんかとText::MeCabのChangesを眺めてたら、

0.20000_01 07 Jan 2008
  - Complete rewrite
    * work with libmecab 0.96

という一節が目に入ったので、試しにMeCab本体のバージョンを落として0.96で試してみたら、すんなりテストが通りました。

本体の更新履歴を見ても、APIの変更があったような記述は無いんだけど(理解出来てないだけ?)、とにかくこれで解決したっぽいです。