きりかノート 3冊め

おあそびプログラミング

MacPortsでインストールしたソフトウェアを依存関係を考えつつリストする

再インストールするときなどに使うため、MacPortsでインストールしたプログラムをリストアップしておきたい。これには、

 % port installed

 % port installed active

とすればよい。

だけどこれだけではvariantを指定してカスタマイズしているときに、インストールがうまくいかないことが起きるに決まっているので、依存関係を考慮してもう少し賢いリストを作りたい。

ということで書いてみた

使いかたはファイル中のusageにあるように実行すればよい。

 % port installed active | grep -v '^The'| port-deps-tsort.rb
libart_lgpl @2.3.20_0
libiconv @1.12_0
ncursesw @5.6_1
ncurses @5.6_0 => ncursesw
expat @2.0.1_0
gettext @0.17_3 => libiconv,ncurses,expat
glib2 @2.16.4_0+darwin_9 => gettext,libiconv
:
rb-redcloth @3.0.4_0 => ruby
rb-gnomecanvas @0.17.0-rc1_0 => ruby,libgnomecanvas,rb-glib2,rb-gtk2
subversion-python25bindings @1.5.0_1+no_bdb => expat,neon,apr,apr-util,subversion,python25,gettext,libiconv,serf,cyrus-sasl2
rb-rote @0.3.4.r189_0 => ruby,rb-redcloth,rb-syntax,rb-rake
%

というように、依存関係で上からインストールしていけば良いように順序を整理して出力する。
MacPortsレジストリを見ているので、depends_runやdepends_buildは考慮されないけれど、実際問題としては問題にならないと思ってる。

ちょっと内部的な話を書くと、rubyのtcktkライブラリを使ってtclで書かれたMacPorts Registry APIを実行している。すごいよ、Ruby/Tk!

はじめはObjective-C用のMacPortsFrameworkRubyCocoa経由で使おうとしたのだけどSEGVするので断念した。