自愿维护一个停滞的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 ],
);
这看起来是否合理?
答案 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并且更改很重要时,您都需要发布新版本的发行版。