提案: rubyのarchはシステムのマイナーバージョンを無視したい>MacPorts
rubyの拡張ライブラリは、archdir/sitearchdir/vendorarchdirにインストールされるわけだけど、archにシステムのマイナーバージョンが含まれているために、rubyをインストールしたときのシステムバージョンによって、拡張ライブラリのインストール場所がばらばらになってしまう。
残念なことになっている例。
% ls /opt/local/lib/ruby/vendor_ruby/1.8/i686-darwin*/ /opt/local/lib/ruby/vendor_ruby/1.8/i686-darwin9.0/: RMagick.bundle sqlite3_api.bundle /opt/local/lib/ruby/vendor_ruby/1.8/i686-darwin9.2.2/: gconf2.bundle gnomevfs.bundle rsvg2.bundle gnome2.bundle libart2.bundle rubycocoa.bundle gnomecanvas2.bundle rbart.h uconv.bundle gnomeprint2.bundle rcovrt.bundle /opt/local/lib/ruby/vendor_ruby/1.8/i686-darwin9.3.0/: cairo.bundle rb_cairo.h starruby.bundle
すると、以前にインストールしたのにrequireで失敗したりするわけだが、納得いかないのだよ。そんなんメジャーバージョンだけ使えばいいじゃん、と思うわけ。Apple提供のMac OS X添付のrubyは昔からそんなふうになってる。
% uname -r 9.4.0 % /usr/bin/ruby -rrbconfig -e 'puts Config::CONFIG["arch"]' universal-darwin9.0
なので、MacPortsのlang/rubyもそうしちゃおうぜ、という提案をしました。
問題点などあれば指摘してください。反対がなければ、日曜くらいにはコミットしちゃうつもり。
2008.07.05(土) 追記:コミットしました
思いのほか賛成が多かったので(みんな早く言えよ!こういうの気にするおれが神経質なんだと思ってたよ)、今日コミットしました(r38064)。日本時間だと17時ごろに次のPortIndex更新が走ると思うので、ユーザの人たちはもうしばしお待ちください。
以下、更新の手順。自分がやった例なので、もちろんみなさん好きなようにしてください。zshで作業してるので、(2)とかは動かないシェルがあるかも。
# (0) rubyを@1.8.7-p22_3に更新する % sudo port sync % sudo port -n upgrade ruby # (1) MacPortsでインストールした、現在利用中(active)の # Rubyライブラリっぽいものを抽出 % port installed active | grep rb- | cut -c3- | cut -d\ -f1 | tee rb-ports.txt rb-actionmailer rb-actionpack rb-actionwebservice rb-activerecord : # (2) (1)の結果のうち、拡張ライブラリ(.bundle)を持つportを抜き出し % (for port in `cat rb-ports.txt`; do port contents ${port} | \ grep -q '\.bundle' && echo ${port}; done) | tee rb-ports-with-bundle.txt rb-atk rb-gconf rb-gdkpixbuf2 rb-glib : # (3) (2)のリストについてportを強制再インストール % sudo port -nf upgrade `cat rb-ports-with-bundle.txt` :
対象のportのリスト(作業中に作成する.txtファイル)は、必要に応じて編集してください。rb-gnomeとかは、たぶん抜いとかないとメンドウだと思います。
すると、
% ls /opt/local/lib/ruby/vendor_ruby/1.8/i686-darwin*/ /opt/local/lib/ruby/vendor_ruby/1.8/i686-darwin9/: RMagick2.bundle* gtk2.bundle* rbgtk.h atk.bundle* libart2.bundle* rbgutil.h cairo.bundle* pango.bundle* rbpango.h gconf2.bundle* rb_cairo.h rbpangoversion.h gdk_pixbuf2.bundle* rbart.h rcovrt.bundle* glib2.bundle* rbatk.h rsvg2.bundle* gnome2.bundle* rbatkversion.h sqlite3_api.bundle* gnomecanvas2.bundle* rbgcompat.h starruby.bundle* gnomeprint2.bundle* rbglib.h uconv.bundle* gnomevfs.bundle* rbgobject.h
になってすっきり。
これで、
- rubyのno_doc variantを復活させたい
- archdirをメジャーバージョンだけにする
という、以前からの個人的な要求が解消できた。コミッタになるって素敵。
| 固定リンク
最近のコメント