forked from Perl-Toolchain-Gang/ExtUtils-MakeMaker
-
Notifications
You must be signed in to change notification settings - Fork 0
/
Makefile.PL
206 lines (161 loc) · 6.03 KB
/
Makefile.PL
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
203
204
205
206
#!/usr/bin/perl -w
# A template for Makefile.PL.
# - Set the $PACKAGE variable to the name of your module.
# - Set $LAST_API_CHANGE to reflect the last version you changed the API
# of your module.
# - Fill in your dependencies in PREREQ_PM
# Alternatively, you can say the hell with this and use h2xs.
BEGIN { require 5.006; }
use strict;
use lib ".";
use my::bundles; # Must be used before anything else to set up bundled dependencies
use lib qw(lib); # build ourself with ourself
use File::Spec;
use ExtUtils::MakeMaker 6.50;
my $BUILDING_AS_PACKAGE = $ENV{BUILDING_AS_PACKAGE};
BEGIN {
die "You have File::Spec version $File::Spec::VERSION\n" . "ExtUtils::MakeMaker requires File::Spec >= 0.8 to build at all.\n"
if $File::Spec::VERSION < 0.8;
}
my $PACKAGE = 'ExtUtils::MakeMaker';
my $version = do { no strict 'refs'; ${ $PACKAGE . '::VERSION' }; };
$version =~ s/_//; # for X.Y_Z alpha releases
( my $PACKAGE_FILE = $PACKAGE ) =~ s|::|/|g;
my $LAST_API_CHANGE = 5.50;
my $Is_VMS = $^O eq 'VMS';
eval "require $PACKAGE";
unless ( $@ ) { # Make sure we did find the module.
print <<"CHANGE_WARN" if $version < $LAST_API_CHANGE;
NOTE: There have been API changes between this version and any older
than version $LAST_API_CHANGE! Please read the Changes file if you
are upgrading from a version older than $LAST_API_CHANGE.
CHANGE_WARN
}
check_environment();
my %Extra_Prereqs = ();
# Special case for MakeMaker being built as a vendor package
if( $BUILDING_AS_PACKAGE ) {
# Some of these are lower than what we bundle. That's ok, we
# bundle the latest because we might as well, but we don't want to
# burden vendors with having to update everything.
%Extra_Prereqs = (
'CPAN::Meta' => '2.112580',
'CPAN::Meta::YAML' => '0.002',
'ExtUtils::Command' => '1.16',
'ExtUtils::Install' => '1.52',
'ExtUtils::Manifest' => '1.58',
'File::Temp' => '0.22',
'JSON::PP' => '2.27103',
'Parse::CPAN::Meta' => '1.4400',
'Scalar::Util' => '1.13',
'version' => '0.82',
'Version::Requirements' => '0.101020',
);
$Extra_Prereqs{'JSON::PP::Compat5006'} = '1.09' if $] < 5.008;
}
else {
my::bundles::copy_bundles("bundled", "inc");
}
# Test::Harnesses prior to 2.00 shoved all of @INC onto the command line
# when a test had -T. This made it too long. So we need a Test::Harness
# > 2.00 on VMS for t/testlib.t
$Extra_Prereqs{'Test::Harness'} = 2.00 if $^O eq 'VMS';
my $MM = WriteMakefile(
NAME => $PACKAGE,
VERSION_FROM => "lib/$PACKAGE_FILE.pm", # finds $VERSION
PREREQ_PM => {
%Extra_Prereqs,
'File::Spec' => 0.8, # splitpath(), rel2abs()
'Pod::Man' => 0, # manifypods needs Pod::Man
'File::Basename' => 0,
DirHandle => 0,
},
MIN_PERL_VERSION => '5.006',
PMLIBDIRS => [qw(lib inc)],
PMLIBPARENTDIRS => [qw(lib inc)], # PMLIBPARENTDIRS is an experimental feature
EXE_FILES => [qw(bin/instmodsh)],
META_MERGE => {
no_index => {
package => [ 'DynaLoader', 'in' ], # "in" is a PAUSE misparse.
directory => [ 'bundled', 'my' ],
},
resources => {
license => 'http://dev.perl.org/licenses/',
homepage => 'http://makemaker.org',
bugtracker => 'http://rt.cpan.org/NoAuth/Bugs.html?Dist=ExtUtils-MakeMaker',
repository => 'http://github.com/Perl-Toolchain-Gang/ExtUtils-MakeMaker',
MailingList => 'makemaker@perl.org',
},
},
CONFIGURE_REQUIRES => {}, # We don't need ourself to install ourself.
BUILD_REQUIRES => { 'Data::Dumper' => 0, },
INSTALLDIRS => 'perl',
LICENSE => 'perl',
ABSTRACT_FROM => "lib/$PACKAGE_FILE.pm",
AUTHOR => 'Michael G Schwern <schwern@pobox.com>',
realclean => {
FILES => "inc"
},
$^O =~ /win/i
? (
dist => {
TAR => 'ptar',
TARFLAGS => '-c -C -f',
},
)
: (),
);
if ( !$Is_VMS && $MM->{PERL} =~ /\S\s+\S/ ) {
require Test::Harness;
my $th_version = defined $Test::Harness::VERSION ? $Test::Harness::VERSION : 0;
print <<SPACE_WARN if $th_version < 2.27;
NOTE: Your Perl looks like it contains a space in the path name.
MakeMaker is now OK with that but your version of Test::Harness is not
which means 'make test' will likely puke.
You will have to install this new version of MakeMaker, then upgrade
Test::Harness from CPAN, then run the MakeMaker tests.
SPACE_WARN
}
# Display warnings about the environment.
sub check_environment {
if ( $Is_VMS && $ENV{bin} ) {
print <<BIN_WARN;
The logical name BIN may be present. This may interfere with MakeMaker's
tests and operations. GNV is the prime suspect for setting this.
BIN_WARN
sleep 2;
}
}
{
package MY;
# Make sure PERLRUN uses the MakeMaker about to be installed
# and not the currently installed one.
sub init_PERL {
my ( $self ) = shift;
$self->SUPER::init_PERL;
$self->{$_} .= q[ "-I$(INST_ARCHLIB)" "-I$(INST_LIB)"] for qw( PERLRUN FULLPERLRUN ABSPERLRUN );
}
# Test with multiple versions of perl
sub dist_test {
my $self = shift;
my $make = $self->SUPER::dist_test( @_ );
return $make unless $ENV{AUTHOR_TESTING} and $ENV{AUTHOR_TESTING} eq 'MSCHWERN';
# Strip off all the whitespace at the end, we'll put our own in.
$make =~ s{\s+\z}{\n};
my @perls = qw(
perl5.6.2
perl5.8.9
perl5.10.0
perl5.10.1
perl5.12.4
perl5.14.1
);
for my $perl ( @perls ) {
$make .= sprintf <<'END', $perl;
cd $(DISTVNAME) && $(MAKE) clean && %s Makefile.PL && $(MAKE) test $(PASTHRU)
END
}
$make .= "\n";
return $make;
}
}