]> git.donarmstrong.com Git - debhelper.git/blobdiff - dh_perl
releasing version 7.4.4
[debhelper.git] / dh_perl
diff --git a/dh_perl b/dh_perl
index ea2025e0e3e7edc8ca6a765a4028e9e0fb573290..eaa08fa8e8a4ab21e06cee785590b1cfc892c7ba 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
@@ -53,9 +60,9 @@ directories by default.
 
 =head1 CONFORMS TO
 
 
 =head1 CONFORMS TO
 
-Debian policy, version 3.0.1
+Debian policy, version 3.8.3
 
 
-Perl policy, version 1.18
+Perl policy, version 1.20
 
 =cut
 
 
 =cut
 
@@ -64,10 +71,6 @@ init();
 my $vendorlib = substr $Config{vendorlib}, 1;
 my $vendorarch = substr $Config{vendorarch}, 1;
 
 my $vendorlib = substr $Config{vendorlib}, 1;
 my $vendorarch = substr $Config{vendorarch}, 1;
 
-# the installation dir for arch-indep modules changed to
-# /usr/share/perl5 in this version:
-my $min_version = '5.6.0-16';
-
 # Cleaning the paths given on the command line
 foreach (@ARGV) {
        s#/$##;
 # Cleaning the paths given on the command line
 foreach (@ARGV) {
        s#/$##;
@@ -85,16 +88,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 +101,52 @@ 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$/);
 
        # find scripts
        find sub {
                return unless -f and (-x or /\.pl$/);
+               return if $File::Find::dir=~/\/usr\/share\/doc\//;
+               
                local *F;
                return unless open F, $_;
                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";
+               }
+               
+               # 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.