Solaris 10 に MeCab と Senna と MySQL をインストールする …… 失敗

  まず,MeCab のインストール.
  MeCab 0.8.1 と共存したいので,/usr/local/mecab/0.9 にインストールすることにします.

- MeCab 0.95

$ tar -zxvf mecab-0.95.tar.gz
$ cd mecab-0.95
$ ./configure --prefix=/usr/local/mecab/0.9
$ make
# make install

- ipadic 2.7.0

$ tar -zxvf mecab-ipadic-2.7.0-20060707.tar.gz
$ cd mecab-ipadic-2.7.0-20060707
$ ./configure --prefix=/usr/local/mecab/0.9
$ make
# make install

  ここで MeCab にパスを通しておく

$ export PATH=${PATH}:/usr/local/mecab/0.9/bin
$ export LD_LIBRARY_PATH=${LD_LIBRARY_PATH}:/usr/local/mecab/0.9/lib
$ export LD_RUN_PATH=${LD_LIBRARY_PATH}

  次に Senna のインストール.こちらは /usr/local/senna にインストールします.

- Senna 1.0.2

$ tar -zxvf senna-1.0.2.tar.gz
$ cd senna-1.0.2
$ ./configure --prefix=/usr/local/senna
$ make INCLUDES=-I/usr/local/mecab/0.9/include

  とここで,以下のエラーが出ました.

store.c: In function `sen_fse_open':
store.c:75: error: `UINT_MAX' undeclared (first use in this function)
store.c:75: error: (Each undeclared identifier is reported only once
store.c:75: error: for each function it appears in.)
make[2]: *** [store.lo] Error 1
make[2]: Leaving directory `/home/suna/workspace/src/senna-1.0.2/lib'
make[1]: *** [all-recursive] Error 1
make[1]: Leaving directory `/home/suna/workspace/src/senna-1.0.2'
make: *** [all] Error 2

  どうも UINT_MAX が定義されていないようです.とりあえず,lib/store.c に以下のパッチを当てました.
  #include <limits.h> を付け加えただけです.

--- store.c-orig        2007-03-14 15:48:35.000000000 +0900
+++ store.c     2007-03-15 21:57:30.308187817 +0900
@@ -19,6 +19,7 @@
 #include "inv.h"
 #include "store.h"
 #include <string.h>
+#include <limits.h>

 /* fixed sized elements */


  もう一度 make します.

$ make INCLUDES=-I/usr/local/mecab/0.9/include
# make install

  以下のような warning がたくさん出ましたが,とりあえず make が終了しました.

../config.h:86:1: warning: "_FILE_OFFSET_BITS" redefined

- MySQL 4.1.22

$ tar -zxvf mysql-4.1.22.tar.gz
$ cd mysql-4.1.22

  ここで Senna から提供されている 4.1.20 用のパッチを当てようとしたのですが,2ind パッチでうまく当たらないファイルがあった (sql/item.h) ので 4.1.22 用のパッチを作りました.ついでに 2ind でない方のパッチも 4.1.22 用に新しくしました.

o mysql-4.1.22.senna.diff
o mysql-4.1.22.senna.2ind.diff

$ patch -p1 < ../mysql-4.1.22.senna.diff
$ patch -p1 < ../mysql-4.1.22.senna.2ind.diff (2ind パッチを当てる場合)

  configure を再生成します.
  senna に含まれるドキュメント (doc/INSTALL.JA) には

bison 1.75, autoconf 2.59, automake 1.8(aclocal 1.8)以上が必要です

  のような記載がありますが,実際はこれらに加えて,libtool も必要です.

$ libtoolize -c -f
$ aclocal
$ autoheader
$ automake -c -a -i
$ autoconf
$ touch sql/sql_yacc.yy

  次に configure をします.
  configure の際には,--with-senna と --with-mecab をオプションに追加します.

$ ./configure --prefix=/usr/local/mysql \
              --with-extra-charsets=all \
              --without-readline \
              --enable-assembler \
              --with-low-memory \
              --with-senna=/usr/local/senna \
              --with-mecab=/usr/local/mecab/0.9
$ make
# make install

  ちなみに,MySQL バインディングは Tritonn という別プロジェクトになったみたいです.
  MySQL 5.0.36/5.0.37 の場合は Tritonn からパッチがリリースされています.

- Tritonnプロジェクト ~ MySQL+Sennaによる全文検索 ~ - Tritonnプロジェクト
  http://qwik.jp/tritonn/

  とりあえず,インストールはこれで完了です.
  動作確認はまた後日.

- 追記
  うまくいったと思ったら,MySQL の make でエラーが出てました.

sql_yacc.cc: In function `int yyparse(void*)':
sql_yacc.cc:22272: error: expected primary-expression before "__attribute__"
sql_yacc.cc:22272: error: expected `;' before "__attribute__"

  うーむ.これについてもまた後日調べるとします.