役に立ちそうもないTips移転版

俺得なTipsを書き連ねるだけのブログ。

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で使えた。