nDiki
2005年3月8日 (火)
■ 「依存関係検査のしにくいモジュール」に依存するスクリプトをPARで実行形式化する

PAR を使うとPerlスクリプトを単独の実行可能形式ファイルに変換することができる。 この際、自動的に依存するモジュールも探し出して追加してくれるのだが、eval の中で use するものや lib 以下に配置された通常のファイル等は自分で追加する必要がある (pp の -a, -A, -M オプション等で)。
開発しているモジュールに含まれるスクリプトをexe化するルールは、Makefile.PL でいろいろ処理をしてこれらを指定するようにしておけば比較的簡単にビルドできる。
しかしそれが今開発対象となっているモジュール/スクリプトではなく、その依存モジュールがそのようになっていると面倒くさい。 ということで依存モジュール側で必要なモジュール・ファイル一式を PAR ファイル化し、それを作業中のモジュール/スクリプトで取り込むようにしてみた。
PAR の pp コマンドは(1つのPAR ファイルから実行形式ファイルを作る時以外)直接 par ファイルを取り込む事ができないようなので、展開してあらためて追加する必要があるのでちょっと面倒。
@ 依存モジュールをまとめた par を作る
例えばそのモジュールに myscript.pl が含まれており、これをexe化するにはいくつか手動で追加するファイルを指定する必要があるとする。
またそれらのファイルは、現在作ろうとしているスクリプトをexe化する際にも必要だとする。
pp -p -o all.par \
-I blib/lib -I blib/arch \
-A ... \
-M ... \
blib/script/myscript.pl
myscript.pl に必要なモジュールを含んだ PAR ファイル all.par ができる。
ちなみに parl -p でもモジュールからPAR ファイル化でき blib 以下をごっそりアーカイブできるのだが、そのモジュールが依存しているモジュールを含ませることができないので、今回の用途には×。
@ PAR ファイルを展開する
all.par を展開する。 ここでは c:\tmp\all 以下に展開するものとする。
@ 作成したいスクリプトのPAR ファイルをいったん作る
スクリプトのあるモジュールのディレクトリに移動し、make。 その後
pp -p -o newscript.par \
-I blib/lib -I blib/arch -I c:\tmp\all\lib \
-a c:\tmp\all\lib;lib \
blib/script/newscript.pl
newscript.par が出来上がる。この中には -a オプションの指定と、newscript.pl の依存関係検査による抽出で c:\tmp\all\lib 以下のファイルが2回含まれているものがある(大抵)。 無駄なので除去する。
(面倒ならば重複するファイルを含んだままではあるが、ここで -p オプションを指定しないで直接 exe を作る事も可能である)
@ 除去するスクリプト(例)
#!/usr/bin/perl -w
use strict;
use Archive::Zip qw(:ERROR_CODES);
my $zip_name = shift || die 'must provide a zip name';
my $zip = Archive::Zip->new;
$zip->read($zip_name) == AZ_OK || die "Can't read $zip_name:\n";
my %names;
for my $member ($zip->members) {
my $file_name = $member->fileName;
if (exists $names{$file_name}) {
print "Remove $file_name ...";
if (defined $zip->removeMember($member)) {
print "OK.\n";
}
else {
print "NG.\n";
}
}
$names{$file_name}++;
}
exit($zip->overwrite);
@ PAR ファイルを実行可能形式ファイルに変換する
pp -o newscript.exe newscript.par
- PAR::Repository でビルド済み Perl モジュールをネット... (2006-12-12)
- [ Perl ] PDL::PP で C extension を書く (2004-02-19)
- Module::Build でソースパッケージング (2005-08-24)
- SQLite とか DbUnit とか (2005-05-23)
- Perl スクリプトを PAR ファイルにして PAR リポジトリに登録する (2006-12-15)
Related term
■よく検索されるキーワード
提案書(65) perl(54) 書き方(49) torrent(49) linux(40) debian(35) アジェンダ(33) 使い方(31) windows(31) x31(30) svn(26) ssh(25) tc-1(25) サンプル(23) usb(22) java(22) ganttproject(21) mp980(20) 画像(20) tortoisesvn(20) インストール(19) 手帳(19) cvs(19) 壁紙(19) a6(18) thinkpad(17) subversion(16) 石垣祐馬(16) ほぼ日手帳(16) 作り方(16) 修理(16) 動画(15) 日本語(15) 充電式カイロ(15) ノート(14) ダイソー(14) 方眼(14) ヨドバシ(14) リフィル(13) 秋葉原(12) ダウンロード(12) apache(12) アジェンダとは(12) iwgp(12) 設定(12) c#(11) mp3(11) ヨドバシカメラ(11) テンプレート(11) 無線lan(11) ubuntu(11) nikon(11) dropbox(11) システム手帳(11) porter(11) クラリチン(10) 筆まめ(10) centos(10) ヤマダ電機(10) window(10) ポメラ(9) フリー(9) リポジトリ(9) イメージテック(9) wiki(9) flex(9) xampp(9) フォーマット(9) terastation(8) flash(8) gmail(8) ドラマ(8) proxy(8) rcs(8) 無料(8) 温度計(8) トランサミン(8) constant(8) truecrypt(8) google(8)■注目キーワード
購入 買った 発売日 フリー 無料 価格 値段 作り方 選び方 使い方 方法 設定 サンプル ダウンロード 限定 在庫 予約 穴場 比較 検証 レビュー 感想 評価 評判 使用感 使ってみた 口コミ 噂 最新 MP3 動画 意味 お薦め お勧め おすすめ 便利 Blog ブログ mixi 修理 デザインProcess Time: 0.229377s / load averages: 0.88, 0.90, 1.06
nDiki by WATANABE Yoshimasa (profile)
Powered by DiKicker
Base theme by Nana (for tDiary)



スポンサード リンク