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 124 125 126 127 128 129 130 131 132 133
|
#!perl
use strict;
use warnings;
# This test was generated by Dist::Zilla::Plugin::Test::ReportPrereqs 0.010
use Test::More tests => 1;
use ExtUtils::MakeMaker;
use File::Spec::Functions;
use List::Util qw/max/;
my @modules = qw(
CPAN::Meta
CPAN::Meta::Requirements
Class::Load
ExtUtils::MakeMaker
File::Spec::Functions
List::Util
Module::Build::Tiny
Module::Runtime
Moose
Moose::Role
Moose::Util::TypeConstraints
MooseX::Types
MooseX::Types::Moose
Test::Fatal
Test::More
lib
namespace::autoclean
perl
strict
warnings
);
my %exclude = map {; $_ => 1 } qw(
);
my ($source) = grep { -f $_ } qw/MYMETA.json MYMETA.yml META.json/;
$source = "META.yml" unless defined $source;
# replace modules with dynamic results from MYMETA.json if we can
# (hide CPAN::Meta from prereq scanner)
my $cpan_meta = "CPAN::Meta";
my $cpan_meta_req = "CPAN::Meta::Requirements";
my $all_requires;
if ( -f $source && eval "require $cpan_meta" ) { ## no critic
if ( my $meta = eval { CPAN::Meta->load_file($source) } ) {
# Get ALL modules mentioned in META (any phase/type)
my $prereqs = $meta->prereqs;
delete $prereqs->{develop} if not $ENV{AUTHOR_TESTING};
my %uniq = map {$_ => 1} map { keys %$_ } map { values %$_ } values %$prereqs;
$uniq{$_} = 1 for @modules; # don't lose any static ones
@modules = sort grep { ! $exclude{$_} } keys %uniq;
# If verifying, merge 'requires' only for major phases
if ( 1 ) {
$prereqs = $meta->effective_prereqs; # get the object, not the hash
if (eval "require $cpan_meta_req; 1") { ## no critic
$all_requires = $cpan_meta_req->new;
for my $phase ( qw/configure build test runtime/ ) {
$all_requires->add_requirements(
$prereqs->requirements_for($phase, 'requires')
);
}
}
}
}
}
my @reports = [qw/Version Module/];
my @dep_errors;
my $req_hash = defined($all_requires) ? $all_requires->as_string_hash : {};
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];
if ( 1 && $all_requires ) {
my $req = $req_hash->{$mod};
if ( defined $req && length $req ) {
if ( ! defined eval { version->parse($ver) } ) {
push @dep_errors, "$mod version '$ver' cannot be parsed (version '$req' required)";
}
elsif ( ! $all_requires->accepts_module( $mod => $ver ) ) {
push @dep_errors, "$mod version '$ver' is not in required range '$req'";
}
}
}
}
else {
push @reports, ["missing", $mod];
if ( 1 && $all_requires ) {
my $req = $req_hash->{$mod};
if ( defined $req && length $req ) {
push @dep_errors, "$mod is not installed (version '$req' required)";
}
}
}
}
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 "\nVersions for all modules listed in $source (including optional ones):\n",
map {sprintf(" %*s %*s\n",$vl,$_->[0],-$ml,$_->[1])} @reports;
}
if ( @dep_errors ) {
diag join("\n",
"\n*** WARNING WARNING WARNING WARNING WARNING WARNING WARNING WARNING ***\n",
"The following REQUIRED prerequisites were not satisfied:\n",
@dep_errors,
"\n"
);
}
pass;
# vim: ts=2 sts=2 sw=2 et:
|