Tests: 001compile.t parallelisiert
authorMoritz Bunkus <m.bunkus@linet-services.de>
Fri, 10 Feb 2017 15:48:14 +0000 (16:48 +0100)
committerMoritz Bunkus <m.bunkus@linet-services.de>
Fri, 10 Feb 2017 15:48:14 +0000 (16:48 +0100)
SL/InstallationCheck.pm
t/001compile.t

index 92f575c..297b7ad 100644 (file)
@@ -72,9 +72,11 @@ BEGIN {
   { name => "LWP::Simple",                         url => "http://search.cpan.org/~gaas/",      debian => 'libwww-perl', dist_name => 'libwww-perl' },
   { name => "Moose::Role",                         url => "http://search.cpan.org/~doy/",       debian => 'libmoose-perl' },
   { name => "Perl::Tags",                          url => "http://search.cpan.org/~osfameron/", debian => 'libperl-tags-perl' },
+  { name => "Sys::CPU",                            url => "http://search.cpan.org/~mkoderer/",  debian => 'libsys-cpu-perl' },
   { name => "Test::Deep",                          url => "http://search.cpan.org/~rjbs/",      debian => 'libtest-deep-perl' },
   { name => "Test::Exception",                     url => "http://search.cpan.org/~adie/",      debian => 'libtest-exception-perl' },
   { name => "Test::Output",                        url => "http://search.cpan.org/~bdfoy/",     debian => 'libtest-output-perl' },
+  { name => "Thread::Pool::Simple",                url => "http://search.cpan.org/~jwu/",       debian => 'libthread-pool-simple-perl' },
   { name => "URI::Find",                           url => "http://search.cpan.org/~mschwern/",  debian => 'liburi-find-perl' },
   { name => "GD",              version => '2.00',  url => "http://search.cpan.org/~lds/",       debian => 'libgd-perl' },
   { name => "Rose::DB::Object", version => 0.809,  url => "http://search.cpan.org/~jsiracusa/", debian => 'librose-db-object-perl' },
index 5289a2d..0d1657b 100644 (file)
 ###Compilation###
 
 use strict;
+use threads;
 
 use lib 't';
 
 use Support::Files;
+use Sys::CPU;
+use Thread::Pool::Simple;
 
 use Test::More tests => scalar(@Support::Files::testitems);
 
@@ -61,34 +64,54 @@ my $perlapp = "\"$^X\"";
 
 # Test the scripts by compiling them
 
-foreach my $file (@testitems) {
-    $file =~ s/\s.*$//; # nuke everything after the first space (#comment)
-    next if !$file;    # skip null entries
+my @to_compile;
+
+sub test_compile_file {
+  my ($file, $T) = @{ $_[0] };
+
 
-    open (FILE,$file);
-    my $bang = <FILE>;
-    close (FILE);
-    my $T = "";
-    $T = "T" if $bang =~ m/#!\S*perl\s+-.*T/;
+  my $command = "$perlapp -w -c$T -Imodules/fallback -Imodules/override -It -MSupport::CanonialGlobals $file 2>&1";
+  my $loginfo=`$command`;
 
-    if (-l $file) {
-        ok(1, "$file is a symlink");
+  if ($loginfo =~ /syntax ok$/im) {
+    if ($loginfo ne "$file syntax OK\n") {
+      ok(0,$file." --WARNING");
+      print $fh $loginfo;
     } else {
-        my $command = "$perlapp -w -c$T -Imodules/fallback -Imodules/override -It -MSupport::CanonialGlobals $file 2>&1";
-        my $loginfo=`$command`;
-
-        if ($loginfo =~ /syntax ok$/im) {
-            if ($loginfo ne "$file syntax OK\n") {
-                ok(0,$file." --WARNING");
-                print $fh $loginfo;
-            } else {
-                ok(1,$file);
-            }
-        } else {
-            ok(0,$file." --ERROR");
-            print $fh $loginfo;
-        }
+      ok(1,$file);
     }
+  } else {
+    ok(0,$file." --ERROR");
+    print $fh $loginfo;
+  }
 }
 
+foreach my $file (@testitems) {
+  $file =~ s/\s.*$//;           # nuke everything after the first space (#comment)
+  next if !$file;               # skip null entries
+
+  open (FILE,$file);
+  my $bang = <FILE>;
+  close (FILE);
+  my $T = "";
+  $T = "T" if $bang =~ m/#!\S*perl\s+-.*T/;
+
+  if (-l $file) {
+    ok(1, "$file is a symlink");
+  } else {
+    push @to_compile, [ $file, $T ];
+  }
+}
+
+my $pool = Thread::Pool::Simple->new(
+  min    => 2,
+  max    => Sys::CPU::cpu_count() + 1,
+  do     => [ \&test_compile_file ],
+  passid => 0,
+);
+
+$pool->add($_) for @to_compile;
+
+$pool->join;
+
 exit 0;