]> git.donarmstrong.com Git - debhelper.git/blob - dh_perl
r1596: * Remove duplicate packages from DOPACKAGES after argument processing.
[debhelper.git] / dh_perl
1 #!/usr/bin/perl -w
2
3 =head1 NAME
4
5 dh_perl - calculates perl dependencies
6
7 =cut
8
9 use strict;
10 use Config;
11 use File::Find;
12 use Debian::Debhelper::Dh_Lib;
13
14 =head1 SYNOPSIS
15
16 B<dh_perl> [S<I<debhelper options>>] [B<-d>] [S<I<library dirs ...>>]
17
18 =head1 DESCRIPTION
19
20 dh_perl is a debhelper program that is responsible for generating
21 the ${perl:Depends} substitutions and adding them to substvars files.
22
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}".
27
28 =head1 OPTIONS
29
30 =over 4
31
32 =item B<-d>
33
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.
38
39 =item B<-V>
40
41 By default, scripts and architecture independent modules don't depend
42 on any specific version of perl.  The -V option causes the current
43 version of the perl (or perl-base with -d) package to be specified.
44
45 =item I<library dirs>
46
47 If your package installs perl modules in non-standard
48 directories, you can make dh_perl check those directories by passing their
49 names on the command line. It will only check the vendorlib and vendorarch
50 directories by default.
51
52 =back
53
54 =head1 CONFORMS TO
55
56 Debian policy, version 3.0.1
57
58 Perl policy, version 1.18
59
60 =cut
61
62 init();
63
64 my $vendorlib = substr $Config{vendorlib}, 1;
65 my $vendorarch = substr $Config{vendorarch}, 1;
66
67 # the installation dir for arch-indep modules changed to
68 # /usr/share/perl5 in this version:
69 my $min_version = '5.6.0-16';
70
71 # Cleaning the paths given on the command line
72 foreach (@ARGV) {
73         s#/$##;
74         s#^/##;
75 }
76
77 my $perl = 'perl';
78 # If -d is given, then the dependency is on perl-base rather than perl.
79 $perl .= '-base' if $dh{D_FLAG};
80 my $version;
81
82 # dependency types
83 use constant PROGRAM   => 1;
84 use constant PM_MODULE => 2;
85 use constant XS_MODULE => 4;
86
87 foreach my $package (@{$dh{DOPACKAGES}}) {
88         my $tmp=tmpdir($package);
89
90         delsubstvar($package, "perl:Depends"); # for idempotency
91         
92         # Check also for alternate locations given on the command line
93         my @dirs = grep -d, map "$tmp/$_", $vendorlib, $vendorarch, @ARGV;
94
95         # Look for perl modules and check where they are installed
96         my $deps = 0;
97         find sub {
98                 return unless -f;
99                 $deps |= PM_MODULE if /\.pm$/;
100                 $deps |= XS_MODULE if /\.so$/;
101         }, @dirs if @dirs;
102
103         # find scripts
104         find sub {
105                 return unless -f and (-x or /\.pl$/);
106                 local *F;
107                 return unless open F, $_;
108                 if (read F, local $_, 32 and m%^#!\s*(/usr/bin/perl|/usr/bin/env\s+perl)\s%) {
109                         $deps |= PROGRAM;
110                 }
111                 close F;
112         }, $tmp;
113
114         if ($deps) {
115                 my $version="";
116                 if ($deps & XS_MODULE or $dh{V_FLAG_SET}) {
117                         ($version) = `dpkg -s $perl` =~ /^Version:\s*(\S+)/m
118                                 unless $version;
119                         $version = ">= $version";
120                 }
121                 elsif ($deps & PM_MODULE) {
122                         $version = ">= $min_version";
123                 }
124                 
125                 # no need to depend on an un-versioned perl-base -- it's
126                 # essential
127                 addsubstvar($package, "perl:Depends", $perl, $version)
128                         unless $perl eq 'perl-base' && ! length($version);
129
130                 # add perlapi-<ver> for XS modules
131                 addsubstvar($package, "perl:Depends", "perlapi-$Config{version}")
132                         if $deps & XS_MODULE;
133         }
134 }
135
136 =head1 SEE ALSO
137
138 L<debhelper(7)>
139
140 This program is a part of debhelper.
141
142 =head1 AUTHOR
143
144 Brendan O'Dea <bod@debian.org>
145
146 =cut