PPM::Make に入っているPPMパッケージ作成用ツール。 Perl モジュールのソースを展開して、
perl Makefile.PL nmake nmake test make_ppm
でパッケージ化できる。.ppd ファイルと .tar.gz ファイルが作成される。
そのまま、
ppm install -location . モジュール名
でインストール。
昨日 Linux 上で実験してみた PAR を Windows にも入れてみる。 PDLを使っている関係で ActivePerl は 5.6.1。
ppm install で入るパッケージは古いので、最新のものを入れておく。 ちょっと手間。
ワンライナーを pp できるところまで動作確認。
ExtUtils::Makemakerを使ってパッケージ化している開発中のモジュール(スクリプトあり、XS あり)を実行可能形式化してみる。
perl Makefile.PL nmake nmake test cd blib set PERL5LIB=lib;arch (pp の -I オプションが効かなかったので) pp -o foo.exe -a lib -a arch -M ... -c script/foo
Log::Log4perl::Appender::Screen、Jcode::Unicode::NoXS、Unicode::String、GD については依存関係を自動検出できなかったので、それぞれ -M で指定。
できた。動いた。素晴しい。 PDL や GD を使っていたのでちょっと不安だったのだがうまく動いて感激。 これでCD-ROMとか USB メモリに入れておいて一発実行とかできる。
Term::ProgressBar を PREREQ_PM にしているパッケージを make_ppm すると、ppd に Term-ProgressBar ではなく Term-ProgressBar-2.06 が DEPENDENCY として出力される。
CPAN にある最新パッケージが Term-ProgressBar-2.06-r1 と、ちょっと変則的なバージョン番号がついているので誤認しているようだ。 PPM::Make::Util::version あたりでヒューリスティックにパッケージ名とバージョン番号を分離しているっぽい。
とりあえず出力されたPPDを手で直すか。
PPM::Make の make_ppm で ppd ファイルを作成すると自動的に DEPENDENCY 要素を生成してくれる。 今作っているパッケージ、 Windows の ActivePerl 下で動かす時には追加の依存モジュールが(Win32::*)あるので、Makefile.PL の中で $^O を見て PREREQ_PM に追加を行っている。
で気がつくとこれが ppd に反映されていない。
ソースを見たところ META.yml があってこれから情報が取得できている時は、Makefile を見にいかないようになっている。 META.yml が無いか、必要な情報が取れていない場合は、Makefile をスキャンして PREREQ_PM などを取得している (Makefile.PL ベースの場合)。
ここでパッケージの作成(make dist)を Linux 上で行っている関係で META.yml には Windows 環境特有の requires が入らないため、結果 ppd に DEPENDENCY が足りない事になる。
Naney (なにい) です。株式会社MIXIで SNS 事業の部長をしています。
※本サイトの内容は個人的見解であり所属組織とは関係ありません。