=head1 NAME
-dh_perl - calculates perl scripts & modules dependencies
+dh_perl - calculates perl dependencies and cleans up after MakeMaker
=cut
=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.
+the ${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 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
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
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);
+ 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;
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, $_;
- 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";
+ }
+ 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";
- 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.