]> git.donarmstrong.com Git - debhelper.git/blobdiff - dh_perl
Fix t/override_target to use ./run. Closes: #538315
[debhelper.git] / dh_perl
diff --git a/dh_perl b/dh_perl
index ea2025e0e3e7edc8ca6a765a4028e9e0fb573290..fbeee2d9525faf29c0ac9c9688906161f3c571f1 100755 (executable)
--- a/dh_perl
+++ b/dh_perl
@@ -2,7 +2,7 @@
 
 =head1 NAME
 
 
 =head1 NAME
 
-dh_perl - calculates perl scripts & modules dependencies
+dh_perl - calculates perl dependencies and cleans up after MakeMaker
 
 =cut
 
 
 =cut
 
@@ -13,17 +13,20 @@ use Debian::Debhelper::Dh_Lib;
 
 =head1 SYNOPSIS
 
 
 =head1 SYNOPSIS
 
-  dh_perl [debhelper options] [-d] [library dirs ...]
+B<dh_perl> [S<I<debhelper options>>] [B<-d>] [S<I<library dirs ...>>]
 
 =head1 DESCRIPTION
 
 dh_perl is a debhelper program that is responsible for generating
 
 =head1 DESCRIPTION
 
 dh_perl is a debhelper program that is responsible for generating
-the perl:Depends substitutions and adding them to substvars files.
+the ${perl:Depends} substitutions and adding them to substvars files.
 
 The program will look at perl scripts and modules in your package,
 
 The program will look at perl scripts and modules in your package,
-and will use this information to generate a dependency.
-The dependancy will be substituted into your package's control file
-wherever you place the token "${perl:Depends}".
+and will use this information to generate a dependency on perl or
+perlapi. The dependency will be substituted into your package's control
+file wherever you place the token "${perl:Depends}".
+
+dh_perl also cleans up empty directories that MakeMaker can generate when
+installing perl modules.
 
 =head1 OPTIONS
 
 
 =head1 OPTIONS
 
@@ -36,6 +39,10 @@ full perl package. If so, you can pass the -d option to make dh_perl generate
 a dependency on the correct base package. This is only necessary for some
 packages that are included in the base system.
 
 a dependency on the correct base package. This is only necessary for some
 packages that are included in the base system.
 
+Note that this flag may cause no dependency on perl-base to be generated at
+all. perl-base is Essential, so its dependency can be left out, unless a
+versioned dependency is needed.
+
 =item B<-V>
 
 By default, scripts and architecture independent modules don't depend
 =item B<-V>
 
 By default, scripts and architecture independent modules don't depend
@@ -85,16 +92,10 @@ use constant PM_MODULE => 2;
 use constant XS_MODULE => 4;
 
 foreach my $package (@{$dh{DOPACKAGES}}) {
 use constant XS_MODULE => 4;
 
 foreach my $package (@{$dh{DOPACKAGES}}) {
-       my $tmp = tmpdir($package);
-       my $ext = pkgext($package);
-
-       my @subs;
-       if (open IN, "debian/${ext}substvars.debhelper")
-       {
-           @subs = grep !/^perl:Depends=/, <IN>;
-           close IN;
-       }
+       my $tmp=tmpdir($package);
 
 
+       delsubstvar($package, "perl:Depends"); # for idempotency
+       
        # Check also for alternate locations given on the command line
        my @dirs = grep -d, map "$tmp/$_", $vendorlib, $vendorarch, @ARGV;
 
        # Check also for alternate locations given on the command line
        my @dirs = grep -d, map "$tmp/$_", $vendorlib, $vendorarch, @ARGV;
 
@@ -104,54 +105,53 @@ foreach my $package (@{$dh{DOPACKAGES}}) {
                return unless -f;
                $deps |= PM_MODULE if /\.pm$/;
                $deps |= XS_MODULE if /\.so$/;
                return unless -f;
                $deps |= PM_MODULE if /\.pm$/;
                $deps |= XS_MODULE if /\.so$/;
-           }, @dirs if @dirs;
+       }, @dirs if @dirs;
 
        # find scripts
        find sub {
                return unless -f and (-x or /\.pl$/);
                local *F;
                return unless open F, $_;
 
        # find scripts
        find sub {
                return unless -f and (-x or /\.pl$/);
                local *F;
                return unless open F, $_;
-               if (read F, local $_, 32 and m%^#!\s*/usr/bin/perl\s%)
-               {
-                   $deps |= PROGRAM;
+               if (read F, local $_, 32 and m%^#!\s*(/usr/bin/perl|/usr/bin/env\s+perl)\s%) {
+                       $deps |= PROGRAM;
                }
                }
-
                close F;
                close F;
-           }, $tmp;
-
-       if ($deps)
-       {
-           my $perl_depends = $perl;
-           if ($deps & XS_MODULE or $dh{V_FLAG_SET})
-           {
-               ($version) = `dpkg -s $perl` =~ /^Version:\s*(\S+)/m
-                   unless $version;
-
-               $perl_depends .= " (>= $version)";
-           }
-           elsif ($deps & PM_MODULE)
-           {
-               $perl_depends .= " (>= $min_version)";
-           }
-
-           # add perlapi-<ver> for XS modules
-           $perl_depends .= ", perlapi-$Config{version}"
-               if $deps & XS_MODULE;
-
-           # don't need to depend on an un-versioned perl-base, it's
-           # essential
-           push @subs, "perl:Depends=$perl_depends\n"
-               unless $perl_depends eq 'perl-base';
+       }, $tmp;
+
+       if ($deps) {
+               my $version="";
+               if ($deps & XS_MODULE or $dh{V_FLAG_SET}) {
+                       ($version) = `dpkg -s $perl` =~ /^Version:\s*(\S+)/m
+                               unless $version;
+                       $version = ">= $version";
+               }
+               elsif ($deps & PM_MODULE) {
+                       $version = ">= $min_version";
+               }
+               
+               # no need to depend on an un-versioned perl-base -- it's
+               # essential
+               addsubstvar($package, "perl:Depends", $perl, $version)
+                       unless $perl eq 'perl-base' && ! length($version);
+
+               # add perlapi-<ver> for XS modules
+               addsubstvar($package, "perl:Depends", "perlapi-$Config{version}")
+                       if $deps & XS_MODULE;
        }
 
        }
 
-       open OUT, ">debian/${ext}substvars.debhelper";
-       print OUT @subs;
-       close OUT;
+       # MakeMaker always makes lib and share dirs, but typically
+       # only one directory is installed into.
+       foreach my $dir ("$tmp/usr/share/perl5", "$tmp/usr/lib/perl5") {
+               if (-d $dir) {
+                       doit("rmdir", "--ignore-fail-on-non-empty", "--parents",
+                               "$dir");
+               }
+       }
 }
 
 =head1 SEE ALSO
 
 }
 
 =head1 SEE ALSO
 
-L<debhelper(1)>
+L<debhelper(7)>
 
 This program is a part of debhelper.
 
 
 This program is a part of debhelper.