use
vars
qw{$VERSION @ISA}
;
BEGIN {
$VERSION
=
'1.21'
;
@ISA
=
qw{Module::Install::Base}
;
}
sub
include {
my
$self
=
shift
;
foreach
my
$rv
(
$self
->admin->glob_in_inc(
$_
[0]) ) {
$self
->admin->copy_package(
@$rv
);
my
@build_requires
;
foreach
(@{
$self
->build_requires || [] }) {
next
if
$_
->[0] eq
$rv
->[0];
push
@build_requires
,
$_
;
}
$self
->Meta->{
values
}{build_requires} = \
@build_requires
;
}
}
sub
include_deps {
my
(
$self
,
$module
,
$version
) =
@_
;
my
$deps
=
$self
->admin->scan_dependencies(
$module
,
$self
->perl_version,
$version
) or
return
;
foreach
my
$key
(
sort
keys
%$deps
) {
$self
->include(
$key
);
}
}
sub
auto_include {
my
$self
=
shift
;
foreach
my
$module
(
map
{
$_
->[0] }
map
{
@$_
}
grep
{
$_
}
$self
->build_requires
) {
$self
->include(
$module
);
}
}
sub
auto_include_deps {
my
$self
=
shift
;
foreach
my
$module
(
map
{
$_
}
map
{
@$_
}
grep
{
$_
}
$self
->build_requires
) {
my
(
$name
,
$version
) = @{
$module
};
$self
->include_deps(
$name
,
$version
);
}
}
sub
auto_include_dependent_dists {
my
$self
=
shift
;
foreach
my
$module
(
map
{
$_
->[0] }
map
{
@$_
}
grep
{
$_
}
$self
->build_requires
) {
$self
->include_dependent_dists(
$module
);
}
}
sub
include_dependent_dists {
my
$self
=
shift
;
my
$pkg
=
shift
;
return
unless
$pkg
;
return
if
$self
->{including_dep_dist}->{
$self
->_pkg_to_dist(
$pkg
) }++;
$self
->include_one_dist(
$pkg
);
foreach
my
$mod
( @{
$self
->_dist_to_mods(
$self
->_pkg_to_dist(
$pkg
) ) } ) {
my
$deps
=
$self
->admin->scan_dependencies(
$mod
) or
return
;
foreach
my
$key
(
sort
grep
{
$_
}
keys
%$deps
) {
$self
->include_dependent_dists(
$key
);
}
}
}
sub
include_one_dist {
my
$self
=
shift
;
my
@mods
=
$self
->_dist_to_mods(
$self
->_pkg_to_dist(
$_
[0]) );
foreach
my
$pattern
(
grep
{
$_
}
@mods
) {
foreach
my
$rv
(
$self
->admin->glob_in_inc(
$pattern
) ) {
$self
->admin->copy_package(
@$rv
);
my
@build_requires
;
foreach
(@{
$self
->build_requires || [] }) {
next
if
$_
->[0] eq
$rv
->[0];
push
@build_requires
,
$_
;
}
$self
->Meta->{
values
}{build_requires} = \
@build_requires
;
}
}
}
sub
_pkg_to_dist {
my
$mod
= CPAN::Shell->expand(
Module
=>
$_
[1] ) or
return
;
$mod
->cpan_file;
}
sub
_dist_to_mods {
CPAN::Shell->expand(
Distribution
=>
$_
[1] )->containsmods;
}
1;