如何检查Perl中是否有二进制依赖项?

时间:2009-05-10 14:23:59

标签: perl cpan binaries

自愿维护一个停滞的CPAN包(GnuPG)我想改进安装文件,以便在gpg二进制文件(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 ],
);

这看起来是否合理?

5 个答案:

答案 0 :(得分:3)

如果您正在使用Module :: Install或该系列的一部分,则可以使用do

requires_external_bin 'gpg';

有关详细信息,请参阅Module::Install::External

没有理由重新发明轮子。

答案 1 :(得分:1)

仅打印警告会不会更有意义?安装本身需要gpg吗?

代码本身对我来说很好看。但也许有一个内置的“哪个”功能。 :)。

答案 2 :(得分:1)

为了获得更好的准确性,您应该查看File::Which或至少使用File :: Spec-&gt; path()。

答案 3 :(得分:1)

一般概念很好 - 如果您不需要工作,请不要创建makefile。 CPAN测试员有关于退出时失败状态为零的规则(这让我很烦恼,但没关系;我讨厌失败的成功状态!)。

问题:你是否记录了安装时发现PGP的位置,以便如果其他人使用Perl模块而没有路径上的位置,模块仍然可以运行?

对于DBD :: Informix,我有严格的依赖关系,没有它,模块就无法编译;因此,Makefile.PL本身就是一个主要的产品。它还试图处理超过15年的软件版本;这也使它的生活变得复杂。如果先决条件(一些Perl模块;一些非Perl软件)不可用,则无法安装。

答案 4 :(得分:1)

File ::哪个是跨平台解决方案。您需要将其捆绑到inc /目录或要求使用configure_requires进行安装。对于EU :: MM,可以使用

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

Module :: Install也是一个很好的解决方案,但是每次发布新版本的Module :: Install并且更改很重要时,您都需要发布新版本的发行版。