きりかノート 3冊め

おあそびプログラミング

MacPorts port:rubyで+universalバリアントがちゃんと働くように

いつのまにかつっこまれてた+universalバリアントはruby本体だけがユニバーサルバイナリになっていて、拡張ライブラリはユニバーサルバイナリにならないというよくわからないものだった。だいぶ前にそういう状況は把握したのだけど、そのうち直そうと思っていて忘れていた。

今回指摘されて思い出したので対処。

ユニバーサルバイナリをつくるためには大きく分けて2つのアプローチがある。

MacPortsのPortfileでは、前者は use_parallel_build = yes で、後者は PortGroup muniversal で対応できるようになっている。で、今回は後者のアプローチで修正することにした。

ファイル配置はこんな感じで拡張ライブラリとruby.hやrbconfig.rbは別ディレクトリに分けるようにした。拡張ライブラリはユニバーサルバイナリにできるけれど、ヘッダファイルなんかは自動でマージとかできないしね。

   ユニバーサルバイナリ
     - bin/
     - lib/libruby*.dylib, libruby-static.a
   各アーキテクチャの拡張ライブラリやヘッダ(ruby.hやconfig.h)
     - lib/ruby/[1.8|site_ruby/1.8|vendor_ruby/1.8]/i686-apple-darwin*/
     -                                             /i386-apple-darwin*/
     -                                             /ppc-apple-darwin*/
   pure rubyのライブラリ
     - lib/ruby/[1.8|site_ruby/1.8|vendor_ruby/1.8]/

バイナリの拡張ライブラリを+universal対応にさせるには、おそらくPortGroup rubyをちょっと直せばだいじょうぶだと思う。思ってるだけでまだなにも確かめてないけどね。