Hyper EstraierのMinGW上での再ビルド

会社の部内サーバ検索用に、オープンソース全文検索システム、HyperEstraierを導入してみました。簡単にセットアップでき、検索も高速でとてもいいですね!作者の方に感謝です。
バイナリパッケージも配布されていますが、今回、必要があってWindows用バイナリの再ビルドを行ったので、手順をメモしておきます。

以下の手順については、こちらのページが大変参考になりました:しののんだいあり〜[pc] HyperEstraierのビルド

使用したパッケージ

  • hyperestraier-1.4.13.tar.gz
  • qdbm-1.8.77.tar.gz
  • MinGW-5.1.3.exe
  • MSYS-1.0.10.exe
  • libiconv-1.11-1-bin.tar.bz2
  • libiconv-1.11-1-dll.tar.bz2
  • mingw-libgnurx-2.5.1-bin.tar.gz
  • mingw-libgnurx-2.5.1-dev.tar.gz
  • pthreads-w32-2-8-0-release.exe
  • zlib123-dll.zip
  • UnxUtils.zip
  • d2txt127.zip

ツールと依存パッケージのインストール

(1)MinGWとMSYSのインストール。MinGWは、パッケージ選択でg++ compilerのみを選択する。
(2)MinGWの追加ライブラリをインストール。アーカイブファイルを展開して以下の各所にコピー。MSYSはインストール先のbin,doc,etcなどのあるディレクトリが、ルートと/usrの両方に見える。したがって、msys/1.0/local以下に各ファイルを配置することで/usr/local/*へインストールしたことになる。

アーカイブ 展開したファイル コピー先
libiconv-1.11-1-bin.tar.bz2 usr/local/* msys/1.0/local/*
libiconv-1.11-1-dll.tar.bz2 usr/local/bin/* msys/1.0/local/bin/*
mingw-libgnurx-2.5.1-bin.tar.gz bin/* msys/1.0/local/bin/*
mingw-libgnurx-2.5.1-dev.tar.gz mingw-libgnurx-2.5.1-dev/* msys/1.0/local/*
pthreads-w32-2-8-0-release.exe Pre-built.2/include/*
Pre-built.2/lib/*
msys/1.0/local/include/*
msys/1.0/local/lib/*
zlib123-dll.zip zlib1.dll
include/*
lib/*
msys/1.0/local/bin/zlib1.dll
msys/1.0/local/include/*
msys/1.0/local/lib/*
UnxUtils.zip usr/local/wbin/zip.exe msys/1.0/local/bin/zip.exe
d2txt127.zip xdoc2txt.*, zlib.dll msys/1.0/local/xdoc2txt/*
  • zlib123-dllは、ファイルのコピー後、MSYSのコンソールを起動し、USAGE.txtの記述にしたがって、
cd /usr/local
dlltool.exe -D bin/zlib1.dll -d lib/zlib.def -l lib/libzdll.a

qdbmのビルド/インストール

(1)msys/1.0/home/<ユーザ名>/以下にqdbm-1.8.77.tar.gzを展開(MSYSのコンソールで、ホームディレクトリになる)。
(2)configureスクリプトMakefile.inを若干編集する。

  1. 圧縮ライブラリのリンクオプションが-lzになっているので、-lzdllに書き換える(3ヶ所)。
  2. MinGW用ターゲット('mingw:')のコマンドラインに、zlibとiconvの参照先ディレクトリを追記する。makeの引数で設定しているLIBLDFLAGS/LDFLAGSの2つのマクロの先頭に、'-L/usr/local/lib'を追加。

パッチファイルにまとめるとこんな感じ→QDBMをMinGWで再ビルドするときの変更点
(3)以下のコマンドでビルド&インストール。

cd qdbm-1.8.77
patch -p1 < ../-1.8.77-build-on-mingw.patch
./configure --enable-zlib --enable-iconv
make mingw
make install-win

これで/usr/local/以下にインストールされる。

'--enable-zlib'で圧縮を有効にしないと、公式配布のバージョンで作成したインデックスが使用できなくなってしまう。

HyperEstraierのビルド

(1)msys/1.0/home/<ユーザ名>/以下にhyperestraier-1.4.13.tar.gzを展開。
(2)configureスクリプトを若干編集する。

  1. 圧縮ライブラリのリンクオプションが-lzになっているので、-lzdllに書き換える(2ヶ所)。
  2. pthreadライブラリのリンクオプションが-lpthreadになっているので、-lpthreadGC2に書き換える(2ヶ所)。

(3)Makefile.inも若干書き換える。

  1. MinGW用ターゲットのリンクコマンドラインに-lzが書いてあるので-lzdllに書き換え。
  2. Windows用のパッケージ作成ターゲットで、*.dllや*.hをCygwin環境でのパスで参照しているので、必要に応じて書き換え。
  3. JavaバインディングRubyバインディングが不要なら、パッケージ作成ターゲットの記述からはずす。

(4)ビルド
上の(2),(3)をパッチファイルにまとめるとこんな感じ→HyperEstraierをMinGWで再ビルドするときの変更点

cd hyperestraier-1.4.13/
patch -p1 < ../hyperestraier-1.4.13-build-on-mingw.patch
./configure
make winpkg

これでWindows用のバイナリパッケージファイルhyperestraier-1.4.13-win32.zipが生成されます。