9

私の CPAN モジュールの1 つが、そのユーティリティを介して ActivePerl で利用できません。ppmどうやら、このモジュールの単体テストが徹底しすぎており、ビルドしようとするとActiveState のビルド プロセスがタイムアウトするようです。

したがって、テストでやりたいことは、モジュールが ActivePerl でビルドされていることを検出し、そうであれば、ビルド プロセスに小規模で高速なテスト セットを提供することです。

これを行うために私が見つけた1つの方法は次のとおりです。

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

しかし、もっと軽量なオプションがあるかどうか疑問に思っています。ActivePerl で常に (そして唯一) 設定される環境変数? で何かConfig?他の提案はありますか?

更新:$ENV{ACTIVESTATE_PPM_BUILD}これらのビルド中に設定されているようです。

4

2 に答える 2

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}に設定されています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 };
于 2016-05-05T17:55:08.917 に答える
4

クイック検索によると、activeperl ppm build increase timeoutこの状況をメーリング リスト/サポートに報告できます。モジュールのビルドのタイムアウト値を手動で増やします。

于 2016-05-05T19:36:07.500 に答える