ignore META.yml
[scpubgit/stemmatology.git] / TreeOfTexts / inc / Module / Install / AutoInstall.pm
CommitLineData
dbcf12a6 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.00';
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 auto_install_now {
77 my $self = shift;
78 $self->auto_install(@_);
79 Module::AutoInstall::do_install();
80}
81
821;