Skip to content

Commit

Permalink
update m:i
Browse files Browse the repository at this point in the history
  • Loading branch information
sunnavy committed Jan 30, 2012
1 parent fbea5d0 commit 9af2ddd
Show file tree
Hide file tree
Showing 15 changed files with 149 additions and 397 deletions.
7 changes: 4 additions & 3 deletions META.yml
Original file line number Diff line number Diff line change
Expand Up @@ -3,13 +3,14 @@ abstract: 'Best Practical Builder'
author:
- 'sunnavy <sunnavy@bestpractical.com>'
build_requires:
ExtUtils::MakeMaker: 6.42
ExtUtils::MakeMaker: 6.62
IPC::Cmd: 0
Test::More: 0
configure_requires:
ExtUtils::MakeMaker: 6.42
ExtUtils::MakeMaker: 6.62
distribution_type: module
generated_by: 'Module::Install version 1.01'
dynamic_config: 1
generated_by: 'Module::Install version 1.04'
license: perl
meta-spec:
url: http://module-build.sourceforge.net/META-spec-v1.4.html
Expand Down
121 changes: 108 additions & 13 deletions inc/Module/AutoInstall.pm
Original file line number Diff line number Diff line change
Expand Up @@ -7,7 +7,7 @@ use ExtUtils::MakeMaker ();

use vars qw{$VERSION};
BEGIN {
$VERSION = '1.03';
$VERSION = '1.04';
}

# special map on pre-defined feature sets
Expand All @@ -17,11 +17,14 @@ my %FeatureMap = (
);

# various lexical flags
my ( @Missing, @Existing, %DisabledTests, $UnderCPAN, $HasCPANPLUS );
my ( @Missing, @Existing, %DisabledTests, $UnderCPAN, $InstallDepsTarget, $HasCPANPLUS );
my (
$Config, $CheckOnly, $SkipInstall, $AcceptDefault, $TestOnly, $AllDeps
$Config, $CheckOnly, $SkipInstall, $AcceptDefault, $TestOnly, $AllDeps,
$UpgradeDeps
);
my ( $PostambleActions, $PostambleUsed );
my ( $PostambleActions, $PostambleActionsNoTest, $PostambleActionsUpgradeDeps,
$PostambleActionsUpgradeDepsNoTest, $PostambleActionsListDeps,
$PostambleActionsListAllDeps, $PostambleUsed, $NoTest);

# See if it's a testing or non-interactive session
_accept_default( $ENV{AUTOMATED_TESTING} or ! -t STDIN );
Expand All @@ -31,6 +34,10 @@ sub _accept_default {
$AcceptDefault = shift;
}

sub _installdeps_target {
$InstallDepsTarget = shift;
}

sub missing_modules {
return @Missing;
}
Expand Down Expand Up @@ -63,6 +70,11 @@ sub _init {
__PACKAGE__->install( $Config, @Missing = split( /,/, $1 ) );
exit 0;
}
elsif ( $arg =~ /^--upgradedeps=(.*)$/ ) {
$UpgradeDeps = 1;
__PACKAGE__->install( $Config, @Missing = split( /,/, $1 ) );
exit 0;
}
elsif ( $arg =~ /^--default(?:deps)?$/ ) {
$AcceptDefault = 1;
}
Expand Down Expand Up @@ -125,7 +137,7 @@ sub import {
# check entirely since we don't want to have to load (and configure)
# an old CPAN just for a cosmetic message

$UnderCPAN = _check_lock(1) unless $SkipInstall;
$UnderCPAN = _check_lock(1) unless $SkipInstall || $InstallDepsTarget;

while ( my ( $feature, $modules ) = splice( @args, 0, 2 ) ) {
my ( @required, @tests, @skiptests );
Expand Down Expand Up @@ -207,6 +219,7 @@ sub import {
$CheckOnly
or ($mandatory and $UnderCPAN)
or $AllDeps
or $InstallDepsTarget
or _prompt(
qq{==> Auto-install the }
. ( @required / 2 )
Expand Down Expand Up @@ -237,10 +250,17 @@ sub import {
}
}

if ( @Missing and not( $CheckOnly or $UnderCPAN ) ) {
if ( @Missing and not( $CheckOnly or $UnderCPAN) ) {
require Config;
print
"*** Dependencies will be installed the next time you type '$Config::Config{make}'.\n";
my $make = $Config::Config{make};
if ($InstallDepsTarget) {
print
"*** To install dependencies type '$make installdeps' or '$make installdeps_notest'.\n";
}
else {
print
"*** Dependencies will be installed the next time you type '$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"
Expand Down Expand Up @@ -271,6 +291,10 @@ END_MESSAGE
sub _check_lock {
return unless @Missing or @_;

if ($ENV{PERL5_CPANM_IS_RUNNING}) {
return _running_under('cpanminus');
}

my $cpan_env = $ENV{PERL5_CPAN_IS_RUNNING};

if ($ENV{PERL5_CPANPLUS_IS_RUNNING}) {
Expand Down Expand Up @@ -332,6 +356,11 @@ sub install {
}
}

if ($UpgradeDeps) {
push @modules, @installed;
@installed = ();
}

return @installed unless @modules; # nothing to do
return @installed if _check_lock(); # defer to the CPAN shell

Expand Down Expand Up @@ -463,6 +492,11 @@ sub _cpanplus_config {
} else {
die "*** Cannot convert option $key = '$value' to CPANPLUS version.\n";
}
push @config, 'prereqs', $value;
} elsif ( $key eq 'force' ) {
push @config, $key, $value;
} elsif ( $key eq 'notest' ) {
push @config, 'skiptest', $value;
} else {
die "*** Cannot convert option $key to CPANPLUS version.\n";
}
Expand Down Expand Up @@ -497,10 +531,14 @@ sub _install_cpan {
# set additional options
while ( my ( $opt, $arg ) = splice( @config, 0, 2 ) ) {
( $args{$opt} = $arg, next )
if $opt =~ /^force$/; # pseudo-option
if $opt =~ /^(?:force|notest)$/; # pseudo-option
$CPAN::Config->{$opt} = $arg;
}

if ($args{notest} && (not CPAN::Shell->can('notest'))) {
die "Your version of CPAN is too old to support the 'notest' pragma";
}

local $CPAN::Config->{prerequisites_policy} = 'follow';

while ( my ( $pkg, $ver ) = splice( @modules, 0, 2 ) ) {
Expand All @@ -519,8 +557,16 @@ sub _install_cpan {
delete $INC{$inc};
}

my $rv = $args{force} ? CPAN::Shell->force( install => $pkg )
: CPAN::Shell->install($pkg);
my $rv = do {
if ($args{force}) {
CPAN::Shell->force( install => $pkg )
} elsif ($args{notest}) {
CPAN::Shell->notest( install => $pkg )
} else {
CPAN::Shell->install($pkg)
}
};

$rv ||= eval {
$CPAN::META->instance( 'CPAN::Distribution', $obj->cpan_file, )
->{install}
Expand Down Expand Up @@ -763,6 +809,35 @@ sub _make_args {
: "\$(NOECHO) \$(NOOP)"
);

my $deps_list = join( ',', @Missing, @Existing );

$PostambleActionsUpgradeDeps =
"\$(PERL) $0 --config=$config --upgradedeps=$deps_list";

my $config_notest =
join( ',', (UNIVERSAL::isa( $Config, 'HASH' ) ? %{$Config} : @{$Config}),
'notest', 1 )
if $Config;

$PostambleActionsNoTest = (
($missing and not $UnderCPAN)
? "\$(PERL) $0 --config=$config_notest --installdeps=$missing"
: "\$(NOECHO) \$(NOOP)"
);

$PostambleActionsUpgradeDepsNoTest =
"\$(PERL) $0 --config=$config_notest --upgradedeps=$deps_list";

$PostambleActionsListDeps =
'@$(PERL) -le "print for @ARGV" '
. join(' ', map $Missing[$_], grep $_ % 2 == 0, 0..$#Missing);

my @all = (@Missing, @Existing);

$PostambleActionsListAllDeps =
'@$(PERL) -le "print for @ARGV" '
. join(' ', map $all[$_], grep $_ % 2 == 0, 0..$#all);

return %args;
}

Expand Down Expand Up @@ -797,24 +872,44 @@ sub Write {

sub postamble {
$PostambleUsed = 1;
my $fragment;

return <<"END_MAKE";
$fragment .= <<"AUTO_INSTALL" if !$InstallDepsTarget;
config :: installdeps
\t\$(NOECHO) \$(NOOP)
AUTO_INSTALL

$fragment .= <<"END_MAKE";
checkdeps ::
\t\$(PERL) $0 --checkdeps
installdeps ::
\t$PostambleActions
installdeps_notest ::
\t$PostambleActionsNoTest
upgradedeps ::
\t$PostambleActionsUpgradeDeps
upgradedeps_notest ::
\t$PostambleActionsUpgradeDepsNoTest
listdeps ::
\t$PostambleActionsListDeps
listalldeps ::
\t$PostambleActionsListAllDeps
END_MAKE

return $fragment;
}

1;

__END__
#line 1071
#line 1178
4 changes: 2 additions & 2 deletions inc/Module/Install.pm
Original file line number Diff line number Diff line change
Expand Up @@ -31,7 +31,7 @@ BEGIN {
# This is not enforced yet, but will be some time in the next few
# releases once we can make sure it won't clash with custom
# Module::Install extensions.
$VERSION = '1.01';
$VERSION = '1.04';

# Storage for the pseudo-singleton
$MAIN = undef;
Expand Down Expand Up @@ -451,7 +451,7 @@ sub _version ($) {
}

sub _cmp ($$) {
_version($_[0]) <=> _version($_[1]);
_version($_[1]) <=> _version($_[2]);
}

# Cloned from Params::Util::_CLASS
Expand Down
59 changes: 0 additions & 59 deletions inc/Module/Install/AuthorTests.pm

This file was deleted.

13 changes: 12 additions & 1 deletion inc/Module/Install/AutoInstall.pm
Original file line number Diff line number Diff line change
Expand Up @@ -6,7 +6,7 @@ use Module::Install::Base ();

use vars qw{$VERSION @ISA $ISCORE};
BEGIN {
$VERSION = '1.01';
$VERSION = '1.04';
@ISA = 'Module::Install::Base';
$ISCORE = 1;
}
Expand Down Expand Up @@ -73,6 +73,17 @@ sub auto_install {
);
}

sub installdeps_target {
my ($self, @args) = @_;

$self->include('Module::AutoInstall');
require Module::AutoInstall;

Module::AutoInstall::_installdeps_target(1);

$self->auto_install(@args);
}

sub auto_install_now {
my $self = shift;
$self->auto_install(@_);
Expand Down
2 changes: 1 addition & 1 deletion inc/Module/Install/Base.pm
Original file line number Diff line number Diff line change
Expand Up @@ -4,7 +4,7 @@ package Module::Install::Base;
use strict 'vars';
use vars qw{$VERSION};
BEGIN {
$VERSION = '1.01';
$VERSION = '1.04';
}

# Suspend handler for "redefined" warnings
Expand Down
Loading

0 comments on commit 9af2ddd

Please sign in to comment.