2016-05-05 103 views
9

my CPAN modules之一是通過其ppm實用程序在ActivePerl上的not available。顯然,我的這個模塊的單元測試過於徹底,當它試圖構建它時,它就是ActiveState's build process times out如何檢測perl的ActiveState版本?

所以我想在我的測試中做的是檢測我的模塊何時構建在ActivePerl上,如果是,則爲構建過程提供更小更快的測試。

One way I've found to do this是:

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

,但我不知道是否有一個更輕量級的選擇。一個始終(且僅)在ActivePerl中設置的環境變量? Config?還有其他建議嗎?

更新:看起來像$ENV{ACTIVESTATE_PPM_BUILD}在這些版本中設置。

+2

FWIW:'Config :: local_patches()'可能有一定的價值。在我的機器上它返回'ActivePerl Build 2201 [299574]'。 – tjd

回答

7

檢查它是否在ActivePerl構建下運行不是最優的。理想情況下,你想檢查它是否在ActiveState的構建環境中運行。我會轉儲env在t/00-use.t看看他們是否設置了一些變量指出這一點。

info("$_=$ENV{$_}") for sort keys %ENV; 

您也可以聯繫ActiveState並詢問他們推薦的內容。或者,您可以使其成爲最慢的測試,只在需求時運行(例如,當某個環境存在時)。 5分鐘的測試對其他人來說似乎有點過分。


至於如果你正在運行的ActiveState的構建檢查,這裏有一些可能性:

  • use Config; print Config::local_patches();返回一個字符串,其中包括ActivePerl Build
  • $Config{cf_email}設置爲[email protected]
  • 存在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 }; 
+0

這些都是很棒的建議。謝謝! – mob

4

根據快速搜索activeperl ppm build increase timeout可以報告這一情況到他們的郵件列表/支持,他們將手動增加超時值建立你的模塊。