App-Tel
view release on metacpan or search on metacpan
local/lib/perl5/Module/ScanDeps.pm view on Meta::CPAN
$modname =~ s|/|-|g;
# TODO: get real distribution name related to module name
my $distname = $modname;
foreach (_glob_in_inc("auto/share/module/$modname")) {
_add_info( rv => $rv, module => $_->{name},
file => $_->{file}, used_by => $module,
type => 'data' );
}
foreach (_glob_in_inc("auto/share/dist/$distname")) {
_add_info( rv => $rv, module => $_->{name},
file => $_->{file}, used_by => $module,
type => 'data' );
}
}
} # end for modules
return $rv;
}
sub _find_in_inc {
my $file = shift;
return unless defined $file;
foreach my $dir (grep !/\bBSDPAN\b/, @INC, @IncludeLibs) {
return "$dir/$file" if -f "$dir/$file";
}
# absolute file names
return $file if -f $file;
return;
}
sub _glob_in_inc {
my $subdir = shift;
my $pm_only = shift;
my @files;
require File::Find;
$subdir =~ s/\$CurrentPackage/$CurrentPackage/;
foreach my $inc (grep !/\bBSDPAN\b/, @INC, @IncludeLibs) {
my $dir = "$inc/$subdir";
next unless -d $dir;
File::Find::find(
sub {
return unless -f;
return if $pm_only and !/\.p[mh]$/i;
(my $name = $File::Find::name) =~ s!^\Q$inc\E/!!;
push @files, $pm_only
? $name
: { file => $File::Find::name, name => $name };
},
$dir
);
}
return @files;
}
# like _glob_in_inc, but looks only at the first level
# (i.e. the children of $subdir)
# NOTE: File::Find has no public notion of the depth of the traversal
# in its "wanted" callback, so it's not helpful
sub _glob_in_inc_1 {
my $subdir = shift;
my $pm_only = shift;
my @files;
$subdir =~ s/\$CurrentPackage/$CurrentPackage/;
foreach my $inc (grep !/\bBSDPAN\b/, @INC, @IncludeLibs) {
my $dir = "$inc/$subdir";
next unless -d $dir;
opendir my $dh, $dir or next;
my @names = map { "$subdir/$_" } grep { -f "$dir/$_" } readdir $dh;
closedir $dh;
push @files, $pm_only
? ( grep { /\.p[mh]$/i } @names )
: ( map { { file => "$inc/$_", name => $_ } } @names );
}
return @files;
}
my $unicore_stuff;
sub _unicore {
$unicore_stuff ||= [ 'utf8_heavy.pl', map $_->{name}, _glob_in_inc('unicore', 0) ];
return @$unicore_stuff;
}
# App::Packer compatibility functions
sub new {
my ($class, $self) = @_;
return bless($self ||= {}, $class);
}
sub set_file {
my $self = shift;
my $script = shift;
my ($vol, $dir, $file) = File::Spec->splitpath($script);
$self->{main} = {
key => $file,
file => $script,
};
}
sub set_options {
my $self = shift;
my %args = @_;
foreach my $module (@{ $args{add_modules} }) {
$module =~ s/::/\//g;
$module .= '.pm' unless $module =~ /\.p[mh]$/i;
my $file = _find_in_inc($module)
or _warn_of_missing_module($module, $args{warn_missing}), next;
$self->{files}{$module} = $file;
}
( run in 1.019 second using v1.01-cache-2.11-cpan-39bf76dae61 )