carton で
% tree . ├── cpanfile ├── cpanfile.snapshot ├── lib │ └── MyClass.pm ├── local │ ├── cache ... │ └── lib │ └── perl5 │ ├── Net ... │ ├── Parallel ... │ └── darwin-2level ... └── script.pl
のようにして管理しているとき、 script.pl を fatpack したい!
依存関係は carton がすでに解決しているので
# https://gist.github.com/shoichikaji/6699943 rm -rf pack mkdir pack cp -r local/lib/perl5 pack/fatlib cp -r lib pack/lib find pack/fatlib -name '*.json' \ -o -name .packlist -o -name perllocal.pod | xargs rm -f find pack -name '*.pm' | xargs -P5 -L1 perlstrip ( cd pack && fatpack file ../$1 > ../packed.$1 ) rm -rf pack
を packer.sh という名前で保存して、
% sh packer.sh script.pl
とすればいい。packed.script.pl ができる。
- そのうち carton が target perl version みたいなのに対応してくれそう。期待!
- local, lib 以外の依存がわかっている場合には、それを pack/fatlib にコピーするコードを付け加えればいい。