Commit | Line | Data |
ecac864a |
1 | #line 1 "inc/Module/Install/Makefile.pm - /Library/Perl/5.8.6/Module/Install/Makefile.pm" |
0d5e38d1 |
2 | package Module::Install::Makefile; |
0d5e38d1 |
3 | |
4 | use strict 'vars'; |
ecac864a |
5 | use Module::Install::Base; |
0d5e38d1 |
6 | use ExtUtils::MakeMaker (); |
7 | |
ecac864a |
8 | use vars qw{$VERSION @ISA}; |
9 | BEGIN { |
10 | $VERSION = '0.57'; |
11 | @ISA = qw{Module::Install::Base}; |
12 | } |
13 | |
0d5e38d1 |
14 | sub Makefile { $_[0] } |
15 | |
ecac864a |
16 | sub prompt { |
0d5e38d1 |
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 | |
ecac864a |
28 | # For mm args that take multiple space-seperated args, |
29 | # append an argument to the current list. |
30 | sub makemaker_append { |
0d5e38d1 |
31 | my $self = shift; |
ecac864a |
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; |
0d5e38d1 |
49 | my $clean = $self->makemaker_args->{clean} ||= {}; |
50 | %$clean = ( |
51 | %$clean, |
ecac864a |
52 | FILES => join(' ', grep length, $clean->{FILES}, @_), |
0d5e38d1 |
53 | ); |
54 | } |
55 | |
56 | sub libs { |
57 | my $self = shift; |
ecac864a |
58 | my $libs = ref $_[0] ? shift : [ shift ]; |
0d5e38d1 |
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 | |
ecac864a |
78 | $args->{test} = {TESTS => $self->tests} if $self->tests; |
79 | |
0d5e38d1 |
80 | if ($] >= 5.005) { |
ecac864a |
81 | $args->{ABSTRACT} = $self->abstract; |
82 | $args->{AUTHOR} = $self->author; |
0d5e38d1 |
83 | } |
84 | if ( eval($ExtUtils::MakeMaker::VERSION) >= 6.10 ) { |
85 | $args->{NO_META} = 1; |
86 | } |
87 | if ( eval($ExtUtils::MakeMaker::VERSION) > 6.17 ) { |
ecac864a |
88 | $args->{SIGN} = 1 if $self->sign; |
0d5e38d1 |
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 |
ecac864a |
98 | my $subdirs = ($args->{DIR} ||= []); |
0d5e38d1 |
99 | if ($self->bundles) { |
ecac864a |
100 | foreach my $bundle (@{ $self->bundles }) { |
101 | my ($file, $dir) = @$bundle; |
102 | push @$subdirs, $dir if -d $dir; |
103 | delete $prereq->{$file}; |
104 | } |
0d5e38d1 |
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 | |
ecac864a |
135 | local *MAKEFILE; |
0d5e38d1 |
136 | open MAKEFILE, '< Makefile' or die $!; |
137 | my $makefile = do { local $/; <MAKEFILE> }; |
ecac864a |
138 | close MAKEFILE or die $!; |
0d5e38d1 |
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 $!; |
ecac864a |
148 | print MAKEFILE "$preamble$makefile$postamble" or die $!; |
149 | close MAKEFILE or die $!; |
150 | |
151 | 1; |
0d5e38d1 |
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) = @_; |
0d5e38d1 |
162 | $self->{postamble} ||= $self->admin->postamble; |
163 | $self->{postamble} .= $text if defined $text; |
164 | $self->{postamble} |
165 | } |
166 | |
167 | 1; |
168 | |
169 | __END__ |
170 | |
ecac864a |
171 | #line 295 |