MacPorts で package を作る

ふだんの開発環境は MacPorts を使ってるのだけれど、自分の書いたプログラムをバイナリ配布するにはライブラリも配布しなきゃいけないわけだ。で、MacPorts には、個々の port を package にする機能に加えて依存関係をぜんぶまとめた meta package を作る機能もついている。

しかし、port mpkg gtk2 としたら、Xft2 のところで「もう一度インストールしてください」みたいなメッセージを出して停まってしまった。で、Xft2 の .pkg の下をチェックしたら、Contents/ の下に Archive.pax.gz と Archive.bom というファイルがなくて、他にもいくつかそういう package が存在するみたいだ。pax は tar みたいなもので、FreeBSD なんかにも付いている模様。bom はつまり、bill of materials で、要するにファイル一覧を入れておくものみたいだ。

そんなわけで、こんな script 書いてみた。

#!/bin/csh
setenv PKGDIR ${PWD}
cd /
pax -w `port contents $1 | awk '{i++; if(i!=1) print "."$1}'` > ${PKGDIR}/Archive.pax
cd ${PKGDIR}
mkdir tmp
cd tmp
cat ../Archive.pax | pax -r
mkbom . ../Archive.bom
cd ..
gzip -9 Archive.pax
rm -rf tmp

これで、

cd PACKAGE-VERSION.pkg/Contents
csh mkpackage.csh PACKAGE

とかすれば OK なはず。

あと、meta package の Contents/Info.plist に載ってる subpackage name と、Contents/Resources 以下の subpackage name が食い違っていることがある模様。要注意。

コメントを残す