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をちょっと直せばだいじょうぶだと思う。思ってるだけでまだなにも確かめてないけどね。