Skip to content
This repository
Fetching contributors…

Cannot retrieve contributors at this time

executable file 123 lines (108 sloc) 3.296 kb
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 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123
#!/usr/bin/perl

# Copyright 2004-2012, Paul Johnson (paul@pjcj.net)

# This software is free. It is licensed under the same terms as Perl itself.

# The latest version of this software should be available from my homepage:
# http://www.pjcj.net

use strict;
use warnings;

use lib "utils";

use Getopt::Long;

use Devel::Cover::BuildUtils qw( prove_command cpus );

my $Options =
{
    dry_run => 0,
    ignore_failure => 0,
    silent => 1,
    version => [],
};

my $Silent = "";

sub get_options
{
    die "Bad option" unless
        GetOptions($Options,
                   qw(
build!
dry_run!
ignore_failure!
list!
silent!
version=s
));
    $Options->{version} =
        [ map { ($_, "$_-thr") }
              qw( 5.6.1 5.6.2
5.8.0 5.8.1 5.8.2 5.8.3 5.8.4 5.8.5 5.8.6 5.8.7 5.8.8 5.8.9
5.10.0 5.10.1
5.12.0 5.12.1 5.12.2 5.12.3 5.12.4
5.14.0 5.14.1 5.14.2
5.16.0 5.16.1
5.17.0 5.17.1 5.17.2 5.17.3 5.17.4
) ]
        unless @{$Options->{version}};
    $Silent = " >/dev/null 2>&1" if $Options->{silent};
    $Options->{version} =
        [ grep eval { !system "perl$_ -v$Silent" }, @{$Options->{version}} ]
        unless $Options->{build};
}

sub sys
{
    my ($command, $user) = @_;
    print "$command\n";
    return if $Options->{dry_run};
    $command .= $Silent if $Options->{silent} && !$user;
    my $ret = system $command;
    die "command failed: $?" if $ret && !$Options->{ignore_failure};
}

sub build
{
    for my $v (@{$Options->{version}})
    {
        my $opts = "";
        my ($n) = $v =~ /(\d+\.\d+\.\d+)/ or die "Can't parse [$v}";
        $opts .= " -D usethreads" if $v =~ /thr/;
        $opts .= " --force" if $n =~ /^5\.6\./;
        my $j = cpus + 1;
        sys "perlbrew -v install $n --as dc-$v -j $j $opts";
        sys "perlbrew use $v && " .
            "curl -L http://cpanmin.us | perl - App::cpanminus";
        my @mods = qw( Storable Digest::MD5 Test::More Test::Warn );
        my ($s) = $n =~ /(\d+)$/;
        if (($v !~ /thr/ || $s == 1) && $n !~ /^5\.6\./)
        {
            push @mods,
            qw(
Template
PPI::HTML
Perl::Tidy
Pod::Coverage
Pod::Coverage::CountParents
Test::Differences
Parallel::Iterator
JSON::PP
);
            push @mods, "Perl::Tidy" if !$s || $s % 2;
            push @mods, "PPI::HTML" if !$s || !($s % 2);
        }
        sys "perlbrew use $v && cpanm @mods";
    }
    exit
}

get_options;
build if $Options->{build};

my $command = "@ARGV" or die "Usage: $0 [-v version] command\n";

print "Testing against: @{$Options->{version}}\n";
for my $v (@{$Options->{version}})
{
    my $perl = "perl$v";
    (my $c = $command) =~ s/=perl/$perl/g;
    $c =~ s/=v/$v/g;
    if ($c =~ /^make /)
    {
        sys "rm -rf t/e2e";
        sys "$perl Makefile.PL";
        sys "make clean";
        sys "$perl Makefile.PL";
        sys "make";
    }
    sys $c, 1;
}
Something went wrong with that request. Please try again.