summaryrefslogtreecommitdiff
path: root/ext/Devel/PPPort/soak
blob: 893f353db716bfd6a1c76420266cbb8ff357cfcb (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86

use strict ;

my $verbose = 0 ;

# find all version of Perl that are available
my @PerlBinaries = qw( 
	perl5.004        
	perl5.00401      
	perl5.00402      
	perl5.00403      
	perl5.00404      
	perl5.00405      
	perl5.005                         
	perl5.00501                       
	perl5.00502      
	perl5.00503                     
	perl5.6.0        
	perl5.6.1 
	perl5.7.0
	perl5.7.1
	perl5.7.2      
	);

my $maxlen = 0 ;
foreach (@PerlBinaries)
  { $maxlen = length $_ if length $_ > $maxlen }
$maxlen += 3 ;

# run each through the test harness

my $bad = 0 ;
my $good = 0 ;
my $total = 0 ;

foreach my $perl (@PerlBinaries)
{
   print "Testing $perl " . ('.' x ($maxlen - length $perl)) ;
   my $ok = runit("$perl Makefile.PL") &&
            runit("make sweep")	&&
            runit("make test")	;

    ++ $total;
    if ($ok) {
        ++ $good ;
        print "ok\n";
    }
    else {
        ++ $bad ;
        print "not ok\n" ;
    }

}

print "\n\nPassed with $good of $total versions of Perl.\n";
exit $bad ;


sub runit
{
    my $cmd = shift ;
    print "Running [$cmd]\n" if $verbose ;
    my $file = "/tmp/abc.$$" ;
    unlink $file ;
    system "$cmd >$file 2>&1" ;
    if ($?)
    {
        return 0 unless $verbose ;
        my $output = docat_del($file) ;
        warn "$cmd failed: $?\n$output\n" ;
        exit ;
    }
    unlink $file ;
    return 1 ;
}                   

sub docat_del
{
    my $file = shift;
    local $/ = undef;
    open(CAT, "<$file") || die "Cannot open $file: $!";
    my $result = <CAT>;
    close(CAT);
    unlink $file ;
    return $result;
}