kakasiとText::Kakasiを入れる話
新年一発目はかかしの話。kakasiです。
日本語のわかち書きをやるツールとしてとてもメジャーなんだけど、本当は漢字かな混じり文をひらがなやローマ字に変換するためのツールだったりする。辞書構造がとてもとてもシンプルなので、使い勝手が非常に良い。
さて、一般にはわかち書き用途に使われることが多いが、今回は漢字かな混じり文をひらがなに変換するために使いたい。Perlから叩く。
kakasiを入れて、Text::Kakasiを入れて、とさくさく作業したらエラーが出た。記録してないが、PerlスクリプトからText::Kakasiをロードしたところで kakasi_getopt_argvなんてsymbolは知らん!みたいなエラー。ライブラリのリンクに失敗していやがるらしい。でもmakeのログにはエラーなんてない。
書いてたら長くなったから答えから書く。
libkakasi.soを/usr/local/lib以外にインストールしている場合には、Text::Kakasiのコンパイルは気を付けないといけないよ!make testって大事だよ!
以下詳細。
俺はライブラリ類を/usr/local/libにいれない場合が多い。
$ ls -l /usr/local (省略) lrwxrwxrwx 1 root root 12 1月 5 14:12 kakasi -> kakasi-2.3.4 drwxr-sr-x 6 root root 4096 1月 5 14:12 kakasi-2.3.4 (省略)
ライブラリのバージョンアップと、問題発生時のバージョンダウンがシンプルに制御できるからだ。
さてkakasiもこんな風にいれたので、Text::Kakasiのインストールを↓みたいにした。
$ perl Makefile.PL \ > INC=-I/usr/local/kakasi/include \ > LIBS=-L/usr/local/kakasi/lib $ make $ make test (ここでエラー)
Makefile.PLを読むと、これ以上ないほどシンプルなもの。12行しかない。行間には「パスを変えたきゃ勝手に書き換えろ」と書いてあるんだ。
$ diff -u Makefile.PL.original Makefile.PL --- Makefile.PL.original 2003-05-26 19:42:27.000000000 +0900 +++ Makefile.PL 2009-01-06 12:57:03.000000000 +0900 @@ -6,7 +6,8 @@ WriteMakefile( 'NAME' => 'Text::Kakasi', 'VERSION_FROM' => 'Kakasi.pm', - 'INC' => '-I/usr/local/include', - 'LIBS' => ['-L/usr/local/lib -lkakasi'], + 'INC' => '-I/usr/local/kakasi/include', + 'LIBS' => ['-L/usr/local/kakasi/lib -lkakasi'], 'DEFINE' => '-DWAKATIGAKI', );
INCとLIBSを書き換えた。できた。使えた。よかった。
思えば、Makefileがかけない奴のためにconfigureがあったりMakeMakerがあるわけで、そのMakeMakerの元ネタがうまくかけない奴のためにオプション充実なMakefile.PLがあったり、という期待は間違いだと言えるよね。うわっほい。