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 にコピーするコードを付け加えればいい。