]> git.donarmstrong.com Git - debhelper.git/blobdiff - dh_perl
Updated French man page translation. Closes: #685560
[debhelper.git] / dh_perl
diff --git a/dh_perl b/dh_perl
index bb2dd69eae98ead1fbe2f96196d21bd88c0bb0f3..bf2506c5bcd1eb6ea56c04607015e93301c729fc 100755 (executable)
--- a/dh_perl
+++ b/dh_perl
@@ -2,7 +2,7 @@
 
 =head1 NAME
 
-dh_perl - calculates perl scripts & modules dependencies
+dh_perl - calculates Perl dependencies and cleans up after MakeMaker
 
 =cut
 
@@ -13,17 +13,20 @@ use Debian::Debhelper::Dh_Lib;
 
 =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
-the perl:Depends substitutions and adding them to substvars files.
+B<dh_perl> is a debhelper program that is responsible for generating
+the B<${perl:Depends}> substitutions and adding them to substvars files.
 
-The program will look at perl scripts and modules in your package,
-and will use this information to generate a dependency.
-The dependency will be substituted into your package's control file
-wherever you place the token "${perl:Depends}".
+The program will look at Perl scripts and modules in your package,
+and will use this information to generate a dependency on B<perl> or
+B<perlapi>. The dependency will be substituted into your package's F<control>
+file wherever you place the token B<${perl:Depends}>.
+
+B<dh_perl> also cleans up empty directories that MakeMaker can generate when
+installing Perl modules.
 
 =head1 OPTIONS
 
@@ -31,31 +34,35 @@ wherever you place the token "${perl:Depends}".
 
 =item B<-d>
 
-In some specific cases you may want to depend on perl-base rather than the
-full perl package. If so, you can pass the -d option to make dh_perl generate
+In some specific cases you may want to depend on B<perl-base> rather than the
+full B<perl> package. If so, you can pass the -d option to make B<dh_perl> generate
 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 B<perl-base> to be generated at
+all. B<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
-on any specific version of perl.  The -V option causes the current
-version of the perl (or perl-base with -d) package to be specified.
+on any specific version of B<perl>. The B<-V> option causes the current
+version of the B<perl> (or B<perl-base> with B<-d>) package to be specified.
 
 =item I<library dirs>
 
-If your package installs perl modules in non-standard
-directories, you can make dh_perl check those directories by passing their
-names on the command line. It will only check the vendorlib and vendorarch
+If your package installs Perl modules in non-standard
+directories, you can make B<dh_perl> check those directories by passing their
+names on the command line. It will only check the F<vendorlib> and F<vendorarch>
 directories by default.
 
 =back
 
 =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
 
@@ -64,10 +71,6 @@ init();
 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#/$##;
@@ -85,15 +88,7 @@ use constant PM_MODULE => 2;
 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")
-       {
-           @subs = grep !/^perl:Depends=/, <IN>;
-           close IN;
-       }
+       my $tmp=tmpdir($package);
 
        # Check also for alternate locations given on the command line
        my @dirs = grep -d, map "$tmp/$_", $vendorlib, $vendorarch, @ARGV;
@@ -104,54 +99,53 @@ foreach my $package (@{$dh{DOPACKAGES}}) {
                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$/);
+               return if $File::Find::dir=~/\/usr\/share\/doc\//;
+               
                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;
-           }, $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{debian_abi} || $Config{version}))
+                       if $deps & XS_MODULE;
        }
 
-       open OUT, ">debian/${ext}substvars";
-       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
 
-L<debhelper(1)>
+L<debhelper(7)>
 
 This program is a part of debhelper.