carton での imager を扱う際の悩み
lingr で聞いたところなかなか悩ましい感じだったので、一応メモとして、、、
前提
- Imager
- imager は install する時に gif, png, jpeg のライブラリがあれば一緒に入れる。なかったら入れない。
- Imager::File::PNG みたいな別 dist も一応ある
cpanfile を
requires 'Imager'; requires 'Imager::File::PNG';
とする。
cpanm . --installdeps
- libpng がない状態で
cpanm . --installdeps
した場合は Imager は error にならずに、Imager::File::PNG はエラーになる - libpng がある状態だと、 Imager で ::PNG も一緒に入り、
requires 'Imager::File::PNG';
の箇所は up to date となる。
結果として libpng があれば大丈夫
carton install
requires 'Imager::FIle::PNG' も書く場合
- libpng がない状態で
carton install
した場合は Imager は error にならずに、Imager::File::PNG はエラーになる - ある状態で、Imager がまだ入ってない状態だと Imager を install したタイミングで ::PNG も一緒に入り
requires 'Imager::File::PNG';
は up to date となる。- この状態だと Imager::File::PNG の install.json は作られないので cpanfile.snapshot には記録されない
- carton check を行うと cpanfile と cpanfile.snapshot に差異が出るので通らない
requires 'Imager::File::PNG' を書かずに requires 'Imager' だけの場合
- libpng がない状態だと Imager::File::PNG が存在しない。 carton check に問題は起きないが png file を扱おうとすると死ぬ
- libpng がある状態なら問題なし
- あるなしに関わらず Imager の install は上手く行き、carton check は通るが、png file が扱えるかどうかが扱うまで分からない。
期待したい状態
- Imager::File::PNG が carton に正しく入っていて、それを carton check で確認出来る。
現状の妥協案
- setup する server とかは chef とかでちゃんと管理するから libpng とかが存在するとみなして、requires 'Imager::File::PNG' は書かない。
- jenkins では
carton exec -- prove -lvt t
する前にcarton install
とcarton check
をする use_ok Imager::File::PNG
を書いておく。( 手元とかでも入ってなかったら気づける )