5 dh_perl - calculates perl dependencies
12 use Debian::Debhelper::Dh_Lib;
16 B<dh_perl> [S<I<debhelper options>>] [B<-d>] [S<I<library dirs ...>>]
20 dh_perl is a debhelper program that is responsible for generating
21 the ${perl:Depends} substitutions and adding them to substvars files.
23 The program will look at perl scripts and modules in your package,
24 and will use this information to generate a dependency on perl or
25 perlapi. The dependency will be substituted into your package's control
26 file wherever you place the token "${perl:Depends}".
34 In some specific cases you may want to depend on perl-base rather than the
35 full perl package. If so, you can pass the -d option to make dh_perl generate
36 a dependency on the correct base package. This is only necessary for some
37 packages that are included in the base system.
39 Note that this flag may cause no dependency on perl-base to be generated at
40 all. perl-base is Essential, so its dependency can be left out, unless a
41 versioned dependency is needed.
45 By default, scripts and architecture independent modules don't depend
46 on any specific version of perl. The -V option causes the current
47 version of the perl (or perl-base with -d) package to be specified.
51 If your package installs perl modules in non-standard
52 directories, you can make dh_perl check those directories by passing their
53 names on the command line. It will only check the vendorlib and vendorarch
54 directories by default.
60 Debian policy, version 3.0.1
62 Perl policy, version 1.18
68 my $vendorlib = substr $Config{vendorlib}, 1;
69 my $vendorarch = substr $Config{vendorarch}, 1;
71 # the installation dir for arch-indep modules changed to
72 # /usr/share/perl5 in this version:
73 my $min_version = '5.6.0-16';
75 # Cleaning the paths given on the command line
82 # If -d is given, then the dependency is on perl-base rather than perl.
83 $perl .= '-base' if $dh{D_FLAG};
87 use constant PROGRAM => 1;
88 use constant PM_MODULE => 2;
89 use constant XS_MODULE => 4;
91 foreach my $package (@{$dh{DOPACKAGES}}) {
92 my $tmp=tmpdir($package);
94 delsubstvar($package, "perl:Depends"); # for idempotency
96 # Check also for alternate locations given on the command line
97 my @dirs = grep -d, map "$tmp/$_", $vendorlib, $vendorarch, @ARGV;
99 # Look for perl modules and check where they are installed
103 $deps |= PM_MODULE if /\.pm$/;
104 $deps |= XS_MODULE if /\.so$/;
109 return unless -f and (-x or /\.pl$/);
111 return unless open F, $_;
112 if (read F, local $_, 32 and m%^#!\s*(/usr/bin/perl|/usr/bin/env\s+perl)\s%) {
120 if ($deps & XS_MODULE or $dh{V_FLAG_SET}) {
121 ($version) = `dpkg -s $perl` =~ /^Version:\s*(\S+)/m
123 $version = ">= $version";
125 elsif ($deps & PM_MODULE) {
126 $version = ">= $min_version";
129 # no need to depend on an un-versioned perl-base -- it's
131 addsubstvar($package, "perl:Depends", $perl, $version)
132 unless $perl eq 'perl-base' && ! length($version);
134 # add perlapi-<ver> for XS modules
135 addsubstvar($package, "perl:Depends", "perlapi-$Config{version}")
136 if $deps & XS_MODULE;
144 This program is a part of debhelper.
148 Brendan O'Dea <bod@debian.org>