Image-Info-1.20.tar.gz
[Image-Info.git] / inc / Module / Install / Makefile.pm
blob9dc31b6d12445c153d735cf83fbfc51e5f1c8346
1 #line 1
2 package Module::Install::Makefile;
4 use strict 'vars';
5 use Module::Install::Base;
6 use ExtUtils::MakeMaker ();
8 use vars qw{$VERSION @ISA};
9 BEGIN {
10 $VERSION = '0.60';
11 @ISA = qw{Module::Install::Base};
14 sub Makefile { $_[0] }
16 my %seen = ();
18 sub prompt {
19 shift;
21 # Infinite loop protection
22 my @c = caller();
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;
31 } else {
32 goto &ExtUtils::MakeMaker::prompt;
36 sub makemaker_args {
37 my $self = shift;
38 my $args = ($self->{makemaker_args} ||= {});
39 %$args = ( %$args, @_ ) if @_;
40 $args;
43 # For mm args that take multiple space-seperated args,
44 # append an argument to the current list.
45 sub makemaker_append {
46 my $self = shift;
47 my $name = shift;
48 my $args = $self->makemaker_args;
49 $args->{name} = defined $args->{$name}
50 ? join( ' ', $args->{name}, @_ )
51 : join( ' ', @_ );
54 sub build_subdirs {
55 my $self = shift;
56 my $subdirs = $self->makemaker_args->{DIR} ||= [];
57 for my $subdir (@_) {
58 push @$subdirs, $subdir;
62 sub clean_files {
63 my $self = shift;
64 my $clean = $self->makemaker_args->{clean} ||= {};
65 %$clean = (
66 %$clean,
67 FILES => join(' ', grep length, $clean->{FILES}, @_),
71 sub libs {
72 my $self = shift;
73 my $libs = ref $_[0] ? shift : [ shift ];
74 $self->makemaker_args( LIBS => $libs );
77 sub inc {
78 my $self = shift;
79 $self->makemaker_args( INC => shift );
82 sub write {
83 my $self = 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;
91 if ( $self->tests ) {
92 $args->{test} = { TESTS => $self->tests };
94 if ($] >= 5.005) {
95 $args->{ABSTRACT} = $self->abstract;
96 $args->{AUTHOR} = $self->author;
98 if ( eval($ExtUtils::MakeMaker::VERSION) >= 6.10 ) {
99 $args->{NO_META} = 1;
101 if ( eval($ExtUtils::MakeMaker::VERSION) > 6.17 and $self->sign ) {
102 $args->{SIGN} = 1;
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 {
139 my $self = shift;
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"
146 . $self->preamble
147 : '';
148 my $postamble = "# Postamble by $top_class $top_version\n"
149 . ($self->postamble || '');
151 local *MAKEFILE;
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 $!;
169 sub preamble {
170 my ($self, $text) = @_;
171 $self->{preamble} = $text . $self->{preamble} if defined $text;
172 $self->{preamble};
175 sub postamble {
176 my ($self, $text) = @_;
177 $self->{postamble} ||= $self->admin->postamble;
178 $self->{postamble} .= $text if defined $text;
179 $self->{postamble}
184 __END__
186 #line 312