~ubuntu-branches/ubuntu/dapper/libmodule-install-perl/dapper

« back to all changes in this revision

Viewing changes to lib/Module/Install/Admin/ScanDeps.pm

  • Committer: Bazaar Package Importer
  • Author(s): Bastian Blank
  • Date: 2004-04-03 23:07:38 UTC
  • Revision ID: james.westby@ubuntu.com-20040403230738-z8wkxryscyv90fjl
Tags: upstream-0.33
ImportĀ upstreamĀ versionĀ 0.33

Show diffs side-by-side

added added

removed removed

Lines of Context:
 
1
# $File: //depot/cpan/Module-Install/lib/Module/Install/Admin/ScanDeps.pm $ $Author: autrijus $
 
2
# $Revision: #16 $ $Change: 1815 $ $DateTime: 2003/12/14 20:41:23 $ vim: expandtab shiftwidth=4
 
3
 
 
4
package Module::Install::Admin::ScanDeps;
 
5
use Module::Install::Base; @ISA = qw(Module::Install::Base);
 
6
 
 
7
sub scan_dependencies {
 
8
    my ($self, $pkg, $perl_version) = @_;
 
9
 
 
10
    return if $pkg eq 'perl';
 
11
 
 
12
    $perl_version ||= $self->perl_version or die << '.';
 
13
Please first specify a required perl version, like this:
 
14
    requires( perl => '5.004' );
 
15
.
 
16
    $perl_version =~ s{^(\d+)\.(\d+)\.(\d+)}{$1 + $2/1_000 + $3/1_000_000}e;
 
17
 
 
18
    require Module::ScanDeps;
 
19
    require Module::CoreList;
 
20
 
 
21
    die "Module::CoreList has no information on perl $perl_version"
 
22
        unless exists $Module::CoreList::version{$perl_version};
 
23
 
 
24
    if (my $min_version = Module::CoreList->first_release($pkg)) {
 
25
        return if $min_version <= $perl_version;
 
26
    }
 
27
 
 
28
    my @files = scalar $self->admin->find_in_inc($pkg)
 
29
        or die "Cannot find $pkg in \@INC";
 
30
    my %result = ($pkg => $files[0]);
 
31
 
 
32
    while (@files) {
 
33
        my $deps = Module::ScanDeps::scan_deps(
 
34
            files   => \@files,
 
35
            recurse => 0,
 
36
        );
 
37
 
 
38
        @files = ();
 
39
 
 
40
        foreach my $key (keys %$deps) {
 
41
            if ($deps->{$key}{type} eq 'shared') {
 
42
                foreach my $used_by (@{$deps->{$key}{used_by}}) {
 
43
                    $used_by =~ s!/!::!;
 
44
                    $used_by =~ s!\.pm\Z!!i or next;
 
45
                    next if exists $result{$used_by};
 
46
                    $result{$used_by} = undef;
 
47
                    print "skipped $used_by (needs shared library)\n";
 
48
                }
 
49
            }
 
50
 
 
51
            my $dep_pkg = $key;
 
52
            $dep_pkg =~ s!/!::!;
 
53
            $dep_pkg =~ s!\.pm\Z!!i or next;
 
54
 
 
55
            if (my $min_version = Module::CoreList->first_release($dep_pkg)) {
 
56
                next if $min_version <= $perl_version;
 
57
            }
 
58
            next if $dep_pkg =~ /^(?:DB|(?:Auto|Dyna|XS)Loader|threads|warnings)\b/i;
 
59
            next if exists $result{$dep_pkg};
 
60
 
 
61
            $result{$dep_pkg} = $deps->{$key}{file};
 
62
            push @files, $deps->{$key}{file};
 
63
        }
 
64
    }
 
65
 
 
66
    while (my($k,$v) = each %result) {
 
67
        delete $result{$k} unless defined $v;
 
68
    }
 
69
    return \%result;
 
70
}
 
71
 
 
72
1;