いけむランド

はてダからやってきました

ruby-gnome の cygport を読み解く

ruby-gnome も古いままであったため、2.6 → 3.2 の追従をちょこちょこやってる。

cygwin の公式 git でやってるため、GitHub に草が生えないが、活動は cygwin-app ML で見ることができる。

ruby-gnome は gem としては ruby-glib2 などの複数に分かれていて、しかもそれぞれ依存があるため、順番にアップデートをしている。

最初に ruby-glib2 をアップデートしたが、いきなりいろいろつまづきがあった。

cygwin.com

devel パッケージに今まで /usr/lib/libruby-glib2.a が含まれていたが、いざ最新の環境でビルドすると、これが生成されない。

いろいろ調べてみた結果、インポートライブラリの生成を明示しないといけなくなったようだったため、gem install でのビルド時に渡すオプション RUBYGEM_CONFIGURE_ARGS"--with-ldflags=-Wl,--out-implib=libruby-glib2.a" を渡すことで patch なしでビルドできるようにした。

そもそも何故 extension (glib2.so) のインポートライブラリをわざわざビルドする必要があるかと言うと、他の ruby-gnome の extension がこれに依存しているからで、これは cygwin 固有のものである。((たとえば後述の gio2.so はこれに依存しているため、リンク時に -lruby-glib2 を渡す必要がある。linux など他の OS では必要ないはず。))

これでリリースしたら、次にとりかかった ruby-gio2 がビルドできなくて、これも調べたら、適用済みだと思ってた mkmf-gnome.rb の patch があてられてなかったため、再度見直して適用した。ついでに pkgconfig も libs のフラグを出力するようにした。

cygwin.com

あとはこれを他の gem にも粛々と適用していってる。