2016-05-05 12 views
9

Uno di my CPAN modules è not available su ActivePerl tramite l'utilità ppm. Apparentemente il mio test unitario per questo modulo è troppo accurato e ActiveState's build process times out quando tenta di costruirlo.Come rilevare la versione di Perl di ActiveState?

Quindi quello che vorrei fare nei miei test è rilevare quando il mio modulo viene costruito su ActivePerl e, in tal caso, fornire il processo di compilazione con una serie di test più piccola e veloce.

One way I've found to do this è:

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

ma mi chiedo se non v'è una soluzione più leggera. Una variabile di ambiente che è sempre (e solo) impostata in ActivePerl? Qualcosa in Config? Qualche altro suggerimento?

AGGIORNAMENTO: Sembra che $ENV{ACTIVESTATE_PPM_BUILD} sia impostato durante queste build.

+2

FWIW: 'Config :: local_patches()' può avere qualche valore. Sulla mia macchina restituisce 'ActivePerl Build 2201 [299574]'. – tjd

risposta

7

Controllare se è in esecuzione in un build ActivePerl non è ottimale. Idealmente, si desidera verificare se è in esecuzione nell'ambiente di build di ActiveState. Vorrei scaricare l'env in t/00-use.t per vedere se impostano alcune variabili che lo indicano.

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

È anche possibile contattare ActiveState e chiedere loro cosa consigliano.


In alternativa, si potrebbe fare in modo che i test più lenti eseguiti solo su richiesta (ad esempio quando un certo ambiente è presente). 5 minuti di test potrebbero sembrare un po 'eccessivi anche per gli altri.


Per quanto riguarda il controllo, se si sta eseguendo una build ActiveState, qui ci sono alcune possibilità:

  • use Config; print Config::local_patches(); restituisce una stringa che include ActivePerl Build.
  • $Config{cf_email} è impostato su [email protected]
  • Il modulo ActivePerl :: Config esiste.
  • Il modulo ActivePerl :: PPM esiste.

Potrebbe sempre controllarli tutti.

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

Questi sono tutti ottimi suggerimenti. Grazie! – mob

4

Secondo una ricerca rapida per activeperl ppm build increase timeout è possibile segnalare questa situazione alla loro mailing list/supporto e faranno aumentare manualmente il valore di timeout per il build di modulo.