如何检测Perl的ActiveState版本?

9

我的CPAN模块之一是Forks::Super,但在ActivePerl的ppm工具中不可用。显然,我的此模块的单元测试过于彻底,当ActiveState尝试构建它时,ActiveState的构建过程超时

所以我想在测试中检测我的模块是否正在ActivePerl上构建,如果是,则提供一个更小更快的测试集来加速构建过程。

我发现的一种方法是:

($is_activestate) = grep /provided by ActiveState/, qx($^X -v)

但我在想是否有更轻量级的选项。一个环境变量,它在ActivePerl中始终(且仅)设置?Config中有相关内容吗?还有其他建议吗?

更新:看起来$ENV {ACTIVESTATE_PPM_BUILD} 在这些构建期间被设置。


2
仅供参考:Config::local_patches() 可能有一定价值。在我的机器上,它返回 ActivePerl Build 2201 [299574] - tjd
2个回答

7
检查是否在ActivePerl构建下运行不是最优的。理想情况下,您应该检查它是否在ActiveState的构建环境中运行。我会在t/00-use.t中转储env以查看它们是否设置了一些指示此内容的变量。
info("$_=$ENV{$_}") for sort keys %ENV;

您也可以联系ActiveState并询问他们的建议。


或者,您可以使最慢的测试仅在需要时运行(例如,在特定环境存在时)。对于其他人来说,5分钟的测试可能有点过多。


至于如何检查是否正在运行ActiveState构建,以下是一些可能性:

  • use Config; print Config::local_patches(); 返回包含ActivePerl Build的字符串。
  • $Config{cf_email} 设置为support@ActiveState.com
  • 存在ActivePerl :: Config模块。
  • 存在ActivePerl :: PPM模块。

始终可以检查所有内容。

use Config qw( %Config );

my $is_activeperl = 0;
$is_activeperl ||= eval { Config::local_patches() =~ /ActivePerl/i };
$is_activeperl ||= $Config{cf_email} =~ /ActiveState/i;
$is_activeperl ||= eval { require ActivePerl::Config };
$is_activeperl ||= eval { require ActivePerl::PPM };

这些都是很好的建议。谢谢! - mob

4
根据对“activeperl ppm build increase timeout”的快速搜索,您可以将此情况报告给他们的邮件列表/支持,并且他们会手动增加构建模块的超时值。

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接