c2cb32a16381080bb674a659bf6f4d0f93beb740
[catagits/XML-Feed.git] / inc / Module / Install / Makefile.pm
1 #line 1 "inc/Module/Install/Makefile.pm - /Library/Perl/5.8.6/Module/Install/Makefile.pm"
2 package Module::Install::Makefile;
3
4 use strict 'vars';
5 use Module::Install::Base;
6 use ExtUtils::MakeMaker ();
7
8 use vars qw{$VERSION @ISA};
9 BEGIN {
10         $VERSION = '0.57';
11         @ISA     = qw{Module::Install::Base};
12 }
13
14 sub Makefile { $_[0] }
15
16 sub prompt {
17     shift;
18     goto &ExtUtils::MakeMaker::prompt;
19 }
20
21 sub makemaker_args {
22     my $self = shift;
23     my $args = ($self->{makemaker_args} ||= {});
24     %$args = ( %$args, @_ ) if @_;
25     $args;
26 }
27
28 # For mm args that take multiple space-seperated args,
29 # append an argument to the current list.
30 sub makemaker_append {
31     my $self = shift;
32     my $name = shift;
33     my $args = $self->makemaker_args;
34     $args->{name} = defined $args->{$name}
35         ? join( ' ', $args->{name}, @_ )
36         : join( ' ', @_ );
37 }
38
39 sub build_subdirs {
40     my $self    = shift;
41     my $subdirs = $self->makemaker_args->{DIR} ||= [];
42     for my $subdir (@_) {
43         push @$subdirs, $subdir;
44     }
45 }
46
47 sub clean_files {
48     my $self  = shift;
49     my $clean = $self->makemaker_args->{clean} ||= {};
50     %$clean = (
51         %$clean, 
52         FILES => join(' ', grep length, $clean->{FILES}, @_),
53     );
54 }
55
56 sub libs {
57     my $self = shift;
58     my $libs = ref $_[0] ? shift : [ shift ];
59     $self->makemaker_args( LIBS => $libs );
60 }
61
62 sub inc {
63     my $self = shift;
64     $self->makemaker_args( INC => shift );
65 }
66
67 sub write {
68     my $self = shift;
69     die "&Makefile->write() takes no arguments\n" if @_;
70
71     my $args = $self->makemaker_args;
72
73     $args->{DISTNAME} = $self->name;
74     $args->{NAME} = $self->module_name || $self->name || $self->determine_NAME($args);
75     $args->{VERSION} = $self->version || $self->determine_VERSION($args);
76     $args->{NAME} =~ s/-/::/g;
77
78     $args->{test} = {TESTS => $self->tests} if $self->tests;
79
80     if ($] >= 5.005) {
81         $args->{ABSTRACT} = $self->abstract;
82         $args->{AUTHOR} = $self->author;
83     }
84     if ( eval($ExtUtils::MakeMaker::VERSION) >= 6.10 ) {
85         $args->{NO_META} = 1;
86     }
87     if ( eval($ExtUtils::MakeMaker::VERSION) > 6.17 ) {
88         $args->{SIGN} = 1 if $self->sign;
89     }
90     delete $args->{SIGN} unless $self->is_admin;
91
92     # merge both kinds of requires into prereq_pm
93     my $prereq = ($args->{PREREQ_PM} ||= {});
94     %$prereq = ( %$prereq, map { @$_ } map { @$_ } grep $_,
95                  ($self->build_requires, $self->requires) );
96
97     # merge both kinds of requires into prereq_pm
98     my $subdirs = ($args->{DIR} ||= []);
99     if ($self->bundles) {
100         foreach my $bundle (@{ $self->bundles }) {
101             my ($file, $dir) = @$bundle;
102             push @$subdirs, $dir if -d $dir;
103             delete $prereq->{$file};
104         }
105     }
106
107     if (my $perl_version = $self->perl_version) {
108         eval "use $perl_version; 1"
109             or die "ERROR: perl: Version $] is installed, ".
110                    "but we need version >= $perl_version";
111     }
112
113     my %args = map {($_ => $args->{$_})} grep {defined($args->{$_})} keys %$args;
114
115     if ($self->admin->preop) {
116         $args{dist} = $self->admin->preop;
117     }
118
119     ExtUtils::MakeMaker::WriteMakefile(%args);
120
121     $self->fix_up_makefile();
122 }
123
124 sub fix_up_makefile {
125     my $self = shift;
126     my $top_class = ref($self->_top) || '';
127     my $top_version = $self->_top->VERSION || '';
128
129     my $preamble = $self->preamble 
130        ? "# Preamble by $top_class $top_version\n" . $self->preamble
131        : '';
132     my $postamble = "# Postamble by $top_class $top_version\n" . 
133                     ($self->postamble || '');
134
135     local *MAKEFILE;
136     open MAKEFILE, '< Makefile' or die $!;
137     my $makefile = do { local $/; <MAKEFILE> };
138     close MAKEFILE or die $!;
139
140     $makefile =~ s/\b(test_harness\(\$\(TEST_VERBOSE\), )/$1'inc', /;
141     $makefile =~ s/( -I\$\(INST_ARCHLIB\))/ -Iinc$1/g;
142     $makefile =~ s/( "-I\$\(INST_LIB\)")/ "-Iinc"$1/g;
143
144     $makefile =~ s/^(FULLPERL = .*)/$1 -Iinc/m;
145     $makefile =~ s/^(PERL = .*)/$1 -Iinc/m;
146
147     open MAKEFILE, '> Makefile' or die $!;
148     print MAKEFILE "$preamble$makefile$postamble" or die $!;
149     close MAKEFILE or die $!;
150
151     1;
152 }
153
154 sub preamble {
155     my ($self, $text) = @_;
156     $self->{preamble} = $text . $self->{preamble} if defined $text;
157     $self->{preamble};
158 }
159
160 sub postamble {
161     my ($self, $text) = @_;
162     $self->{postamble} ||= $self->admin->postamble;
163     $self->{postamble} .= $text if defined $text;
164     $self->{postamble}
165 }
166
167 1;
168
169 __END__
170
171 #line 295