2009-05-10 19 views
2

CPANパッケージ(GnuPG)の停滞を維持するためにボランティアしたことがありますが、gpgバイナリ(GnuPGがラッパーである)が見つからない場合、インストールファイルを改善したいと思います。他のパッケージからインスピレーションを求めているのビットの後、私はMakefile.PLにこれを追加することを作ってみた:Perlでバイナリ依存関係が利用できるかどうかを確認するにはどうすればよいですか?

my @paths = grep { -x "$_/gpg" } split /:/, $ENV{PATH}, $ENV{PGP_PATH}; 

unless (scalar @paths) { 
    print <<EOD; 
I can't find the gpg binary on your system. If it's not installed in your usual PATH, set $ENV{PGP_PATH} to include where it can be found and try installing again. 
EOD 

    exit(0); 
} 

WriteMakefile(
    'NAME'  => 'GnuPG', 
    'VERSION_FROM' => 'GnuPG.pm', 
    'EXE_FILES' => [ gpgmailtunl ], 
    'LICENSE'  => 'GPL', 
    'LIBS'   => [ @paths ], 
); 

ん正気を見ていますか?

+1

":"ではなく、$ Config {path_sep}に分割するべきです。または、この目的のために、IPC :: Cmd :: can_run( 'gpg')のようなものを使用してください。 – xdg

答えて

1

一般的な考え方は問題ありません。作業する必要がない場合は、makefileを作成しないでください。 CPANテスターに​​は、失敗時にステータスがゼロの状態で終了するルールがあります(多くのことが気になりますが、心配することはありません;成功ステータスで失敗するのは嫌です)。

質問:インストール時にPGPが見つかった場所を記録しておきます。他の人がパス上の場所を使わずにPerlモジュールを使用すると、モジュールは引き続き実行できますか?

DBD :: Informixの場合、私はモジュールがコンパイルできないと厳密な依存関係があります。そのためMakefile.PLはそれ自体の主要な生産物です。また、15年以上にわたるソフトウェアのバージョンを扱おうとしています。その人生も複雑です。前提条件(一部のPerlモジュール、一部の非Perlソフトウェア)が利用できない場合、それはインストールされません。

+0

atmを保持しているレコードがありません。私はあまりにも多くの時間を費やす準備ができていないので、リファクタリングに熱心ではないので、近い将来に保持される可能性は低い。 GnuPGはgpgバイナリなしでは動作できませんが、それなしでインストールすることはできますが、それがなければ役に立たないでしょう。 – robbiebow

1

警告を印刷するだけでは意味がありませんか? gpgはインストール自体に必要ですか?

コード自体は私の目に見えます。しかし、おそらく、組み込みの「どの」機能がありますか。 :)。

+0

それは本当です。 gpgが見つからない場合は、テストをスキップする必要があります。 – robbiebow

1

File::Whichを参照するか、少なくともFile :: Spec-> path()を使用する必要があります。

3

あなたはモジュールを使用している場合::インストールまたはその家族の一部は、使用することができます

requires_external_bin 'gpg'; 

を行う詳細についてはModule::Install::Externalを参照してください。

車輪を再発明する良い理由はありません。

+0

ありがとうございます。これはExtUtils :: MakeMaker atmに基づいていますが、それは変更することができます。 – robbiebow

+2

特定のライブラリとヘッダーファイル(バイナリだけでなく)が利用可能かどうかをテストする必要がある場合は、Devel :: CheckLibを使用できます。 – mpeters

1

ファイル::これは、クロスプラットフォームのソリューションになります。 inc /ディレクトリにバンドルするか、configure_requiresでインストールする必要があります。 EU :: MMにとっては良い解決策でもあるのインストール::

META_MERGE => { 
     configure_requires => { 
      'File::Which' => 0, 

モジュールで行うことができますが、あなたは配布モジュールのたびに新しいバージョンの新しいバージョンをリリースする必要があります::インストール解放し、変更されました重要です。

関連する問題