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
|
package Perl::PrereqScanner::NotQuiteLite::Util::Prereqs;
use strict;
use warnings;
use Exporter 5.57 'import';
our @EXPORT = qw/dedupe_prereqs_and_features/;
sub dedupe_prereqs_and_features {
my ($prereqs, $features) = @_;
my @valid_features = grep defined, values %$features;
for my $phase ($prereqs->phases) {
my $requires = $prereqs->requirements_for($phase, 'requires');
for my $type (qw/recommends suggests/) {
my $target = $prereqs->requirements_for($phase, $type);
_dedupe($requires, $target);
}
for my $feature (@valid_features) {
for my $type (qw/requires recommends suggests/) {
my $target = $feature->requirements_for($phase, $type);
_dedupe($requires, $target);
}
}
my $recommends = $prereqs->requirements_for($phase, 'recommends');
for my $type (qw/suggests/) {
my $target = $prereqs->requirements_for($phase, $type);
_dedupe($recommends, $target);
}
for my $feature (@valid_features) {
for my $type (qw/recommends suggests/) {
my $target = $feature->requirements_for($phase, $type);
_dedupe($recommends, $target);
}
}
my $suggests = $prereqs->requirements_for($phase, 'suggests');
for my $feature (@valid_features) {
for my $type (qw/suggests/) {
my $target = $feature->requirements_for($phase, $type);
_dedupe($suggests, $target);
}
}
}
}
sub _dedupe {
my ($source, $target) = @_;
my @modules = $source->required_modules;
for my $module (@modules) {
my $version = $target->requirements_for_module($module);
next unless defined $version;
next unless $version =~ /^[0-9._]+$/;
next unless $source->accepts_module($module, $version);
$target->clear_requirement($module);
}
}
1;
__END__
=encoding utf-8
=head1 NAME
Perl::PrereqScanner::NotQuiteLite::Util::Prereqs
=head1 SYNOPSIS
=head1 DESCRIPTION
This is an internal utility to dedupe prereqs.
=head1 AUTHOR
Kenichi Ishigaki, E<lt>ishigaki@cpan.orgE<gt>
=head1 COPYRIGHT AND LICENSE
This software is copyright (c) 2017 by Kenichi Ishigaki.
This is free software; you can redistribute it and/or modify it under
the same terms as the Perl 5 programming language system itself.
=cut
|