RubyとGD
ひょっとするとかなりマイナーな例なのかもしれないがorz
mingw32版Ruby1.9.1でふとGDをいぢりたくなってgemってみた。
で、古いgdバインディングだと1.9系で通らないコードがあったりしてめどいのでorz
思い切ってgd2-ffijを選んでみたのだが。
・FFIがねえ→DevKit入れてgem installしましたさ。
・DLLが入ってねえ→拾ってきましたさ。
・DLL読まねえ→この辺から結局ライブラリのコードをいぢることに。
原因としては、GD2FFI.gd_library_nameが依存する動的モジュール名を返すんだけど
そこで環境の選択肢としてそもそもmswin32/mingw32が存在せず、モジュール名の候補に「bgd.dll」もない。
(cygwinはあんだけどなー)
で、件のメソッドの末尾にこんな感じで追加。
# patch for Windows case RbConfig::CONFIG['host_os'] when 'mswin32', 'mingw32' ffi_convention :stdcall @gd_library_name = 'bgd.dll' end
多分これでいけるんでないかと。
もっとも拾ってきたbgd.dllがJPEGバグ入りVer.っぽいのでもうひと作業要りそうだが、これはもうRuby関係ないので……
(GDって依存ライブラリ多くてモジュールこさえるの大変なのよねorz)
6/11追記:
GnuWin32で配布してるGDモジュールではJPEGバグ取れてるようなので素直にそちらを使用することに。
ちなみにそちらのDLLは「libgd2.dll」だが依存DLL含めてパス通して上の'bgd.dll'だけ書き換えればgd2-ffijで使えた。