mingw で qdbm の拡張ライブラリをビルド

bsfilter で qdbm が使いたくなって頑張ってみた。
使ったのは
ruby-1.8.4-i386-mingw32
qdbm-1.8.75のソース

rbconfig.rb の編集

まずは RUBY_DIR/lib/ruby/1.8/i386-mingw32/rbconfig.rb をこんな感じで修正する。
こうしておくと mkmf.rb が作る Makefile が $(OBJ) の依存として $(top)/ruby.h とかが設定される。こうしないと素で ruby.h って書かれて make できないっぽかった。

--- rbconfig.rb.orig	2005-12-24 22:54:47.000000000 +0900
+++ rbconfig.rb	2007-03-21 08:50:06.648700800 +0900
@@ -143,6 +143,7 @@
   CONFIG["sitelibdir"] = "$(sitedir)/$(ruby_version)"
   CONFIG["sitearchdir"] = "$(sitelibdir)/$(sitearch)"
   CONFIG["topdir"] = File.dirname(__FILE__)
+  CONFIG["RULE_SUBST"] = "$(topdir)/%s"
   MAKEFILE_CONFIG = {}
   CONFIG.each{|k,v| MAKEFILE_CONFIG[k] = v.dup}
   def Config::expand(val, config = CONFIG)

ビルド

qdbm-1.8.75のソースを展開して普通に

% ./configure && make

する。インストールはしない。

ruby ディレクトリに移動して同じように

% ./configure && make && make install

する。これでおしまい。
これで作った qdbm拡張ライブラリは ruby-1.8.6-i386-mswin32 でも使えるみたいだ。
qdbm の dll とかは何となくバイナリパッケージのを使ってる。


ホントは mecab も使いたいんだけど、C++ のソースだとリンクに失敗するからあきらめてる。自分で mecab をビルドすればリンクできたけど、バイナリの dll と違うしなんとなくやな感じ。C だと大丈夫そうだから自分で同じAPIの拡張ライブラリを書けば大丈夫そうなんでそのうち頑張るかもしれない。C あんまり知らないし、拡張ライブラリ書いたことないから苦労しそうだけど。