Ticket #44654: cpan2port-uniq-deps.diff

File cpan2port-uniq-deps.diff, 3.5 KB (added by pixilla (Bradley Giesbrecht), 10 years ago)
  • cpan2port

     
    6565use CPAN;
    6666use Module::Depends;
    6767use Module::Depends::Intrusive;
    68 use List::MoreUtils qw(any);
     68use List::MoreUtils qw(any uniq);
    6969use Module::CoreList;
    7070
    7171sub is_corelist {
     
    9595    return $name;
    9696}
    9797
     98sub dependency_name {
     99    my ( $name ) = shift;
     100    $name = lc "p5\${perl5.major}-$name";
     101    $name =~ y/+/x/;
     102    return $name;
     103}
     104
    98105sub debian {
    99106    my ( $name ) = shift;
    100107    $name = lc "lib$name-perl";
     
    132139    $info;
    133140}
    134141
    135 sub from_port { (about(shift) or return () )->{port} }
     142sub from_port { (about(shift) or return () )->{dependency} }
    136143
    137144sub about {
    138145    my ( $module_name, $config ) = @_;
     
    170177        $info{description}  = $desc;
    171178        MSG::warn $desc;
    172179    }
    173     $info{port} = package_name($info{prefix});
    174     $info{debian} = package_name($info{prefix});
     180    $info{port} = package_name($info{prefix});
     181    $info{dependency} = dependency_name($info{prefix});
     182    $info{debian} = package_name($info{prefix});
    175183    $info{dist_dir} = "$$CPAN::Config{build_dir}/$info{prefix}-$info{version}";
    176184    $info{module} = $module;
    177185    \%info;
     
    219227    $$info{maintainers} ||= 'nomaintainer';
    220228    my $checksums = '';
    221229    my $depends = '';
    222     my $build_depends = '';
     230    my $depends_build = '';
     231    my $depends_lib = '';
    223232    my $use_module_build = '';
    224233   
    225234    if ( exists $$info{depends} ) {
     
    229238             $checksums = 'checksums           '.join(" \\\n".(' 'x20),@hashes);
    230239         }
    231240
    232          if ( my $dep_ref = Huggy::depends_on($info) ) {
    233              my @depends = map {
    234                  MSG::warn "$$info{name} requires $_";
     241         if ( my $dep_ref = Huggy::depends_on($info, during=>"build_requires") ) {
     242             my @depends_build = Huggy::uniq map {
     243                 MSG::warn "$$info{name} build_requires $_";
    235244                 'port:'.Huggy::from_port $_
    236              } keys %{ $dep_ref };
    237              if (@depends) {
    238                  $depends = 'depends_lib-append  '.join(" \\\n".(' 'x20),@depends);
     245             } sort(keys %{ $dep_ref });
     246             if (@depends_build) {
     247                 unshift(@depends_build, '    depends_build-append');
     248                 $depends_build = join(" \\\n".(' 'x20), @depends_build)."\n";
    239249             }
    240250         }
    241          if ( my $dep_ref = Huggy::depends_on($info, during=>"build_requires") ) {
    242              my @depends = map {
    243                  MSG::warn "$$info{name} build_requires $_";
     251         if ( my $dep_ref = Huggy::depends_on($info) ) {
     252             my @depends_lib = Huggy::uniq map {
     253                 MSG::warn "$$info{name} requires $_";
    244254                 'port:'.Huggy::from_port $_
    245              } keys %{ $dep_ref };
    246              if (@depends) {
    247                  $build_depends = 'depends_build-append '.join(" \\\n".(' 'x21),@depends);
     255             } sort(keys %{ $dep_ref });
     256             if (@depends_lib) {
     257                 unshift(@depends_lib, '    depends_lib-append');
     258                 $depends_lib = join(" \\\n".(' 'x20), @depends_lib)."\n";
    248259             }
    249 
    250260         }
     261         if ($depends_build.$depends_lib ne '') {
     262             $depends = "\nif {\${perl5.major} != \"\"} {\n" . $depends_build . $depends_lib . "}\n";
     263         }
    251264    }
    252265
    253266    # If no Makefile.PL is present, maybe we need use_module_build?
     
    297310
    298311    $portfile .= <<STOP;
    299312$checksums
    300 
    301 $build_depends
    302 
    303313$depends
    304314$use_module_build
    305315STOP