« RubyCocoa 0.13.2 リリース! | トップページ | ソースコード整形ツール uncrustify の野良 Portfile を書いた »

2008.02.17

インストーラ.app + .pkg でインストールされたファイルが、どのパッケージからなのかを検索する

MacPorts でいえば port porvides [file] のように、あるファイルがどのインストールパッケージでインストールされたか知りたいことがある。/Library/Receipts/ 以下にそれぞれのパッケージがあるので、その中の .bom ファイルに lsbom をかければ、そのパッケージが提供するファイルの一覧を取得できる。

検索するてきとーなスクリプトが手元にあるのだけど、なんか Leopard になってからヒットしないものが増えたと思っていたら、.bom ファイルの場所が変わっていた。

というわけで、場当たりの対応。アタマワルソウな書きかたなのに、意外と遅くない。

 % cat =greceipts
 #!/bin/sh
 for receipt in `ls -1d /Library/Receipts/*.pkg`
 do
   bom=${receipt}/Contents/Archive.bom
   if [ -r ${bom} ]; then
     lsbom ${bom} | grep $@ | sed -e "s/^/`basename ${receipt}`:/g"
   fi
 done
 # 10.5, Receipts/boms
 for bom in `ls -1d /Library/Receipts/boms/*.bom`
 do
   if [ -r ${bom} ]; then
     lsbom ${bom} | grep $@ | sed -e "s/^/`basename ${bom}`:/g"
   fi
 done

なんで今日気づいたかというと、RubyCocoa の SF.net のバグトラッカーにきてたビルドエラーの件を調べる際に、libxml2 のヘッダがインストールされるのはどのパッケージか知りたかったから。

 % greceipts -l include/libxml2
 MacOSX10.4.Universal.pkg:(standard input)
 com.apple.pkg.DevSDKLeo.bom:(standard input)

なので「XcodeToolsインストールしてないんじゃない?」と答えておくことに。

|

« RubyCocoa 0.13.2 リリース! | トップページ | ソースコード整形ツール uncrustify の野良 Portfile を書いた »