#!perl
use strict;
use warnings;
use English qw( -no_match_vars ); # Avoids regex performance penalty
local $OUTPUT_AUTOFLUSH = 1;
use Test::More;
use Test::Requires {'ExtUtils::MakeMaker' => 6.68};
use Test::Requires {'File::Spec::Functions' => 3.40};
use Test::Requires {'List::Util' => 1.38};
use List::Util qw/max/;
my @modules = qw(
perl
Carp
Cwd
Data::Printer
File::Slurp::Tiny
File::Spec
Getopt::Long
JSON::Tiny
List::MoreUtils
MetaCPAN::API
Module::CoreList
Moo
PPI
Perl::MinimumVersion
Perl::PrereqScanner
Pod::Usage
Scalar::Util
Term::ANSIColor
Time::Stamp
Try::Tiny
constant
version
ExtUtils::MakeMaker
List::Util
Test::More
Test::Requires
CPAN::Changes
CPAN::Meta
Perl::Critic
Test::CPAN::Changes
Test::CPAN::Changes::ReallyStrict
Test::CPAN::Meta
Test::CheckChanges
Test::DistManifest
Test::EOL
Test::HasVersion
Test::Kwalitee
Test::Kwalitee::Extra
Test::MinimumVersion
Test::Perl::Critic
Test::Pod
Test::Pod::Coverage
Test::Portability::Files
Test::Tabs
);
# replace modules with dynamic results from MYMETA.json if we can
# (hide CPAN::Meta from prereq scanner)
my $cpan_meta = "CPAN::Meta";
if (-f "MYMETA.json" && eval "require $cpan_meta") { ## no critic
if (my $meta = eval { CPAN::Meta->load_file("MYMETA.json") }) {
my $prereqs = $meta->prereqs;
my %uniq
= map { $_ => 1 } map { keys %$_ } map { values %$_ } values %$prereqs;
$uniq{$_} = 1 for @modules; # don't lose any static ones
@modules = sort keys %uniq;
}
}
my @reports = [qw/Version Module/];
for my $mod (@modules) {
next if $mod eq 'perl';
my $file = $mod;
$file =~ s{::}{/}g;
$file .= ".pm";
my ($prefix) = grep { -e catfile($_, $file) } @INC;
if ($prefix) {
my $ver = MM->parse_version(catfile($prefix, $file));
$ver = "undef" unless defined $ver; # Newer MM should do this anyway
push @reports, [$ver, $mod];
}
else {
push @reports, ["missing", $mod];
}
}
if (@reports) {
my $vl = max map { length $_->[0] } @reports;
my $ml = max map { length $_->[1] } @reports;
splice @reports, 1, 0, ["-" x $vl, "-" x $ml];
diag "Prerequisite Report:\n",
map { sprintf(" %*s %*s\n", $vl, $_->[0], -$ml, $_->[1]) } @reports;
}
pass;
done_testing();
__END__
pass;
# vim: ts=2 sts=2 sw=2 et: