gonzui gem を Windows に対応した

ソースコード検索エンジン gonzui を gem 化した - mallowlabsの備忘録
Windows 未対応だったので、頑張って Windows 対応にした。


tar とか unzip とかを使う操作はもちろん動かないけど、
パスが通ってれば、それなりに動くかもしれない。

インストール手順

  1. bdb-0.6.5-win32.gem (Windows 用の bdb の gem)をダウンロードする
  2. gem install bdb-0.6.5-win32.gem
  3. インストールされた bdb-0.6.5 フォルダ*1 配下の dll\libdb43.dll を ruby.exe と同じフォルダ*2 にコピー
  4. gem install langscan
  5. gem install gonzui

実行方法

あとは通常通り

> gonzui-import <FILE_PATH>
> gonzui-server

とやれば gonzui がポート 46984 で立ち上がる。

技術的な話

langscan と gonzui の場合は比較的ビルドは簡単。
Visual C++ 2008 環境と Ruby 1.8.7 (mswin32) 環境を用意する。


以下のファイルを書き換える。
\lib\ruby\1.8\i386-mswin32\config.h

#if _MSC_VER != 1200

#if _MSC_VER >= 1200

に変更。これはお決まり。


\lib\ruby\1.8\i386-mswin32\env.h

extern struct RVarmap *ruby_dyna_vars;

RUBY_EXTERN struct RVarmap *ruby_dyna_vars;

に変更。こうしないと Ripper がビルドできない。


langscan/metaconfig

add_bool_config 'nounistd', false, 'do not include <unistd.h> for flex'

add_bool_config 'nounistd', true, 'do not include <unistd.h> for flex'

に変更。Windows には unistd.h は無いので。


この状態で通常通り gem を作り、コンパイル済みのgemパッケージを作るRubyGemsプラグイン - Blog by Sadayuki Furuhashi を使って compile するだけ。


問題は gonzui が依存している Berkeley DB の Ruby binding で
これがどうしても Windows でビルドできなかった。
どうやら、Berkeley DB の本体までビルドし、
それを使って Ruby binding をビルドしなければならないらしい。


大変面倒なので、http://soutaro.com/gonzui-win32/index.ja.html から、id:soutaro さんがビルドした
Berkley DB 本体と Ruby binding を拝借し、gem に格納した。
なんという dirty hack …。
Windows でも気軽に gonzui が使えることが目的なので
とりあえずは目をつむることにしたい。
# だったら、gonzui 本体も id:soutaro さんのビルドでよいのでは
# というツッコミは受け付けません:)
# Redmine プラグインを作りたいのです。

Berkeley DB Ruby binding

実は Berkeley DB の Ruby binding も gem 化しようとしていた。
http://github.com/mallowlabs/ruby-bdb

Ubuntu なら

 $ sudo apt-get install libdb libdb-dev
 $ sudo gem install bdb-0.6.5.gem

でインストール可能。


Mac OS X (Snow Leopard) でも

$ sudo env $ARCHFLAGS="―arch x86_64" gem install bdb-0.6.5.gem ― ―with-db-dir=/usr/local/BerkeleyDB.4.7/

でインストール可能。


というところまではできてるんだけど、
https://rubygems.org/gems/dk-bdb/
のような別の実装があったり、
http://github.com/knu/ruby-bdb/
みたいにメンテされている形跡があったりするので、
とりあえずは github に置いて置くだけにする。

*1:筆者の環境では C:\Ruby187\lib\ruby\gems\1.8\gems\bdb-0.6.5

*2:筆者の環境では C:\Ruby187\bin