2016-05-05 2 views
9

Один из my CPAN modules - это not available на ActivePerl через его утилиту . По-видимому, мое модульное тестирование для этого модуля слишком тщательное и 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? Любые другие предложения?

UPDATE: Похоже, что $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 вы можете сообщить об этой ситуации их список рассылки/поддержки, и они будут вручную увеличить значение тайм-аута для сборки модуля.

Смежные вопросы