App-Acmeman
view release on metacpan or search on metacpan
inc/ExtUtils/AutoInstall.pm view on Meta::CPAN
$conflict = $arg if ($option eq 'conflict');
@tests = @{$arg} if ($option eq 'tests');
@skiptests = @{$arg} if ($option eq 'skiptests');
next;
}
printf("- %-${maxlen}s ...", $mod);
# XXX: check for conflicts and uninstalls(!) them.
if (defined(my $cur = _version_check(_load($mod), $arg ||= 0))) {
print "loaded. ($cur".($arg ? " >= $arg" : '').")\n";
push @Existing, $mod => $arg;
$DisabledTests{$_} = 1 for map { glob($_) } @skiptests;
}
else {
print "missing." . ($arg ? " (would need $arg)" : '') . "\n";
push @required, $mod => $arg;
}
}
next unless @required;
my $mandatory = ($feature eq '-core' or $core_all);
if (!$SkipInstall and ($CheckOnly or _prompt(
qq{==> Auto-install the }. (@required / 2).
($mandatory ? ' mandatory' : ' optional').
qq{ module(s) from CPAN?}, $default ? 'y' : 'n',
) =~ /^[Yy]/)) {
push (@Missing, @required);
$DisabledTests{$_} = 1 for map { glob($_) } @skiptests;
}
elsif (!$SkipInstall and $default and $mandatory and _prompt(
qq{==> The module(s) are mandatory! Really skip?}, 'n',
) =~ /^[Nn]/) {
push (@Missing, @required);
$DisabledTests{$_} = 1 for map { glob($_) } @skiptests;
}
else {
$DisabledTests{$_} = 1 for map { glob($_) } @tests;
}
}
_check_lock(); # check for $UnderCPAN
if (@Missing and not ($CheckOnly or $UnderCPAN)) {
require Config;
print "*** Dependencies will be installed the next time you type '$Config::Config{make}'.\n";
# make an educated guess of whether we'll need root permission.
print " (You may need to do that as the 'root' user.)\n" if eval '$>';
}
print "*** $class configuration finished.\n";
chdir $cwd;
# import to main::
no strict 'refs';
*{'main::WriteMakefile'} = \&Write if caller(0) eq 'main';
}
# CPAN.pm is non-reentrant, so check if we're under it and have no CPANPLUS
sub _check_lock {
return unless @Missing;
return if _has_cpanplus();
require CPAN; CPAN::Config->load;
my $lock = MM->catfile($CPAN::Config->{cpan_home}, ".lock");
if (-f $lock and open(LOCK, $lock)
and ($^O eq 'MSWin32' ? _under_cpan() : <LOCK> == getppid())
and ($CPAN::Config->{prerequisites_policy} || '') ne 'ignore'
) {
print << '.';
*** Since we're running under CPAN, I'll just let it take care
of the dependency's installation later.
.
$UnderCPAN = 1;
}
close LOCK;
}
sub install {
my $class = shift;
my $i; # used below to strip leading '-' from config keys
my @config = (map { s/^-// if ++$i; $_ } @{+shift});
my (@modules, @installed);
while (my ($pkg, $ver) = splice(@_, 0, 2)) {
# grep out those already installed
if (defined(_version_check(_load($pkg), $ver))) {
push @installed, $pkg;
}
else {
push @modules, $pkg, $ver;
}
}
return @installed unless @modules; # nothing to do
print "*** Installing dependencies...\n";
return unless _connected_to('cpan.org');
my %args = @config;
my %failed;
local *FAILED;
if ($args{do_once} and open(FAILED, '.#autoinstall.failed')) {
while (<FAILED>) { chomp; $failed{$_}++ }
close FAILED;
my @newmod;
while (my ($k, $v) = splice(@modules, 0, 2)) {
push @newmod, ($k => $v) unless $failed{$k};
}
@modules = @newmod;
( run in 2.107 seconds using v1.01-cache-2.11-cpan-437f7b0c052 )