読者です 読者をやめる 読者になる 読者になる

Perl - carton で管理しているやつをfatpackする

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