2016-05-05 17 views
9

Einer von my CPAN modules ist not available auf ActivePerl über seine ppm Dienstprogramm. Anscheinend ist mein Unit-Test für dieses Modul zu gründlich und ActiveState's build process times out, wenn es versucht, es zu bauen.Wie erkennt man die ActiveState-Version von Perl?

Also, was ich in meinen Tests tun möchte, ist festzustellen, wenn mein Modul auf ActivePerl gebaut wird, und wenn ja, um den Build-Prozess mit einem kleineren und schnelleren Satz von Tests bereitzustellen.

One way I've found to do this ist:

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

aber ich frage mich, ob es eine leichtere Option. Eine Umgebungsvariable, die immer (und nur) in ActivePerl festgelegt ist? Etwas in Config? Irgendwelche anderen Vorschläge?

UPDATE: Sieht aus wie $ENV{ACTIVESTATE_PPM_BUILD} wird während dieser Builds festgelegt.

+2

FWIW: 'Config :: local_patches()' kann einen gewissen Wert haben. Auf meinem Rechner gibt es 'ActivePerl Build 2201 [299574]' zurück. – tjd

Antwort

7

Überprüfen, ob es unter einem ActivePerl Build läuft, ist nicht optimal. Im Idealfall möchten Sie überprüfen, ob es in der Build-Umgebung von ActiveState ausgeführt wird. Ich würde das env in t/00-use.t ablegen, um zu sehen, ob sie eine Variable setzen, die dies anzeigt.

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

Sie können auch ActiveState kontaktieren und sie fragen, was sie empfehlen.


Alternativ könnten Sie es machen, so dass nur die langsamsten Tests bei Bedarf ausgeführt (zum Beispiel, wenn eine bestimmte Umgebung vorhanden ist). 5 Minuten Tests könnten auch für andere etwas übertrieben erscheinen.


Wie zu überprüfen, ob Sie ein Active Build laufen lassen, sind hier einige Möglichkeiten:

  • use Config; print Config::local_patches(); gibt eine Zeichenfolge, die ActivePerl Build enthält.
  • $Config{cf_email} wird auf [email protected]
  • Die ActivePerl :: Config-Modul vorhanden ist.
  • Das ActivePerl :: PPM-Modul existiert.

Konnte immer alle von ihnen überprüfen.

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

Das sind alles großartige Vorschläge. Vielen Dank! – mob

4

Nach einer schnellen Suche nach activeperl ppm build increase timeout Sie diese Situation auf ihre Mailingliste/Support melden können, und sie werden manuell für Modul baut Ihres Timeout-Wert erhöhen.