1#line 1 2package Module::Install::AutoInstall; 3 4use strict; 5use Module::Install::Base (); 6 7use vars qw{$VERSION @ISA $ISCORE}; 8BEGIN { 9 $VERSION = '1.06'; 10 @ISA = 'Module::Install::Base'; 11 $ISCORE = 1; 12} 13 14sub AutoInstall { $_[0] } 15 16sub run { 17 my $self = shift; 18 $self->auto_install_now(@_); 19} 20 21sub write { 22 my $self = shift; 23 $self->auto_install(@_); 24} 25 26sub auto_install { 27 my $self = shift; 28 return if $self->{done}++; 29 30 # Flatten array of arrays into a single array 31 my @core = map @$_, map @$_, grep ref, 32 $self->build_requires, $self->requires; 33 34 my @config = @_; 35 36 # We'll need Module::AutoInstall 37 $self->include('Module::AutoInstall'); 38 require Module::AutoInstall; 39 40 my @features_require = Module::AutoInstall->import( 41 (@config ? (-config => \@config) : ()), 42 (@core ? (-core => \@core) : ()), 43 $self->features, 44 ); 45 46 my %seen; 47 my @requires = map @$_, map @$_, grep ref, $self->requires; 48 while (my ($mod, $ver) = splice(@requires, 0, 2)) { 49 $seen{$mod}{$ver}++; 50 } 51 my @build_requires = map @$_, map @$_, grep ref, $self->build_requires; 52 while (my ($mod, $ver) = splice(@build_requires, 0, 2)) { 53 $seen{$mod}{$ver}++; 54 } 55 my @configure_requires = map @$_, map @$_, grep ref, $self->configure_requires; 56 while (my ($mod, $ver) = splice(@configure_requires, 0, 2)) { 57 $seen{$mod}{$ver}++; 58 } 59 60 my @deduped; 61 while (my ($mod, $ver) = splice(@features_require, 0, 2)) { 62 push @deduped, $mod => $ver unless $seen{$mod}{$ver}++; 63 } 64 65 $self->requires(@deduped); 66 67 $self->makemaker_args( Module::AutoInstall::_make_args() ); 68 69 my $class = ref($self); 70 $self->postamble( 71 "# --- $class section:\n" . 72 Module::AutoInstall::postamble() 73 ); 74} 75 76sub installdeps_target { 77 my ($self, @args) = @_; 78 79 $self->include('Module::AutoInstall'); 80 require Module::AutoInstall; 81 82 Module::AutoInstall::_installdeps_target(1); 83 84 $self->auto_install(@args); 85} 86 87sub auto_install_now { 88 my $self = shift; 89 $self->auto_install(@_); 90 Module::AutoInstall::do_install(); 91} 92 931; 94