2 package Module
::Install
::Makefile
;
5 use Module
::Install
::Base
;
6 use ExtUtils
::MakeMaker
();
8 use vars
qw{$VERSION @ISA};
11 @ISA = qw{Module
::Install
::Base
};
14 sub Makefile
{ $_[0] }
21 # Infinite loop protection
23 if ( ++$seen{"$c[1]|$c[2]|$_[0]"} > 3 ) {
24 die "Caught an potential prompt infinite loop ($c[1]|$c[2]|$_[0])";
27 # In automated testing, always use defaults
28 if ( $ENV{AUTOMATED_TESTING
} and ! $ENV{PERL_MM_USE_DEFAULT
} ) {
29 local $ENV{PERL_MM_USE_DEFAULT
} = 1;
30 goto &ExtUtils
::MakeMaker
::prompt
;
32 goto &ExtUtils
::MakeMaker
::prompt
;
38 my $args = ($self->{makemaker_args
} ||= {});
39 %$args = ( %$args, @_ ) if @_;
43 # For mm args that take multiple space-seperated args,
44 # append an argument to the current list.
45 sub makemaker_append
{
48 my $args = $self->makemaker_args;
49 $args->{name
} = defined $args->{$name}
50 ?
join( ' ', $args->{name
}, @_ )
56 my $subdirs = $self->makemaker_args->{DIR
} ||= [];
58 push @
$subdirs, $subdir;
64 my $clean = $self->makemaker_args->{clean
} ||= {};
67 FILES
=> join(' ', grep length, $clean->{FILES
}, @_),
73 my $libs = ref $_[0] ?
shift : [ shift ];
74 $self->makemaker_args( LIBS
=> $libs );
79 $self->makemaker_args( INC
=> shift );
84 die "&Makefile->write() takes no arguments\n" if @_;
86 my $args = $self->makemaker_args;
87 $args->{DISTNAME
} = $self->name;
88 $args->{NAME
} = $self->module_name || $self->name || $self->determine_NAME($args);
89 $args->{VERSION
} = $self->version || $self->determine_VERSION($args);
90 $args->{NAME
} =~ s/-/::/g;
92 $args->{test
} = { TESTS
=> $self->tests };
95 $args->{ABSTRACT
} = $self->abstract;
96 $args->{AUTHOR
} = $self->author;
98 if ( eval($ExtUtils::MakeMaker
::VERSION
) >= 6.10 ) {
101 if ( eval($ExtUtils::MakeMaker
::VERSION
) > 6.17 and $self->sign ) {
104 unless ( $self->is_admin ) {
105 delete $args->{SIGN
};
108 # merge both kinds of requires into prereq_pm
109 my $prereq = ($args->{PREREQ_PM
} ||= {});
110 %$prereq = ( %$prereq, map { @
$_ } map { @
$_ } grep $_,
111 ($self->build_requires, $self->requires) );
113 # merge both kinds of requires into prereq_pm
114 my $subdirs = ($args->{DIR
} ||= []);
115 if ($self->bundles) {
116 foreach my $bundle (@
{ $self->bundles }) {
117 my ($file, $dir) = @
$bundle;
118 push @
$subdirs, $dir if -d
$dir;
119 delete $prereq->{$file};
123 if ( my $perl_version = $self->perl_version ) {
124 eval "use $perl_version; 1"
125 or die "ERROR: perl: Version $] is installed, "
126 . "but we need version >= $perl_version";
129 my %args = map { ( $_ => $args->{$_} ) } grep {defined($args->{$_})} keys %$args;
130 if ($self->admin->preop) {
131 $args{dist
} = $self->admin->preop;
134 my $mm = ExtUtils
::MakeMaker
::WriteMakefile
(%args);
135 $self->fix_up_makefile($mm->{FIRST_MAKEFILE
});
138 sub fix_up_makefile
{
140 my $makefile_name = shift;
141 my $top_class = ref($self->_top) || '';
142 my $top_version = $self->_top->VERSION || '';
144 my $preamble = $self->preamble
145 ?
"# Preamble by $top_class $top_version\n"
148 my $postamble = "# Postamble by $top_class $top_version\n"
149 . ($self->postamble || '');
152 open MAKEFILE
, "< $makefile_name" or die "fix_up_makefile: Couldn't open $makefile_name: $!";
153 my $makefile = do { local $/; <MAKEFILE
> };
154 close MAKEFILE
or die $!;
156 $makefile =~ s/\b(test_harness\(\$\(TEST_VERBOSE\), )/$1'inc', /;
157 $makefile =~ s/( -I\$\(INST_ARCHLIB\))/ -Iinc$1/g;
158 $makefile =~ s/( "-I\$\(INST_LIB\)")/ "-Iinc"$1/g;
159 $makefile =~ s/^(FULLPERL = .*)/$1 "-Iinc"/m;
160 $makefile =~ s/^(PERL = .*)/$1 "-Iinc"/m;
162 open MAKEFILE
, "> $makefile_name" or die "fix_up_makefile: Couldn't open $makefile_name: $!";
163 print MAKEFILE
"$preamble$makefile$postamble" or die $!;
164 close MAKEFILE
or die $!;
170 my ($self, $text) = @_;
171 $self->{preamble
} = $text . $self->{preamble
} if defined $text;
176 my ($self, $text) = @_;
177 $self->{postamble
} ||= $self->admin->postamble;
178 $self->{postamble
} .= $text if defined $text;