/usr/bin/dh_perl is in debhelper 9.20131227ubuntu1.
This file is owned by root:root, with mode 0o755.
The actual contents of the file can be viewed below.
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 128 129 130 131 132 133 134 135 136 137 138 139 140 141 142 143 144 145 146 147 148 149 150 151 152 153 154 155 156 157 158 | #!/usr/bin/perl -w
=head1 NAME
dh_perl - calculates Perl dependencies and cleans up after MakeMaker
=cut
use strict;
use Config;
use File::Find;
use Debian::Debhelper::Dh_Lib;
=head1 SYNOPSIS
B<dh_perl> [S<I<debhelper options>>] [B<-d>] [S<I<library dirs> ...>]
=head1 DESCRIPTION
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 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
=over 4
=item B<-d>
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 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 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.8.3
Perl policy, version 1.20
=cut
init();
my $vendorlib = substr $Config{vendorlib}, 1;
my $vendorarch = substr $Config{vendorarch}, 1;
# Cleaning the paths given on the command line
foreach (@ARGV) {
s#/$##;
s#^/##;
}
my $perl = 'perl';
# If -d is given, then the dependency is on perl-base rather than perl.
$perl .= '-base' if $dh{D_FLAG};
my $version;
# dependency types
use constant PROGRAM => 1;
use constant PM_MODULE => 2;
use constant XS_MODULE => 4;
foreach my $package (@{$dh{DOPACKAGES}}) {
my $tmp=tmpdir($package);
next unless -d $tmp;
# Check also for alternate locations given on the command line
my @dirs = grep -d, map "$tmp/$_", $vendorlib, $vendorarch, @ARGV;
# Look for perl modules and check where they are installed
my $deps = 0;
find sub {
return unless -f;
$deps |= PM_MODULE if /\.pm$/;
$deps |= XS_MODULE if /\.so$/;
}, @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|/usr/bin/env\s+perl)\s%) {
$deps |= PROGRAM;
}
close F;
}, $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;
}
# 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(7)>
This program is a part of debhelper.
=head1 AUTHOR
Brendan O'Dea <bod@debian.org>
=cut
|