Text::Mecab インストール #perl #cpan #形態素解析

形態解析のモジュールText::MeCabCPANでインストールを試みたのですが、すんなりできなかったので、メモ...orz
もうテストが通らなくても強引にインストールしてしまおうと思ったのですが、どうにかできないかと調べていたところモジュール作者の牧大輔氏がgitの掲示板にperlのバージョンについて触れてました。

Install failure on make test · Issue #4 · lestrrat-p5/Text-MeCab · GitHub

で、早速バージョンを「v5.10.1⇒v5.16.2」にあげてみたところ、すんなりインストール完了。

・・・
Appending installation info to /usr/local/perl-5.16.2/lib/5.16.2/i686-linux/perllocal.pod
  DMAKI/Text-MeCab-0.20014.tar.gz
  /usr/bin/make install  -- OK

所感

今回、インストールは「look Text::Mecabしてmake install」や「force intall」で無理やりでもできたと思います。真の原因は不明ですが、CPANモジュールは、すべてのプラットフォームで動作テストしているわけではないですし、推奨バージョン以外のperl環境で動作が保障されないのは至極当然のことだと思います。
そして、perlでXSを直接使っているモジュールのメンテナーは大変だなーと、ともに、牧さんの対応は紳士だなーと。

(参考)「cpan[1]>install Text::MeCab」のエラーログ

Writing MYMETA.yml and MYMETA.json
cp lib/Text/MeCab/Dict.pm blib/lib/Text/MeCab/Dict.pm
cp lib/Text/MeCab/Node.pod blib/lib/Text/MeCab/Node.pod
cp lib/Text/MeCab.pm blib/lib/Text/MeCab.pm
gcc -c  "-I." "-I/usr/local/include" "-I." -D_REENTRANT -D_GNU_SOURCE -fno-strict-aliasing -pipe -fstack-protector -I/usr/local/include -D_LARGEFILE_SOURCE -D_FILE_OFFSET_BITS=64 -I/usr/local/include -DMECAB_MAJOR_VERSION=0 -DMECAB_MINOR_VERSION=994 -I src -Wall -Wextra -Wdeclaration-after-statement -Wc++-compat -O2 -g -pipe -Wall -Wp,-D_FORTIFY_SOURCE=2 -fexceptions -fstack-protector --param=ssp-buffer-size=4 -m32 -march=i686 -mtune=atom -fasynchronous-unwind-tables   -DVERSION=\"0.20014\" -DXS_VERSION=\"0.20014\" -o xs/text-mecab-node.o -fPIC "-I/usr/lib/perl5/CORE"  -DUSE_PPPORT -DTEXT_MECAB_ENCODING='"utf-8"' -DTEXT_MECAB_CONFIG='"/usr/local/bin/mecab-config"' xs/text-mecab-node.c
gcc -c  "-I." "-I/usr/local/include" "-I." -D_REENTRANT -D_GNU_SOURCE -fno-strict-aliasing -pipe -fstack-protector -I/usr/local/include -D_LARGEFILE_SOURCE -D_FILE_OFFSET_BITS=64 -I/usr/local/include -DMECAB_MAJOR_VERSION=0 -DMECAB_MINOR_VERSION=994 -I src -Wall -Wextra -Wdeclaration-after-statement -Wc++-compat -O2 -g -pipe -Wall -Wp,-D_FORTIFY_SOURCE=2 -fexceptions -fstack-protector --param=ssp-buffer-size=4 -m32 -march=i686 -mtune=atom -fasynchronous-unwind-tables   -DVERSION=\"0.20014\" -DXS_VERSION=\"0.20014\" -o xs/text-mecab.o -fPIC "-I/usr/lib/perl5/CORE"  -DUSE_PPPORT -DTEXT_MECAB_ENCODING='"utf-8"' -DTEXT_MECAB_CONFIG='"/usr/local/bin/mecab-config"' xs/text-mecab.c
xs/text-mecab.c: In function ‘TextMeCab_create_from_av’:
xs/text-mecab.c:70: 警告: ‘argv’ may be used uninitialized in this function
/usr/bin/perl "-Iinc" /usr/share/perl5/ExtUtils/xsubpp  -typemap /usr/share/perl5/ExtUtils/typemap  xs/MeCab.xs > xs/MeCab.xsc && mv xs/MeCab.xsc xs/MeCab.c
gcc -c  "-I." "-I/usr/local/include" "-I." -D_REENTRANT -D_GNU_SOURCE -fno-strict-aliasing -pipe -fstack-protector -I/usr/local/include -D_LARGEFILE_SOURCE -D_FILE_OFFSET_BITS=64 -I/usr/local/include -DMECAB_MAJOR_VERSION=0 -DMECAB_MINOR_VERSION=994 -I src -Wall -Wextra -Wdeclaration-after-statement -Wc++-compat -O2 -g -pipe -Wall -Wp,-D_FORTIFY_SOURCE=2 -fexceptions -fstack-protector --param=ssp-buffer-size=4 -m32 -march=i686 -mtune=atom -fasynchronous-unwind-tables   -DVERSION=\"0.20014\" -DXS_VERSION=\"0.20014\" -o xs/MeCab.o -fPIC "-I/usr/lib/perl5/CORE"  -DUSE_PPPORT -DTEXT_MECAB_ENCODING='"utf-8"' -DTEXT_MECAB_CONFIG='"/usr/local/bin/mecab-config"' xs/MeCab.c
xs/MeCab.xs: In function ‘XS_Text__MeCab_version’:
xs/MeCab.xs:116: 警告: assignment discards qualifiers from pointer target type
gcc -c  "-I." "-I/usr/local/include" "-I." -D_REENTRANT -D_GNU_SOURCE -fno-strict-aliasing -pipe -fstack-protector -I/usr/local/include -D_LARGEFILE_SOURCE -D_FILE_OFFSET_BITS=64 -I/usr/local/include -DMECAB_MAJOR_VERSION=0 -DMECAB_MINOR_VERSION=994 -I src -Wall -Wextra -Wdeclaration-after-statement -Wc++-compat -O2 -g -pipe -Wall -Wp,-D_FORTIFY_SOURCE=2 -fexceptions -fstack-protector --param=ssp-buffer-size=4 -m32 -march=i686 -mtune=atom -fasynchronous-unwind-tables   -DVERSION=\"0.20014\" -DXS_VERSION=\"0.20014\" -o xs/text-mecab-clone.o -fPIC "-I/usr/lib/perl5/CORE"  -DUSE_PPPORT -DTEXT_MECAB_ENCODING='"utf-8"' -DTEXT_MECAB_CONFIG='"/usr/local/bin/mecab-config"' xs/text-mecab-clone.c
Running Mkbootstrap for Text::MeCab ()
chmod 644 MeCab.bs
rm -f blib/arch/auto/Text/MeCab/MeCab.so
LD_RUN_PATH="/usr/local/lib:/usr/lib" gcc  -shared -O2 -g -pipe -Wall -Wp,-D_FORTIFY_SOURCE=2 -fexceptions -fstack-protector --param=ssp-buffer-size=4 -m32 -march=i686 -mtune=atom -fasynchronous-unwind-tables -L/usr/local/lib xs/text-mecab-node.o xs/text-mecab.o xs/MeCab.o xs/text-mecab-clone.o  -o blib/arch/auto/Text/MeCab/MeCab.so  \
           -L/usr/local/lib -lmecab -lstdc++    \

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::Dict.3pm
Manifying blib/man3/Text::MeCab::Node.3pm
Manifying blib/man3/Text::MeCab.3pm
  DMAKI/Text-MeCab-0.20014.tar.gz
  /usr/bin/make -- OK
'YAML' not installed, will not store persistent state
Running make test
PERL_DL_NONLAZY=1 /usr/bin/perl "-MExtUtils::Command::MM" "-e" "test_harness(0, 'inc', 'blib/lib', 'blib/arch')" t/*.t t/*/*.t
t/01-sanity.t ................ 1/? # 0.994
t/01-sanity.t ................ ok
t/node/01_load.t ............. ok
t/node/02_api.t .............. ok
t/node/03_clone.t ............ ok
t/node/04_clone_free.t ....... ok
t/node/05_format.t ........... ok
t/regression/01_tomi_args.t .. 1/2
#   Failed test at t/regression/01_tomi_args.t line 41.
#          got: '記号,一般,*,*,*,*,*
# 感動詞,*,*,*,*,*,*
# 名詞,固有名詞,一般,*,*,*,*
# 名詞,固有名詞,人名,一般,*,*,*
# 名詞,固有名詞,組織,*,*,*,*
# 名詞,固有名詞,地域,一般,*,*,*
# 名詞,一般,*,*,*,*,*
# 記号,一般,*,*,*,*,*
# 名詞,固有名詞,一般,*,*,*,*
# 名詞,固有名詞,人名,一般,*,*,*
# 名詞,固有名詞,組織,*,*,*,*
# 名詞,固有名詞,地域,一般,*,*,*
# 名詞,一般,*,*,*,*,*
# 記号,一般,*,*,*,*,*
# BOS/EOS,*,*,*,*,*,*,*,*
# '
#     expected: 'BOS/EOS,*,*,*,*,*,*,*,*
# 記号,一般,*,*,*,*,*
# 感動詞,*,*,*,*,*,*
# 名詞,固有名詞,一般,*,*,*,*
# 名詞,固有名詞,人名,一般,*,*,*
# 名詞,固有名詞,組織,*,*,*,*
# 名詞,固有名詞,地域,一般,*,*,*
# 名詞,一般,*,*,*,*,*
# 記号,一般,*,*,*,*,*
# 名詞,固有名詞,一般,*,*,*,*
# 名詞,固有名詞,人名,一般,*,*,*
# 名詞,固有名詞,組織,*,*,*,*
# 名詞,固有名詞,地域,一般,*,*,*
# 名詞,一般,*,*,*,*,*
# 記号,一般,*,*,*,*,*
# BOS/EOS,*,*,*,*,*,*,*,*
# '
# Looks like you failed 1 test of 2.
t/regression/01_tomi_args.t .. Dubious, test returned 1 (wstat 256, 0x100)
Failed 1/2 subtests
t/tagger/01_load.t ........... ok
t/tagger/02_api.t ............ ok
t/tagger/03_basic.t .......... ok

Test Summary Report
-------------------
t/regression/01_tomi_args.t (Wstat: 256 Tests: 2 Failed: 1)
  Failed test:  2
  Non-zero exit status: 1
Files=10, Tests=2375,  1 wallclock secs ( 0.35 usr  0.03 sys +  0.78 cusr  0.07 csys =  1.23 CPU)
Result: FAIL
Failed 1/10 test programs. 1/2375 subtests failed.
make: *** [test_dynamic] エラー 255
  DMAKI/Text-MeCab-0.20014.tar.gz
  /usr/bin/make test -- NOT OK
//hint// to see the cpan-testers results for installing this module, try:
  reports DMAKI/Text-MeCab-0.20014.tar.gz
Running make install
  make test had returned bad status, won't install without force
Failed during this command:
 DMAKI/Text-MeCab-0.20014.tar.gz              : make_test NO