blob: 3910180cfec68c881d1c56e7e408386690654e6b [file] [log] [blame]
# version_check.pl tool version
use strict;
use warnings 'FATAL';
use Getopt::Long qw/GetOptions/;
GetOptions(\my %opts, "version=s");
my ($tool, $path) = @ARGV;
$path = $tool unless defined $path;
sub exe_version { scalar qx/$path -v/ }
sub gnu_version { scalar qx/$path --version/ }
sub xsb_version {
package ExtUtils::XSBuilder;
require ExtUtils::XSBuilder;
return our $VERSION;
}
sub a_t_version {
require Apache::Test;
$Apache::Test::VERSION;
}
sub tm_version {
require Test::More;
$Test::More::VERSION;
}
sub mm_version {
require ExtUtils::MakeMaker;
$ExtUtils::MakeMaker::VERSION;
}
sub mp2_version {
eval {
require Apache2;
require mod_perl;
$mod_perl::VERSION;
} or do {
require mod_perl;
$mod_perl::VERSION;
};
}
my %svn = (
libtool => { version => "1.4.3", test => \&gnu_version },
autoconf => { version => "2.53", test => \&gnu_version },
automake => { version => "1.4.0", test => \&gnu_version },
doxygen => { version => "1.2", test => \&gnu_version },
perl => { version => "5.6.1", test => \&gnu_version },
"ExtUtils::XSBuilder" => { version => "0.23", test => \&xsb_version },
);
my %build = (
apache2 => { version => "2.0.46", test => \&exe_version },
apr => { version => "0.9.4", test => \&gnu_version,
comment => "bundled with apache2 2.0.46" },
apu => { version => "0.9.4", test => \&gnu_version,
comment => "bundled with apache2 2.0.46" },
perl => $svn{perl},
);
my %perl_glue = (
perl => $svn{perl},
"ExtUtils::XSBuilder" => $svn{"ExtUtils::XSBuilder"},
"Apache::Test" => { version => "1.04", test => \&a_t_version,
comment => "Win32 requires version 1.06" },
# mp2 does not contain "_" in its reported version number
mod_perl => { version => "1.9915", test => \&mp2_version },
"ExtUtils::MakeMaker" => { version => "6.15", test => \&mm_version },
"Test::More" => { version => "0.47", test => \&tm_version },
);
sub print_prereqs ($$) {
my ($preamble, $prereq) = @_;
print $preamble, "\n";
for (sort keys %$prereq) {
my ($version, $comment) = @{$prereq->{$_}}{qw/version comment/};
if ($opts{version}) {
print " $_: $version\n";
}
else {
$comment = defined $comment ? " ($comment)" : "";
printf "%30s: %s%s\n", $_, $version, $comment;
}
}
}
if (@ARGV == 0) {
if ($opts{version}) { # generate META.yml file content
print <<EOT;
--- #YAML:1.0 (see http://module-build.sourceforge.net/META-spec.html)
name: libapreq2
version: $opts{version}
license: open_source
installdirs: site
distribution_type: module
dynamic_config: 1
provides:
Apache::Request:
version: $opts{version}
Apache::Cookie:
version: $opts{version}
Apache::Upload:
version: $opts{version}
generated_by: $0
EOT
my %runtime_prereqs = (
mod_perl => $perl_glue{mod_perl},
perl => $perl_glue{perl},
);
print_prereqs "requires:", \%runtime_prereqs;
print_prereqs "build_requires:", \%perl_glue;
}
else { # generate PREREQUISITES file content
print "=" x 50, "\n";
print_prereqs
"Build system (core C API) prerequisites\n", \%build;
print "\n", "=" x 50, "\n";
print_prereqs
"Perl glue (Apache::Request) prerequisites\n", \%perl_glue;
print "\n", "=" x 50, "\n";
print_prereqs
"Additional prerequisites for apreq subversion builds\n", \%svn;
}
exit 0;
}
# test prerequisites from the command-line arguments
my %prereq = (%svn, %build, %perl_glue);
die "$0 failed: unknown tool '$tool'.\n" unless $prereq{$tool};
my $version = $prereq{$tool}->{version};
my @version = split /\./, $version;
$_ = $prereq{$tool}->{test}->();
die "$0 failed: no version_string found in '$_'.\n" unless /(\d[.\d]+)/;
my $saw = $1;
my @saw = split /\./, $saw;
$_ = 0 for @saw[@saw .. $#version]; # ensure @saw has enough entries
for (0.. $#version) {
last if $version[$_] < $saw[$_];
die <<EOM if $version[$_] > $saw[$_];
$0 failed: $tool version $saw unsupported ($version or greater is required).
EOM
}
print "$tool: $saw ok\n";