きりかノート 3冊め

おあそびプログラミング

rb-gnome +universalがインストールできないとか言われたので対応

「rb-gnomeを+universalで入れようとしたら、rb-pkg-configでエラーがでるよん」とのレポートがきた。

チケットに書いたように問題点は(指摘の件だけでなく)2つあって、

  • rb-pkg-configがsupported_archs noarchが必要なのにない。pure rubyなので、アーキテクチャを気にする必要はないので。
  • rb-gnomeのport群が+universalしてもユニバーサルバイナリにならない。ビルド・インストールは成功するけど、メインのarchでビルドされてしまう。

後者の問題はけっこうやっかいで、ruby-1.9ではruby本体で複数アーキテクチャのライブラリ作成のサポートとかもあるんだけど、ruby-1.8だと個々のアーキテクチャごとにextconf.rbをやる必要がある。
で、Ruby-Gnome2だと各モジュールごとにサブディレクトリがあるわけで、+universal時に適切な`ruby'でextconf.rbをかけてやる必要がある。

アーキテクチャごとにビルドしてマージするのはPortGroup muniversalすればいいけど、extconf.rbがどーしたものか。
本当はPortGroup rubyでどうにかするのが良いのだろうけど、とにかく解決することを優先して、スマートさはともかくpost-configureでarch -i${arch} rubyでextconf.rbをかけ直すことで対処した。

変更内容はこんな感じ。(r74726)

 Index: ruby/rb-glib2/Portfile
 ===================================================================
 --- ruby/rb-glib2/Portfile  (revision 74725)
 +++ ruby/rb-glib2/Portfile  (revision 74726)
 @@ -1,12 +1,13 @@
  # $Id$

  PortSystem     1.0
 +PortGroup      muniversal 1.0
  PortGroup      ruby 1.0

  ruby.setup     {glib2 ruby-gnome2} 0.90.5 extconf.rb \
	  { glib2/README glib2/sample } \
	  sourceforge:ruby-gnome2
 -revision       0
 +revision       1
  maintainers        kimuraw
  platforms      darwin
  description        Ruby/GLib2 is a Ruby binding of GLib-2.x.
 @@ -22,6 +23,16 @@
	  port:rb-pkg-config
  distname       ${ruby.project}-all-${version}

 +# run extconf.rb with each arch `ruby'
 +use_parallel_build no
 +post-configure {
 +   if {[variant_isset universal]} {
 +       foreach arch ${universal_archs} {
 +           system "/usr/bin/arch -${arch} ${ruby.bin} -C ${worksrcpath}-${arch}/glib2/ext/glib2 extconf.rb --vendor"
 +       }
 +   }
 +}
 +
  # NOTE: for developer only. this test launches X11.app.
  #test.run      yes
  test.cmd       ${ruby.bin}