2

gpg停滞したCPANパッケージ(GnuPG)を維持することを志願したので、バイナリ(GnuPGがラッパー)が見つからない場合に正常に終了するようにインストールファイルを改善したいと思います。他のパッケージからインスピレーションを得た後、これをMakefile.PLに追加することにしました。

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 ],
);

それは正気に見えますか?

4

5 に答える 5

3

Module :: Installまたはそのファミリの一部を使用している場合は、doを使用できます。

requires_external_bin 'gpg';

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

車輪の再発明をする正当な理由はありません。

于 2009-05-10T15:17:54.933 に答える
1

精度を高めるには、File :: whichを確認するか、少なくともFile :: Spec-> path()を使用する必要があります

于 2009-05-10T15:01:26.680 に答える
1

警告を印刷する方が理にかなっているのではないでしょうか。インストール自体にgpgは必要ですか?

コード自体は私には問題ないように見えます。しかし、おそらく組み込みの「which」機能があります。:)。

于 2009-05-10T14:29:42.833 に答える
1

一般的な概念は問題ありません。作業する必要があるものが存在しない場合は、makefileを作成しないでください。CPANテスターに​​は、失敗時にゼロステータスで終了することに関するルールがあります(これは私を大いに悩ませますが、気にしないでください。成功ステータスで失敗するのは嫌いです!)。

質問:インストール時にPGPが見つかった場所を記録して、他の誰かがパス上の場所なしでPerlモジュールを使用した場合でも、モジュールを実行できるようにしますか?

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

于 2009-05-10T15:31:44.407 に答える
1

File::これはクロスプラットフォームソリューションになります。これをinc/ディレクトリにバンドルするか、configure_requiresを使用してインストールする必要があります。EU :: MMの場合、次のように実行できます。

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

Module :: Installも優れたソリューションですが、Module :: Installの新しいバージョンがリリースされるたびに、新しいバージョンのディストリビューションをリリースする必要があり、変更が重要になります。

于 2009-05-10T19:29:30.720 に答える