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
4
package Module::Install::Admin::ScanDeps;
5
use Module::Install::Base; @ISA = qw(Module::Install::Base);
7
sub scan_dependencies {
8
my ($self, $pkg, $perl_version) = @_;
10
return if $pkg eq 'perl';
12
$perl_version ||= $self->perl_version or die << '.';
13
Please first specify a required perl version, like this:
14
requires( perl => '5.004' );
16
$perl_version =~ s{^(\d+)\.(\d+)\.(\d+)}{$1 + $2/1_000 + $3/1_000_000}e;
18
require Module::ScanDeps;
19
require Module::CoreList;
21
die "Module::CoreList has no information on perl $perl_version"
22
unless exists $Module::CoreList::version{$perl_version};
24
if (my $min_version = Module::CoreList->first_release($pkg)) {
25
return if $min_version <= $perl_version;
28
my @files = scalar $self->admin->find_in_inc($pkg)
29
or die "Cannot find $pkg in \@INC";
30
my %result = ($pkg => $files[0]);
33
my $deps = Module::ScanDeps::scan_deps(
40
foreach my $key (keys %$deps) {
41
if ($deps->{$key}{type} eq 'shared') {
42
foreach my $used_by (@{$deps->{$key}{used_by}}) {
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";
53
$dep_pkg =~ s!\.pm\Z!!i or next;
55
if (my $min_version = Module::CoreList->first_release($dep_pkg)) {
56
next if $min_version <= $perl_version;
58
next if $dep_pkg =~ /^(?:DB|(?:Auto|Dyna|XS)Loader|threads|warnings)\b/i;
59
next if exists $result{$dep_pkg};
61
$result{$dep_pkg} = $deps->{$key}{file};
62
push @files, $deps->{$key}{file};
66
while (my($k,$v) = each %result) {
67
delete $result{$k} unless defined $v;