1
0

AutoInstall.pm 2.1 KB

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