r37836 - /trunk/dh-make-perl/lib/Debian/Control/FromCPAN.pm
dmn at users.alioth.debian.org
dmn at users.alioth.debian.org
Mon Jun 8 04:35:15 UTC 2009
Author: dmn
Date: Mon Jun 8 04:35:07 2009
New Revision: 37836
URL: http://svn.debian.org/wsvn/pkg-perl/?sc=1&rev=37836
Log:
Control::FromCPAN: implement pruning on redundant (build-) dependencies on perl, perl-modules or perl-base
Modified:
trunk/dh-make-perl/lib/Debian/Control/FromCPAN.pm
Modified: trunk/dh-make-perl/lib/Debian/Control/FromCPAN.pm
URL: http://svn.debian.org/wsvn/pkg-perl/trunk/dh-make-perl/lib/Debian/Control/FromCPAN.pm?rev=37836&op=diff
==============================================================================
--- trunk/dh-make-perl/lib/Debian/Control/FromCPAN.pm (original)
+++ trunk/dh-make-perl/lib/Debian/Control/FromCPAN.pm Mon Jun 8 04:35:07 2009
@@ -13,6 +13,7 @@
package Debian::Control::FromCPAN;
use strict;
+use Carp qw(croak);
use base 'Debian::Control';
@@ -20,6 +21,7 @@
use File::Spec qw( catfile );
use constant min_perl_version => '5.6.0-12';
+use constant oldstable_perl_version => '5.8.8';
=head1 CONSTRUCTOR
@@ -192,6 +194,141 @@
}
}
+=item prune_simple_perl_dep
+
+Input:
+
+=over
+
+=item dependency object
+
+shall be a simple dependency (no alternatives)
+
+=item (optional) build dependency flag
+
+true value indicates the dependency is a build-time one
+
+=back
+
+
+The following checks are made
+
+=over
+
+=item dependencies on C<perl-modules>
+
+These are replaced with C<perl> as per Perl policy.
+
+=item dependencies on C<perl-base> and build-dependencies on C<perl> or
+C<perl-base>
+
+These are removed, unless they specify a version greater than the one available
+in C<oldstable> or the dependency relation is not C<< >= >> or C<<< >> >>>.
+
+=back
+
+Return value:
+
+=over
+
+=item undef
+
+if the dependency is redundant.
+
+=item pruned dependency
+
+otherwise. C<perl-modules> replaced with C<perl>.
+
+=back
+
+=cut
+
+sub prune_simple_perl_dep {
+ my( $self, $dep, $build ) = @_;
+
+ croak "No alternative dependencies can be given"
+ if $dep->alternatives;
+
+ return $dep unless $dep->pkg =~ /^(?:perl|perl-base|perl-modules)$/;
+
+ $dep->pkg('perl') if $dep->pkg eq 'perl-modules';
+
+ return undef
+ if ( $dep->pkg eq 'perl-base'
+ or $build ) # perl is build-essential
+ and (
+ not $dep->ver # unversioned dependency is redundant
+ or $dep->rel =~ />/
+ and $AptPkg::Config::_config->system->versioning->compare(
+ $dep->ver, $self->oldstable_perl_version ) <= 0
+ );
+
+ return $dep;
+}
+
+=item prune_perl_dep
+
+Similar to L</prune_simple_perl_dep>, but supports alternative dependencies.
+If any of the alternatives is redundant, the whole dependency is considered
+redundant.
+
+=cut
+
+sub prune_perl_dep {
+ my( $self, $dep, $build ) = @_;
+
+ return $self->prune_simple_perl_dep( $dep, $build )
+ unless $dep->alternatives;
+
+ for my $simple ( @{ $dep->alternatives } ) {
+ my $pruned = $self->prune_simple_perl_dep( $simple, $build );
+
+ # redundant alternative?
+ return undef unless $pruned;
+
+ $simple = $pruned;
+ }
+
+ return $dep;
+}
+
+=item prune_perl_deps
+
+Remove redundant (build-)dependencies on perl, perl-modules and perl-base.
+
+=cut
+
+sub prune_perl_deps {
+ my $self = shift;
+
+ # remove build-depending on ancient perl versions
+ for my $perl ( qw( perl perl-base perl-modules ) ) {
+ for ( qw( Build_Depends Build_Depends_Indep ) ) {
+ my @ess = $self->source->$_->remove($perl);
+ # put back non-redundant ones (possibly modified)
+ for my $dep (@ess) {
+ my $pruned = $self->prune_perl_dep( $dep, 1 );
+
+ $self->source->$_->add($pruned) if $pruned;
+ }
+ }
+ }
+
+ # remove depending on ancient perl versions
+ for my $perl ( qw( perl perl-base perl-modules ) ) {
+ for my $pkg ( $self->binary->Values ) {
+ for my $rel ( qw(Depends Recommends Suggests) ) {
+ my @ess = $self->$pkg->$rel->remove($perl);
+ for my $dep (@ess) {
+ my $pruned = $self->prune_perl_dep( $dep, 0 );
+
+ $self->$pkg->$rel->add($pruned) if $pruned;
+ }
+ }
+ }
+ }
+}
+
=back
=head1 COPYRIGHT & LICENSE
More information about the Pkg-perl-cvs-commits
mailing list