| line | stmt | bran | cond | sub | pod | time | code | 
| 1 |  |  |  |  |  |  | # $Id$ | 
| 2 |  |  |  |  |  |  |  | 
| 3 |  |  |  |  |  |  | use strict; | 
| 4 | 52 |  |  | 52 |  | 310512 | use warnings; | 
|  | 52 |  |  |  |  | 210 |  | 
|  | 52 |  |  |  |  | 1327 |  | 
| 5 | 52 |  |  | 52 |  | 222 |  | 
|  | 52 |  |  |  |  | 1406 |  | 
|  | 52 |  |  |  |  | 2830 |  | 
| 6 |  |  |  |  |  |  | BEGIN {require 5.006;} | 
| 7 | 52 |  |  | 52 |  | 1829 |  | 
| 8 |  |  |  |  |  |  | require Exporter; | 
| 9 |  |  |  |  |  |  | use ExtUtils::MakeMaker::Config; | 
| 10 | 52 |  |  | 52 |  | 8253 | use ExtUtils::MakeMaker::version; # ensure we always have our fake version.pm | 
|  | 52 |  |  |  |  | 122 |  | 
|  | 52 |  |  |  |  | 390 |  | 
| 11 | 52 |  |  | 52 |  | 19508 | use Carp; | 
|  | 52 |  |  |  |  | 116 |  | 
|  | 52 |  |  |  |  | 1500 |  | 
| 12 | 52 |  |  | 52 |  | 311 | use File::Path; | 
|  | 52 |  |  |  |  | 88 |  | 
|  | 52 |  |  |  |  | 3523 |  | 
| 13 | 52 |  |  | 52 |  | 285 | my $CAN_DECODE = eval { require ExtUtils::MakeMaker::Locale; }; # 2 birds, 1 stone | 
|  | 52 |  |  |  |  | 282 |  | 
|  | 52 |  |  |  |  | 54453 |  | 
| 14 |  |  |  |  |  |  | eval { ExtUtils::MakeMaker::Locale::reinit('UTF-8') } | 
| 15 |  |  |  |  |  |  | if $CAN_DECODE and Encode::find_encoding('locale')->name eq 'ascii'; | 
| 16 |  |  |  |  |  |  |  | 
| 17 |  |  |  |  |  |  | our $Verbose = 0;       # exported | 
| 18 |  |  |  |  |  |  | our @Parent;            # needs to be localized | 
| 19 |  |  |  |  |  |  | our @Get_from_Config;   # referenced by MM_Unix | 
| 20 |  |  |  |  |  |  | our @MM_Sections; | 
| 21 |  |  |  |  |  |  | our @Overridable; | 
| 22 |  |  |  |  |  |  | my @Prepend_parent; | 
| 23 |  |  |  |  |  |  | my %Recognized_Att_Keys; | 
| 24 |  |  |  |  |  |  | our %macro_fsentity; # whether a macro is a filesystem name | 
| 25 |  |  |  |  |  |  | our %macro_dep; # whether a macro is a dependency | 
| 26 |  |  |  |  |  |  |  | 
| 27 |  |  |  |  |  |  | our $VERSION = '7.64'; | 
| 28 |  |  |  |  |  |  | $VERSION =~ tr/_//d; | 
| 29 |  |  |  |  |  |  |  | 
| 30 |  |  |  |  |  |  | # Emulate something resembling CVS $Revision$ | 
| 31 |  |  |  |  |  |  | (our $Revision = $VERSION) =~ s{_}{}; | 
| 32 |  |  |  |  |  |  | $Revision = int $Revision * 10000; | 
| 33 |  |  |  |  |  |  |  | 
| 34 |  |  |  |  |  |  | our $Filename = __FILE__;   # referenced outside MakeMaker | 
| 35 |  |  |  |  |  |  |  | 
| 36 |  |  |  |  |  |  | our @ISA = qw(Exporter); | 
| 37 |  |  |  |  |  |  | our @EXPORT    = qw(&WriteMakefile $Verbose &prompt &os_unsupported); | 
| 38 |  |  |  |  |  |  | our @EXPORT_OK = qw($VERSION &neatvalue &mkbootstrap &mksymlists | 
| 39 |  |  |  |  |  |  | &WriteEmptyMakefile &open_for_writing &write_file_via_tmp | 
| 40 |  |  |  |  |  |  | &_sprintf562); | 
| 41 |  |  |  |  |  |  |  | 
| 42 |  |  |  |  |  |  | # These will go away once the last of the Win32 & VMS specific code is | 
| 43 |  |  |  |  |  |  | # purged. | 
| 44 |  |  |  |  |  |  | my $Is_VMS     = $^O eq 'VMS'; | 
| 45 |  |  |  |  |  |  | my $Is_Win32   = $^O eq 'MSWin32'; | 
| 46 |  |  |  |  |  |  | our $UNDER_CORE = $ENV{PERL_CORE}; # needs to be our | 
| 47 |  |  |  |  |  |  |  | 
| 48 |  |  |  |  |  |  | full_setup(); | 
| 49 |  |  |  |  |  |  |  | 
| 50 |  |  |  |  |  |  | require ExtUtils::MM;  # Things like CPAN assume loading ExtUtils::MakeMaker | 
| 51 |  |  |  |  |  |  | # will give them MM. | 
| 52 |  |  |  |  |  |  |  | 
| 53 |  |  |  |  |  |  | require ExtUtils::MY;  # XXX pre-5.8 versions of ExtUtils::Embed expect | 
| 54 |  |  |  |  |  |  | # loading ExtUtils::MakeMaker will give them MY. | 
| 55 |  |  |  |  |  |  | # This will go when Embed is its own CPAN module. | 
| 56 |  |  |  |  |  |  |  | 
| 57 |  |  |  |  |  |  |  | 
| 58 |  |  |  |  |  |  | # 5.6.2 can't do sprintf "%1$s" - this can only do %s | 
| 59 |  |  |  |  |  |  | my ($format, @args) = @_; | 
| 60 |  |  |  |  |  |  | for (my $i = 1; $i <= @args; $i++) { | 
| 61 | 138 |  |  | 138 |  | 645 | $format =~ s#%$i\$s#$args[$i-1]#g; | 
| 62 | 138 |  |  |  |  | 599 | } | 
| 63 | 251 |  |  |  |  | 4578 | $format; | 
| 64 |  |  |  |  |  |  | } | 
| 65 | 193 |  |  |  |  | 819 |  | 
| 66 |  |  |  |  |  |  | croak "WriteMakefile: Need even number of args" if @_ % 2; | 
| 67 |  |  |  |  |  |  |  | 
| 68 |  |  |  |  |  |  | require ExtUtils::MY; | 
| 69 | 185 | 50 |  | 185 | 0 | 224262 | my %att = @_; | 
| 70 |  |  |  |  |  |  |  | 
| 71 | 185 |  |  |  |  | 1925 | _convert_compat_attrs(\%att); | 
| 72 | 185 |  |  |  |  | 1916 |  | 
| 73 |  |  |  |  |  |  | _verify_att(\%att); | 
| 74 | 157 |  |  |  |  | 44044 |  | 
| 75 |  |  |  |  |  |  | my $mm = MM->new(\%att); | 
| 76 | 157 |  |  |  |  | 926 | $mm->flush; | 
| 77 |  |  |  |  |  |  |  | 
| 78 | 157 |  |  |  |  | 2038 | return $mm; | 
| 79 | 150 |  |  |  |  | 2025 | } | 
| 80 |  |  |  |  |  |  |  | 
| 81 | 150 |  |  |  |  | 3082 |  | 
| 82 |  |  |  |  |  |  | # Basic signatures of the attributes WriteMakefile takes.  Each is the | 
| 83 |  |  |  |  |  |  | # reference type.  Empty value indicate it takes a non-reference | 
| 84 |  |  |  |  |  |  | # scalar. | 
| 85 |  |  |  |  |  |  | my %Att_Sigs; | 
| 86 |  |  |  |  |  |  | my %Special_Sigs = ( | 
| 87 |  |  |  |  |  |  | AUTHOR             => 'ARRAY', | 
| 88 |  |  |  |  |  |  | C                  => 'ARRAY', | 
| 89 |  |  |  |  |  |  | CONFIG             => 'ARRAY', | 
| 90 |  |  |  |  |  |  | CONFIGURE          => 'CODE', | 
| 91 |  |  |  |  |  |  | DIR                => 'ARRAY', | 
| 92 |  |  |  |  |  |  | DL_FUNCS           => 'HASH', | 
| 93 |  |  |  |  |  |  | DL_VARS            => 'ARRAY', | 
| 94 |  |  |  |  |  |  | EXCLUDE_EXT        => 'ARRAY', | 
| 95 |  |  |  |  |  |  | EXE_FILES          => 'ARRAY', | 
| 96 |  |  |  |  |  |  | FUNCLIST           => 'ARRAY', | 
| 97 |  |  |  |  |  |  | H                  => 'ARRAY', | 
| 98 |  |  |  |  |  |  | IMPORTS            => 'HASH', | 
| 99 |  |  |  |  |  |  | INCLUDE_EXT        => 'ARRAY', | 
| 100 |  |  |  |  |  |  | LIBS               => ['ARRAY',''], | 
| 101 |  |  |  |  |  |  | MAN1PODS           => 'HASH', | 
| 102 |  |  |  |  |  |  | MAN3PODS           => 'HASH', | 
| 103 |  |  |  |  |  |  | META_ADD           => 'HASH', | 
| 104 |  |  |  |  |  |  | META_MERGE         => 'HASH', | 
| 105 |  |  |  |  |  |  | OBJECT             => ['ARRAY', ''], | 
| 106 |  |  |  |  |  |  | PL_FILES           => 'HASH', | 
| 107 |  |  |  |  |  |  | PM                 => 'HASH', | 
| 108 |  |  |  |  |  |  | PMLIBDIRS          => 'ARRAY', | 
| 109 |  |  |  |  |  |  | PMLIBPARENTDIRS    => 'ARRAY', | 
| 110 |  |  |  |  |  |  | PREREQ_PM          => 'HASH', | 
| 111 |  |  |  |  |  |  | BUILD_REQUIRES     => 'HASH', | 
| 112 |  |  |  |  |  |  | CONFIGURE_REQUIRES => 'HASH', | 
| 113 |  |  |  |  |  |  | TEST_REQUIRES      => 'HASH', | 
| 114 |  |  |  |  |  |  | SKIP               => 'ARRAY', | 
| 115 |  |  |  |  |  |  | TYPEMAPS           => 'ARRAY', | 
| 116 |  |  |  |  |  |  | XS                 => 'HASH', | 
| 117 |  |  |  |  |  |  | XSBUILD            => 'HASH', | 
| 118 |  |  |  |  |  |  | VERSION            => ['version',''], | 
| 119 |  |  |  |  |  |  | _KEEP_AFTER_FLUSH  => '', | 
| 120 |  |  |  |  |  |  |  | 
| 121 |  |  |  |  |  |  | clean      => 'HASH', | 
| 122 |  |  |  |  |  |  | depend     => 'HASH', | 
| 123 |  |  |  |  |  |  | dist       => 'HASH', | 
| 124 |  |  |  |  |  |  | dynamic_lib=> 'HASH', | 
| 125 |  |  |  |  |  |  | linkext    => 'HASH', | 
| 126 |  |  |  |  |  |  | macro      => 'HASH', | 
| 127 |  |  |  |  |  |  | postamble  => 'HASH', | 
| 128 |  |  |  |  |  |  | realclean  => 'HASH', | 
| 129 |  |  |  |  |  |  | test       => 'HASH', | 
| 130 |  |  |  |  |  |  | tool_autosplit => 'HASH', | 
| 131 |  |  |  |  |  |  | ); | 
| 132 |  |  |  |  |  |  |  | 
| 133 |  |  |  |  |  |  | @Att_Sigs{keys %Recognized_Att_Keys} = ('') x keys %Recognized_Att_Keys; | 
| 134 |  |  |  |  |  |  | @Att_Sigs{keys %Special_Sigs} = values %Special_Sigs; | 
| 135 |  |  |  |  |  |  |  | 
| 136 |  |  |  |  |  |  | my($att) = @_; | 
| 137 |  |  |  |  |  |  | if (exists $att->{AUTHOR}) { | 
| 138 |  |  |  |  |  |  | if ($att->{AUTHOR}) { | 
| 139 |  |  |  |  |  |  | if (!ref($att->{AUTHOR})) { | 
| 140 | 290 |  |  | 290 |  | 780 | my $t = $att->{AUTHOR}; | 
| 141 | 290 | 100 |  |  |  | 1403 | $att->{AUTHOR} = [$t]; | 
| 142 | 39 | 50 |  |  |  | 4508 | } | 
| 143 | 67 | 100 |  |  |  | 131 | } else { | 
| 144 | 59 |  |  |  |  | 163 | $att->{AUTHOR} = []; | 
| 145 | 3 |  |  |  |  | 22 | } | 
| 146 |  |  |  |  |  |  | } | 
| 147 |  |  |  |  |  |  | } | 
| 148 | 0 |  |  |  |  | 0 |  | 
| 149 |  |  |  |  |  |  | my($att) = @_; | 
| 150 |  |  |  |  |  |  |  | 
| 151 |  |  |  |  |  |  | foreach my $key (sort keys %$att) { | 
| 152 |  |  |  |  |  |  | my $val = $att->{$key}; | 
| 153 |  |  |  |  |  |  | my $sig = $Att_Sigs{$key}; | 
| 154 | 129 |  |  | 185 |  | 337 | unless( defined $sig ) { | 
| 155 |  |  |  |  |  |  | warn "WARNING: $key is not a known parameter.\n"; | 
| 156 | 129 |  |  |  |  | 1021 | next; | 
| 157 | 378 |  |  |  |  | 984 | } | 
| 158 | 406 |  |  |  |  | 1570 |  | 
| 159 | 406 | 100 |  |  |  | 1157 | my @sigs   = ref $sig ? @$sig : $sig; | 
| 160 | 58 |  |  |  |  | 169 | my $given  = ref $val; | 
| 161 | 58 |  |  |  |  | 242 | unless( grep { _is_of_type($val, $_) } @sigs ) { | 
| 162 |  |  |  |  |  |  | my $takes = join " or ", map { _format_att($_) } @sigs; | 
| 163 |  |  |  |  |  |  |  | 
| 164 | 432 | 100 |  |  |  | 1758 | my $has = _format_att($given); | 
| 165 | 376 |  |  |  |  | 901 | warn "WARNING: $key takes a $takes not a $has.\n". | 
| 166 | 376 | 100 |  |  |  | 695 | "         Please inform the author.\n"; | 
|  | 448 |  |  |  |  | 1064 |  | 
| 167 | 61 |  |  |  |  | 109 | } | 
|  | 64 |  |  |  |  | 116 |  | 
| 168 |  |  |  |  |  |  | } | 
| 169 | 61 |  |  |  |  | 116 | } | 
| 170 | 5 |  |  |  |  | 135 |  | 
| 171 |  |  |  |  |  |  |  | 
| 172 |  |  |  |  |  |  | # Check if a given thing is a reference or instance of $type | 
| 173 |  |  |  |  |  |  | my($thing, $type) = @_; | 
| 174 |  |  |  |  |  |  |  | 
| 175 |  |  |  |  |  |  | return 1 if ref $thing eq $type; | 
| 176 |  |  |  |  |  |  |  | 
| 177 |  |  |  |  |  |  | local $SIG{__DIE__}; | 
| 178 |  |  |  |  |  |  | return 1 if eval{ $thing->isa($type) }; | 
| 179 | 402 |  |  | 430 |  | 5558 |  | 
| 180 |  |  |  |  |  |  | return 0; | 
| 181 | 402 | 100 |  |  |  | 1740 | } | 
| 182 |  |  |  |  |  |  |  | 
| 183 | 28 |  |  |  |  | 93 |  | 
| 184 | 84 | 100 |  |  |  | 137 | my $given = shift; | 
|  | 84 |  |  |  |  | 562 |  | 
| 185 |  |  |  |  |  |  |  | 
| 186 | 27 |  |  |  |  | 119 | return $given eq ''        ? "string/number" | 
| 187 |  |  |  |  |  |  | : uc $given eq $given ? "$given reference" | 
| 188 |  |  |  |  |  |  | :                       "$given object" | 
| 189 |  |  |  |  |  |  | ; | 
| 190 |  |  |  |  |  |  | } | 
| 191 | 13 |  |  | 69 |  | 40 |  | 
| 192 |  |  |  |  |  |  |  | 
| 193 | 13 | 100 |  |  |  | 92 | my($mess, $def) = @_; | 
|  |  | 100 |  |  |  |  |  | 
| 194 |  |  |  |  |  |  | confess("prompt function called without an argument") | 
| 195 |  |  |  |  |  |  | unless defined $mess; | 
| 196 |  |  |  |  |  |  |  | 
| 197 |  |  |  |  |  |  | my $isa_tty = -t STDIN && (-t STDOUT || !(-f STDOUT || -c STDOUT)) ; | 
| 198 |  |  |  |  |  |  |  | 
| 199 |  |  |  |  |  |  | my $dispdef = defined $def ? "[$def] " : " "; | 
| 200 |  |  |  |  |  |  | $def = defined $def ? $def : ""; | 
| 201 | 5 |  |  | 5 | 1 | 3189 |  | 
| 202 | 5 | 100 |  |  |  | 213 | local $|=1; | 
| 203 |  |  |  |  |  |  | local $\; | 
| 204 |  |  |  |  |  |  | print "$mess $dispdef"; | 
| 205 | 4 |  | 33 |  |  | 23 |  | 
| 206 |  |  |  |  |  |  | my $ans; | 
| 207 | 4 | 100 |  |  |  | 12 | if ($ENV{PERL_MM_USE_DEFAULT} || (!$isa_tty && eof STDIN)) { | 
| 208 | 4 | 100 |  |  |  | 9 | print "$def\n"; | 
| 209 |  |  |  |  |  |  | } | 
| 210 | 4 |  |  |  |  | 14 | else { | 
| 211 | 4 |  |  |  |  | 8 | $ans = <STDIN>; | 
| 212 | 4 |  |  |  |  | 18 | if( defined $ans ) { | 
| 213 |  |  |  |  |  |  | $ans =~ s{\015?\012$}{}; | 
| 214 | 4 |  |  |  |  | 23 | } | 
| 215 | 4 | 100 | 33 |  |  | 18 | else { # user hit ctrl-D | 
|  |  |  | 66 |  |  |  |  | 
| 216 | 3 |  |  |  |  | 7 | print "\n"; | 
| 217 |  |  |  |  |  |  | } | 
| 218 |  |  |  |  |  |  | } | 
| 219 | 1 |  |  |  |  | 10 |  | 
| 220 | 1 | 50 |  |  |  | 14 | return (!defined $ans || $ans eq '') ? $def : $ans; | 
| 221 | 1 |  |  |  |  | 3 | } | 
| 222 |  |  |  |  |  |  |  | 
| 223 |  |  |  |  |  |  | die "OS unsupported\n"; | 
| 224 | 0 |  |  |  |  | 0 | } | 
| 225 |  |  |  |  |  |  |  | 
| 226 |  |  |  |  |  |  | my($self) = @_; | 
| 227 |  |  |  |  |  |  | use Cwd qw(cwd abs_path); | 
| 228 | 4 | 100 | 66 |  |  | 36 | my $pwd = cwd() || die "Can't figure out your cwd!"; | 
| 229 |  |  |  |  |  |  |  | 
| 230 |  |  |  |  |  |  | local @INC = map eval {abs_path($_) if -e} || $_, @INC; | 
| 231 |  |  |  |  |  |  | push @INC, '.';     # '.' has to always be at the end of @INC | 
| 232 | 1 |  |  | 1 | 1 | 51 |  | 
| 233 |  |  |  |  |  |  | foreach my $dir (@{$self->{DIR}}){ | 
| 234 |  |  |  |  |  |  | my($abs) = $self->catdir($pwd,$dir); | 
| 235 |  |  |  |  |  |  | eval { $self->eval_in_x($abs); }; | 
| 236 | 59 |  |  | 59 | 0 | 3716 | last if $@; | 
| 237 | 52 |  |  | 52 |  | 418 | } | 
|  | 52 |  |  |  |  | 92 |  | 
|  | 52 |  |  |  |  | 108442 |  | 
| 238 | 59 |  | 50 |  |  | 191226 | chdir $pwd; | 
| 239 |  |  |  |  |  |  | die $@ if $@; | 
| 240 | 59 |  | 66 |  |  | 1140 | } | 
| 241 | 59 |  |  |  |  | 544 |  | 
| 242 |  |  |  |  |  |  | my($self,$dir) = @_; | 
| 243 | 59 |  |  |  |  | 247 | chdir $dir or carp("Couldn't change to directory $dir: $!"); | 
|  | 59 |  |  |  |  | 571 |  | 
| 244 | 59 |  |  |  |  | 1040 |  | 
| 245 | 59 |  |  |  |  | 233 | { | 
|  | 59 |  |  |  |  | 2129 |  | 
| 246 | 59 | 100 |  |  |  | 542 | do './Makefile.PL'; | 
| 247 |  |  |  |  |  |  | if ($@) { | 
| 248 | 59 |  |  |  |  | 1144 | #         if ($@ =~ /prerequisites/) { | 
| 249 | 59 | 100 |  |  |  | 624 | #             die "MakeMaker WARNING: $@"; | 
| 250 |  |  |  |  |  |  | #         } else { | 
| 251 |  |  |  |  |  |  | #             warn "WARNING from evaluation of $dir/Makefile.PL: $@"; | 
| 252 |  |  |  |  |  |  | #         } | 
| 253 | 59 |  |  | 59 | 0 | 435 | die "ERROR from evaluation of $dir/Makefile.PL: $@"; | 
| 254 | 59 | 50 |  |  |  | 884 | } | 
| 255 |  |  |  |  |  |  | } | 
| 256 |  |  |  |  |  |  |  | 
| 257 | 59 |  |  |  |  | 323 |  | 
| 258 | 59 |  |  |  |  | 12402 | # package name for the classes into which the first object will be blessed | 
| 259 |  |  |  |  |  |  | my $PACKNAME = 'PACK000'; | 
| 260 | 59 | 100 |  |  |  | 2560 |  | 
| 261 |  |  |  |  |  |  | $Verbose ||= 0; | 
| 262 |  |  |  |  |  |  |  | 
| 263 |  |  |  |  |  |  | my @dep_macros = qw/ | 
| 264 |  |  |  |  |  |  | PERL_INCDEP        PERL_ARCHLIBDEP     PERL_ARCHIVEDEP | 
| 265 |  |  |  |  |  |  | /; | 
| 266 | 1 |  |  |  |  | 11 |  | 
| 267 |  |  |  |  |  |  | my @fs_macros = qw/ | 
| 268 |  |  |  |  |  |  | FULLPERL XSUBPPDIR | 
| 269 |  |  |  |  |  |  |  | 
| 270 |  |  |  |  |  |  | INST_ARCHLIB INST_SCRIPT INST_BIN INST_LIB INST_MAN1DIR INST_MAN3DIR | 
| 271 |  |  |  |  |  |  | INSTALLDIRS | 
| 272 |  |  |  |  |  |  | DESTDIR PREFIX INSTALL_BASE | 
| 273 |  |  |  |  |  |  | PERLPREFIX      SITEPREFIX      VENDORPREFIX | 
| 274 |  |  |  |  |  |  | INSTALLPRIVLIB  INSTALLSITELIB  INSTALLVENDORLIB | 
| 275 | 51 |  | 50 | 51 | 0 | 343 | INSTALLARCHLIB  INSTALLSITEARCH INSTALLVENDORARCH | 
| 276 |  |  |  |  |  |  | INSTALLBIN      INSTALLSITEBIN  INSTALLVENDORBIN | 
| 277 | 51 |  |  |  |  | 136 | INSTALLMAN1DIR          INSTALLMAN3DIR | 
| 278 |  |  |  |  |  |  | INSTALLSITEMAN1DIR      INSTALLSITEMAN3DIR | 
| 279 |  |  |  |  |  |  | INSTALLVENDORMAN1DIR    INSTALLVENDORMAN3DIR | 
| 280 |  |  |  |  |  |  | INSTALLSCRIPT   INSTALLSITESCRIPT  INSTALLVENDORSCRIPT | 
| 281 | 51 |  |  |  |  | 412 | PERL_LIB        PERL_ARCHLIB | 
| 282 |  |  |  |  |  |  | SITELIBEXP      SITEARCHEXP | 
| 283 |  |  |  |  |  |  |  | 
| 284 |  |  |  |  |  |  | MAKE LIBPERL_A LIB PERL_SRC PERL_INC | 
| 285 |  |  |  |  |  |  | PPM_INSTALL_EXEC PPM_UNINSTALL_EXEC | 
| 286 |  |  |  |  |  |  | PPM_INSTALL_SCRIPT PPM_UNINSTALL_SCRIPT | 
| 287 |  |  |  |  |  |  | /; | 
| 288 |  |  |  |  |  |  |  | 
| 289 |  |  |  |  |  |  | my @attrib_help = qw/ | 
| 290 |  |  |  |  |  |  |  | 
| 291 |  |  |  |  |  |  | AUTHOR ABSTRACT ABSTRACT_FROM BINARY_LOCATION | 
| 292 |  |  |  |  |  |  | C CAPI CCFLAGS CONFIG CONFIGURE DEFINE DIR DISTNAME DISTVNAME | 
| 293 |  |  |  |  |  |  | DL_FUNCS DL_VARS | 
| 294 |  |  |  |  |  |  | EXCLUDE_EXT EXE_FILES FIRST_MAKEFILE | 
| 295 |  |  |  |  |  |  | FULLPERLRUN FULLPERLRUNINST | 
| 296 |  |  |  |  |  |  | FUNCLIST H IMPORTS | 
| 297 |  |  |  |  |  |  |  | 
| 298 |  |  |  |  |  |  | INC INCLUDE_EXT LDFROM LIBS LICENSE | 
| 299 |  |  |  |  |  |  | LINKTYPE MAKEAPERL MAKEFILE MAKEFILE_OLD MAN1PODS MAN3PODS MAP_TARGET | 
| 300 |  |  |  |  |  |  | META_ADD META_MERGE MIN_PERL_VERSION BUILD_REQUIRES CONFIGURE_REQUIRES | 
| 301 |  |  |  |  |  |  | MYEXTLIB NAME NEEDS_LINKING NOECHO NO_META NO_MYMETA NO_PACKLIST NO_PERLLOCAL | 
| 302 |  |  |  |  |  |  | NORECURS NO_VC OBJECT OPTIMIZE PERL_MALLOC_OK PERL PERLMAINCC PERLRUN | 
| 303 | 52 |  |  |  |  | 794 | PERLRUNINST PERL_CORE | 
| 304 |  |  |  |  |  |  | PERM_DIR PERM_RW PERM_RWX MAGICXS | 
| 305 |  |  |  |  |  |  | PL_FILES PM PM_FILTER PMLIBDIRS PMLIBPARENTDIRS POLLUTE | 
| 306 |  |  |  |  |  |  | PREREQ_FATAL PREREQ_PM PREREQ_PRINT PRINT_PREREQ PUREPERL_ONLY | 
| 307 |  |  |  |  |  |  | SIGN SKIP TEST_REQUIRES TYPEMAPS UNINST VERSION VERSION_FROM XS | 
| 308 |  |  |  |  |  |  | XSBUILD XSMULTI XSOPT XSPROTOARG XS_VERSION | 
| 309 |  |  |  |  |  |  | clean depend dist dynamic_lib linkext macro realclean tool_autosplit | 
| 310 |  |  |  |  |  |  |  | 
| 311 |  |  |  |  |  |  | MAN1EXT MAN3EXT | 
| 312 |  |  |  |  |  |  |  | 
| 313 |  |  |  |  |  |  | MACPERL_SRC MACPERL_LIB MACLIBS_68K MACLIBS_PPC MACLIBS_SC MACLIBS_MRC | 
| 314 |  |  |  |  |  |  | MACLIBS_ALL_68K MACLIBS_ALL_PPC MACLIBS_SHARED | 
| 315 |  |  |  |  |  |  | /; | 
| 316 |  |  |  |  |  |  | push @attrib_help, @fs_macros; | 
| 317 |  |  |  |  |  |  | @macro_fsentity{@fs_macros, @dep_macros} = (1) x (@fs_macros+@dep_macros); | 
| 318 |  |  |  |  |  |  | @macro_dep{@dep_macros} = (1) x @dep_macros; | 
| 319 |  |  |  |  |  |  |  | 
| 320 |  |  |  |  |  |  | # IMPORTS is used under OS/2 and Win32 | 
| 321 |  |  |  |  |  |  |  | 
| 322 |  |  |  |  |  |  | # @Overridable is close to @MM_Sections but not identical.  The | 
| 323 |  |  |  |  |  |  | # order is important. Many subroutines declare macros. These | 
| 324 |  |  |  |  |  |  | # depend on each other. Let's try to collect the macros up front, | 
| 325 |  |  |  |  |  |  | # then pasthru, then the rules. | 
| 326 |  |  |  |  |  |  |  | 
| 327 |  |  |  |  |  |  | # MM_Sections are the sections we have to call explicitly | 
| 328 |  |  |  |  |  |  | # in Overridable we have subroutines that are used indirectly | 
| 329 |  |  |  |  |  |  |  | 
| 330 | 52 |  |  |  |  | 428 |  | 
| 331 | 52 |  |  |  |  | 1615 | @MM_Sections = | 
| 332 | 52 |  |  |  |  | 257 | qw( | 
| 333 |  |  |  |  |  |  |  | 
| 334 |  |  |  |  |  |  | post_initialize const_config constants platform_constants | 
| 335 |  |  |  |  |  |  | tool_autosplit tool_xsubpp tools_other | 
| 336 |  |  |  |  |  |  |  | 
| 337 |  |  |  |  |  |  | makemakerdflt | 
| 338 |  |  |  |  |  |  |  | 
| 339 |  |  |  |  |  |  | dist macro depend cflags const_loadlibs const_cccmd | 
| 340 |  |  |  |  |  |  | post_constants | 
| 341 |  |  |  |  |  |  |  | 
| 342 |  |  |  |  |  |  | pasthru | 
| 343 |  |  |  |  |  |  |  | 
| 344 |  |  |  |  |  |  | special_targets | 
| 345 | 52 |  |  |  |  | 578 | c_o xs_c xs_o | 
| 346 |  |  |  |  |  |  | top_targets blibdirs linkext dlsyms dynamic_bs dynamic | 
| 347 |  |  |  |  |  |  | dynamic_lib static static_lib manifypods processPL | 
| 348 |  |  |  |  |  |  | installbin subdirs | 
| 349 |  |  |  |  |  |  | clean_subdirs clean realclean_subdirs realclean | 
| 350 |  |  |  |  |  |  | metafile signature | 
| 351 |  |  |  |  |  |  | dist_basics dist_core distdir dist_test dist_ci distmeta distsignature | 
| 352 |  |  |  |  |  |  | install force perldepend makefile staticmake test ppd | 
| 353 |  |  |  |  |  |  |  | 
| 354 |  |  |  |  |  |  | ); # loses section ordering | 
| 355 |  |  |  |  |  |  |  | 
| 356 |  |  |  |  |  |  | @Overridable = @MM_Sections; | 
| 357 |  |  |  |  |  |  | push @Overridable, qw[ | 
| 358 |  |  |  |  |  |  |  | 
| 359 |  |  |  |  |  |  | libscan makeaperl needs_linking | 
| 360 |  |  |  |  |  |  | subdir_x test_via_harness test_via_script | 
| 361 |  |  |  |  |  |  |  | 
| 362 |  |  |  |  |  |  | init_VERSION init_dist init_INST init_INSTALL init_DEST init_dirscan | 
| 363 |  |  |  |  |  |  | init_PM init_MANPODS init_xs init_PERL init_DIRFILESEP init_linker | 
| 364 |  |  |  |  |  |  | ]; | 
| 365 |  |  |  |  |  |  |  | 
| 366 |  |  |  |  |  |  | push @MM_Sections, qw[ | 
| 367 |  |  |  |  |  |  |  | 
| 368 |  |  |  |  |  |  | pm_to_blib selfdocument | 
| 369 |  |  |  |  |  |  |  | 
| 370 | 52 |  |  |  |  | 408 | ]; | 
| 371 | 52 |  |  |  |  | 336 |  | 
| 372 |  |  |  |  |  |  | # Postamble needs to be the last that was always the case | 
| 373 |  |  |  |  |  |  | push @MM_Sections, "postamble"; | 
| 374 |  |  |  |  |  |  | push @Overridable, "postamble"; | 
| 375 |  |  |  |  |  |  |  | 
| 376 |  |  |  |  |  |  | # All sections are valid keys. | 
| 377 |  |  |  |  |  |  | @Recognized_Att_Keys{@MM_Sections} = (1) x @MM_Sections; | 
| 378 |  |  |  |  |  |  |  | 
| 379 |  |  |  |  |  |  | # we will use all these variables in the Makefile | 
| 380 | 52 |  |  |  |  | 186 | @Get_from_Config = | 
| 381 |  |  |  |  |  |  | qw( | 
| 382 |  |  |  |  |  |  | ar cc cccdlflags ccdlflags cpprun dlext dlsrc exe_ext full_ar ld | 
| 383 |  |  |  |  |  |  | lddlflags ldflags libc lib_ext obj_ext osname osvers ranlib | 
| 384 |  |  |  |  |  |  | sitelibexp sitearchexp so | 
| 385 |  |  |  |  |  |  | ); | 
| 386 |  |  |  |  |  |  |  | 
| 387 | 52 |  |  |  |  | 117 | # 5.5.3 doesn't have any concept of vendor libs | 
| 388 | 52 |  |  |  |  | 96 | push @Get_from_Config, qw( vendorarchexp vendorlibexp ) if "$]" >= 5.006; | 
| 389 |  |  |  |  |  |  |  | 
| 390 |  |  |  |  |  |  | foreach my $item (@attrib_help){ | 
| 391 | 52 |  |  |  |  | 1789 | $Recognized_Att_Keys{$item} = 1; | 
| 392 |  |  |  |  |  |  | } | 
| 393 |  |  |  |  |  |  | foreach my $item (@Get_from_Config) { | 
| 394 | 52 |  |  |  |  | 319 | $Recognized_Att_Keys{uc $item} = $Config{$item}; | 
| 395 |  |  |  |  |  |  | print "Attribute '\U$item\E' => '$Config{$item}'\n" | 
| 396 |  |  |  |  |  |  | if ($Verbose >= 2); | 
| 397 |  |  |  |  |  |  | } | 
| 398 |  |  |  |  |  |  |  | 
| 399 |  |  |  |  |  |  | # | 
| 400 |  |  |  |  |  |  | # When we eval a Makefile.PL in a subdirectory, that one will ask | 
| 401 |  |  |  |  |  |  | # us (the parent) for the values and will prepend "..", so that | 
| 402 | 52 | 50 |  |  |  | 475 | # all files to be installed end up below OUR ./blib | 
| 403 |  |  |  |  |  |  | # | 
| 404 | 52 |  |  |  |  | 197 | @Prepend_parent = qw( | 
| 405 | 7702 |  |  |  |  | 12616 | INST_BIN INST_LIB INST_ARCHLIB INST_SCRIPT | 
| 406 |  |  |  |  |  |  | MAP_TARGET INST_MAN1DIR INST_MAN3DIR PERL_SRC | 
| 407 | 52 |  |  |  |  | 159 | PERL FULLPERL | 
| 408 | 1174 |  |  |  |  | 2695 | ); | 
| 409 | 1324 | 50 |  |  |  | 2068 | } | 
| 410 |  |  |  |  |  |  |  | 
| 411 |  |  |  |  |  |  | return eval { | 
| 412 |  |  |  |  |  |  | require CPAN::Meta::Requirements; | 
| 413 |  |  |  |  |  |  | CPAN::Meta::Requirements->VERSION(2.130); | 
| 414 |  |  |  |  |  |  | # Make sure vstrings can be handled. Some versions of CMR require B to | 
| 415 |  |  |  |  |  |  | # do this, which won't be available in miniperl. | 
| 416 |  |  |  |  |  |  | CPAN::Meta::Requirements->new->add_string_requirement('Module' => v1.2); | 
| 417 |  |  |  |  |  |  | 1; | 
| 418 | 52 |  |  |  |  | 490 | }; | 
| 419 |  |  |  |  |  |  | } | 
| 420 |  |  |  |  |  |  |  | 
| 421 |  |  |  |  |  |  | my($class,$self) = @_; | 
| 422 |  |  |  |  |  |  | my($key); | 
| 423 |  |  |  |  |  |  |  | 
| 424 |  |  |  |  |  |  | _convert_compat_attrs($self) if defined $self && $self; | 
| 425 |  |  |  |  |  |  |  | 
| 426 | 682 |  |  | 660 |  | 2520 | # Store the original args passed to WriteMakefile() | 
| 427 | 682 |  |  |  |  | 10411 | foreach my $k (keys %$self) { | 
| 428 | 660 |  |  |  |  | 56051 | $self->{ARGS}{$k} = $self->{$k}; | 
| 429 |  |  |  |  |  |  | } | 
| 430 |  |  |  |  |  |  |  | 
| 431 | 800 |  |  |  |  | 4787 | $self = {} unless defined $self; | 
| 432 | 800 |  |  |  |  | 92987 |  | 
| 433 |  |  |  |  |  |  | # Temporarily bless it into MM so it can be used as an | 
| 434 |  |  |  |  |  |  | # object.  It will be blessed into a temp package later. | 
| 435 |  |  |  |  |  |  | bless $self, "MM"; | 
| 436 |  |  |  |  |  |  |  | 
| 437 | 273 |  |  | 273 | 1 | 79116 | # Cleanup all the module requirement bits | 
| 438 | 203 |  |  |  |  | 799 | my %key2cmr; | 
| 439 |  |  |  |  |  |  | for my $key (qw(PREREQ_PM BUILD_REQUIRES CONFIGURE_REQUIRES TEST_REQUIRES)) { | 
| 440 | 203 | 50 | 33 |  |  | 12050 | $self->{$key}      ||= {}; | 
| 441 |  |  |  |  |  |  | if (_has_cpan_meta_requirements) { | 
| 442 |  |  |  |  |  |  | my $cmr = CPAN::Meta::Requirements->from_string_hash( | 
| 443 | 160 |  |  |  |  | 783 | $self->{$key}, | 
| 444 | 413 |  |  |  |  | 1359 | { | 
| 445 |  |  |  |  |  |  | bad_version_hook => sub { | 
| 446 |  |  |  |  |  |  | #no warnings 'numeric'; # module doesn't use warnings | 
| 447 | 160 | 50 |  |  |  | 715 | my $fallback; | 
| 448 |  |  |  |  |  |  | if ( $_[0] =~ m!^[-+]?[0-9]*\.?[0-9]+([eE][-+]?[0-9]+)?$! ) { | 
| 449 |  |  |  |  |  |  | $fallback = sprintf "%f", $_[0]; | 
| 450 |  |  |  |  |  |  | } else { | 
| 451 | 160 |  |  |  |  | 702 | ($fallback) = $_[0] ? ($_[0] =~ /^([0-9.]+)/) : 0; | 
| 452 |  |  |  |  |  |  | $fallback += 0; | 
| 453 |  |  |  |  |  |  | carp "Unparsable version '$_[0]' for prerequisite $_[1] treated as $fallback"; | 
| 454 | 188 |  |  |  |  | 451 | } | 
| 455 | 160 |  |  |  |  | 455 | version->new($fallback); | 
| 456 | 556 |  | 100 |  |  | 4069 | }, | 
| 457 | 556 | 100 |  |  |  | 1308 | }, | 
| 458 |  |  |  |  |  |  | ); | 
| 459 |  |  |  |  |  |  | $self->{$key} = $cmr->as_string_hash; | 
| 460 |  |  |  |  |  |  | $key2cmr{$key} = $cmr; | 
| 461 |  |  |  |  |  |  | } else { | 
| 462 |  |  |  |  |  |  | for my $module (sort keys %{ $self->{$key} }) { | 
| 463 | 112 |  |  | 28 |  | 563 | my $version = $self->{$key}->{$module}; | 
| 464 | 112 | 100 |  |  |  | 288 | my $fallback = 0; | 
| 465 | 56 |  |  |  |  | 362 | if (!defined($version) or !length($version)) { | 
| 466 |  |  |  |  |  |  | carp "Undefined requirement for $module treated as '0' (CPAN::Meta::Requirements not available)"; | 
| 467 | 3 | 50 |  |  |  | 390 | } | 
| 468 | 3 |  |  |  |  | 24 | elsif ($version =~ /^\d+(?:\.\d+(?:_\d+)*)?$/) { | 
| 469 | 1 |  |  |  |  | 23 | next; | 
| 470 |  |  |  |  |  |  | } | 
| 471 | 2 |  |  |  |  | 14 | else { | 
| 472 |  |  |  |  |  |  | if ( $version =~ m!^[-+]?[0-9]*\.?[0-9]+([eE][-+]?[0-9]+)?$! ) { | 
| 473 |  |  |  |  |  |  | $fallback = sprintf "%f", $version; | 
| 474 | 556 |  |  |  |  | 4030 | } else { | 
| 475 | 530 |  |  |  |  | 12018 | ($fallback) = $version ? ($version =~ /^([0-9.]+)/) : 0; | 
| 476 | 530 |  |  |  |  | 7168 | $fallback += 0; | 
| 477 |  |  |  |  |  |  | carp "Unparsable version '$version' for prerequisite $module treated as $fallback (CPAN::Meta::Requirements not available)"; | 
| 478 | 3 |  |  |  |  | 41 | } | 
|  | 56 |  |  |  |  | 3146 |  | 
| 479 | 56 |  |  |  |  | 1469 | } | 
| 480 | 56 |  |  |  |  | 87 | $self->{$key}->{$module} = $fallback; | 
| 481 | 56 | 100 | 100 |  |  | 157 | } | 
|  |  | 100 |  |  |  |  |  | 
| 482 | 14 |  |  |  |  | 33 | } | 
| 483 |  |  |  |  |  |  | } | 
| 484 |  |  |  |  |  |  |  | 
| 485 | 14 |  |  |  |  | 22 | if ("@ARGV" =~ /\bPREREQ_PRINT\b/) { | 
| 486 |  |  |  |  |  |  | $self->_PREREQ_PRINT; | 
| 487 |  |  |  |  |  |  | } | 
| 488 | 14 | 100 |  |  |  | 200 |  | 
| 489 | 2 |  |  |  |  | 509 | # PRINT_PREREQ is RedHatism. | 
| 490 |  |  |  |  |  |  | if ("@ARGV" =~ /\bPRINT_PREREQ\b/) { | 
| 491 | 3 | 50 |  |  |  | 18 | $self->_PRINT_PREREQ; | 
| 492 | 9 |  |  |  |  | 113 | } | 
| 493 | 1 |  |  |  |  | 23 |  | 
| 494 |  |  |  |  |  |  | print "MakeMaker (v$VERSION)\n" if $Verbose; | 
| 495 |  |  |  |  |  |  | if (-f "MANIFEST" && ! -f "Makefile" && ! $UNDER_CORE){ | 
| 496 | 8 |  |  |  |  | 70 | check_manifest(); | 
| 497 |  |  |  |  |  |  | } | 
| 498 |  |  |  |  |  |  |  | 
| 499 |  |  |  |  |  |  | check_hints($self); | 
| 500 |  |  |  |  |  |  |  | 
| 501 | 140 | 50 |  |  |  | 953 | if ( $self->{MIN_PERL_VERSION}) { | 
| 502 | 8 |  |  |  |  | 2159 | my $perl_version = $self->{MIN_PERL_VERSION}; | 
| 503 |  |  |  |  |  |  | if (ref $perl_version) { | 
| 504 |  |  |  |  |  |  | # assume a version object | 
| 505 |  |  |  |  |  |  | } | 
| 506 | 143 | 50 |  |  |  | 907 | else { | 
| 507 | 28 |  |  |  |  | 193 | $perl_version = eval { | 
| 508 |  |  |  |  |  |  | local $SIG{__WARN__} = sub { | 
| 509 |  |  |  |  |  |  | # simulate "use warnings FATAL => 'all'" for vintage perls | 
| 510 | 132 | 50 |  |  |  | 379 | die @_; | 
| 511 | 160 | 0 | 33 |  |  | 2303 | }; | 
|  |  |  | 33 |  |  |  |  | 
| 512 | 0 |  |  |  |  | 0 | version->new( $perl_version )->numify; | 
| 513 |  |  |  |  |  |  | }; | 
| 514 |  |  |  |  |  |  | $perl_version =~ tr/_//d | 
| 515 | 160 |  |  |  |  | 1246 | if defined $perl_version; | 
| 516 |  |  |  |  |  |  | } | 
| 517 | 160 | 100 |  |  |  | 805 |  | 
| 518 | 7 |  |  |  |  | 29 | if (!defined $perl_version) { | 
| 519 | 35 | 50 |  |  |  | 258 | # should this be a warning? | 
| 520 |  |  |  |  |  |  | die sprintf <<'END', $self->{MIN_PERL_VERSION}; | 
| 521 |  |  |  |  |  |  | MakeMaker FATAL: MIN_PERL_VERSION (%s) is not in a recognized format. | 
| 522 |  |  |  |  |  |  | Recommended is a quoted numerical value like '5.005' or '5.008001'. | 
| 523 | 35 |  |  |  |  | 99 | END | 
| 524 |  |  |  |  |  |  | } | 
| 525 |  |  |  |  |  |  | elsif ($perl_version > "$]") { | 
| 526 | 0 |  |  | 3 |  | 0 | my $message = sprintf <<'END', $perl_version, $]; | 
| 527 | 7 |  |  |  |  | 61 | Perl version %s or higher required. We run %s. | 
| 528 | 7 |  |  |  |  | 75 | END | 
| 529 |  |  |  |  |  |  | if ($self->{PREREQ_FATAL}) { | 
| 530 | 7 | 100 |  |  |  | 28 | die "MakeMaker FATAL: $message"; | 
| 531 |  |  |  |  |  |  | } | 
| 532 |  |  |  |  |  |  | else { | 
| 533 |  |  |  |  |  |  | warn "Warning: $message"; | 
| 534 | 7 | 100 |  |  |  | 37 | } | 
|  |  | 100 |  |  |  |  |  | 
| 535 |  |  |  |  |  |  | } | 
| 536 | 1 |  |  |  |  | 22 |  | 
| 537 |  |  |  |  |  |  | $self->{MIN_PERL_VERSION} = $perl_version; | 
| 538 |  |  |  |  |  |  | } | 
| 539 |  |  |  |  |  |  |  | 
| 540 |  |  |  |  |  |  | my %configure_att;         # record &{$self->{CONFIGURE}} attributes | 
| 541 |  |  |  |  |  |  | my(%initial_att) = %$self; # record initial attributes | 
| 542 | 2 |  |  |  |  | 13 |  | 
| 543 |  |  |  |  |  |  | my(%unsatisfied) = (); | 
| 544 |  |  |  |  |  |  | my %prereq2version; | 
| 545 | 2 | 100 |  |  |  | 11 | my $cmr; | 
| 546 | 1 |  |  |  |  | 23 | if (_has_cpan_meta_requirements) { | 
| 547 |  |  |  |  |  |  | $cmr = CPAN::Meta::Requirements->new; | 
| 548 |  |  |  |  |  |  | for my $key (qw(PREREQ_PM BUILD_REQUIRES CONFIGURE_REQUIRES TEST_REQUIRES)) { | 
| 549 | 1 |  |  |  |  | 25 | $cmr->add_requirements($key2cmr{$key}) if $key2cmr{$key}; | 
| 550 |  |  |  |  |  |  | } | 
| 551 |  |  |  |  |  |  | foreach my $prereq ($cmr->required_modules) { | 
| 552 |  |  |  |  |  |  | $prereq2version{$prereq} = $cmr->requirements_for_module($prereq); | 
| 553 | 5 |  |  |  |  | 18 | } | 
| 554 |  |  |  |  |  |  | } else { | 
| 555 |  |  |  |  |  |  | for my $key (qw(PREREQ_PM BUILD_REQUIRES CONFIGURE_REQUIRES TEST_REQUIRES)) { | 
| 556 | 130 |  |  |  |  | 267 | next unless my $module2version = $self->{$key}; | 
| 557 | 130 |  |  |  |  | 1069 | $prereq2version{$_} = $module2version->{$_} for keys %$module2version; | 
| 558 |  |  |  |  |  |  | } | 
| 559 | 130 |  |  |  |  | 377 | } | 
| 560 | 158 |  |  |  |  | 309 | foreach my $prereq (sort keys %prereq2version) { | 
| 561 |  |  |  |  |  |  | my $required_version = $prereq2version{$prereq}; | 
| 562 | 158 | 100 |  |  |  | 465 |  | 
| 563 | 158 |  |  |  |  | 770 | my $pr_version = 0; | 
| 564 | 158 |  |  |  |  | 1819 | my $installed_file; | 
| 565 | 548 | 50 |  |  |  | 5120 |  | 
| 566 |  |  |  |  |  |  | if ( $prereq eq 'perl' ) { | 
| 567 | 144 |  |  |  |  | 1159 | if ( defined $required_version && $required_version =~ /^v?[\d_\.]+$/ | 
| 568 | 28 |  |  |  |  | 356 | || $required_version !~ /^v?[\d_\.]+$/ ) { | 
| 569 |  |  |  |  |  |  | require version; | 
| 570 |  |  |  |  |  |  | my $normal = eval { version->new( $required_version ) }; | 
| 571 | 56 |  |  |  |  | 1483 | $required_version = $normal if defined $normal; | 
| 572 | 14 | 50 |  |  |  | 113 | } | 
| 573 | 14 |  |  |  |  | 85 | $installed_file = $prereq; | 
| 574 |  |  |  |  |  |  | $pr_version = $]; | 
| 575 |  |  |  |  |  |  | } | 
| 576 | 144 |  |  |  |  | 1488 | else { | 
| 577 | 70 |  |  |  |  | 160 | $installed_file = MM->_installed_file_for_module($prereq); | 
| 578 |  |  |  |  |  |  | $pr_version = MM->parse_version($installed_file) if $installed_file; | 
| 579 | 70 |  |  |  |  | 144 | $pr_version = 0 if $pr_version eq 'undef'; | 
| 580 | 42 |  |  |  |  | 648 | if ( !eval { version->new( $pr_version ); 1 } ) { | 
| 581 |  |  |  |  |  |  | #no warnings 'numeric'; # module doesn't use warnings | 
| 582 | 42 | 50 |  |  |  | 148 | my $fallback; | 
| 583 | 28 | 0 | 0 |  |  | 56 | if ( $pr_version =~ m!^[-+]?[0-9]*\.?[0-9]+([eE][-+]?[0-9]+)?$! ) { | 
|  |  |  | 0 |  |  |  |  | 
| 584 |  |  |  |  |  |  | $fallback = sprintf '%f', $pr_version; | 
| 585 | 28 |  |  |  |  | 36 | } else { | 
| 586 | 28 |  |  |  |  | 70 | ($fallback) = $pr_version ? ($pr_version =~ /^([0-9.]+)/) : 0; | 
|  | 0 |  |  |  |  | 0 |  | 
| 587 | 0 | 0 |  |  |  | 0 | $fallback += 0; | 
| 588 |  |  |  |  |  |  | carp "Unparsable version '$pr_version' for installed prerequisite $prereq treated as $fallback"; | 
| 589 | 0 |  |  |  |  | 0 | } | 
| 590 | 0 |  |  |  |  | 0 | $pr_version = $fallback; | 
| 591 |  |  |  |  |  |  | } | 
| 592 |  |  |  |  |  |  | } | 
| 593 | 14 |  |  |  |  | 75 |  | 
| 594 | 14 | 100 |  |  |  | 73 | # convert X.Y_Z alpha version #s to X.YZ for easier comparisons | 
| 595 | 14 | 50 |  |  |  | 50 | $pr_version =~ s/(\d+)\.(\d+)_(\d+)/$1.$2$3/; | 
| 596 | 42 | 50 |  |  |  | 123 |  | 
|  | 42 |  |  |  |  | 150 |  | 
|  | 42 |  |  |  |  | 112 |  | 
| 597 |  |  |  |  |  |  | if (!$installed_file) { | 
| 598 | 28 |  |  |  |  | 44 | warn sprintf "Warning: prerequisite %s %s not found.\n", | 
| 599 | 28 | 0 |  |  |  | 173 | $prereq, $required_version | 
| 600 | 28 |  |  |  |  | 96 | unless $self->{PREREQ_FATAL} | 
| 601 |  |  |  |  |  |  | or $UNDER_CORE; | 
| 602 | 0 | 0 |  |  |  | 0 |  | 
| 603 | 0 |  |  |  |  | 0 | $unsatisfied{$prereq} = 'not installed'; | 
| 604 | 0 |  |  |  |  | 0 | } | 
| 605 |  |  |  |  |  |  | elsif ( | 
| 606 | 0 |  |  |  |  | 0 | $cmr | 
| 607 |  |  |  |  |  |  | ? !$cmr->accepts_module($prereq, $pr_version) | 
| 608 |  |  |  |  |  |  | : $required_version > $pr_version | 
| 609 |  |  |  |  |  |  | ) { | 
| 610 |  |  |  |  |  |  | warn sprintf "Warning: prerequisite %s %s not found. We have %s.\n", | 
| 611 | 14 |  |  |  |  | 31 | $prereq, $required_version, ($pr_version || 'unknown version') | 
| 612 |  |  |  |  |  |  | unless $self->{PREREQ_FATAL} | 
| 613 | 14 | 50 |  |  |  | 60 | or $UNDER_CORE; | 
|  |  | 100 |  |  |  |  |  | 
|  |  | 100 |  |  |  |  |  | 
| 614 |  |  |  |  |  |  |  | 
| 615 |  |  |  |  |  |  | $unsatisfied{$prereq} = $required_version || 'unknown version' ; | 
| 616 |  |  |  |  |  |  | } | 
| 617 | 9 | 50 | 66 |  |  | 294 | } | 
| 618 |  |  |  |  |  |  |  | 
| 619 | 37 |  |  |  |  | 256 | if (%unsatisfied && $self->{PREREQ_FATAL}){ | 
| 620 |  |  |  |  |  |  | my $failedprereqs = join "\n", map {"    $_ $unsatisfied{$_}"} | 
| 621 |  |  |  |  |  |  | sort { lc $a cmp lc $b } keys %unsatisfied; | 
| 622 |  |  |  |  |  |  | die <<"END"; | 
| 623 |  |  |  |  |  |  | MakeMaker FATAL: prerequisites not found. | 
| 624 |  |  |  |  |  |  | $failedprereqs | 
| 625 |  |  |  |  |  |  |  | 
| 626 |  |  |  |  |  |  | Please install these modules first and rerun 'perl Makefile.PL'. | 
| 627 |  |  |  |  |  |  | END | 
| 628 |  |  |  |  |  |  | } | 
| 629 | 31 | 50 | 50 |  |  | 326 |  | 
|  |  |  | 66 |  |  |  |  | 
| 630 |  |  |  |  |  |  | if (defined $self->{CONFIGURE}) { | 
| 631 | 31 |  | 50 |  |  | 724 | if (ref $self->{CONFIGURE} eq 'CODE') { | 
| 632 |  |  |  |  |  |  | %configure_att = %{&{$self->{CONFIGURE}}}; | 
| 633 |  |  |  |  |  |  | _convert_compat_attrs(\%configure_att); | 
| 634 |  |  |  |  |  |  | $self = { %$self, %configure_att }; | 
| 635 | 158 | 100 | 100 |  |  | 853 | } else { | 
| 636 | 4 |  |  |  |  | 15 | croak "Attribute 'CONFIGURE' to WriteMakefile() not a code reference\n"; | 
| 637 | 2 |  |  |  |  | 15 | } | 
|  | 31 |  |  |  |  | 230 |  | 
| 638 | 2 |  |  |  |  | 45 | } | 
| 639 |  |  |  |  |  |  |  | 
| 640 |  |  |  |  |  |  | my $newclass = ++$PACKNAME; | 
| 641 |  |  |  |  |  |  | local @Parent = @Parent;    # Protect against non-local exits | 
| 642 |  |  |  |  |  |  | { | 
| 643 |  |  |  |  |  |  | print "Blessing Object into class [$newclass]\n" if $Verbose>=2; | 
| 644 |  |  |  |  |  |  | mv_all_methods("MY",$newclass); | 
| 645 |  |  |  |  |  |  | bless $self, $newclass; | 
| 646 | 128 | 100 |  |  |  | 434 | push @Parent, $self; | 
| 647 | 1 | 50 |  |  |  | 4 | require ExtUtils::MY; | 
| 648 | 1 |  |  |  |  | 3 |  | 
|  | 29 |  |  |  |  | 76 |  | 
|  | 1 |  |  |  |  | 2 |  | 
| 649 | 1 |  |  |  |  | 9 | no strict 'refs';   ## no critic; | 
| 650 | 1 |  |  |  |  | 5 | @{"$newclass\:\:ISA"} = 'MM'; | 
| 651 |  |  |  |  |  |  | } | 
| 652 | 0 |  |  |  |  | 0 |  | 
| 653 |  |  |  |  |  |  | if (defined $Parent[-2]){ | 
| 654 |  |  |  |  |  |  | $self->{PARENT} = $Parent[-2]; | 
| 655 |  |  |  |  |  |  | for my $key (@Prepend_parent) { | 
| 656 | 128 |  |  |  |  | 774 | next unless defined $self->{PARENT}{$key}; | 
| 657 | 128 |  |  |  |  | 745 |  | 
| 658 |  |  |  |  |  |  | # Don't stomp on WriteMakefile() args. | 
| 659 | 128 | 50 |  |  |  | 268 | next if defined $self->{ARGS}{$key} and | 
|  | 156 |  |  |  |  | 449 |  | 
| 660 | 156 |  |  |  |  | 957 | $self->{ARGS}{$key} eq $self->{$key}; | 
| 661 | 156 |  |  |  |  | 1256 |  | 
| 662 | 156 |  |  |  |  | 520 | $self->{$key} = $self->{PARENT}{$key}; | 
| 663 | 156 |  |  |  |  | 942 |  | 
| 664 |  |  |  |  |  |  | if ($Is_VMS && $key =~ /PERL$/) { | 
| 665 | 52 |  |  | 52 |  | 410 | # PERL or FULLPERL will be a command verb or even a | 
|  | 52 |  |  |  |  | 90 |  | 
|  | 52 |  |  |  |  | 102063 |  | 
| 666 | 156 |  |  |  |  | 450 | # command with an argument instead of a full file | 
|  | 156 |  |  |  |  | 8114 |  | 
| 667 |  |  |  |  |  |  | # specification under VMS.  So, don't turn the command | 
| 668 |  |  |  |  |  |  | # into a filespec, but do add a level to the path of | 
| 669 | 156 | 100 |  |  |  | 810 | # the argument if not already absolute. | 
| 670 | 85 |  |  |  |  | 1017 | my @cmd = split /\s+/, $self->{$key}; | 
| 671 | 85 |  |  |  |  | 1905 | $cmd[1] = $self->catfile('[-]',$cmd[1]) | 
| 672 | 598 | 100 |  |  |  | 1495 | unless (@cmd < 2) || $self->file_name_is_absolute($cmd[1]); | 
| 673 |  |  |  |  |  |  | $self->{$key} = join(' ', @cmd); | 
| 674 |  |  |  |  |  |  | } else { | 
| 675 |  |  |  |  |  |  | my $value = $self->{$key}; | 
| 676 | 513 | 50 | 33 |  |  | 1116 | # not going to test in FS so only stripping start | 
| 677 |  |  |  |  |  |  | $value =~ s/"// if $key =~ /PERL$/ and $self->is_make_type('dmake'); | 
| 678 | 513 |  |  |  |  | 2161 | $value =~ s/^"// if $key =~ /PERL$/; | 
| 679 |  |  |  |  |  |  | $value = $self->catdir("..", $value) | 
| 680 | 513 | 50 | 33 |  |  | 1313 | unless $self->file_name_is_absolute($value); | 
| 681 |  |  |  |  |  |  | $value = qq{"$value} if $key =~ /PERL$/; | 
| 682 |  |  |  |  |  |  | $self->{$key} = $value; | 
| 683 |  |  |  |  |  |  | } | 
| 684 |  |  |  |  |  |  | } | 
| 685 |  |  |  |  |  |  | if ($self->{PARENT}) { | 
| 686 | 0 |  |  |  |  | 0 | $self->{PARENT}->{CHILDREN}->{$newclass} = $self; | 
| 687 | 0 | 0 | 0 |  |  | 0 | foreach my $opt (qw(POLLUTE PERL_CORE LINKTYPE AR FULL_AR CC CCFLAGS | 
| 688 |  |  |  |  |  |  | OPTIMIZE LD LDDLFLAGS LDFLAGS PERL_ARCHLIB DESTDIR)) { | 
| 689 | 0 |  |  |  |  | 0 | if (exists $self->{PARENT}->{$opt} | 
| 690 |  |  |  |  |  |  | and not exists $self->{$opt}) | 
| 691 | 513 |  |  |  |  | 819 | { | 
| 692 |  |  |  |  |  |  | # inherit, but only if already unspecified | 
| 693 | 513 | 50 | 66 |  |  | 3591 | $self->{$opt} = $self->{PARENT}->{$opt}; | 
| 694 | 513 | 100 |  |  |  | 1569 | } | 
| 695 | 513 | 100 |  |  |  | 5200 | } | 
| 696 |  |  |  |  |  |  | } | 
| 697 | 513 | 100 |  |  |  | 1517 | my @fm = grep /^FIRST_MAKEFILE=/, @ARGV; | 
| 698 | 513 |  |  |  |  | 1069 | parse_args($self,@fm) if @fm; | 
| 699 |  |  |  |  |  |  | } | 
| 700 |  |  |  |  |  |  | else { | 
| 701 | 57 | 50 |  |  |  | 241 | parse_args($self, _shellwords($ENV{PERL_MM_OPT} || ''),@ARGV); | 
| 702 | 57 |  |  |  |  | 541 | } | 
| 703 | 57 |  |  |  |  | 321 |  | 
| 704 |  |  |  |  |  |  | # RT#91540 PREREQ_FATAL not recognized on command line | 
| 705 | 741 | 100 | 66 |  |  | 2844 | if (%unsatisfied && $self->{PREREQ_FATAL}){ | 
| 706 |  |  |  |  |  |  | my $failedprereqs = join "\n", map {"    $_ $unsatisfied{$_}"} | 
| 707 |  |  |  |  |  |  | sort { lc $a cmp lc $b } keys %unsatisfied; | 
| 708 |  |  |  |  |  |  | die <<"END"; | 
| 709 | 571 |  |  |  |  | 2976 | MakeMaker FATAL: prerequisites not found. | 
| 710 |  |  |  |  |  |  | $failedprereqs | 
| 711 |  |  |  |  |  |  |  | 
| 712 |  |  |  |  |  |  | Please install these modules first and rerun 'perl Makefile.PL'. | 
| 713 | 57 |  |  |  |  | 213 | END | 
| 714 | 57 | 50 |  |  |  | 277 | } | 
| 715 |  |  |  |  |  |  |  | 
| 716 |  |  |  |  |  |  | $self->{NAME} ||= $self->guess_name; | 
| 717 | 71 |  | 100 |  |  | 1029 |  | 
| 718 |  |  |  |  |  |  | warn "Warning: NAME must be a package name\n" | 
| 719 |  |  |  |  |  |  | unless $self->{NAME} =~ m!^[A-Z_a-z][0-9A-Z_a-z]*(?:::[0-9A-Z_a-z]+)*$!; | 
| 720 |  |  |  |  |  |  |  | 
| 721 | 128 | 100 | 100 |  |  | 692 | ($self->{NAME_SYM} = $self->{NAME}) =~ s/\W+/_/g; | 
| 722 | 29 |  |  |  |  | 276 |  | 
| 723 | 1 |  |  |  |  | 8 | $self->init_MAKE; | 
|  | 28 |  |  |  |  | 270 |  | 
| 724 | 1 |  |  |  |  | 20 | $self->init_main; | 
| 725 |  |  |  |  |  |  | $self->init_VERSION; | 
| 726 |  |  |  |  |  |  | $self->init_dist; | 
| 727 |  |  |  |  |  |  | $self->init_INST; | 
| 728 |  |  |  |  |  |  | $self->init_INSTALL; | 
| 729 |  |  |  |  |  |  | $self->init_DEST; | 
| 730 |  |  |  |  |  |  | $self->init_dirscan; | 
| 731 |  |  |  |  |  |  | $self->init_PM; | 
| 732 | 127 |  | 33 |  |  | 443 | $self->init_MANPODS; | 
| 733 |  |  |  |  |  |  | $self->init_xs; | 
| 734 |  |  |  |  |  |  | $self->init_PERL; | 
| 735 | 127 | 50 |  |  |  | 1291 | $self->init_DIRFILESEP; | 
| 736 |  |  |  |  |  |  | $self->init_linker; | 
| 737 | 127 |  |  |  |  | 1026 | $self->init_ABSTRACT; | 
| 738 |  |  |  |  |  |  |  | 
| 739 | 155 |  |  |  |  | 2056 | $self->arch_check( | 
| 740 | 155 |  |  |  |  | 1998 | $INC{'Config.pm'}, | 
| 741 | 155 |  |  |  |  | 2066 | $self->catfile($Config{'archlibexp'}, "Config.pm") | 
| 742 | 155 |  |  |  |  | 1782 | ); | 
| 743 | 155 |  |  |  |  | 1840 |  | 
| 744 | 155 |  |  |  |  | 1598 | $self->init_tools(); | 
| 745 | 155 |  |  |  |  | 1343 | $self->init_others(); | 
| 746 | 155 |  |  |  |  | 1710 | $self->init_platform(); | 
| 747 | 155 |  |  |  |  | 1488 | $self->init_PERM(); | 
| 748 | 155 |  |  |  |  | 2867 | my @args = @ARGV; | 
| 749 | 155 |  |  |  |  | 1829 | @args = map { Encode::decode(locale => $_) } @args if $CAN_DECODE; | 
| 750 | 155 |  |  |  |  | 1477 | my($argv) = neatvalue(\@args); | 
| 751 | 155 |  |  |  |  | 3163 | $argv =~ s/^\[/(/; | 
| 752 | 155 |  |  |  |  | 1467 | $argv =~ s/\]$/)/; | 
| 753 | 155 |  |  |  |  | 2039 |  | 
| 754 |  |  |  |  |  |  | push @{$self->{RESULT}}, <<END; | 
| 755 |  |  |  |  |  |  | # This Makefile is for the $self->{NAME} extension to perl. | 
| 756 |  |  |  |  |  |  | # | 
| 757 | 155 |  |  |  |  | 2787 | # It was generated automatically by MakeMaker version | 
| 758 |  |  |  |  |  |  | # $VERSION (Revision: $Revision) from the contents of | 
| 759 |  |  |  |  |  |  | # Makefile.PL. Don't edit this file, edit Makefile.PL instead. | 
| 760 | 155 |  |  |  |  | 1405 | # | 
| 761 | 155 |  |  |  |  | 1837 | #       ANY CHANGES MADE HERE WILL BE LOST! | 
| 762 | 154 |  |  |  |  | 1990 | # | 
| 763 | 154 |  |  |  |  | 1316 | #   MakeMaker ARGV: $argv | 
| 764 | 154 |  |  |  |  | 784 | # | 
| 765 | 154 | 50 |  |  |  | 965 | END | 
|  | 28 |  |  |  |  | 253 |  | 
| 766 | 154 |  |  |  |  | 1586 |  | 
| 767 | 154 |  |  |  |  | 1399 | push @{$self->{RESULT}}, $self->_MakeMaker_Parameters_section(\%initial_att); | 
| 768 | 126 |  |  |  |  | 815 |  | 
| 769 |  |  |  |  |  |  | if (defined $self->{CONFIGURE}) { | 
| 770 | 154 |  |  |  |  | 618 | push @{$self->{RESULT}}, <<END; | 
|  | 154 |  |  |  |  | 2181 |  | 
| 771 |  |  |  |  |  |  |  | 
| 772 |  |  |  |  |  |  | #   MakeMaker 'CONFIGURE' Parameters: | 
| 773 |  |  |  |  |  |  | END | 
| 774 |  |  |  |  |  |  | if (scalar(keys %configure_att) > 0) { | 
| 775 |  |  |  |  |  |  | foreach my $key (sort keys %configure_att){ | 
| 776 |  |  |  |  |  |  | next if $key eq 'ARGS'; | 
| 777 |  |  |  |  |  |  | my($v) = neatvalue($configure_att{$key}); | 
| 778 |  |  |  |  |  |  | $v =~ s/(CODE|HASH|ARRAY|SCALAR)\([\dxa-f]+\)/$1\(...\)/; | 
| 779 |  |  |  |  |  |  | $v =~ tr/\n/ /s; | 
| 780 |  |  |  |  |  |  | push @{$self->{RESULT}}, "#     $key => $v"; | 
| 781 |  |  |  |  |  |  | } | 
| 782 |  |  |  |  |  |  | } | 
| 783 | 154 |  |  |  |  | 487 | else | 
|  | 154 |  |  |  |  | 3220 |  | 
| 784 |  |  |  |  |  |  | { | 
| 785 | 154 | 100 |  |  |  | 721 | push @{$self->{RESULT}}, "# no values returned"; | 
| 786 | 29 |  |  |  |  | 70 | } | 
|  | 29 |  |  |  |  | 683 |  | 
| 787 |  |  |  |  |  |  | undef %configure_att;  # free memory | 
| 788 |  |  |  |  |  |  | } | 
| 789 |  |  |  |  |  |  |  | 
| 790 | 29 | 50 |  |  |  | 99 | # turn the SKIP array into a SKIPHASH hash | 
| 791 | 1 |  |  |  |  | 14 | for my $skip (@{$self->{SKIP} || []}) { | 
| 792 | 1 | 50 |  |  |  | 19 | $self->{SKIPHASH}{$skip} = 1; | 
| 793 | 1 |  |  |  |  | 12 | } | 
| 794 | 1 |  |  |  |  | 9 | delete $self->{SKIP}; # free memory | 
| 795 | 1 |  |  |  |  | 13 |  | 
| 796 | 1 |  |  |  |  | 7 | if ($self->{PARENT}) { | 
|  | 1 |  |  |  |  | 11 |  | 
| 797 |  |  |  |  |  |  | for (qw/install dist dist_basics dist_core distdir dist_test dist_ci/) { | 
| 798 |  |  |  |  |  |  | $self->{SKIPHASH}{$_} = 1; | 
| 799 |  |  |  |  |  |  | } | 
| 800 |  |  |  |  |  |  | } | 
| 801 | 0 |  |  |  |  | 0 |  | 
|  | 0 |  |  |  |  | 0 |  | 
| 802 |  |  |  |  |  |  | # We run all the subdirectories now. They don't have much to query | 
| 803 | 1 |  |  |  |  | 7 | # from the parent, but the parent has to query them: if they need linking! | 
| 804 |  |  |  |  |  |  | unless ($self->{NORECURS}) { | 
| 805 |  |  |  |  |  |  | $self->eval_in_subdirs if @{$self->{DIR}}; | 
| 806 |  |  |  |  |  |  | } | 
| 807 | 126 | 50 |  |  |  | 214 |  | 
|  | 126 |  |  |  |  | 1502 |  | 
| 808 | 0 |  |  |  |  | 0 | foreach my $section ( @MM_Sections ){ | 
| 809 |  |  |  |  |  |  | # Support for new foo_target() methods. | 
| 810 | 154 |  |  |  |  | 423 | my $method = $section; | 
| 811 |  |  |  |  |  |  | $method .= '_target' unless $self->can($method); | 
| 812 | 154 | 100 |  |  |  | 672 |  | 
| 813 | 57 |  |  |  |  | 333 | print "Processing Makefile '$section' section\n" if ($Verbose >= 2); | 
| 814 | 427 |  |  |  |  | 954 | my($skipit) = $self->skipcheck($section); | 
| 815 |  |  |  |  |  |  | if ($skipit){ | 
| 816 |  |  |  |  |  |  | push @{$self->{RESULT}}, "\n# --- MakeMaker $section section $skipit."; | 
| 817 |  |  |  |  |  |  | } else { | 
| 818 |  |  |  |  |  |  | my(%a) = %{$self->{$section} || {}}; | 
| 819 |  |  |  |  |  |  | push @{$self->{RESULT}}, "\n# --- MakeMaker $section section:"; | 
| 820 | 154 | 100 |  |  |  | 408 | push @{$self->{RESULT}}, "# " . join ", ", %a if $Verbose && %a; | 
| 821 | 124 | 100 |  |  |  | 199 | push @{$self->{RESULT}}, $self->maketext_filter( | 
|  | 124 |  |  |  |  | 1529 |  | 
| 822 |  |  |  |  |  |  | $self->$method( %a ) | 
| 823 |  |  |  |  |  |  | ); | 
| 824 | 154 |  |  |  |  | 856 | } | 
| 825 |  |  |  |  |  |  | } | 
| 826 | 7031 |  |  |  |  | 10413 |  | 
| 827 | 7031 | 100 |  |  |  | 53622 | push @{$self->{RESULT}}, "\n# End."; | 
| 828 |  |  |  |  |  |  |  | 
| 829 | 7031 | 50 |  |  |  | 13349 | $self; | 
| 830 | 8571 |  |  |  |  | 16098 | } | 
| 831 | 8571 | 100 |  |  |  | 25478 |  | 
| 832 | 1967 |  |  |  |  | 3932 | croak "WriteEmptyMakefile: Need an even number of args" if @_ % 2; | 
|  | 1967 |  |  |  |  | 4618 |  | 
| 833 |  |  |  |  |  |  |  | 
| 834 | 8172 | 100 |  |  |  | 10118 | my %att = @_; | 
|  | 6604 |  |  |  |  | 23447 |  | 
| 835 | 6604 |  |  |  |  | 10872 | $att{DIR} = [] unless $att{DIR}; # don't recurse by default | 
|  | 8172 |  |  |  |  | 18834 |  | 
| 836 | 8172 | 50 | 33 |  |  | 17868 | my $self = MM->new(\%att); | 
|  | 1568 |  |  |  |  | 2616 |  | 
| 837 | 8172 |  |  |  |  | 11287 |  | 
|  | 8172 |  |  |  |  | 38826 |  | 
| 838 |  |  |  |  |  |  | my $new = $self->{MAKEFILE}; | 
| 839 |  |  |  |  |  |  | my $old = $self->{MAKEFILE_OLD}; | 
| 840 |  |  |  |  |  |  | if (-f $old) { | 
| 841 |  |  |  |  |  |  | _unlink($old) or warn "unlink $old: $!"; | 
| 842 |  |  |  |  |  |  | } | 
| 843 | 125 |  |  |  |  | 249 | if ( -f $new ) { | 
|  | 1693 |  |  |  |  | 2023 |  | 
| 844 |  |  |  |  |  |  | _rename($new, $old) or warn "rename $new => $old: $!" | 
| 845 | 1693 |  |  |  |  | 15362 | } | 
| 846 |  |  |  |  |  |  | open my $mfh, '>', $new or die "open $new for write: $!"; | 
| 847 |  |  |  |  |  |  | print $mfh <<'EOP'; | 
| 848 |  |  |  |  |  |  | all : | 
| 849 | 30 | 100 |  | 2 | 0 | 3300 |  | 
| 850 |  |  |  |  |  |  | manifypods : | 
| 851 | 29 |  |  |  |  | 62 |  | 
| 852 | 29 | 50 |  |  |  | 1701 | subdirs : | 
| 853 | 1 |  |  |  |  | 35 |  | 
| 854 |  |  |  |  |  |  | dynamic : | 
| 855 | 1 |  |  |  |  | 8 |  | 
| 856 | 1 |  |  |  |  | 10 | static : | 
| 857 | 1 | 50 |  |  |  | 29 |  | 
| 858 | 0 | 0 |  |  |  | 0 | clean : | 
| 859 |  |  |  |  |  |  |  | 
| 860 | 1 | 50 |  |  |  | 10 | install : | 
| 861 | 0 | 0 |  |  |  | 0 |  | 
| 862 |  |  |  |  |  |  | makemakerdflt : | 
| 863 | 1 | 50 |  |  |  | 248 |  | 
| 864 | 1 |  |  |  |  | 19 | test : | 
| 865 |  |  |  |  |  |  |  | 
| 866 |  |  |  |  |  |  | test_dynamic : | 
| 867 |  |  |  |  |  |  |  | 
| 868 |  |  |  |  |  |  | test_static : | 
| 869 |  |  |  |  |  |  |  | 
| 870 |  |  |  |  |  |  | EOP | 
| 871 |  |  |  |  |  |  | close $mfh or die "close $new for write: $!"; | 
| 872 |  |  |  |  |  |  | } | 
| 873 |  |  |  |  |  |  |  | 
| 874 |  |  |  |  |  |  |  | 
| 875 |  |  |  |  |  |  | =begin private | 
| 876 |  |  |  |  |  |  |  | 
| 877 |  |  |  |  |  |  | =head3 _installed_file_for_module | 
| 878 |  |  |  |  |  |  |  | 
| 879 |  |  |  |  |  |  | my $file = MM->_installed_file_for_module($module); | 
| 880 |  |  |  |  |  |  |  | 
| 881 |  |  |  |  |  |  | Return the first installed .pm $file associated with the $module.  The | 
| 882 |  |  |  |  |  |  | one which will show up when you C<use $module>. | 
| 883 |  |  |  |  |  |  |  | 
| 884 |  |  |  |  |  |  | $module is something like "strict" or "Test::More". | 
| 885 |  |  |  |  |  |  |  | 
| 886 |  |  |  |  |  |  | =end private | 
| 887 |  |  |  |  |  |  |  | 
| 888 | 1 | 50 |  |  |  | 771 | =cut | 
| 889 |  |  |  |  |  |  |  | 
| 890 |  |  |  |  |  |  | my $class  = shift; | 
| 891 |  |  |  |  |  |  | my $prereq = shift; | 
| 892 |  |  |  |  |  |  |  | 
| 893 |  |  |  |  |  |  | my $file = "$prereq.pm"; | 
| 894 |  |  |  |  |  |  | $file =~ s{::}{/}g; | 
| 895 |  |  |  |  |  |  |  | 
| 896 |  |  |  |  |  |  | my $path; | 
| 897 |  |  |  |  |  |  | for my $dir (@INC) { | 
| 898 |  |  |  |  |  |  | my $tmp = File::Spec->catfile($dir, $file); | 
| 899 |  |  |  |  |  |  | if ( -r $tmp ) { | 
| 900 |  |  |  |  |  |  | $path = $tmp; | 
| 901 |  |  |  |  |  |  | last; | 
| 902 |  |  |  |  |  |  | } | 
| 903 |  |  |  |  |  |  | } | 
| 904 |  |  |  |  |  |  |  | 
| 905 |  |  |  |  |  |  | return $path; | 
| 906 |  |  |  |  |  |  | } | 
| 907 |  |  |  |  |  |  |  | 
| 908 | 18 |  |  | 18 |  | 805 |  | 
| 909 | 18 |  |  |  |  | 29 | # Extracted from MakeMaker->new so we can test it | 
| 910 |  |  |  |  |  |  | my $self = shift; | 
| 911 | 18 |  |  |  |  | 46 | my $att  = shift; | 
| 912 | 46 |  |  |  |  | 227 |  | 
| 913 |  |  |  |  |  |  | my @result = <<'END'; | 
| 914 | 46 |  |  |  |  | 73 | #   MakeMaker Parameters: | 
| 915 | 46 |  |  |  |  | 180 | END | 
| 916 | 269 |  |  |  |  | 1853 |  | 
| 917 | 269 | 100 |  |  |  | 2707 | foreach my $key (sort keys %$att){ | 
| 918 | 35 |  |  |  |  | 231 | next if $key eq 'ARGS'; | 
| 919 | 343 |  |  |  |  | 2238 | my $v; | 
| 920 |  |  |  |  |  |  | if ($key eq 'PREREQ_PM') { | 
| 921 |  |  |  |  |  |  | # CPAN.pm takes prereqs from this field in 'Makefile' | 
| 922 |  |  |  |  |  |  | # and does not know about BUILD_REQUIRES | 
| 923 | 354 |  |  |  |  | 3142 | $v = neatvalue({ | 
| 924 |  |  |  |  |  |  | %{ $att->{PREREQ_PM} || {} }, | 
| 925 |  |  |  |  |  |  | %{ $att->{BUILD_REQUIRES} || {} }, | 
| 926 |  |  |  |  |  |  | %{ $att->{TEST_REQUIRES} || {} }, | 
| 927 |  |  |  |  |  |  | }); | 
| 928 |  |  |  |  |  |  | } else { | 
| 929 | 132 |  |  | 160 |  | 3098 | $v = neatvalue($att->{$key}); | 
| 930 | 132 |  |  |  |  | 200 | } | 
| 931 |  |  |  |  |  |  |  | 
| 932 | 160 |  |  |  |  | 846 | $v =~ s/(CODE|HASH|ARRAY|SCALAR)\([\dxa-f]+\)/$1\(...\)/; | 
| 933 |  |  |  |  |  |  | $v =~ tr/\n/ /s; | 
| 934 |  |  |  |  |  |  | push @result, "#     $key => $v"; | 
| 935 |  |  |  |  |  |  | } | 
| 936 | 160 |  |  |  |  | 2190 |  | 
| 937 | 1024 | 100 |  |  |  | 1970 | return @result; | 
| 938 | 898 |  |  |  |  | 1102 | } | 
| 939 | 898 | 100 |  |  |  | 1845 |  | 
| 940 |  |  |  |  |  |  | # _shellwords and _parseline borrowed from Text::ParseWords | 
| 941 |  |  |  |  |  |  | my (@lines) = @_; | 
| 942 |  |  |  |  |  |  | my @allwords; | 
| 943 | 270 | 50 |  |  |  | 833 |  | 
| 944 | 270 | 100 |  |  |  | 634 | foreach my $line (@lines) { | 
| 945 | 298 | 100 |  |  |  | 543 | $line =~ s/^\s+//; | 
|  | 158 |  |  |  |  | 719 |  | 
| 946 |  |  |  |  |  |  | my @words = _parse_line('\s+', 0, $line); | 
| 947 |  |  |  |  |  |  | pop @words if (@words and !defined $words[-1]); | 
| 948 | 768 |  |  |  |  | 1925 | return() unless (@words || !length($line)); | 
| 949 |  |  |  |  |  |  | push(@allwords, @words); | 
| 950 |  |  |  |  |  |  | } | 
| 951 | 898 |  |  |  |  | 1993 | return(@allwords); | 
| 952 | 898 |  |  |  |  | 1610 | } | 
| 953 | 982 |  |  |  |  | 2486 |  | 
| 954 |  |  |  |  |  |  | my($delimiter, $keep, $line) = @_; | 
| 955 |  |  |  |  |  |  | my($word, @pieces); | 
| 956 | 272 |  |  |  |  | 1032 |  | 
| 957 |  |  |  |  |  |  | no warnings 'uninitialized';  # we will be testing undef strings | 
| 958 |  |  |  |  |  |  |  | 
| 959 |  |  |  |  |  |  | while (length($line)) { | 
| 960 |  |  |  |  |  |  | # This pattern is optimised to be stack conservative on older perls. | 
| 961 | 211 |  |  | 99 |  | 644 | # Do not refactor without being careful and testing it on very long strings. | 
| 962 | 211 |  |  |  |  | 556 | # See Perl bug #42980 for an example of a stack busting input. | 
| 963 |  |  |  |  |  |  | $line =~ s/^ | 
| 964 | 99 |  |  |  |  | 424 | (?: | 
| 965 | 99 |  |  |  |  | 351 | # double quoted string | 
| 966 | 99 |  |  |  |  | 449 | (")                             # $quote | 
| 967 | 99 | 50 | 66 |  |  | 422 | ((?>[^\\"]*(?:\\.[^\\"]*)*))"   # $quoted | 
| 968 | 99 | 50 | 66 |  |  | 663 | | # --OR-- | 
| 969 | 99 |  |  |  |  | 466 | # singe quoted string | 
| 970 |  |  |  |  |  |  | (')                             # $quote | 
| 971 | 99 |  |  |  |  | 482 | ((?>[^\\']*(?:\\.[^\\']*)*))'   # $quoted | 
| 972 |  |  |  |  |  |  | |   # --OR-- | 
| 973 |  |  |  |  |  |  | # unquoted string | 
| 974 |  |  |  |  |  |  | (                               # $unquoted | 
| 975 | 99 |  |  | 99 |  | 682 | (?:\\.|[^\\"'])*? | 
| 976 | 99 |  |  |  |  | 285 | ) | 
| 977 |  |  |  |  |  |  | # followed by | 
| 978 | 52 |  |  | 52 |  | 433 | (                               # $delim | 
|  | 52 |  |  |  |  | 99 |  | 
|  | 52 |  |  |  |  | 61690 |  | 
| 979 |  |  |  |  |  |  | \Z(?!\n)                    # EOL | 
| 980 | 99 |  |  |  |  | 336 | |   # --OR-- | 
| 981 |  |  |  |  |  |  | (?-x:$delimiter)            # delimiter | 
| 982 |  |  |  |  |  |  | |   # --OR-- | 
| 983 |  |  |  |  |  |  | (?!^)(?=["'])               # a quote | 
| 984 | 36 | 50 |  |  |  | 297 | ) | 
| 985 |  |  |  |  |  |  | )//xs or return;    # extended layout | 
| 986 |  |  |  |  |  |  | my ($quote, $quoted, $unquoted, $delim) = (($1 ? ($1,$2) : ($3,$4)), $5, $6); | 
| 987 |  |  |  |  |  |  |  | 
| 988 |  |  |  |  |  |  |  | 
| 989 |  |  |  |  |  |  | return() unless( defined($quote) || length($unquoted) || length($delim)); | 
| 990 |  |  |  |  |  |  |  | 
| 991 |  |  |  |  |  |  | if ($keep) { | 
| 992 |  |  |  |  |  |  | $quoted = "$quote$quoted$quote"; | 
| 993 |  |  |  |  |  |  | } | 
| 994 |  |  |  |  |  |  | else { | 
| 995 |  |  |  |  |  |  | $unquoted =~ s/\\(.)/$1/sg; | 
| 996 |  |  |  |  |  |  | if (defined $quote) { | 
| 997 |  |  |  |  |  |  | $quoted =~ s/\\(.)/$1/sg if ($quote eq '"'); | 
| 998 |  |  |  |  |  |  | #$quoted =~ s/\\([\\'])/$1/g if ( $PERL_SINGLE_QUOTE && $quote eq "'"); | 
| 999 |  |  |  |  |  |  | } | 
| 1000 |  |  |  |  |  |  | } | 
| 1001 |  |  |  |  |  |  | $word .= substr($line, 0, 0); # leave results tainted | 
| 1002 |  |  |  |  |  |  | $word .= defined $quote ? $quoted : $unquoted; | 
| 1003 |  |  |  |  |  |  |  | 
| 1004 |  |  |  |  |  |  | if (length($delim)) { | 
| 1005 |  |  |  |  |  |  | push(@pieces, $word); | 
| 1006 |  |  |  |  |  |  | push(@pieces, $delim) if ($keep eq 'delimiters'); | 
| 1007 | 36 | 100 |  |  |  | 127 | undef $word; | 
| 1008 |  |  |  |  |  |  | } | 
| 1009 |  |  |  |  |  |  | if (!length($line)) { | 
| 1010 | 36 | 50 | 100 |  |  | 159 | push(@pieces, $word); | 
|  |  |  | 66 |  |  |  |  | 
| 1011 |  |  |  |  |  |  | } | 
| 1012 | 8 | 50 |  |  |  | 417 | } | 
| 1013 | 0 |  |  |  |  | 0 | return(@pieces); | 
| 1014 |  |  |  |  |  |  | } | 
| 1015 |  |  |  |  |  |  |  | 
| 1016 | 8 |  |  |  |  | 21 | print STDOUT "Checking if your kit is complete...\n"; | 
| 1017 | 8 | 100 |  |  |  | 17 | require ExtUtils::Manifest; | 
| 1018 | 3 | 50 |  |  |  | 14 | # avoid warning | 
| 1019 |  |  |  |  |  |  | $ExtUtils::Manifest::Quiet = $ExtUtils::Manifest::Quiet = 1; | 
| 1020 |  |  |  |  |  |  | my(@missed) = ExtUtils::Manifest::manicheck(); | 
| 1021 |  |  |  |  |  |  | if (@missed) { | 
| 1022 | 8 |  |  |  |  | 31 | print "Warning: the following files are missing in your kit:\n"; | 
| 1023 | 8 | 100 |  |  |  | 34 | print "\t", join "\n\t", @missed; | 
| 1024 |  |  |  |  |  |  | print "\n"; | 
| 1025 | 8 | 100 |  |  |  | 20 | print "Please inform the author.\n"; | 
| 1026 | 1 |  |  |  |  | 3 | } else { | 
| 1027 | 1 | 50 |  |  |  | 3 | print "Looks good\n"; | 
| 1028 | 1 |  |  |  |  | 3 | } | 
| 1029 |  |  |  |  |  |  | } | 
| 1030 | 8 | 100 |  |  |  | 38 |  | 
| 1031 | 3 |  |  |  |  | 10 | my($self, @args) = @_; | 
| 1032 |  |  |  |  |  |  | @args = map { Encode::decode(locale => $_) } @args if $CAN_DECODE; | 
| 1033 |  |  |  |  |  |  | foreach (@args) { | 
| 1034 | 71 |  |  |  |  | 207 | unless (m/(.*?)=(.*)/) { | 
| 1035 |  |  |  |  |  |  | ++$Verbose if m/^verb/; | 
| 1036 |  |  |  |  |  |  | next; | 
| 1037 |  |  |  |  |  |  | } | 
| 1038 | 0 |  |  | 28 | 0 | 0 | my($name, $value) = ($1, $2); | 
| 1039 | 0 |  |  |  |  | 0 | if ($value =~ m/^~(\w+)?/) { # tilde with optional username | 
| 1040 |  |  |  |  |  |  | $value =~ s [^~(\w*)] | 
| 1041 | 28 |  |  |  |  | 70 | [$1 ? | 
| 1042 | 0 |  |  |  |  | 0 | ((getpwnam($1))[7] || "~$1") : | 
| 1043 | 0 | 0 |  |  |  | 0 | (getpwuid($>))[7] | 
| 1044 | 0 |  |  |  |  | 0 | ]ex; | 
| 1045 | 0 |  |  |  |  | 0 | } | 
| 1046 | 0 |  |  |  |  | 0 |  | 
| 1047 | 0 |  |  |  |  | 0 | # Remember the original args passed it.  It will be useful later. | 
| 1048 |  |  |  |  |  |  | $self->{ARGS}{uc $name} = $self->{uc $name} = $value; | 
| 1049 | 0 |  |  |  |  | 0 | } | 
| 1050 |  |  |  |  |  |  |  | 
| 1051 |  |  |  |  |  |  | # catch old-style 'potential_libs' and inform user how to 'upgrade' | 
| 1052 |  |  |  |  |  |  | if (defined $self->{potential_libs}){ | 
| 1053 |  |  |  |  |  |  | my($msg)="'potential_libs' => '$self->{potential_libs}' should be"; | 
| 1054 | 71 |  |  | 71 | 0 | 243 | if ($self->{potential_libs}){ | 
| 1055 | 71 | 50 |  |  |  | 295 | print "$msg changed to:\n\t'LIBS' => ['$self->{potential_libs}']\n"; | 
|  | 5 |  |  |  |  | 137 |  | 
| 1056 | 99 |  |  |  |  | 494 | } else { | 
| 1057 | 33 | 50 |  |  |  | 135 | print "$msg deleted.\n"; | 
| 1058 | 0 | 0 |  |  |  | 0 | } | 
| 1059 | 28 |  |  |  |  | 70 | $self->{LIBS} = [$self->{potential_libs}]; | 
| 1060 |  |  |  |  |  |  | delete $self->{potential_libs}; | 
| 1061 | 5 |  |  |  |  | 23 | } | 
| 1062 | 5 | 50 |  |  |  | 29 | # catch old-style 'ARMAYBE' and inform user how to 'upgrade' | 
| 1063 | 0 | 0 | 0 |  |  | 0 | if (defined $self->{ARMAYBE}){ | 
|  | 0 |  |  |  |  | 0 |  | 
| 1064 |  |  |  |  |  |  | my($armaybe) = $self->{ARMAYBE}; | 
| 1065 |  |  |  |  |  |  | print "ARMAYBE => '$armaybe' should be changed to:\n", | 
| 1066 |  |  |  |  |  |  | "\t'dynamic_lib' => {ARMAYBE => '$armaybe'}\n"; | 
| 1067 |  |  |  |  |  |  | my(%dl) = %{$self->{dynamic_lib} || {}}; | 
| 1068 |  |  |  |  |  |  | $self->{dynamic_lib} = { %dl, ARMAYBE => $armaybe}; | 
| 1069 |  |  |  |  |  |  | delete $self->{ARMAYBE}; | 
| 1070 | 5 |  |  |  |  | 141 | } | 
| 1071 |  |  |  |  |  |  | if (defined $self->{LDTARGET}){ | 
| 1072 |  |  |  |  |  |  | print "LDTARGET should be changed to LDFROM\n"; | 
| 1073 |  |  |  |  |  |  | $self->{LDFROM} = $self->{LDTARGET}; | 
| 1074 | 71 | 50 |  |  |  | 1379 | delete $self->{LDTARGET}; | 
| 1075 | 0 |  |  |  |  | 0 | } | 
| 1076 | 0 | 0 |  |  |  | 0 | # Turn a DIR argument on the command line into an array | 
| 1077 | 28 |  |  |  |  | 503 | if (defined $self->{DIR} && ref \$self->{DIR} eq 'SCALAR') { | 
| 1078 |  |  |  |  |  |  | # So they can choose from the command line, which extensions they want | 
| 1079 | 0 |  |  |  |  | 0 | # the grep enables them to have some colons too much in case they | 
| 1080 |  |  |  |  |  |  | # have to build a list with the shell | 
| 1081 | 0 |  |  |  |  | 0 | $self->{DIR} = [grep $_, split ":", $self->{DIR}]; | 
| 1082 | 0 |  |  |  |  | 0 | } | 
| 1083 |  |  |  |  |  |  | # Turn a INCLUDE_EXT argument on the command line into an array | 
| 1084 |  |  |  |  |  |  | if (defined $self->{INCLUDE_EXT} && ref \$self->{INCLUDE_EXT} eq 'SCALAR') { | 
| 1085 | 71 | 50 |  |  |  | 288 | $self->{INCLUDE_EXT} = [grep $_, split '\s+', $self->{INCLUDE_EXT}]; | 
| 1086 | 0 |  |  |  |  | 0 | } | 
| 1087 | 0 |  |  |  |  | 0 | # Turn a EXCLUDE_EXT argument on the command line into an array | 
| 1088 |  |  |  |  |  |  | if (defined $self->{EXCLUDE_EXT} && ref \$self->{EXCLUDE_EXT} eq 'SCALAR') { | 
| 1089 | 28 | 0 |  |  |  | 75 | $self->{EXCLUDE_EXT} = [grep $_, split '\s+', $self->{EXCLUDE_EXT}]; | 
|  | 0 |  |  |  |  | 0 |  | 
| 1090 | 0 |  |  |  |  | 0 | } | 
| 1091 | 0 |  |  |  |  | 0 |  | 
| 1092 |  |  |  |  |  |  | foreach my $mmkey (sort keys %$self){ | 
| 1093 | 71 | 50 |  |  |  | 236 | next if $mmkey eq 'ARGS'; | 
| 1094 | 0 |  |  |  |  | 0 | print "  $mmkey => ", neatvalue($self->{$mmkey}), "\n" if $Verbose; | 
| 1095 | 0 |  |  |  |  | 0 | print "'$mmkey' is not a known MakeMaker parameter name.\n" | 
| 1096 | 28 |  |  |  |  | 63 | unless exists $Recognized_Att_Keys{$mmkey}; | 
| 1097 |  |  |  |  |  |  | } | 
| 1098 |  |  |  |  |  |  | $| = 1 if $Verbose; | 
| 1099 | 71 | 50 | 66 |  |  | 290 | } | 
| 1100 |  |  |  |  |  |  |  | 
| 1101 |  |  |  |  |  |  | my($self) = @_; | 
| 1102 |  |  |  |  |  |  | # We allow extension-specific hints files. | 
| 1103 | 0 |  |  |  |  | 0 |  | 
| 1104 |  |  |  |  |  |  | require File::Spec; | 
| 1105 |  |  |  |  |  |  | my $curdir = File::Spec->curdir; | 
| 1106 | 71 | 50 | 33 |  |  | 277 |  | 
| 1107 | 28 |  |  |  |  | 73 | my $hint_dir = File::Spec->catdir($curdir, "hints"); | 
| 1108 |  |  |  |  |  |  | return unless -d $hint_dir; | 
| 1109 |  |  |  |  |  |  |  | 
| 1110 | 71 | 50 | 33 |  |  | 291 | # First we look for the best hintsfile we have | 
| 1111 | 28 |  |  |  |  | 81 | my($hint)="${^O}_$Config{osvers}"; | 
| 1112 |  |  |  |  |  |  | $hint =~ s/\./_/g; | 
| 1113 |  |  |  |  |  |  | $hint =~ s/_$//; | 
| 1114 | 71 |  |  |  |  | 613 | return unless $hint; | 
| 1115 | 577 | 100 |  |  |  | 1010 |  | 
| 1116 | 478 | 50 |  |  |  | 680 | # Also try without trailing minor version numbers. | 
| 1117 |  |  |  |  |  |  | while (1) { | 
| 1118 | 506 | 100 |  |  |  | 1132 | last if -f File::Spec->catfile($hint_dir, "$hint.pl");  # found | 
| 1119 |  |  |  |  |  |  | } continue { | 
| 1120 | 239 | 50 |  |  |  | 564 | last unless $hint =~ s/_[^_]*$//; # nothing to cut off | 
| 1121 |  |  |  |  |  |  | } | 
| 1122 |  |  |  |  |  |  | my $hint_file = File::Spec->catfile($hint_dir, "$hint.pl"); | 
| 1123 |  |  |  |  |  |  |  | 
| 1124 | 274 |  |  | 162 | 0 | 2171 | return unless -f $hint_file;    # really there | 
| 1125 |  |  |  |  |  |  |  | 
| 1126 |  |  |  |  |  |  | _run_hintfile($self, $hint_file); | 
| 1127 | 274 |  |  |  |  | 1178 | } | 
| 1128 | 162 |  |  |  |  | 1882 |  | 
| 1129 |  |  |  |  |  |  | my ($self, $hint_file) = @_; | 
| 1130 | 162 |  |  |  |  | 1401 |  | 
| 1131 | 162 | 100 |  |  |  | 1551 | local($@, $!); | 
| 1132 |  |  |  |  |  |  | print "Processing hints file $hint_file\n" if $Verbose; | 
| 1133 |  |  |  |  |  |  |  | 
| 1134 | 30 |  |  |  |  | 573 | if(open(my $fh, '<', $hint_file)) { | 
| 1135 | 30 |  |  |  |  | 229 | my $hints_content = do { local $/; <$fh> }; | 
| 1136 | 30 |  |  |  |  | 243 | no strict; | 
| 1137 | 2 | 50 |  |  |  | 3 | eval $hints_content; | 
| 1138 |  |  |  |  |  |  | warn "Failed to run hint file $hint_file: $@" if $@; | 
| 1139 |  |  |  |  |  |  | } | 
| 1140 | 2 |  |  |  |  | 3 | else { | 
| 1141 | 8 | 100 |  |  |  | 100 | warn "Could not open $hint_file for read: $!"; | 
| 1142 |  |  |  |  |  |  | } | 
| 1143 | 6 | 50 |  |  |  | 37 | } | 
| 1144 |  |  |  |  |  |  |  | 
| 1145 | 2 |  |  |  |  | 14 | my($from,$to) = @_; | 
| 1146 |  |  |  |  |  |  | local $SIG{__WARN__} = sub { | 
| 1147 | 2 | 50 |  |  |  | 17 | # can't use 'no warnings redefined', 5.6 only | 
| 1148 |  |  |  |  |  |  | warn @_ unless $_[0] =~ /^Subroutine .* redefined/ | 
| 1149 | 2 |  |  |  |  | 6 | }; | 
| 1150 |  |  |  |  |  |  | foreach my $method (@Overridable) { | 
| 1151 |  |  |  |  |  |  | next unless defined &{"${from}::$method"}; | 
| 1152 |  |  |  |  |  |  | no strict 'refs';   ## no critic | 
| 1153 | 2 |  |  | 30 |  | 5 | *{"${to}::$method"} = \&{"${from}::$method"}; | 
| 1154 |  |  |  |  |  |  |  | 
| 1155 | 2 |  |  |  |  | 12 | # If we delete a method, then it will be undefined and cannot | 
| 1156 | 2 | 50 |  |  |  | 4 | # be called.  But as long as we have Makefile.PLs that rely on | 
| 1157 |  |  |  |  |  |  | # %MY:: being intact, we have to fill the hole with an | 
| 1158 | 2 | 50 |  |  |  | 51 | # inheriting method: | 
| 1159 | 2 |  |  |  |  | 2 |  | 
|  | 2 |  |  |  |  | 7 |  | 
|  | 2 |  |  |  |  | 34 |  | 
| 1160 | 52 |  |  | 52 |  | 392 | { | 
|  | 52 |  |  |  |  | 99 |  | 
|  | 52 |  |  |  |  | 8390 |  | 
| 1161 | 2 |  |  |  |  | 100 | my $super = "SUPER::".$method; | 
| 1162 | 2 | 100 |  |  |  | 27 | *{$method} = sub { | 
| 1163 |  |  |  |  |  |  | shift->$super(@_); | 
| 1164 |  |  |  |  |  |  | }; | 
| 1165 | 0 |  |  |  |  | 0 | } | 
| 1166 |  |  |  |  |  |  | } | 
| 1167 |  |  |  |  |  |  |  | 
| 1168 |  |  |  |  |  |  | my($self) = shift; | 
| 1169 |  |  |  |  |  |  | my($section) = @_; | 
| 1170 | 128 |  |  | 128 | 0 | 706 | return 'skipped' if $section eq 'metafile' && $UNDER_CORE; | 
| 1171 |  |  |  |  |  |  | if ($section eq 'dynamic') { | 
| 1172 |  |  |  |  |  |  | print "Warning (non-fatal): Target 'dynamic' depends on targets ", | 
| 1173 | 2 | 50 |  | 30 |  | 41 | "in skipped section 'dynamic_bs'\n" | 
| 1174 | 128 |  |  |  |  | 1319 | if $self->{SKIPHASH}{dynamic_bs} && $Verbose; | 
| 1175 | 156 |  |  |  |  | 893 | print "Warning (non-fatal): Target 'dynamic' depends on targets ", | 
| 1176 | 9244 | 100 |  |  |  | 10968 | "in skipped section 'dynamic_lib'\n" | 
|  | 9216 |  |  |  |  | 31421 |  | 
| 1177 | 52 |  |  | 52 |  | 333 | if $self->{SKIPHASH}{dynamic_lib} && $Verbose; | 
|  | 52 |  |  |  |  | 112 |  | 
|  | 52 |  |  |  |  | 74216 |  | 
| 1178 | 30 |  |  |  |  | 165 | } | 
|  | 2018 |  |  |  |  | 2238 |  | 
|  | 2018 |  |  |  |  | 5177 |  | 
| 1179 |  |  |  |  |  |  | if ($section eq 'dynamic_lib') { | 
| 1180 |  |  |  |  |  |  | print "Warning (non-fatal): Target '\$(INST_DYNAMIC)' depends on ", | 
| 1181 |  |  |  |  |  |  | "targets in skipped section 'dynamic_bs'\n" | 
| 1182 |  |  |  |  |  |  | if $self->{SKIPHASH}{dynamic_bs} && $Verbose; | 
| 1183 |  |  |  |  |  |  | } | 
| 1184 |  |  |  |  |  |  | if ($section eq 'static') { | 
| 1185 |  |  |  |  |  |  | print "Warning (non-fatal): Target 'static' depends on targets ", | 
| 1186 | 2 |  |  |  |  | 4 | "in skipped section 'static_lib'\n" | 
| 1187 | 2 |  |  |  |  | 5 | if $self->{SKIPHASH}{static_lib} && $Verbose; | 
| 1188 | 2 |  |  |  |  | 27 | } | 
| 1189 | 1 |  |  | 1 |  | 36 | return 'skipped' if $self->{SKIPHASH}{$section}; | 
| 1190 | 2 |  |  |  |  | 6 | return ''; | 
| 1191 |  |  |  |  |  |  | } | 
| 1192 |  |  |  |  |  |  |  | 
| 1193 |  |  |  |  |  |  | # returns filehandle, dies on fail. :raw so no :crlf | 
| 1194 |  |  |  |  |  |  | my ($file) = @_; | 
| 1195 |  |  |  |  |  |  | open my $fh ,">", $file or die "Unable to open $file: $!"; | 
| 1196 | 7003 |  |  | 7003 | 1 | 9735 | my @layers = ':raw'; | 
| 1197 | 7003 |  |  |  |  | 9978 | push @layers, join ' ', ':encoding(locale)' if $CAN_DECODE; | 
| 1198 | 7003 | 50 | 66 |  |  | 12449 | binmode $fh, join ' ', @layers; | 
| 1199 | 8571 | 100 |  |  |  | 13530 | $fh; | 
| 1200 |  |  |  |  |  |  | } | 
| 1201 |  |  |  |  |  |  |  | 
| 1202 | 1693 | 0 | 33 |  |  | 2908 | my $self = shift; | 
| 1203 |  |  |  |  |  |  |  | 
| 1204 |  |  |  |  |  |  | my $finalname = $self->{MAKEFILE}; | 
| 1205 | 1693 | 0 | 33 |  |  | 3115 | printf STDOUT "Generating a %s %s\n", $self->make_type, $finalname if $Verbose || !$self->{PARENT}; | 
| 1206 |  |  |  |  |  |  | print STDOUT "Writing $finalname for $self->{NAME}\n" if $Verbose || !$self->{PARENT}; | 
| 1207 | 8571 | 100 |  |  |  | 12298 |  | 
| 1208 |  |  |  |  |  |  | unlink($finalname, "MakeMaker.tmp", $Is_VMS ? 'Descrip.MMS' : ()); | 
| 1209 |  |  |  |  |  |  |  | 
| 1210 | 153 | 0 | 33 |  |  | 379 | write_file_via_tmp($finalname, $self->{RESULT}); | 
| 1211 |  |  |  |  |  |  |  | 
| 1212 | 7031 | 100 |  |  |  | 10199 | # Write MYMETA.yml to communicate metadata up to the CPAN clients | 
| 1213 |  |  |  |  |  |  | print STDOUT "Writing MYMETA.yml and MYMETA.json\n" | 
| 1214 |  |  |  |  |  |  | if !$self->{NO_MYMETA} and $self->write_mymeta( $self->mymeta ); | 
| 1215 | 1693 | 0 | 33 |  |  | 2699 |  | 
| 1216 |  |  |  |  |  |  | # save memory | 
| 1217 | 7031 | 100 |  |  |  | 12709 | if ($self->{PARENT} && !$self->{_KEEP_AFTER_FLUSH}) { | 
| 1218 | 8172 |  |  |  |  | 13124 | my %keep = map { ($_ => 1) } qw(NEEDS_LINKING HAS_LINK_CODE); | 
| 1219 |  |  |  |  |  |  | delete $self->{$_} for grep !$keep{$_}, keys %$self; | 
| 1220 |  |  |  |  |  |  | } | 
| 1221 |  |  |  |  |  |  |  | 
| 1222 |  |  |  |  |  |  | system("$Config::Config{eunicefix} $finalname") | 
| 1223 | 150 |  |  | 1690 | 0 | 423 | if $Config::Config{eunicefix} ne ":"; | 
| 1224 | 1690 | 50 |  |  |  | 14266 |  | 
| 1225 | 1690 |  |  |  |  | 3393 | return; | 
| 1226 | 150 | 50 |  |  |  | 727 | } | 
| 1227 | 150 |  |  | 39 |  | 6660 |  | 
|  | 39 |  |  |  |  | 306 |  | 
|  | 39 |  |  |  |  | 294 |  | 
|  | 39 |  |  |  |  | 361 |  | 
| 1228 | 150 |  |  |  |  | 15270 | my ($finalname, $contents) = @_; | 
| 1229 |  |  |  |  |  |  | my $fh = open_for_writing("MakeMaker.tmp"); | 
| 1230 |  |  |  |  |  |  | die "write_file_via_tmp: 2nd arg must be ref" unless ref $contents; | 
| 1231 |  |  |  |  |  |  | for my $chunk (@$contents) { | 
| 1232 | 150 |  |  | 150 | 0 | 404 | my $to_write = $chunk; | 
| 1233 |  |  |  |  |  |  | utf8::encode $to_write if !$CAN_DECODE && "$]" > 5.008; | 
| 1234 | 150 |  |  |  |  | 1106 | print $fh "$to_write\n" or die "Can't write to MakeMaker.tmp: $!"; | 
| 1235 | 150 | 100 | 66 |  |  | 5417 | } | 
| 1236 | 150 | 100 | 66 |  |  | 2137 | close $fh or die "Can't write to MakeMaker.tmp: $!"; | 
| 1237 |  |  |  |  |  |  | _rename("MakeMaker.tmp", $finalname) or | 
| 1238 | 150 | 50 |  |  |  | 64109 | warn "rename MakeMaker.tmp => $finalname: $!"; | 
| 1239 |  |  |  |  |  |  | chmod 0644, $finalname if !$Is_VMS; | 
| 1240 | 150 |  |  |  |  | 1456 | return; | 
| 1241 |  |  |  |  |  |  | } | 
| 1242 |  |  |  |  |  |  |  | 
| 1243 |  |  |  |  |  |  | # This is a rename for OS's where the target must be unlinked first. | 
| 1244 | 150 | 100 | 66 |  |  | 3335 | my($src, $dest) = @_; | 
| 1245 |  |  |  |  |  |  | _unlink($dest); | 
| 1246 |  |  |  |  |  |  | return rename $src, $dest; | 
| 1247 | 150 | 50 | 66 |  |  | 5410 | } | 
| 1248 | 28 |  |  |  |  | 155 |  | 
|  | 28 |  |  |  |  | 705 |  | 
| 1249 | 28 |  |  |  |  | 189 | # This is an unlink for OS's where the target must be writable first. | 
| 1250 |  |  |  |  |  |  | my @files = @_; | 
| 1251 |  |  |  |  |  |  | chmod 0666, @files; | 
| 1252 |  |  |  |  |  |  | return unlink @files; | 
| 1253 | 122 | 50 |  |  |  | 3186 | } | 
| 1254 |  |  |  |  |  |  |  | 
| 1255 | 122 |  |  |  |  | 548 |  | 
| 1256 |  |  |  |  |  |  | # The following mkbootstrap() is only for installations that are calling | 
| 1257 |  |  |  |  |  |  | # the pre-4.1 mkbootstrap() from their old Makefiles. This MakeMaker | 
| 1258 |  |  |  |  |  |  | # writes Makefiles, that use ExtUtils::Mkbootstrap directly. | 
| 1259 | 122 |  |  | 150 | 0 | 399 | die <<END; | 
| 1260 | 150 |  |  |  |  | 1285 | !!! Your Makefile has been built such a long time ago, !!! | 
| 1261 | 150 | 50 |  |  |  | 545 | !!! that is unlikely to work with current MakeMaker.   !!! | 
| 1262 | 150 |  |  |  |  | 712 | !!! Please rebuild your Makefile                       !!! | 
| 1263 | 14494 |  |  |  |  | 21357 | END | 
| 1264 | 14494 | 50 | 33 |  |  | 21702 | } | 
| 1265 | 14494 | 50 |  |  |  | 81918 |  | 
| 1266 |  |  |  |  |  |  | # Ditto for mksymlists() as of MakeMaker 5.17 | 
| 1267 | 3482 | 50 |  |  |  | 8494 | die <<END; | 
| 1268 | 3482 | 50 |  |  |  | 5585 | !!! Your Makefile has been built such a long time ago, !!! | 
| 1269 |  |  |  |  |  |  | !!! that is unlikely to work with current MakeMaker.   !!! | 
| 1270 | 3482 | 50 |  |  |  | 19704 | !!! Please rebuild your Makefile                       !!! | 
| 1271 | 150 |  |  |  |  | 1420 | END | 
| 1272 |  |  |  |  |  |  | } | 
| 1273 |  |  |  |  |  |  |  | 
| 1274 |  |  |  |  |  |  | my($v) = @_; | 
| 1275 |  |  |  |  |  |  | return "undef" unless defined $v; | 
| 1276 | 150 |  |  | 150 |  | 577 | my($t) = ref $v; | 
| 1277 | 150 |  |  |  |  | 957 | return "q[$v]" unless $t; | 
| 1278 | 150 |  |  |  |  | 4199 | if ($t eq 'ARRAY') { | 
| 1279 |  |  |  |  |  |  | my(@m, @neat); | 
| 1280 |  |  |  |  |  |  | push @m, "["; | 
| 1281 |  |  |  |  |  |  | foreach my $elem (@$v) { | 
| 1282 |  |  |  |  |  |  | push @neat, "q[$elem]"; | 
| 1283 | 150 |  |  | 150 |  | 501 | } | 
| 1284 | 150 |  |  |  |  | 2074 | push @m, join ", ", @neat; | 
| 1285 | 150 |  |  |  |  | 1655 | push @m, "]"; | 
| 1286 |  |  |  |  |  |  | return join "", @m; | 
| 1287 |  |  |  |  |  |  | } | 
| 1288 |  |  |  |  |  |  | return $v unless $t eq 'HASH'; | 
| 1289 |  |  |  |  |  |  | my(@m, $key, $val); | 
| 1290 |  |  |  |  |  |  | for my $key (sort keys %$v) { | 
| 1291 |  |  |  |  |  |  | last unless defined $key; # cautious programming in case (undef,undef) is true | 
| 1292 |  |  |  |  |  |  | push @m,"$key=>".neatvalue($v->{$key}); | 
| 1293 | 28 |  |  | 28 | 0 | 83 | } | 
| 1294 |  |  |  |  |  |  | return "{ ".join(', ',@m)." }"; | 
| 1295 |  |  |  |  |  |  | } | 
| 1296 |  |  |  |  |  |  |  | 
| 1297 |  |  |  |  |  |  | my $value = shift; | 
| 1298 |  |  |  |  |  |  | return $value if $UNDER_CORE; | 
| 1299 |  |  |  |  |  |  | my $tvalue = ''; | 
| 1300 |  |  |  |  |  |  | require B; | 
| 1301 |  |  |  |  |  |  | my $sv = B::svref_2object(\$value); | 
| 1302 | 28 |  |  | 0 | 0 | 357 | my $magic = ref($sv) eq 'B::PVMG' ? $sv->MAGIC : undef; | 
| 1303 |  |  |  |  |  |  | while ( $magic ) { | 
| 1304 |  |  |  |  |  |  | if ( $magic->TYPE eq 'V' ) { | 
| 1305 |  |  |  |  |  |  | $tvalue = $magic->PTR; | 
| 1306 |  |  |  |  |  |  | $tvalue =~ s/^v?(.+)$/v$1/; | 
| 1307 |  |  |  |  |  |  | last; | 
| 1308 |  |  |  |  |  |  | } | 
| 1309 |  |  |  |  |  |  | else { | 
| 1310 | 1051 |  |  | 1023 | 0 | 2855 | $magic = $magic->MOREMAGIC; | 
| 1311 | 1023 | 100 |  |  |  | 1839 | } | 
| 1312 | 1015 |  |  |  |  | 1759 | } | 
| 1313 | 1211 | 100 |  |  |  | 2868 | return $tvalue; | 
| 1314 | 852 | 100 |  |  |  | 1628 | } | 
| 1315 | 331 |  |  |  |  | 522 |  | 
| 1316 | 331 |  |  |  |  | 1396 | my($self) = @_; | 
| 1317 | 275 |  |  |  |  | 1008 | my(@m); | 
| 1318 | 41 |  |  |  |  | 139 | if ($Verbose){ | 
| 1319 |  |  |  |  |  |  | push @m, "\n# Full list of MakeMaker attribute values:"; | 
| 1320 | 163 |  |  |  |  | 745 | foreach my $key (sort keys %$self){ | 
| 1321 | 163 |  |  |  |  | 786 | next if $key eq 'RESULT' || $key =~ /^[A-Z][a-z]/; | 
| 1322 | 135 |  |  |  |  | 1058 | my($v) = neatvalue($self->{$key}); | 
| 1323 |  |  |  |  |  |  | $v =~ s/(CODE|HASH|ARRAY|SCALAR)\([\dxa-f]+\)/$1\(...\)/; | 
| 1324 | 549 | 100 |  |  |  | 1016 | $v =~ tr/\n/ /s; | 
| 1325 | 544 |  |  |  |  | 836 | push @m, "# $key => $v"; | 
| 1326 | 544 |  |  |  |  | 1510 | } | 
| 1327 | 138 | 50 |  |  |  | 289 | } | 
| 1328 | 138 |  |  |  |  | 384 | # added here as selfdocument is not overridable | 
| 1329 |  |  |  |  |  |  | push @m, <<'EOF'; | 
| 1330 | 628 |  |  |  |  | 2178 |  | 
| 1331 |  |  |  |  |  |  | # here so even if top_targets is overridden, these will still be defined | 
| 1332 |  |  |  |  |  |  | # gmake will silently still work if any are .PHONY-ed but nmake won't | 
| 1333 |  |  |  |  |  |  | EOF | 
| 1334 | 28 |  |  | 196 |  | 70 | push @m, join "\n", map "$_ ::\n\t\$(NOECHO) \$(NOOP)\n", | 
| 1335 | 28 | 0 |  |  |  | 229 | # config is so manifypods won't puke if no subdirs | 
| 1336 | 112 |  |  |  |  | 584 | grep !$self->{SKIPHASH}{$_}, | 
| 1337 | 0 |  |  |  |  | 0 | qw(static dynamic config); | 
| 1338 | 0 |  |  |  |  | 0 | join "\n", @m; | 
| 1339 | 0 | 0 |  |  |  | 0 | } | 
| 1340 | 0 |  |  |  |  | 0 |  | 
| 1341 | 0 | 0 |  |  |  | 0 | 1; | 
| 1342 | 0 |  |  |  |  | 0 |  | 
| 1343 | 0 |  |  |  |  | 0 |  | 
| 1344 | 0 |  |  |  |  | 0 | =head1 NAME | 
| 1345 |  |  |  |  |  |  |  | 
| 1346 |  |  |  |  |  |  | ExtUtils::MakeMaker - Create a module Makefile | 
| 1347 | 0 |  |  |  |  | 0 |  | 
| 1348 |  |  |  |  |  |  | =head1 SYNOPSIS | 
| 1349 |  |  |  |  |  |  |  | 
| 1350 | 0 |  |  |  |  | 0 | use ExtUtils::MakeMaker; | 
| 1351 |  |  |  |  |  |  |  | 
| 1352 |  |  |  |  |  |  | WriteMakefile( | 
| 1353 |  |  |  |  |  |  | NAME              => "Foo::Bar", | 
| 1354 | 125 |  |  | 125 | 0 | 455 | VERSION_FROM      => "lib/Foo/Bar.pm", | 
| 1355 | 125 |  |  |  |  | 250 | ); | 
| 1356 | 125 | 50 |  |  |  | 397 |  | 
| 1357 | 28 |  |  |  |  | 80 | =head1 DESCRIPTION | 
| 1358 | 28 |  |  |  |  | 42 |  | 
| 1359 | 28 | 0 | 0 |  |  | 59 | This utility is designed to write a Makefile for an extension module | 
| 1360 | 0 |  |  |  |  | 0 | from a Makefile.PL. It is based on the Makefile.SH model provided by | 
| 1361 | 0 |  |  |  |  | 0 | Andy Dougherty and the perl5-porters. | 
| 1362 | 0 |  |  |  |  | 0 |  | 
| 1363 | 0 |  |  |  |  | 0 | It splits the task of generating the Makefile into several subroutines | 
| 1364 |  |  |  |  |  |  | that can be individually overridden.  Each subroutine returns the text | 
| 1365 |  |  |  |  |  |  | it wishes to have written to the Makefile. | 
| 1366 |  |  |  |  |  |  |  | 
| 1367 | 125 |  |  |  |  | 584 | As there are various Make programs with incompatible syntax, which | 
| 1368 |  |  |  |  |  |  | use operating system shells, again with incompatible syntax, it is | 
| 1369 |  |  |  |  |  |  | important for users of this module to know which flavour of Make | 
| 1370 |  |  |  |  |  |  | a Makefile has been written for so they'll use the correct one and | 
| 1371 |  |  |  |  |  |  | won't have to face the possibly bewildering errors resulting from | 
| 1372 |  |  |  |  |  |  | using the wrong one. | 
| 1373 |  |  |  |  |  |  |  | 
| 1374 | 125 |  |  |  |  | 1166 | On POSIX systems, that program will likely be GNU Make; on Microsoft | 
| 1375 |  |  |  |  |  |  | Windows, it will be either Microsoft NMake, DMake or GNU Make. | 
| 1376 | 125 |  |  |  |  | 711 | See the section on the L</"MAKE"> parameter for details. | 
| 1377 |  |  |  |  |  |  |  | 
| 1378 |  |  |  |  |  |  | ExtUtils::MakeMaker (EUMM) is object oriented. Each directory below the current | 
| 1379 |  |  |  |  |  |  | directory that contains a Makefile.PL is treated as a separate | 
| 1380 |  |  |  |  |  |  | object. This makes it possible to write an unlimited number of | 
| 1381 |  |  |  |  |  |  | Makefiles with a single invocation of WriteMakefile(). | 
| 1382 |  |  |  |  |  |  |  | 
| 1383 |  |  |  |  |  |  | All inputs to WriteMakefile are Unicode characters, not just octets. EUMM | 
| 1384 |  |  |  |  |  |  | seeks to handle all of these correctly. It is currently still not possible | 
| 1385 |  |  |  |  |  |  | to portably use Unicode characters in module names, because this requires | 
| 1386 |  |  |  |  |  |  | Perl to handle Unicode filenames, which is not yet the case on Windows. | 
| 1387 |  |  |  |  |  |  |  | 
| 1388 |  |  |  |  |  |  | See L<ExtUtils::MakeMaker::FAQ> for details of the design and usage. | 
| 1389 |  |  |  |  |  |  |  | 
| 1390 |  |  |  |  |  |  | =head2 How To Write A Makefile.PL | 
| 1391 |  |  |  |  |  |  |  | 
| 1392 |  |  |  |  |  |  | See L<ExtUtils::MakeMaker::Tutorial>. | 
| 1393 |  |  |  |  |  |  |  | 
| 1394 |  |  |  |  |  |  | The long answer is the rest of the manpage :-) | 
| 1395 |  |  |  |  |  |  |  | 
| 1396 |  |  |  |  |  |  | =head2 Default Makefile Behaviour | 
| 1397 |  |  |  |  |  |  |  | 
| 1398 |  |  |  |  |  |  | The generated Makefile enables the user of the extension to invoke | 
| 1399 |  |  |  |  |  |  |  | 
| 1400 |  |  |  |  |  |  | perl Makefile.PL # optionally "perl Makefile.PL verbose" | 
| 1401 |  |  |  |  |  |  | make | 
| 1402 |  |  |  |  |  |  | make test        # optionally set TEST_VERBOSE=1 | 
| 1403 |  |  |  |  |  |  | make install     # See below | 
| 1404 |  |  |  |  |  |  |  | 
| 1405 |  |  |  |  |  |  | The Makefile to be produced may be altered by adding arguments of the | 
| 1406 |  |  |  |  |  |  | form C<KEY=VALUE>. E.g. | 
| 1407 |  |  |  |  |  |  |  | 
| 1408 |  |  |  |  |  |  | perl Makefile.PL INSTALL_BASE=~ | 
| 1409 |  |  |  |  |  |  |  | 
| 1410 |  |  |  |  |  |  | Other interesting targets in the generated Makefile are | 
| 1411 |  |  |  |  |  |  |  | 
| 1412 |  |  |  |  |  |  | make config     # to check if the Makefile is up-to-date | 
| 1413 |  |  |  |  |  |  | make clean      # delete local temp files (Makefile gets renamed) | 
| 1414 |  |  |  |  |  |  | make realclean  # delete derived files (including ./blib) | 
| 1415 |  |  |  |  |  |  | make ci         # check in all the files in the MANIFEST file | 
| 1416 |  |  |  |  |  |  | make dist       # see below the Distribution Support section | 
| 1417 |  |  |  |  |  |  |  | 
| 1418 |  |  |  |  |  |  | =head2 make test | 
| 1419 |  |  |  |  |  |  |  | 
| 1420 |  |  |  |  |  |  | MakeMaker checks for the existence of a file named F<test.pl> in the | 
| 1421 |  |  |  |  |  |  | current directory, and if it exists it executes the script with the | 
| 1422 |  |  |  |  |  |  | proper set of perl C<-I> options. | 
| 1423 |  |  |  |  |  |  |  | 
| 1424 |  |  |  |  |  |  | MakeMaker also checks for any files matching glob("t/*.t"). It will | 
| 1425 |  |  |  |  |  |  | execute all matching files in alphabetical order via the | 
| 1426 |  |  |  |  |  |  | L<Test::Harness> module with the C<-I> switches set correctly. | 
| 1427 |  |  |  |  |  |  |  | 
| 1428 |  |  |  |  |  |  | You can also organize your tests within subdirectories in the F<t/> directory. | 
| 1429 |  |  |  |  |  |  | To do so, use the F<test> directive in your I<Makefile.PL>. For example, if you | 
| 1430 |  |  |  |  |  |  | had tests in: | 
| 1431 |  |  |  |  |  |  |  | 
| 1432 |  |  |  |  |  |  | t/foo | 
| 1433 |  |  |  |  |  |  | t/foo/bar | 
| 1434 |  |  |  |  |  |  |  | 
| 1435 |  |  |  |  |  |  | You could tell make to run tests in both of those directories with the | 
| 1436 |  |  |  |  |  |  | following directives: | 
| 1437 |  |  |  |  |  |  |  | 
| 1438 |  |  |  |  |  |  | test => {TESTS => 't/*/*.t t/*/*/*.t'} | 
| 1439 |  |  |  |  |  |  | test => {TESTS => 't/foo/*.t t/foo/bar/*.t'} | 
| 1440 |  |  |  |  |  |  |  | 
| 1441 |  |  |  |  |  |  | The first will run all test files in all first-level subdirectories and all | 
| 1442 |  |  |  |  |  |  | subdirectories they contain. The second will run tests in only the F<t/foo> | 
| 1443 |  |  |  |  |  |  | and F<t/foo/bar>. | 
| 1444 |  |  |  |  |  |  |  | 
| 1445 |  |  |  |  |  |  | If you'd like to see the raw output of your tests, set the | 
| 1446 |  |  |  |  |  |  | C<TEST_VERBOSE> variable to true. | 
| 1447 |  |  |  |  |  |  |  | 
| 1448 |  |  |  |  |  |  | make test TEST_VERBOSE=1 | 
| 1449 |  |  |  |  |  |  |  | 
| 1450 |  |  |  |  |  |  | If you want to run particular test files, set the C<TEST_FILES> variable. | 
| 1451 |  |  |  |  |  |  | It is possible to use globbing with this mechanism. | 
| 1452 |  |  |  |  |  |  |  | 
| 1453 |  |  |  |  |  |  | make test TEST_FILES='t/foobar.t t/dagobah*.t' | 
| 1454 |  |  |  |  |  |  |  | 
| 1455 |  |  |  |  |  |  | Windows users who are using C<nmake> should note that due to a bug in C<nmake>, | 
| 1456 |  |  |  |  |  |  | when specifying C<TEST_FILES> you must use back-slashes instead of forward-slashes. | 
| 1457 |  |  |  |  |  |  |  | 
| 1458 |  |  |  |  |  |  | nmake test TEST_FILES='t\foobar.t t\dagobah*.t' | 
| 1459 |  |  |  |  |  |  |  | 
| 1460 |  |  |  |  |  |  | =head2 make testdb | 
| 1461 |  |  |  |  |  |  |  | 
| 1462 |  |  |  |  |  |  | A useful variation of the above is the target C<testdb>. It runs the | 
| 1463 |  |  |  |  |  |  | test under the Perl debugger (see L<perldebug>). If the file | 
| 1464 |  |  |  |  |  |  | F<test.pl> exists in the current directory, it is used for the test. | 
| 1465 |  |  |  |  |  |  |  | 
| 1466 |  |  |  |  |  |  | If you want to debug some other testfile, set the C<TEST_FILE> variable | 
| 1467 |  |  |  |  |  |  | thusly: | 
| 1468 |  |  |  |  |  |  |  | 
| 1469 |  |  |  |  |  |  | make testdb TEST_FILE=t/mytest.t | 
| 1470 |  |  |  |  |  |  |  | 
| 1471 |  |  |  |  |  |  | By default the debugger is called using C<-d> option to perl. If you | 
| 1472 |  |  |  |  |  |  | want to specify some other option, set the C<TESTDB_SW> variable: | 
| 1473 |  |  |  |  |  |  |  | 
| 1474 |  |  |  |  |  |  | make testdb TESTDB_SW=-Dx | 
| 1475 |  |  |  |  |  |  |  | 
| 1476 |  |  |  |  |  |  | =head2 make install | 
| 1477 |  |  |  |  |  |  |  | 
| 1478 |  |  |  |  |  |  | make alone puts all relevant files into directories that are named by | 
| 1479 |  |  |  |  |  |  | the macros INST_LIB, INST_ARCHLIB, INST_SCRIPT, INST_MAN1DIR and | 
| 1480 |  |  |  |  |  |  | INST_MAN3DIR.  All these default to something below ./blib if you are | 
| 1481 |  |  |  |  |  |  | I<not> building below the perl source directory. If you I<are> | 
| 1482 |  |  |  |  |  |  | building below the perl source, INST_LIB and INST_ARCHLIB default to | 
| 1483 |  |  |  |  |  |  | ../../lib, and INST_SCRIPT is not defined. | 
| 1484 |  |  |  |  |  |  |  | 
| 1485 |  |  |  |  |  |  | The I<install> target of the generated Makefile copies the files found | 
| 1486 |  |  |  |  |  |  | below each of the INST_* directories to their INSTALL* | 
| 1487 |  |  |  |  |  |  | counterparts. Which counterparts are chosen depends on the setting of | 
| 1488 |  |  |  |  |  |  | INSTALLDIRS according to the following table: | 
| 1489 |  |  |  |  |  |  |  | 
| 1490 |  |  |  |  |  |  | INSTALLDIRS set to | 
| 1491 |  |  |  |  |  |  | perl        site          vendor | 
| 1492 |  |  |  |  |  |  |  | 
| 1493 |  |  |  |  |  |  | PERLPREFIX      SITEPREFIX          VENDORPREFIX | 
| 1494 |  |  |  |  |  |  | INST_ARCHLIB   INSTALLARCHLIB  INSTALLSITEARCH     INSTALLVENDORARCH | 
| 1495 |  |  |  |  |  |  | INST_LIB       INSTALLPRIVLIB  INSTALLSITELIB      INSTALLVENDORLIB | 
| 1496 |  |  |  |  |  |  | INST_BIN       INSTALLBIN      INSTALLSITEBIN      INSTALLVENDORBIN | 
| 1497 |  |  |  |  |  |  | INST_SCRIPT    INSTALLSCRIPT   INSTALLSITESCRIPT   INSTALLVENDORSCRIPT | 
| 1498 |  |  |  |  |  |  | INST_MAN1DIR   INSTALLMAN1DIR  INSTALLSITEMAN1DIR  INSTALLVENDORMAN1DIR | 
| 1499 |  |  |  |  |  |  | INST_MAN3DIR   INSTALLMAN3DIR  INSTALLSITEMAN3DIR  INSTALLVENDORMAN3DIR | 
| 1500 |  |  |  |  |  |  |  | 
| 1501 |  |  |  |  |  |  | The INSTALL... macros in turn default to their %Config | 
| 1502 |  |  |  |  |  |  | ($Config{installprivlib}, $Config{installarchlib}, etc.) counterparts. | 
| 1503 |  |  |  |  |  |  |  | 
| 1504 |  |  |  |  |  |  | You can check the values of these variables on your system with | 
| 1505 |  |  |  |  |  |  |  | 
| 1506 |  |  |  |  |  |  | perl '-V:install.*' | 
| 1507 |  |  |  |  |  |  |  | 
| 1508 |  |  |  |  |  |  | And to check the sequence in which the library directories are | 
| 1509 |  |  |  |  |  |  | searched by perl, run | 
| 1510 |  |  |  |  |  |  |  | 
| 1511 |  |  |  |  |  |  | perl -le 'print join $/, @INC' | 
| 1512 |  |  |  |  |  |  |  | 
| 1513 |  |  |  |  |  |  | Sometimes older versions of the module you're installing live in other | 
| 1514 |  |  |  |  |  |  | directories in @INC.  Because Perl loads the first version of a module it | 
| 1515 |  |  |  |  |  |  | finds, not the newest, you might accidentally get one of these older | 
| 1516 |  |  |  |  |  |  | versions even after installing a brand new version.  To delete I<all other | 
| 1517 |  |  |  |  |  |  | versions of the module you're installing> (not simply older ones) set the | 
| 1518 |  |  |  |  |  |  | C<UNINST> variable. | 
| 1519 |  |  |  |  |  |  |  | 
| 1520 |  |  |  |  |  |  | make install UNINST=1 | 
| 1521 |  |  |  |  |  |  |  | 
| 1522 |  |  |  |  |  |  |  | 
| 1523 |  |  |  |  |  |  | =head2 INSTALL_BASE | 
| 1524 |  |  |  |  |  |  |  | 
| 1525 |  |  |  |  |  |  | INSTALL_BASE can be passed into Makefile.PL to change where your | 
| 1526 |  |  |  |  |  |  | module will be installed.  INSTALL_BASE is more like what everyone | 
| 1527 |  |  |  |  |  |  | else calls "prefix" than PREFIX is. | 
| 1528 |  |  |  |  |  |  |  | 
| 1529 |  |  |  |  |  |  | To have everything installed in your home directory, do the following. | 
| 1530 |  |  |  |  |  |  |  | 
| 1531 |  |  |  |  |  |  | # Unix users, INSTALL_BASE=~ works fine | 
| 1532 |  |  |  |  |  |  | perl Makefile.PL INSTALL_BASE=/path/to/your/home/dir | 
| 1533 |  |  |  |  |  |  |  | 
| 1534 |  |  |  |  |  |  | Like PREFIX, it sets several INSTALL* attributes at once.  Unlike | 
| 1535 |  |  |  |  |  |  | PREFIX it is easy to predict where the module will end up.  The | 
| 1536 |  |  |  |  |  |  | installation pattern looks like this: | 
| 1537 |  |  |  |  |  |  |  | 
| 1538 |  |  |  |  |  |  | INSTALLARCHLIB     INSTALL_BASE/lib/perl5/$Config{archname} | 
| 1539 |  |  |  |  |  |  | INSTALLPRIVLIB     INSTALL_BASE/lib/perl5 | 
| 1540 |  |  |  |  |  |  | INSTALLBIN         INSTALL_BASE/bin | 
| 1541 |  |  |  |  |  |  | INSTALLSCRIPT      INSTALL_BASE/bin | 
| 1542 |  |  |  |  |  |  | INSTALLMAN1DIR     INSTALL_BASE/man/man1 | 
| 1543 |  |  |  |  |  |  | INSTALLMAN3DIR     INSTALL_BASE/man/man3 | 
| 1544 |  |  |  |  |  |  |  | 
| 1545 |  |  |  |  |  |  | INSTALL_BASE in MakeMaker and C<--install_base> in Module::Build (as | 
| 1546 |  |  |  |  |  |  | of 0.28) install to the same location.  If you want MakeMaker and | 
| 1547 |  |  |  |  |  |  | Module::Build to install to the same location simply set INSTALL_BASE | 
| 1548 |  |  |  |  |  |  | and C<--install_base> to the same location. | 
| 1549 |  |  |  |  |  |  |  | 
| 1550 |  |  |  |  |  |  | INSTALL_BASE was added in 6.31. | 
| 1551 |  |  |  |  |  |  |  | 
| 1552 |  |  |  |  |  |  |  | 
| 1553 |  |  |  |  |  |  | =head2 PREFIX and LIB attribute | 
| 1554 |  |  |  |  |  |  |  | 
| 1555 |  |  |  |  |  |  | PREFIX and LIB can be used to set several INSTALL* attributes in one | 
| 1556 |  |  |  |  |  |  | go.  Here's an example for installing into your home directory. | 
| 1557 |  |  |  |  |  |  |  | 
| 1558 |  |  |  |  |  |  | # Unix users, PREFIX=~ works fine | 
| 1559 |  |  |  |  |  |  | perl Makefile.PL PREFIX=/path/to/your/home/dir | 
| 1560 |  |  |  |  |  |  |  | 
| 1561 |  |  |  |  |  |  | This will install all files in the module under your home directory, | 
| 1562 |  |  |  |  |  |  | with man pages and libraries going into an appropriate place (usually | 
| 1563 |  |  |  |  |  |  | ~/man and ~/lib).  How the exact location is determined is complicated | 
| 1564 |  |  |  |  |  |  | and depends on how your Perl was configured.  INSTALL_BASE works more | 
| 1565 |  |  |  |  |  |  | like what other build systems call "prefix" than PREFIX and we | 
| 1566 |  |  |  |  |  |  | recommend you use that instead. | 
| 1567 |  |  |  |  |  |  |  | 
| 1568 |  |  |  |  |  |  | Another way to specify many INSTALL directories with a single | 
| 1569 |  |  |  |  |  |  | parameter is LIB. | 
| 1570 |  |  |  |  |  |  |  | 
| 1571 |  |  |  |  |  |  | perl Makefile.PL LIB=~/lib | 
| 1572 |  |  |  |  |  |  |  | 
| 1573 |  |  |  |  |  |  | This will install the module's architecture-independent files into | 
| 1574 |  |  |  |  |  |  | ~/lib, the architecture-dependent files into ~/lib/$archname. | 
| 1575 |  |  |  |  |  |  |  | 
| 1576 |  |  |  |  |  |  | Note, that in both cases the tilde expansion is done by MakeMaker, not | 
| 1577 |  |  |  |  |  |  | by perl by default, nor by make. | 
| 1578 |  |  |  |  |  |  |  | 
| 1579 |  |  |  |  |  |  | Conflicts between parameters LIB, PREFIX and the various INSTALL* | 
| 1580 |  |  |  |  |  |  | arguments are resolved so that: | 
| 1581 |  |  |  |  |  |  |  | 
| 1582 |  |  |  |  |  |  | =over 4 | 
| 1583 |  |  |  |  |  |  |  | 
| 1584 |  |  |  |  |  |  | =item * | 
| 1585 |  |  |  |  |  |  |  | 
| 1586 |  |  |  |  |  |  | setting LIB overrides any setting of INSTALLPRIVLIB, INSTALLARCHLIB, | 
| 1587 |  |  |  |  |  |  | INSTALLSITELIB, INSTALLSITEARCH (and they are not affected by PREFIX); | 
| 1588 |  |  |  |  |  |  |  | 
| 1589 |  |  |  |  |  |  | =item * | 
| 1590 |  |  |  |  |  |  |  | 
| 1591 |  |  |  |  |  |  | without LIB, setting PREFIX replaces the initial C<$Config{prefix}> | 
| 1592 |  |  |  |  |  |  | part of those INSTALL* arguments, even if the latter are explicitly | 
| 1593 |  |  |  |  |  |  | set (but are set to still start with C<$Config{prefix}>). | 
| 1594 |  |  |  |  |  |  |  | 
| 1595 |  |  |  |  |  |  | =back | 
| 1596 |  |  |  |  |  |  |  | 
| 1597 |  |  |  |  |  |  | If the user has superuser privileges, and is not working on AFS or | 
| 1598 |  |  |  |  |  |  | relatives, then the defaults for INSTALLPRIVLIB, INSTALLARCHLIB, | 
| 1599 |  |  |  |  |  |  | INSTALLSCRIPT, etc. will be appropriate, and this incantation will be | 
| 1600 |  |  |  |  |  |  | the best: | 
| 1601 |  |  |  |  |  |  |  | 
| 1602 |  |  |  |  |  |  | perl Makefile.PL; | 
| 1603 |  |  |  |  |  |  | make; | 
| 1604 |  |  |  |  |  |  | make test | 
| 1605 |  |  |  |  |  |  | make install | 
| 1606 |  |  |  |  |  |  |  | 
| 1607 |  |  |  |  |  |  | make install by default writes some documentation of what has been | 
| 1608 |  |  |  |  |  |  | done into the file C<$(INSTALLARCHLIB)/perllocal.pod>. This feature | 
| 1609 |  |  |  |  |  |  | can be bypassed by calling make pure_install. | 
| 1610 |  |  |  |  |  |  |  | 
| 1611 |  |  |  |  |  |  | =head2 AFS users | 
| 1612 |  |  |  |  |  |  |  | 
| 1613 |  |  |  |  |  |  | will have to specify the installation directories as these most | 
| 1614 |  |  |  |  |  |  | probably have changed since perl itself has been installed. They will | 
| 1615 |  |  |  |  |  |  | have to do this by calling | 
| 1616 |  |  |  |  |  |  |  | 
| 1617 |  |  |  |  |  |  | perl Makefile.PL INSTALLSITELIB=/afs/here/today \ | 
| 1618 |  |  |  |  |  |  | INSTALLSCRIPT=/afs/there/now INSTALLMAN3DIR=/afs/for/manpages | 
| 1619 |  |  |  |  |  |  | make | 
| 1620 |  |  |  |  |  |  |  | 
| 1621 |  |  |  |  |  |  | Be careful to repeat this procedure every time you recompile an | 
| 1622 |  |  |  |  |  |  | extension, unless you are sure the AFS installation directories are | 
| 1623 |  |  |  |  |  |  | still valid. | 
| 1624 |  |  |  |  |  |  |  | 
| 1625 |  |  |  |  |  |  | =head2 Static Linking of a new Perl Binary | 
| 1626 |  |  |  |  |  |  |  | 
| 1627 |  |  |  |  |  |  | An extension that is built with the above steps is ready to use on | 
| 1628 |  |  |  |  |  |  | systems supporting dynamic loading. On systems that do not support | 
| 1629 |  |  |  |  |  |  | dynamic loading, any newly created extension has to be linked together | 
| 1630 |  |  |  |  |  |  | with the available resources. MakeMaker supports the linking process | 
| 1631 |  |  |  |  |  |  | by creating appropriate targets in the Makefile whenever an extension | 
| 1632 |  |  |  |  |  |  | is built. You can invoke the corresponding section of the makefile with | 
| 1633 |  |  |  |  |  |  |  | 
| 1634 |  |  |  |  |  |  | make perl | 
| 1635 |  |  |  |  |  |  |  | 
| 1636 |  |  |  |  |  |  | That produces a new perl binary in the current directory with all | 
| 1637 |  |  |  |  |  |  | extensions linked in that can be found in INST_ARCHLIB, SITELIBEXP, | 
| 1638 |  |  |  |  |  |  | and PERL_ARCHLIB. To do that, MakeMaker writes a new Makefile, on | 
| 1639 |  |  |  |  |  |  | UNIX, this is called F<Makefile.aperl> (may be system dependent). If you | 
| 1640 |  |  |  |  |  |  | want to force the creation of a new perl, it is recommended that you | 
| 1641 |  |  |  |  |  |  | delete this F<Makefile.aperl>, so the directories are searched through | 
| 1642 |  |  |  |  |  |  | for linkable libraries again. | 
| 1643 |  |  |  |  |  |  |  | 
| 1644 |  |  |  |  |  |  | The binary can be installed into the directory where perl normally | 
| 1645 |  |  |  |  |  |  | resides on your machine with | 
| 1646 |  |  |  |  |  |  |  | 
| 1647 |  |  |  |  |  |  | make inst_perl | 
| 1648 |  |  |  |  |  |  |  | 
| 1649 |  |  |  |  |  |  | To produce a perl binary with a different name than C<perl>, either say | 
| 1650 |  |  |  |  |  |  |  | 
| 1651 |  |  |  |  |  |  | perl Makefile.PL MAP_TARGET=myperl | 
| 1652 |  |  |  |  |  |  | make myperl | 
| 1653 |  |  |  |  |  |  | make inst_perl | 
| 1654 |  |  |  |  |  |  |  | 
| 1655 |  |  |  |  |  |  | or say | 
| 1656 |  |  |  |  |  |  |  | 
| 1657 |  |  |  |  |  |  | perl Makefile.PL | 
| 1658 |  |  |  |  |  |  | make myperl MAP_TARGET=myperl | 
| 1659 |  |  |  |  |  |  | make inst_perl MAP_TARGET=myperl | 
| 1660 |  |  |  |  |  |  |  | 
| 1661 |  |  |  |  |  |  | In any case you will be prompted with the correct invocation of the | 
| 1662 |  |  |  |  |  |  | C<inst_perl> target that installs the new binary into INSTALLBIN. | 
| 1663 |  |  |  |  |  |  |  | 
| 1664 |  |  |  |  |  |  | make inst_perl by default writes some documentation of what has been | 
| 1665 |  |  |  |  |  |  | done into the file C<$(INSTALLARCHLIB)/perllocal.pod>. This | 
| 1666 |  |  |  |  |  |  | can be bypassed by calling make pure_inst_perl. | 
| 1667 |  |  |  |  |  |  |  | 
| 1668 |  |  |  |  |  |  | Warning: the inst_perl: target will most probably overwrite your | 
| 1669 |  |  |  |  |  |  | existing perl binary. Use with care! | 
| 1670 |  |  |  |  |  |  |  | 
| 1671 |  |  |  |  |  |  | Sometimes you might want to build a statically linked perl although | 
| 1672 |  |  |  |  |  |  | your system supports dynamic loading. In this case you may explicitly | 
| 1673 |  |  |  |  |  |  | set the linktype with the invocation of the Makefile.PL or make: | 
| 1674 |  |  |  |  |  |  |  | 
| 1675 |  |  |  |  |  |  | perl Makefile.PL LINKTYPE=static    # recommended | 
| 1676 |  |  |  |  |  |  |  | 
| 1677 |  |  |  |  |  |  | or | 
| 1678 |  |  |  |  |  |  |  | 
| 1679 |  |  |  |  |  |  | make LINKTYPE=static                # works on most systems | 
| 1680 |  |  |  |  |  |  |  | 
| 1681 |  |  |  |  |  |  | =head2 Determination of Perl Library and Installation Locations | 
| 1682 |  |  |  |  |  |  |  | 
| 1683 |  |  |  |  |  |  | MakeMaker needs to know, or to guess, where certain things are | 
| 1684 |  |  |  |  |  |  | located.  Especially INST_LIB and INST_ARCHLIB (where to put the files | 
| 1685 |  |  |  |  |  |  | during the make(1) run), PERL_LIB and PERL_ARCHLIB (where to read | 
| 1686 |  |  |  |  |  |  | existing modules from), and PERL_INC (header files and C<libperl*.*>). | 
| 1687 |  |  |  |  |  |  |  | 
| 1688 |  |  |  |  |  |  | Extensions may be built either using the contents of the perl source | 
| 1689 |  |  |  |  |  |  | directory tree or from the installed perl library. The recommended way | 
| 1690 |  |  |  |  |  |  | is to build extensions after you have run 'make install' on perl | 
| 1691 |  |  |  |  |  |  | itself. You can do that in any directory on your hard disk that is not | 
| 1692 |  |  |  |  |  |  | below the perl source tree. The support for extensions below the ext | 
| 1693 |  |  |  |  |  |  | directory of the perl distribution is only good for the standard | 
| 1694 |  |  |  |  |  |  | extensions that come with perl. | 
| 1695 |  |  |  |  |  |  |  | 
| 1696 |  |  |  |  |  |  | If an extension is being built below the C<ext/> directory of the perl | 
| 1697 |  |  |  |  |  |  | source then MakeMaker will set PERL_SRC automatically (e.g., | 
| 1698 |  |  |  |  |  |  | C<../..>).  If PERL_SRC is defined and the extension is recognized as | 
| 1699 |  |  |  |  |  |  | a standard extension, then other variables default to the following: | 
| 1700 |  |  |  |  |  |  |  | 
| 1701 |  |  |  |  |  |  | PERL_INC     = PERL_SRC | 
| 1702 |  |  |  |  |  |  | PERL_LIB     = PERL_SRC/lib | 
| 1703 |  |  |  |  |  |  | PERL_ARCHLIB = PERL_SRC/lib | 
| 1704 |  |  |  |  |  |  | INST_LIB     = PERL_LIB | 
| 1705 |  |  |  |  |  |  | INST_ARCHLIB = PERL_ARCHLIB | 
| 1706 |  |  |  |  |  |  |  | 
| 1707 |  |  |  |  |  |  | If an extension is being built away from the perl source then MakeMaker | 
| 1708 |  |  |  |  |  |  | will leave PERL_SRC undefined and default to using the installed copy | 
| 1709 |  |  |  |  |  |  | of the perl library. The other variables default to the following: | 
| 1710 |  |  |  |  |  |  |  | 
| 1711 |  |  |  |  |  |  | PERL_INC     = $archlibexp/CORE | 
| 1712 |  |  |  |  |  |  | PERL_LIB     = $privlibexp | 
| 1713 |  |  |  |  |  |  | PERL_ARCHLIB = $archlibexp | 
| 1714 |  |  |  |  |  |  | INST_LIB     = ./blib/lib | 
| 1715 |  |  |  |  |  |  | INST_ARCHLIB = ./blib/arch | 
| 1716 |  |  |  |  |  |  |  | 
| 1717 |  |  |  |  |  |  | If perl has not yet been installed then PERL_SRC can be defined on the | 
| 1718 |  |  |  |  |  |  | command line as shown in the previous section. | 
| 1719 |  |  |  |  |  |  |  | 
| 1720 |  |  |  |  |  |  |  | 
| 1721 |  |  |  |  |  |  | =head2 Which architecture dependent directory? | 
| 1722 |  |  |  |  |  |  |  | 
| 1723 |  |  |  |  |  |  | If you don't want to keep the defaults for the INSTALL* macros, | 
| 1724 |  |  |  |  |  |  | MakeMaker helps you to minimize the typing needed: the usual | 
| 1725 |  |  |  |  |  |  | relationship between INSTALLPRIVLIB and INSTALLARCHLIB is determined | 
| 1726 |  |  |  |  |  |  | by Configure at perl compilation time. MakeMaker supports the user who | 
| 1727 |  |  |  |  |  |  | sets INSTALLPRIVLIB. If INSTALLPRIVLIB is set, but INSTALLARCHLIB not, | 
| 1728 |  |  |  |  |  |  | then MakeMaker defaults the latter to be the same subdirectory of | 
| 1729 |  |  |  |  |  |  | INSTALLPRIVLIB as Configure decided for the counterparts in %Config, | 
| 1730 |  |  |  |  |  |  | otherwise it defaults to INSTALLPRIVLIB. The same relationship holds | 
| 1731 |  |  |  |  |  |  | for INSTALLSITELIB and INSTALLSITEARCH. | 
| 1732 |  |  |  |  |  |  |  | 
| 1733 |  |  |  |  |  |  | MakeMaker gives you much more freedom than needed to configure | 
| 1734 |  |  |  |  |  |  | internal variables and get different results. It is worth mentioning | 
| 1735 |  |  |  |  |  |  | that make(1) also lets you configure most of the variables that are | 
| 1736 |  |  |  |  |  |  | used in the Makefile. But in the majority of situations this will not | 
| 1737 |  |  |  |  |  |  | be necessary, and should only be done if the author of a package | 
| 1738 |  |  |  |  |  |  | recommends it (or you know what you're doing). | 
| 1739 |  |  |  |  |  |  |  | 
| 1740 |  |  |  |  |  |  | =head2 Using Attributes and Parameters | 
| 1741 |  |  |  |  |  |  |  | 
| 1742 |  |  |  |  |  |  | The following attributes may be specified as arguments to WriteMakefile() | 
| 1743 |  |  |  |  |  |  | or as NAME=VALUE pairs on the command line. Attributes that became | 
| 1744 |  |  |  |  |  |  | available with later versions of MakeMaker are indicated. | 
| 1745 |  |  |  |  |  |  |  | 
| 1746 |  |  |  |  |  |  | In order to maintain portability of attributes with older versions of | 
| 1747 |  |  |  |  |  |  | MakeMaker you may want to use L<App::EUMM::Upgrade> with your C<Makefile.PL>. | 
| 1748 |  |  |  |  |  |  |  | 
| 1749 |  |  |  |  |  |  | =over 2 | 
| 1750 |  |  |  |  |  |  |  | 
| 1751 |  |  |  |  |  |  | =item ABSTRACT | 
| 1752 |  |  |  |  |  |  |  | 
| 1753 |  |  |  |  |  |  | One line description of the module. Will be included in PPD file. | 
| 1754 |  |  |  |  |  |  |  | 
| 1755 |  |  |  |  |  |  | =item ABSTRACT_FROM | 
| 1756 |  |  |  |  |  |  |  | 
| 1757 |  |  |  |  |  |  | Name of the file that contains the package description. MakeMaker looks | 
| 1758 |  |  |  |  |  |  | for a line in the POD matching /^($package\s-\s)(.*)/. This is typically | 
| 1759 |  |  |  |  |  |  | the first line in the "=head1 NAME" section. $2 becomes the abstract. | 
| 1760 |  |  |  |  |  |  |  | 
| 1761 |  |  |  |  |  |  | =item AUTHOR | 
| 1762 |  |  |  |  |  |  |  | 
| 1763 |  |  |  |  |  |  | Array of strings containing name (and email address) of package author(s). | 
| 1764 |  |  |  |  |  |  | Is used in CPAN Meta files (META.yml or META.json) and PPD | 
| 1765 |  |  |  |  |  |  | (Perl Package Description) files for PPM (Perl Package Manager). | 
| 1766 |  |  |  |  |  |  |  | 
| 1767 |  |  |  |  |  |  | =item BINARY_LOCATION | 
| 1768 |  |  |  |  |  |  |  | 
| 1769 |  |  |  |  |  |  | Used when creating PPD files for binary packages.  It can be set to a | 
| 1770 |  |  |  |  |  |  | full or relative path or URL to the binary archive for a particular | 
| 1771 |  |  |  |  |  |  | architecture.  For example: | 
| 1772 |  |  |  |  |  |  |  | 
| 1773 |  |  |  |  |  |  | perl Makefile.PL BINARY_LOCATION=x86/Agent.tar.gz | 
| 1774 |  |  |  |  |  |  |  | 
| 1775 |  |  |  |  |  |  | builds a PPD package that references a binary of the C<Agent> package, | 
| 1776 |  |  |  |  |  |  | located in the C<x86> directory relative to the PPD itself. | 
| 1777 |  |  |  |  |  |  |  | 
| 1778 |  |  |  |  |  |  | =item BUILD_REQUIRES | 
| 1779 |  |  |  |  |  |  |  | 
| 1780 |  |  |  |  |  |  | Available in version 6.55_03 and above. | 
| 1781 |  |  |  |  |  |  |  | 
| 1782 |  |  |  |  |  |  | A hash of modules that are needed to build your module but not run it. | 
| 1783 |  |  |  |  |  |  |  | 
| 1784 |  |  |  |  |  |  | This will go into the C<build_requires> field of your F<META.yml> and the C<build> of the C<prereqs> field of your F<META.json>. | 
| 1785 |  |  |  |  |  |  |  | 
| 1786 |  |  |  |  |  |  | Defaults to C<<< { "ExtUtils::MakeMaker" => 0 } >>> if this attribute is not specified. | 
| 1787 |  |  |  |  |  |  |  | 
| 1788 |  |  |  |  |  |  | The format is the same as PREREQ_PM. | 
| 1789 |  |  |  |  |  |  |  | 
| 1790 |  |  |  |  |  |  | =item C | 
| 1791 |  |  |  |  |  |  |  | 
| 1792 |  |  |  |  |  |  | Ref to array of *.c file names. Initialised from a directory scan | 
| 1793 |  |  |  |  |  |  | and the values portion of the XS attribute hash. This is not | 
| 1794 |  |  |  |  |  |  | currently used by MakeMaker but may be handy in Makefile.PLs. | 
| 1795 |  |  |  |  |  |  |  | 
| 1796 |  |  |  |  |  |  | =item CCFLAGS | 
| 1797 |  |  |  |  |  |  |  | 
| 1798 |  |  |  |  |  |  | String that will be included in the compiler call command line between | 
| 1799 |  |  |  |  |  |  | the arguments INC and OPTIMIZE. Note that setting this will overwrite its | 
| 1800 |  |  |  |  |  |  | default value (C<$Config::Config{ccflags}>); to preserve that, include | 
| 1801 |  |  |  |  |  |  | the default value directly, e.g.: | 
| 1802 |  |  |  |  |  |  |  | 
| 1803 |  |  |  |  |  |  | CCFLAGS => "$Config::Config{ccflags} ..." | 
| 1804 |  |  |  |  |  |  |  | 
| 1805 |  |  |  |  |  |  | =item CONFIG | 
| 1806 |  |  |  |  |  |  |  | 
| 1807 |  |  |  |  |  |  | Arrayref. E.g. [qw(archname manext)] defines ARCHNAME & MANEXT from | 
| 1808 |  |  |  |  |  |  | config.sh. MakeMaker will add to CONFIG the following values anyway: | 
| 1809 |  |  |  |  |  |  | ar | 
| 1810 |  |  |  |  |  |  | cc | 
| 1811 |  |  |  |  |  |  | cccdlflags | 
| 1812 |  |  |  |  |  |  | ccdlflags | 
| 1813 |  |  |  |  |  |  | cpprun | 
| 1814 |  |  |  |  |  |  | dlext | 
| 1815 |  |  |  |  |  |  | dlsrc | 
| 1816 |  |  |  |  |  |  | ld | 
| 1817 |  |  |  |  |  |  | lddlflags | 
| 1818 |  |  |  |  |  |  | ldflags | 
| 1819 |  |  |  |  |  |  | libc | 
| 1820 |  |  |  |  |  |  | lib_ext | 
| 1821 |  |  |  |  |  |  | obj_ext | 
| 1822 |  |  |  |  |  |  | ranlib | 
| 1823 |  |  |  |  |  |  | sitelibexp | 
| 1824 |  |  |  |  |  |  | sitearchexp | 
| 1825 |  |  |  |  |  |  | so | 
| 1826 |  |  |  |  |  |  |  | 
| 1827 |  |  |  |  |  |  | =item CONFIGURE | 
| 1828 |  |  |  |  |  |  |  | 
| 1829 |  |  |  |  |  |  | CODE reference. The subroutine should return a hash reference. The | 
| 1830 |  |  |  |  |  |  | hash may contain further attributes, e.g. {LIBS =E<gt> ...}, that have to | 
| 1831 |  |  |  |  |  |  | be determined by some evaluation method. | 
| 1832 |  |  |  |  |  |  |  | 
| 1833 |  |  |  |  |  |  | =item CONFIGURE_REQUIRES | 
| 1834 |  |  |  |  |  |  |  | 
| 1835 |  |  |  |  |  |  | Available in version 6.52 and above. | 
| 1836 |  |  |  |  |  |  |  | 
| 1837 |  |  |  |  |  |  | A hash of modules that are required to run Makefile.PL itself, but not | 
| 1838 |  |  |  |  |  |  | to run your distribution. | 
| 1839 |  |  |  |  |  |  |  | 
| 1840 |  |  |  |  |  |  | This will go into the C<configure_requires> field of your F<META.yml> and the C<configure> of the C<prereqs> field of your F<META.json>. | 
| 1841 |  |  |  |  |  |  |  | 
| 1842 |  |  |  |  |  |  | Defaults to C<<< { "ExtUtils::MakeMaker" => 0 } >>> if this attribute is not specified. | 
| 1843 |  |  |  |  |  |  |  | 
| 1844 |  |  |  |  |  |  | The format is the same as PREREQ_PM. | 
| 1845 |  |  |  |  |  |  |  | 
| 1846 |  |  |  |  |  |  | =item DEFINE | 
| 1847 |  |  |  |  |  |  |  | 
| 1848 |  |  |  |  |  |  | Something like C<"-DHAVE_UNISTD_H"> | 
| 1849 |  |  |  |  |  |  |  | 
| 1850 |  |  |  |  |  |  | =item DESTDIR | 
| 1851 |  |  |  |  |  |  |  | 
| 1852 |  |  |  |  |  |  | This is the root directory into which the code will be installed.  It | 
| 1853 |  |  |  |  |  |  | I<prepends itself to the normal prefix>.  For example, if your code | 
| 1854 |  |  |  |  |  |  | would normally go into F</usr/local/lib/perl> you could set DESTDIR=~/tmp/ | 
| 1855 |  |  |  |  |  |  | and installation would go into F<~/tmp/usr/local/lib/perl>. | 
| 1856 |  |  |  |  |  |  |  | 
| 1857 |  |  |  |  |  |  | This is primarily of use for people who repackage Perl modules. | 
| 1858 |  |  |  |  |  |  |  | 
| 1859 |  |  |  |  |  |  | NOTE: Due to the nature of make, it is important that you put the trailing | 
| 1860 |  |  |  |  |  |  | slash on your DESTDIR.  F<~/tmp/> not F<~/tmp>. | 
| 1861 |  |  |  |  |  |  |  | 
| 1862 |  |  |  |  |  |  | =item DIR | 
| 1863 |  |  |  |  |  |  |  | 
| 1864 |  |  |  |  |  |  | Ref to array of subdirectories containing Makefile.PLs e.g. ['sdbm'] | 
| 1865 |  |  |  |  |  |  | in ext/SDBM_File | 
| 1866 |  |  |  |  |  |  |  | 
| 1867 |  |  |  |  |  |  | =item DISTNAME | 
| 1868 |  |  |  |  |  |  |  | 
| 1869 |  |  |  |  |  |  | A safe filename for the package. | 
| 1870 |  |  |  |  |  |  |  | 
| 1871 |  |  |  |  |  |  | Defaults to NAME below but with :: replaced with -. | 
| 1872 |  |  |  |  |  |  |  | 
| 1873 |  |  |  |  |  |  | For example, Foo::Bar becomes Foo-Bar. | 
| 1874 |  |  |  |  |  |  |  | 
| 1875 |  |  |  |  |  |  | =item DISTVNAME | 
| 1876 |  |  |  |  |  |  |  | 
| 1877 |  |  |  |  |  |  | Your name for distributing the package with the version number | 
| 1878 |  |  |  |  |  |  | included.  This is used by 'make dist' to name the resulting archive | 
| 1879 |  |  |  |  |  |  | file. | 
| 1880 |  |  |  |  |  |  |  | 
| 1881 |  |  |  |  |  |  | Defaults to DISTNAME-VERSION. | 
| 1882 |  |  |  |  |  |  |  | 
| 1883 |  |  |  |  |  |  | For example, version 1.04 of Foo::Bar becomes Foo-Bar-1.04. | 
| 1884 |  |  |  |  |  |  |  | 
| 1885 |  |  |  |  |  |  | On some OS's where . has special meaning VERSION_SYM may be used in | 
| 1886 |  |  |  |  |  |  | place of VERSION. | 
| 1887 |  |  |  |  |  |  |  | 
| 1888 |  |  |  |  |  |  | =item DLEXT | 
| 1889 |  |  |  |  |  |  |  | 
| 1890 |  |  |  |  |  |  | Specifies the extension of the module's loadable object. For example: | 
| 1891 |  |  |  |  |  |  |  | 
| 1892 |  |  |  |  |  |  | DLEXT => 'unusual_ext', # Default value is $Config{so} | 
| 1893 |  |  |  |  |  |  |  | 
| 1894 |  |  |  |  |  |  | NOTE: When using this option to alter the extension of a module's | 
| 1895 |  |  |  |  |  |  | loadable object, it is also necessary that the module's pm file | 
| 1896 |  |  |  |  |  |  | specifies the same change: | 
| 1897 |  |  |  |  |  |  |  | 
| 1898 |  |  |  |  |  |  | local $DynaLoader::dl_dlext = 'unusual_ext'; | 
| 1899 |  |  |  |  |  |  |  | 
| 1900 |  |  |  |  |  |  | =item DL_FUNCS | 
| 1901 |  |  |  |  |  |  |  | 
| 1902 |  |  |  |  |  |  | Hashref of symbol names for routines to be made available as universal | 
| 1903 |  |  |  |  |  |  | symbols.  Each key/value pair consists of the package name and an | 
| 1904 |  |  |  |  |  |  | array of routine names in that package.  Used only under AIX, OS/2, | 
| 1905 |  |  |  |  |  |  | VMS and Win32 at present.  The routine names supplied will be expanded | 
| 1906 |  |  |  |  |  |  | in the same way as XSUB names are expanded by the XS() macro. | 
| 1907 |  |  |  |  |  |  | Defaults to | 
| 1908 |  |  |  |  |  |  |  | 
| 1909 |  |  |  |  |  |  | {"$(NAME)" => ["boot_$(NAME)" ] } | 
| 1910 |  |  |  |  |  |  |  | 
| 1911 |  |  |  |  |  |  | e.g. | 
| 1912 |  |  |  |  |  |  |  | 
| 1913 |  |  |  |  |  |  | {"RPC" => [qw( boot_rpcb rpcb_gettime getnetconfigent )], | 
| 1914 |  |  |  |  |  |  | "NetconfigPtr" => [ 'DESTROY'] } | 
| 1915 |  |  |  |  |  |  |  | 
| 1916 |  |  |  |  |  |  | Please see the L<ExtUtils::Mksymlists> documentation for more information | 
| 1917 |  |  |  |  |  |  | about the DL_FUNCS, DL_VARS and FUNCLIST attributes. | 
| 1918 |  |  |  |  |  |  |  | 
| 1919 |  |  |  |  |  |  | =item DL_VARS | 
| 1920 |  |  |  |  |  |  |  | 
| 1921 |  |  |  |  |  |  | Array of symbol names for variables to be made available as universal symbols. | 
| 1922 |  |  |  |  |  |  | Used only under AIX, OS/2, VMS and Win32 at present.  Defaults to []. | 
| 1923 |  |  |  |  |  |  | (e.g. [ qw(Foo_version Foo_numstreams Foo_tree ) ]) | 
| 1924 |  |  |  |  |  |  |  | 
| 1925 |  |  |  |  |  |  | =item EXCLUDE_EXT | 
| 1926 |  |  |  |  |  |  |  | 
| 1927 |  |  |  |  |  |  | Array of extension names to exclude when doing a static build.  This | 
| 1928 |  |  |  |  |  |  | is ignored if INCLUDE_EXT is present.  Consult INCLUDE_EXT for more | 
| 1929 |  |  |  |  |  |  | details.  (e.g.  [ qw( Socket POSIX ) ] ) | 
| 1930 |  |  |  |  |  |  |  | 
| 1931 |  |  |  |  |  |  | This attribute may be most useful when specified as a string on the | 
| 1932 |  |  |  |  |  |  | command line:  perl Makefile.PL EXCLUDE_EXT='Socket Safe' | 
| 1933 |  |  |  |  |  |  |  | 
| 1934 |  |  |  |  |  |  | =item EXE_FILES | 
| 1935 |  |  |  |  |  |  |  | 
| 1936 |  |  |  |  |  |  | Ref to array of executable files. The files will be copied to the | 
| 1937 |  |  |  |  |  |  | INST_SCRIPT directory. Make realclean will delete them from there | 
| 1938 |  |  |  |  |  |  | again. | 
| 1939 |  |  |  |  |  |  |  | 
| 1940 |  |  |  |  |  |  | If your executables start with something like #!perl or | 
| 1941 |  |  |  |  |  |  | #!/usr/bin/perl MakeMaker will change this to the path of the perl | 
| 1942 |  |  |  |  |  |  | 'Makefile.PL' was invoked with so the programs will be sure to run | 
| 1943 |  |  |  |  |  |  | properly even if perl is not in /usr/bin/perl. | 
| 1944 |  |  |  |  |  |  |  | 
| 1945 |  |  |  |  |  |  | =item FIRST_MAKEFILE | 
| 1946 |  |  |  |  |  |  |  | 
| 1947 |  |  |  |  |  |  | The name of the Makefile to be produced.  This is used for the second | 
| 1948 |  |  |  |  |  |  | Makefile that will be produced for the MAP_TARGET. | 
| 1949 |  |  |  |  |  |  |  | 
| 1950 |  |  |  |  |  |  | Defaults to 'Makefile' or 'Descrip.MMS' on VMS. | 
| 1951 |  |  |  |  |  |  |  | 
| 1952 |  |  |  |  |  |  | (Note: we couldn't use MAKEFILE because dmake uses this for something | 
| 1953 |  |  |  |  |  |  | else). | 
| 1954 |  |  |  |  |  |  |  | 
| 1955 |  |  |  |  |  |  | =item FULLPERL | 
| 1956 |  |  |  |  |  |  |  | 
| 1957 |  |  |  |  |  |  | Perl binary able to run this extension, load XS modules, etc... | 
| 1958 |  |  |  |  |  |  |  | 
| 1959 |  |  |  |  |  |  | =item FULLPERLRUN | 
| 1960 |  |  |  |  |  |  |  | 
| 1961 |  |  |  |  |  |  | Like PERLRUN, except it uses FULLPERL. | 
| 1962 |  |  |  |  |  |  |  | 
| 1963 |  |  |  |  |  |  | =item FULLPERLRUNINST | 
| 1964 |  |  |  |  |  |  |  | 
| 1965 |  |  |  |  |  |  | Like PERLRUNINST, except it uses FULLPERL. | 
| 1966 |  |  |  |  |  |  |  | 
| 1967 |  |  |  |  |  |  | =item FUNCLIST | 
| 1968 |  |  |  |  |  |  |  | 
| 1969 |  |  |  |  |  |  | This provides an alternate means to specify function names to be | 
| 1970 |  |  |  |  |  |  | exported from the extension.  Its value is a reference to an | 
| 1971 |  |  |  |  |  |  | array of function names to be exported by the extension.  These | 
| 1972 |  |  |  |  |  |  | names are passed through unaltered to the linker options file. | 
| 1973 |  |  |  |  |  |  |  | 
| 1974 |  |  |  |  |  |  | =item H | 
| 1975 |  |  |  |  |  |  |  | 
| 1976 |  |  |  |  |  |  | Ref to array of *.h file names. Similar to C. | 
| 1977 |  |  |  |  |  |  |  | 
| 1978 |  |  |  |  |  |  | =item IMPORTS | 
| 1979 |  |  |  |  |  |  |  | 
| 1980 |  |  |  |  |  |  | This attribute is used to specify names to be imported into the | 
| 1981 |  |  |  |  |  |  | extension. Takes a hash ref. | 
| 1982 |  |  |  |  |  |  |  | 
| 1983 |  |  |  |  |  |  | It is only used on OS/2 and Win32. | 
| 1984 |  |  |  |  |  |  |  | 
| 1985 |  |  |  |  |  |  | =item INC | 
| 1986 |  |  |  |  |  |  |  | 
| 1987 |  |  |  |  |  |  | Include file dirs eg: C<"-I/usr/5include -I/path/to/inc"> | 
| 1988 |  |  |  |  |  |  |  | 
| 1989 |  |  |  |  |  |  | =item INCLUDE_EXT | 
| 1990 |  |  |  |  |  |  |  | 
| 1991 |  |  |  |  |  |  | Array of extension names to be included when doing a static build. | 
| 1992 |  |  |  |  |  |  | MakeMaker will normally build with all of the installed extensions when | 
| 1993 |  |  |  |  |  |  | doing a static build, and that is usually the desired behavior.  If | 
| 1994 |  |  |  |  |  |  | INCLUDE_EXT is present then MakeMaker will build only with those extensions | 
| 1995 |  |  |  |  |  |  | which are explicitly mentioned. (e.g.  [ qw( Socket POSIX ) ]) | 
| 1996 |  |  |  |  |  |  |  | 
| 1997 |  |  |  |  |  |  | It is not necessary to mention DynaLoader or the current extension when | 
| 1998 |  |  |  |  |  |  | filling in INCLUDE_EXT.  If the INCLUDE_EXT is mentioned but is empty then | 
| 1999 |  |  |  |  |  |  | only DynaLoader and the current extension will be included in the build. | 
| 2000 |  |  |  |  |  |  |  | 
| 2001 |  |  |  |  |  |  | This attribute may be most useful when specified as a string on the | 
| 2002 |  |  |  |  |  |  | command line:  perl Makefile.PL INCLUDE_EXT='POSIX Socket Devel::Peek' | 
| 2003 |  |  |  |  |  |  |  | 
| 2004 |  |  |  |  |  |  | =item INSTALLARCHLIB | 
| 2005 |  |  |  |  |  |  |  | 
| 2006 |  |  |  |  |  |  | Used by 'make install', which copies files from INST_ARCHLIB to this | 
| 2007 |  |  |  |  |  |  | directory if INSTALLDIRS is set to perl. | 
| 2008 |  |  |  |  |  |  |  | 
| 2009 |  |  |  |  |  |  | =item INSTALLBIN | 
| 2010 |  |  |  |  |  |  |  | 
| 2011 |  |  |  |  |  |  | Directory to install binary files (e.g. tkperl) into if | 
| 2012 |  |  |  |  |  |  | INSTALLDIRS=perl. | 
| 2013 |  |  |  |  |  |  |  | 
| 2014 |  |  |  |  |  |  | =item INSTALLDIRS | 
| 2015 |  |  |  |  |  |  |  | 
| 2016 |  |  |  |  |  |  | Determines which of the sets of installation directories to choose: | 
| 2017 |  |  |  |  |  |  | perl, site or vendor.  Defaults to site. | 
| 2018 |  |  |  |  |  |  |  | 
| 2019 |  |  |  |  |  |  | =item INSTALLMAN1DIR | 
| 2020 |  |  |  |  |  |  |  | 
| 2021 |  |  |  |  |  |  | =item INSTALLMAN3DIR | 
| 2022 |  |  |  |  |  |  |  | 
| 2023 |  |  |  |  |  |  | These directories get the man pages at 'make install' time if | 
| 2024 |  |  |  |  |  |  | INSTALLDIRS=perl.  Defaults to $Config{installman*dir}. | 
| 2025 |  |  |  |  |  |  |  | 
| 2026 |  |  |  |  |  |  | If set to 'none', no man pages will be installed. | 
| 2027 |  |  |  |  |  |  |  | 
| 2028 |  |  |  |  |  |  | =item INSTALLPRIVLIB | 
| 2029 |  |  |  |  |  |  |  | 
| 2030 |  |  |  |  |  |  | Used by 'make install', which copies files from INST_LIB to this | 
| 2031 |  |  |  |  |  |  | directory if INSTALLDIRS is set to perl. | 
| 2032 |  |  |  |  |  |  |  | 
| 2033 |  |  |  |  |  |  | Defaults to $Config{installprivlib}. | 
| 2034 |  |  |  |  |  |  |  | 
| 2035 |  |  |  |  |  |  | =item INSTALLSCRIPT | 
| 2036 |  |  |  |  |  |  |  | 
| 2037 |  |  |  |  |  |  | Available in version 6.30_02 and above. | 
| 2038 |  |  |  |  |  |  |  | 
| 2039 |  |  |  |  |  |  | Used by 'make install' which copies files from INST_SCRIPT to this | 
| 2040 |  |  |  |  |  |  | directory if INSTALLDIRS=perl. | 
| 2041 |  |  |  |  |  |  |  | 
| 2042 |  |  |  |  |  |  | =item INSTALLSITEARCH | 
| 2043 |  |  |  |  |  |  |  | 
| 2044 |  |  |  |  |  |  | Used by 'make install', which copies files from INST_ARCHLIB to this | 
| 2045 |  |  |  |  |  |  | directory if INSTALLDIRS is set to site (default). | 
| 2046 |  |  |  |  |  |  |  | 
| 2047 |  |  |  |  |  |  | =item INSTALLSITEBIN | 
| 2048 |  |  |  |  |  |  |  | 
| 2049 |  |  |  |  |  |  | Used by 'make install', which copies files from INST_BIN to this | 
| 2050 |  |  |  |  |  |  | directory if INSTALLDIRS is set to site (default). | 
| 2051 |  |  |  |  |  |  |  | 
| 2052 |  |  |  |  |  |  | =item INSTALLSITELIB | 
| 2053 |  |  |  |  |  |  |  | 
| 2054 |  |  |  |  |  |  | Used by 'make install', which copies files from INST_LIB to this | 
| 2055 |  |  |  |  |  |  | directory if INSTALLDIRS is set to site (default). | 
| 2056 |  |  |  |  |  |  |  | 
| 2057 |  |  |  |  |  |  | =item INSTALLSITEMAN1DIR | 
| 2058 |  |  |  |  |  |  |  | 
| 2059 |  |  |  |  |  |  | =item INSTALLSITEMAN3DIR | 
| 2060 |  |  |  |  |  |  |  | 
| 2061 |  |  |  |  |  |  | These directories get the man pages at 'make install' time if | 
| 2062 |  |  |  |  |  |  | INSTALLDIRS=site (default).  Defaults to | 
| 2063 |  |  |  |  |  |  | $(SITEPREFIX)/man/man$(MAN*EXT). | 
| 2064 |  |  |  |  |  |  |  | 
| 2065 |  |  |  |  |  |  | If set to 'none', no man pages will be installed. | 
| 2066 |  |  |  |  |  |  |  | 
| 2067 |  |  |  |  |  |  | =item INSTALLSITESCRIPT | 
| 2068 |  |  |  |  |  |  |  | 
| 2069 |  |  |  |  |  |  | Used by 'make install' which copies files from INST_SCRIPT to this | 
| 2070 |  |  |  |  |  |  | directory if INSTALLDIRS is set to site (default). | 
| 2071 |  |  |  |  |  |  |  | 
| 2072 |  |  |  |  |  |  | =item INSTALLVENDORARCH | 
| 2073 |  |  |  |  |  |  |  | 
| 2074 |  |  |  |  |  |  | Used by 'make install', which copies files from INST_ARCHLIB to this | 
| 2075 |  |  |  |  |  |  | directory if INSTALLDIRS is set to vendor. Note that if you do not set | 
| 2076 |  |  |  |  |  |  | this, the value of INSTALLVENDORLIB will be used, which is probably not | 
| 2077 |  |  |  |  |  |  | what you want. | 
| 2078 |  |  |  |  |  |  |  | 
| 2079 |  |  |  |  |  |  | =item INSTALLVENDORBIN | 
| 2080 |  |  |  |  |  |  |  | 
| 2081 |  |  |  |  |  |  | Used by 'make install', which copies files from INST_BIN to this | 
| 2082 |  |  |  |  |  |  | directory if INSTALLDIRS is set to vendor. | 
| 2083 |  |  |  |  |  |  |  | 
| 2084 |  |  |  |  |  |  | =item INSTALLVENDORLIB | 
| 2085 |  |  |  |  |  |  |  | 
| 2086 |  |  |  |  |  |  | Used by 'make install', which copies files from INST_LIB to this | 
| 2087 |  |  |  |  |  |  | directory if INSTALLDIRS is set to vendor. | 
| 2088 |  |  |  |  |  |  |  | 
| 2089 |  |  |  |  |  |  | =item INSTALLVENDORMAN1DIR | 
| 2090 |  |  |  |  |  |  |  | 
| 2091 |  |  |  |  |  |  | =item INSTALLVENDORMAN3DIR | 
| 2092 |  |  |  |  |  |  |  | 
| 2093 |  |  |  |  |  |  | These directories get the man pages at 'make install' time if | 
| 2094 |  |  |  |  |  |  | INSTALLDIRS=vendor.  Defaults to $(VENDORPREFIX)/man/man$(MAN*EXT). | 
| 2095 |  |  |  |  |  |  |  | 
| 2096 |  |  |  |  |  |  | If set to 'none', no man pages will be installed. | 
| 2097 |  |  |  |  |  |  |  | 
| 2098 |  |  |  |  |  |  | =item INSTALLVENDORSCRIPT | 
| 2099 |  |  |  |  |  |  |  | 
| 2100 |  |  |  |  |  |  | Available in version 6.30_02 and above. | 
| 2101 |  |  |  |  |  |  |  | 
| 2102 |  |  |  |  |  |  | Used by 'make install' which copies files from INST_SCRIPT to this | 
| 2103 |  |  |  |  |  |  | directory if INSTALLDIRS is set to vendor. | 
| 2104 |  |  |  |  |  |  |  | 
| 2105 |  |  |  |  |  |  | =item INST_ARCHLIB | 
| 2106 |  |  |  |  |  |  |  | 
| 2107 |  |  |  |  |  |  | Same as INST_LIB for architecture dependent files. | 
| 2108 |  |  |  |  |  |  |  | 
| 2109 |  |  |  |  |  |  | =item INST_BIN | 
| 2110 |  |  |  |  |  |  |  | 
| 2111 |  |  |  |  |  |  | Directory to put real binary files during 'make'. These will be copied | 
| 2112 |  |  |  |  |  |  | to INSTALLBIN during 'make install' | 
| 2113 |  |  |  |  |  |  |  | 
| 2114 |  |  |  |  |  |  | =item INST_LIB | 
| 2115 |  |  |  |  |  |  |  | 
| 2116 |  |  |  |  |  |  | Directory where we put library files of this extension while building | 
| 2117 |  |  |  |  |  |  | it. | 
| 2118 |  |  |  |  |  |  |  | 
| 2119 |  |  |  |  |  |  | =item INST_MAN1DIR | 
| 2120 |  |  |  |  |  |  |  | 
| 2121 |  |  |  |  |  |  | Directory to hold the man pages at 'make' time | 
| 2122 |  |  |  |  |  |  |  | 
| 2123 |  |  |  |  |  |  | =item INST_MAN3DIR | 
| 2124 |  |  |  |  |  |  |  | 
| 2125 |  |  |  |  |  |  | Directory to hold the man pages at 'make' time | 
| 2126 |  |  |  |  |  |  |  | 
| 2127 |  |  |  |  |  |  | =item INST_SCRIPT | 
| 2128 |  |  |  |  |  |  |  | 
| 2129 |  |  |  |  |  |  | Directory where executable files should be installed during | 
| 2130 |  |  |  |  |  |  | 'make'. Defaults to "./blib/script", just to have a dummy location during | 
| 2131 |  |  |  |  |  |  | testing. make install will copy the files in INST_SCRIPT to | 
| 2132 |  |  |  |  |  |  | INSTALLSCRIPT. | 
| 2133 |  |  |  |  |  |  |  | 
| 2134 |  |  |  |  |  |  | =item LD | 
| 2135 |  |  |  |  |  |  |  | 
| 2136 |  |  |  |  |  |  | Program to be used to link libraries for dynamic loading. | 
| 2137 |  |  |  |  |  |  |  | 
| 2138 |  |  |  |  |  |  | Defaults to $Config{ld}. | 
| 2139 |  |  |  |  |  |  |  | 
| 2140 |  |  |  |  |  |  | =item LDDLFLAGS | 
| 2141 |  |  |  |  |  |  |  | 
| 2142 |  |  |  |  |  |  | Any special flags that might need to be passed to ld to create a | 
| 2143 |  |  |  |  |  |  | shared library suitable for dynamic loading.  It is up to the makefile | 
| 2144 |  |  |  |  |  |  | to use it.  (See L<Config/lddlflags>) | 
| 2145 |  |  |  |  |  |  |  | 
| 2146 |  |  |  |  |  |  | Defaults to $Config{lddlflags}. | 
| 2147 |  |  |  |  |  |  |  | 
| 2148 |  |  |  |  |  |  | =item LDFROM | 
| 2149 |  |  |  |  |  |  |  | 
| 2150 |  |  |  |  |  |  | Defaults to "$(OBJECT)" and is used in the ld command to specify | 
| 2151 |  |  |  |  |  |  | what files to link/load from (also see dynamic_lib below for how to | 
| 2152 |  |  |  |  |  |  | specify ld flags) | 
| 2153 |  |  |  |  |  |  |  | 
| 2154 |  |  |  |  |  |  | =item LIB | 
| 2155 |  |  |  |  |  |  |  | 
| 2156 |  |  |  |  |  |  | LIB should only be set at C<perl Makefile.PL> time but is allowed as a | 
| 2157 |  |  |  |  |  |  | MakeMaker argument. It has the effect of setting both INSTALLPRIVLIB | 
| 2158 |  |  |  |  |  |  | and INSTALLSITELIB to that value regardless any explicit setting of | 
| 2159 |  |  |  |  |  |  | those arguments (or of PREFIX).  INSTALLARCHLIB and INSTALLSITEARCH | 
| 2160 |  |  |  |  |  |  | are set to the corresponding architecture subdirectory. | 
| 2161 |  |  |  |  |  |  |  | 
| 2162 |  |  |  |  |  |  | =item LIBPERL_A | 
| 2163 |  |  |  |  |  |  |  | 
| 2164 |  |  |  |  |  |  | The filename of the perllibrary that will be used together with this | 
| 2165 |  |  |  |  |  |  | extension. Defaults to libperl.a. | 
| 2166 |  |  |  |  |  |  |  | 
| 2167 |  |  |  |  |  |  | =item LIBS | 
| 2168 |  |  |  |  |  |  |  | 
| 2169 |  |  |  |  |  |  | An anonymous array of alternative library | 
| 2170 |  |  |  |  |  |  | specifications to be searched for (in order) until | 
| 2171 |  |  |  |  |  |  | at least one library is found. E.g. | 
| 2172 |  |  |  |  |  |  |  | 
| 2173 |  |  |  |  |  |  | 'LIBS' => ["-lgdbm", "-ldbm -lfoo", "-L/path -ldbm.nfs"] | 
| 2174 |  |  |  |  |  |  |  | 
| 2175 |  |  |  |  |  |  | Mind, that any element of the array | 
| 2176 |  |  |  |  |  |  | contains a complete set of arguments for the ld | 
| 2177 |  |  |  |  |  |  | command. So do not specify | 
| 2178 |  |  |  |  |  |  |  | 
| 2179 |  |  |  |  |  |  | 'LIBS' => ["-ltcl", "-ltk", "-lX11"] | 
| 2180 |  |  |  |  |  |  |  | 
| 2181 |  |  |  |  |  |  | See ODBM_File/Makefile.PL for an example, where an array is needed. If | 
| 2182 |  |  |  |  |  |  | you specify a scalar as in | 
| 2183 |  |  |  |  |  |  |  | 
| 2184 |  |  |  |  |  |  | 'LIBS' => "-ltcl -ltk -lX11" | 
| 2185 |  |  |  |  |  |  |  | 
| 2186 |  |  |  |  |  |  | MakeMaker will turn it into an array with one element. | 
| 2187 |  |  |  |  |  |  |  | 
| 2188 |  |  |  |  |  |  | =item LICENSE | 
| 2189 |  |  |  |  |  |  |  | 
| 2190 |  |  |  |  |  |  | Available in version 6.31 and above. | 
| 2191 |  |  |  |  |  |  |  | 
| 2192 |  |  |  |  |  |  | The licensing terms of your distribution.  Generally it's "perl_5" for the | 
| 2193 |  |  |  |  |  |  | same license as Perl itself. | 
| 2194 |  |  |  |  |  |  |  | 
| 2195 |  |  |  |  |  |  | See L<CPAN::Meta::Spec> for the list of options. | 
| 2196 |  |  |  |  |  |  |  | 
| 2197 |  |  |  |  |  |  | Defaults to "unknown". | 
| 2198 |  |  |  |  |  |  |  | 
| 2199 |  |  |  |  |  |  | =item LINKTYPE | 
| 2200 |  |  |  |  |  |  |  | 
| 2201 |  |  |  |  |  |  | 'static' or 'dynamic' (default unless usedl=undef in | 
| 2202 |  |  |  |  |  |  | config.sh). Should only be used to force static linking (also see | 
| 2203 |  |  |  |  |  |  | linkext below). | 
| 2204 |  |  |  |  |  |  |  | 
| 2205 |  |  |  |  |  |  | =item MAGICXS | 
| 2206 |  |  |  |  |  |  |  | 
| 2207 |  |  |  |  |  |  | Available in version 6.8305 and above. | 
| 2208 |  |  |  |  |  |  |  | 
| 2209 |  |  |  |  |  |  | When this is set to C<1>, C<OBJECT> will be automagically derived from | 
| 2210 |  |  |  |  |  |  | C<O_FILES>. | 
| 2211 |  |  |  |  |  |  |  | 
| 2212 |  |  |  |  |  |  | =item MAKE | 
| 2213 |  |  |  |  |  |  |  | 
| 2214 |  |  |  |  |  |  | Available in version 6.30_01 and above. | 
| 2215 |  |  |  |  |  |  |  | 
| 2216 |  |  |  |  |  |  | Variant of make you intend to run the generated Makefile with.  This | 
| 2217 |  |  |  |  |  |  | parameter lets Makefile.PL know what make quirks to account for when | 
| 2218 |  |  |  |  |  |  | generating the Makefile. | 
| 2219 |  |  |  |  |  |  |  | 
| 2220 |  |  |  |  |  |  | MakeMaker also honors the MAKE environment variable.  This parameter | 
| 2221 |  |  |  |  |  |  | takes precedence. | 
| 2222 |  |  |  |  |  |  |  | 
| 2223 |  |  |  |  |  |  | Currently the only significant values are 'dmake' and 'nmake' for Windows | 
| 2224 |  |  |  |  |  |  | users, instructing MakeMaker to generate a Makefile in the flavour of | 
| 2225 |  |  |  |  |  |  | DMake ("Dennis Vadura's Make") or Microsoft NMake respectively. | 
| 2226 |  |  |  |  |  |  |  | 
| 2227 |  |  |  |  |  |  | Defaults to $Config{make}, which may go looking for a Make program | 
| 2228 |  |  |  |  |  |  | in your environment. | 
| 2229 |  |  |  |  |  |  |  | 
| 2230 |  |  |  |  |  |  | How are you supposed to know what flavour of Make a Makefile has | 
| 2231 |  |  |  |  |  |  | been generated for if you didn't specify a value explicitly? Search | 
| 2232 |  |  |  |  |  |  | the generated Makefile for the definition of the MAKE variable, | 
| 2233 |  |  |  |  |  |  | which is used to recursively invoke the Make utility. That will tell | 
| 2234 |  |  |  |  |  |  | you what Make you're supposed to invoke the Makefile with. | 
| 2235 |  |  |  |  |  |  |  | 
| 2236 |  |  |  |  |  |  | =item MAKEAPERL | 
| 2237 |  |  |  |  |  |  |  | 
| 2238 |  |  |  |  |  |  | Boolean which tells MakeMaker that it should include the rules to | 
| 2239 |  |  |  |  |  |  | make a perl. This is handled automatically as a switch by | 
| 2240 |  |  |  |  |  |  | MakeMaker. The user normally does not need it. | 
| 2241 |  |  |  |  |  |  |  | 
| 2242 |  |  |  |  |  |  | =item MAKEFILE_OLD | 
| 2243 |  |  |  |  |  |  |  | 
| 2244 |  |  |  |  |  |  | When 'make clean' or similar is run, the $(FIRST_MAKEFILE) will be | 
| 2245 |  |  |  |  |  |  | backed up at this location. | 
| 2246 |  |  |  |  |  |  |  | 
| 2247 |  |  |  |  |  |  | Defaults to $(FIRST_MAKEFILE).old or $(FIRST_MAKEFILE)_old on VMS. | 
| 2248 |  |  |  |  |  |  |  | 
| 2249 |  |  |  |  |  |  | =item MAN1PODS | 
| 2250 |  |  |  |  |  |  |  | 
| 2251 |  |  |  |  |  |  | Hashref of pod-containing files. MakeMaker will default this to all | 
| 2252 |  |  |  |  |  |  | EXE_FILES files that include POD directives. The files listed | 
| 2253 |  |  |  |  |  |  | here will be converted to man pages and installed as was requested | 
| 2254 |  |  |  |  |  |  | at Configure time. | 
| 2255 |  |  |  |  |  |  |  | 
| 2256 |  |  |  |  |  |  | This hash should map POD files (or scripts containing POD) to the | 
| 2257 |  |  |  |  |  |  | man file names under the C<blib/man1/> directory, as in the following | 
| 2258 |  |  |  |  |  |  | example: | 
| 2259 |  |  |  |  |  |  |  | 
| 2260 |  |  |  |  |  |  | MAN1PODS            => { | 
| 2261 |  |  |  |  |  |  | 'doc/command.pod'    => 'blib/man1/command.1', | 
| 2262 |  |  |  |  |  |  | 'scripts/script.pl'  => 'blib/man1/script.1', | 
| 2263 |  |  |  |  |  |  | } | 
| 2264 |  |  |  |  |  |  |  | 
| 2265 |  |  |  |  |  |  | =item MAN3PODS | 
| 2266 |  |  |  |  |  |  |  | 
| 2267 |  |  |  |  |  |  | Hashref that assigns to *.pm and *.pod files the files into which the | 
| 2268 |  |  |  |  |  |  | manpages are to be written. MakeMaker parses all *.pod and *.pm files | 
| 2269 |  |  |  |  |  |  | for POD directives. Files that contain POD will be the default keys of | 
| 2270 |  |  |  |  |  |  | the MAN3PODS hashref. These will then be converted to man pages during | 
| 2271 |  |  |  |  |  |  | C<make> and will be installed during C<make install>. | 
| 2272 |  |  |  |  |  |  |  | 
| 2273 |  |  |  |  |  |  | Example similar to MAN1PODS. | 
| 2274 |  |  |  |  |  |  |  | 
| 2275 |  |  |  |  |  |  | =item MAP_TARGET | 
| 2276 |  |  |  |  |  |  |  | 
| 2277 |  |  |  |  |  |  | If it is intended that a new perl binary be produced, this variable | 
| 2278 |  |  |  |  |  |  | may hold a name for that binary. Defaults to perl | 
| 2279 |  |  |  |  |  |  |  | 
| 2280 |  |  |  |  |  |  | =item META_ADD | 
| 2281 |  |  |  |  |  |  |  | 
| 2282 |  |  |  |  |  |  | =item META_MERGE | 
| 2283 |  |  |  |  |  |  |  | 
| 2284 |  |  |  |  |  |  | Available in version 6.46 and above. | 
| 2285 |  |  |  |  |  |  |  | 
| 2286 |  |  |  |  |  |  | A hashref of items to add to the CPAN Meta file (F<META.yml> or | 
| 2287 |  |  |  |  |  |  | F<META.json>). | 
| 2288 |  |  |  |  |  |  |  | 
| 2289 |  |  |  |  |  |  | They differ in how they behave if they have the same key as the | 
| 2290 |  |  |  |  |  |  | default metadata.  META_ADD will override the default value with its | 
| 2291 |  |  |  |  |  |  | own.  META_MERGE will merge its value with the default. | 
| 2292 |  |  |  |  |  |  |  | 
| 2293 |  |  |  |  |  |  | Unless you want to override the defaults, prefer META_MERGE so as to | 
| 2294 |  |  |  |  |  |  | get the advantage of any future defaults. | 
| 2295 |  |  |  |  |  |  |  | 
| 2296 |  |  |  |  |  |  | Where prereqs are concerned, if META_MERGE is used, prerequisites are merged | 
| 2297 |  |  |  |  |  |  | with their counterpart C<WriteMakefile()> argument | 
| 2298 |  |  |  |  |  |  | (PREREQ_PM is merged into {prereqs}{runtime}{requires}, | 
| 2299 |  |  |  |  |  |  | BUILD_REQUIRES into C<{prereqs}{build}{requires}>, | 
| 2300 |  |  |  |  |  |  | CONFIGURE_REQUIRES into C<{prereqs}{configure}{requires}>, | 
| 2301 |  |  |  |  |  |  | and TEST_REQUIRES into C<{prereqs}{test}{requires})>. | 
| 2302 |  |  |  |  |  |  | When prereqs are specified with META_ADD, the only prerequisites added to the | 
| 2303 |  |  |  |  |  |  | file come from the metadata, not C<WriteMakefile()> arguments. | 
| 2304 |  |  |  |  |  |  |  | 
| 2305 |  |  |  |  |  |  | Note that these configuration options are only used for generating F<META.yml> | 
| 2306 |  |  |  |  |  |  | and F<META.json> -- they are NOT used for F<MYMETA.yml> and F<MYMETA.json>. | 
| 2307 |  |  |  |  |  |  | Therefore data in these fields should NOT be used for dynamic (user-side) | 
| 2308 |  |  |  |  |  |  | configuration. | 
| 2309 |  |  |  |  |  |  |  | 
| 2310 |  |  |  |  |  |  | By default CPAN Meta specification C<1.4> is used. In order to use | 
| 2311 |  |  |  |  |  |  | CPAN Meta specification C<2.0>, indicate with C<meta-spec> the version | 
| 2312 |  |  |  |  |  |  | you want to use. | 
| 2313 |  |  |  |  |  |  |  | 
| 2314 |  |  |  |  |  |  | META_MERGE        => { | 
| 2315 |  |  |  |  |  |  |  | 
| 2316 |  |  |  |  |  |  | "meta-spec" => { version => 2 }, | 
| 2317 |  |  |  |  |  |  |  | 
| 2318 |  |  |  |  |  |  | resources => { | 
| 2319 |  |  |  |  |  |  |  | 
| 2320 |  |  |  |  |  |  | repository => { | 
| 2321 |  |  |  |  |  |  | type => 'git', | 
| 2322 |  |  |  |  |  |  | url => 'git://github.com/Perl-Toolchain-Gang/ExtUtils-MakeMaker.git', | 
| 2323 |  |  |  |  |  |  | web => 'https://github.com/Perl-Toolchain-Gang/ExtUtils-MakeMaker', | 
| 2324 |  |  |  |  |  |  | }, | 
| 2325 |  |  |  |  |  |  |  | 
| 2326 |  |  |  |  |  |  | }, | 
| 2327 |  |  |  |  |  |  |  | 
| 2328 |  |  |  |  |  |  | }, | 
| 2329 |  |  |  |  |  |  |  | 
| 2330 |  |  |  |  |  |  | =item MIN_PERL_VERSION | 
| 2331 |  |  |  |  |  |  |  | 
| 2332 |  |  |  |  |  |  | Available in version 6.48 and above. | 
| 2333 |  |  |  |  |  |  |  | 
| 2334 |  |  |  |  |  |  | The minimum required version of Perl for this distribution. | 
| 2335 |  |  |  |  |  |  |  | 
| 2336 |  |  |  |  |  |  | Either the 5.006001 or the 5.6.1 format is acceptable. | 
| 2337 |  |  |  |  |  |  |  | 
| 2338 |  |  |  |  |  |  | =item MYEXTLIB | 
| 2339 |  |  |  |  |  |  |  | 
| 2340 |  |  |  |  |  |  | If the extension links to a library that it builds, set this to the | 
| 2341 |  |  |  |  |  |  | name of the library (see SDBM_File) | 
| 2342 |  |  |  |  |  |  |  | 
| 2343 |  |  |  |  |  |  | =item NAME | 
| 2344 |  |  |  |  |  |  |  | 
| 2345 |  |  |  |  |  |  | The package representing the distribution. For example, C<Test::More> | 
| 2346 |  |  |  |  |  |  | or C<ExtUtils::MakeMaker>. It will be used to derive information about | 
| 2347 |  |  |  |  |  |  | the distribution such as the L</DISTNAME>, installation locations | 
| 2348 |  |  |  |  |  |  | within the Perl library and where XS files will be looked for by | 
| 2349 |  |  |  |  |  |  | default (see L</XS>). | 
| 2350 |  |  |  |  |  |  |  | 
| 2351 |  |  |  |  |  |  | C<NAME> I<must> be a valid Perl package name and it I<must> have an | 
| 2352 |  |  |  |  |  |  | associated C<.pm> file. For example, C<Foo::Bar> is a valid C<NAME> | 
| 2353 |  |  |  |  |  |  | and there must exist F<Foo/Bar.pm>.  Any XS code should be in | 
| 2354 |  |  |  |  |  |  | F<Bar.xs> unless stated otherwise. | 
| 2355 |  |  |  |  |  |  |  | 
| 2356 |  |  |  |  |  |  | Your distribution B<must> have a C<NAME>. | 
| 2357 |  |  |  |  |  |  |  | 
| 2358 |  |  |  |  |  |  | =item NEEDS_LINKING | 
| 2359 |  |  |  |  |  |  |  | 
| 2360 |  |  |  |  |  |  | MakeMaker will figure out if an extension contains linkable code | 
| 2361 |  |  |  |  |  |  | anywhere down the directory tree, and will set this variable | 
| 2362 |  |  |  |  |  |  | accordingly, but you can speed it up a very little bit if you define | 
| 2363 |  |  |  |  |  |  | this boolean variable yourself. | 
| 2364 |  |  |  |  |  |  |  | 
| 2365 |  |  |  |  |  |  | =item NOECHO | 
| 2366 |  |  |  |  |  |  |  | 
| 2367 |  |  |  |  |  |  | Command so make does not print the literal commands it's running. | 
| 2368 |  |  |  |  |  |  |  | 
| 2369 |  |  |  |  |  |  | By setting it to an empty string you can generate a Makefile that | 
| 2370 |  |  |  |  |  |  | prints all commands. Mainly used in debugging MakeMaker itself. | 
| 2371 |  |  |  |  |  |  |  | 
| 2372 |  |  |  |  |  |  | Defaults to C<@>. | 
| 2373 |  |  |  |  |  |  |  | 
| 2374 |  |  |  |  |  |  | =item NORECURS | 
| 2375 |  |  |  |  |  |  |  | 
| 2376 |  |  |  |  |  |  | Boolean.  Attribute to inhibit descending into subdirectories. | 
| 2377 |  |  |  |  |  |  |  | 
| 2378 |  |  |  |  |  |  | =item NO_META | 
| 2379 |  |  |  |  |  |  |  | 
| 2380 |  |  |  |  |  |  | When true, suppresses the generation and addition to the MANIFEST of | 
| 2381 |  |  |  |  |  |  | the META.yml and META.json module meta-data files during 'make distdir'. | 
| 2382 |  |  |  |  |  |  |  | 
| 2383 |  |  |  |  |  |  | Defaults to false. | 
| 2384 |  |  |  |  |  |  |  | 
| 2385 |  |  |  |  |  |  | =item NO_MYMETA | 
| 2386 |  |  |  |  |  |  |  | 
| 2387 |  |  |  |  |  |  | Available in version 6.57_02 and above. | 
| 2388 |  |  |  |  |  |  |  | 
| 2389 |  |  |  |  |  |  | When true, suppresses the generation of MYMETA.yml and MYMETA.json module | 
| 2390 |  |  |  |  |  |  | meta-data files during 'perl Makefile.PL'. | 
| 2391 |  |  |  |  |  |  |  | 
| 2392 |  |  |  |  |  |  | Defaults to false. | 
| 2393 |  |  |  |  |  |  |  | 
| 2394 |  |  |  |  |  |  | =item NO_PACKLIST | 
| 2395 |  |  |  |  |  |  |  | 
| 2396 |  |  |  |  |  |  | Available in version 6.7501 and above. | 
| 2397 |  |  |  |  |  |  |  | 
| 2398 |  |  |  |  |  |  | When true, suppresses the writing of C<packlist> files for installs. | 
| 2399 |  |  |  |  |  |  |  | 
| 2400 |  |  |  |  |  |  | Defaults to false. | 
| 2401 |  |  |  |  |  |  |  | 
| 2402 |  |  |  |  |  |  | =item NO_PERLLOCAL | 
| 2403 |  |  |  |  |  |  |  | 
| 2404 |  |  |  |  |  |  | Available in version 6.7501 and above. | 
| 2405 |  |  |  |  |  |  |  | 
| 2406 |  |  |  |  |  |  | When true, suppresses the appending of installations to C<perllocal>. | 
| 2407 |  |  |  |  |  |  |  | 
| 2408 |  |  |  |  |  |  | Defaults to false. | 
| 2409 |  |  |  |  |  |  |  | 
| 2410 |  |  |  |  |  |  | =item NO_VC | 
| 2411 |  |  |  |  |  |  |  | 
| 2412 |  |  |  |  |  |  | In general, any generated Makefile checks for the current version of | 
| 2413 |  |  |  |  |  |  | MakeMaker and the version the Makefile was built under. If NO_VC is | 
| 2414 |  |  |  |  |  |  | set, the version check is neglected. Do not write this into your | 
| 2415 |  |  |  |  |  |  | Makefile.PL, use it interactively instead. | 
| 2416 |  |  |  |  |  |  |  | 
| 2417 |  |  |  |  |  |  | =item OBJECT | 
| 2418 |  |  |  |  |  |  |  | 
| 2419 |  |  |  |  |  |  | List of object files, defaults to '$(BASEEXT)$(OBJ_EXT)', but can be a long | 
| 2420 |  |  |  |  |  |  | string or an array containing all object files, e.g. "tkpBind.o | 
| 2421 |  |  |  |  |  |  | tkpButton.o tkpCanvas.o" or ["tkpBind.o", "tkpButton.o", "tkpCanvas.o"] | 
| 2422 |  |  |  |  |  |  |  | 
| 2423 |  |  |  |  |  |  | (Where BASEEXT is the last component of NAME, and OBJ_EXT is $Config{obj_ext}.) | 
| 2424 |  |  |  |  |  |  |  | 
| 2425 |  |  |  |  |  |  | =item OPTIMIZE | 
| 2426 |  |  |  |  |  |  |  | 
| 2427 |  |  |  |  |  |  | Defaults to C<-O>. Set it to C<-g> to turn debugging on. The flag is | 
| 2428 |  |  |  |  |  |  | passed to subdirectory makes. | 
| 2429 |  |  |  |  |  |  |  | 
| 2430 |  |  |  |  |  |  | =item PERL | 
| 2431 |  |  |  |  |  |  |  | 
| 2432 |  |  |  |  |  |  | Perl binary for tasks that can be done by miniperl. If it contains | 
| 2433 |  |  |  |  |  |  | spaces or other shell metacharacters, it needs to be quoted in a way | 
| 2434 |  |  |  |  |  |  | that protects them, since this value is intended to be inserted in a | 
| 2435 |  |  |  |  |  |  | shell command line in the Makefile. E.g.: | 
| 2436 |  |  |  |  |  |  |  | 
| 2437 |  |  |  |  |  |  | # Perl executable lives in "C:/Program Files/Perl/bin" | 
| 2438 |  |  |  |  |  |  | # Normally you don't need to set this yourself! | 
| 2439 |  |  |  |  |  |  | $ perl Makefile.PL PERL='"C:/Program Files/Perl/bin/perl.exe" -w' | 
| 2440 |  |  |  |  |  |  |  | 
| 2441 |  |  |  |  |  |  | =item PERL_CORE | 
| 2442 |  |  |  |  |  |  |  | 
| 2443 |  |  |  |  |  |  | Set only when MakeMaker is building the extensions of the Perl core | 
| 2444 |  |  |  |  |  |  | distribution. | 
| 2445 |  |  |  |  |  |  |  | 
| 2446 |  |  |  |  |  |  | =item PERLMAINCC | 
| 2447 |  |  |  |  |  |  |  | 
| 2448 |  |  |  |  |  |  | The call to the program that is able to compile perlmain.c. Defaults | 
| 2449 |  |  |  |  |  |  | to $(CC). | 
| 2450 |  |  |  |  |  |  |  | 
| 2451 |  |  |  |  |  |  | =item PERL_ARCHLIB | 
| 2452 |  |  |  |  |  |  |  | 
| 2453 |  |  |  |  |  |  | Same as for PERL_LIB, but for architecture dependent files. | 
| 2454 |  |  |  |  |  |  |  | 
| 2455 |  |  |  |  |  |  | Used only when MakeMaker is building the extensions of the Perl core | 
| 2456 |  |  |  |  |  |  | distribution (because normally $(PERL_ARCHLIB) is automatically in @INC, | 
| 2457 |  |  |  |  |  |  | and adding it would get in the way of PERL5LIB). | 
| 2458 |  |  |  |  |  |  |  | 
| 2459 |  |  |  |  |  |  | =item PERL_LIB | 
| 2460 |  |  |  |  |  |  |  | 
| 2461 |  |  |  |  |  |  | Directory containing the Perl library to use. | 
| 2462 |  |  |  |  |  |  |  | 
| 2463 |  |  |  |  |  |  | Used only when MakeMaker is building the extensions of the Perl core | 
| 2464 |  |  |  |  |  |  | distribution (because normally $(PERL_LIB) is automatically in @INC, | 
| 2465 |  |  |  |  |  |  | and adding it would get in the way of PERL5LIB). | 
| 2466 |  |  |  |  |  |  |  | 
| 2467 |  |  |  |  |  |  | =item PERL_MALLOC_OK | 
| 2468 |  |  |  |  |  |  |  | 
| 2469 |  |  |  |  |  |  | defaults to 0.  Should be set to TRUE if the extension can work with | 
| 2470 |  |  |  |  |  |  | the memory allocation routines substituted by the Perl malloc() subsystem. | 
| 2471 |  |  |  |  |  |  | This should be applicable to most extensions with exceptions of those | 
| 2472 |  |  |  |  |  |  |  | 
| 2473 |  |  |  |  |  |  | =over 4 | 
| 2474 |  |  |  |  |  |  |  | 
| 2475 |  |  |  |  |  |  | =item * | 
| 2476 |  |  |  |  |  |  |  | 
| 2477 |  |  |  |  |  |  | with bugs in memory allocations which are caught by Perl's malloc(); | 
| 2478 |  |  |  |  |  |  |  | 
| 2479 |  |  |  |  |  |  | =item * | 
| 2480 |  |  |  |  |  |  |  | 
| 2481 |  |  |  |  |  |  | which interact with the memory allocator in other ways than via | 
| 2482 |  |  |  |  |  |  | malloc(), realloc(), free(), calloc(), sbrk() and brk(); | 
| 2483 |  |  |  |  |  |  |  | 
| 2484 |  |  |  |  |  |  | =item * | 
| 2485 |  |  |  |  |  |  |  | 
| 2486 |  |  |  |  |  |  | which rely on special alignment which is not provided by Perl's malloc(). | 
| 2487 |  |  |  |  |  |  |  | 
| 2488 |  |  |  |  |  |  | =back | 
| 2489 |  |  |  |  |  |  |  | 
| 2490 |  |  |  |  |  |  | B<NOTE.>  Neglecting to set this flag in I<any one> of the loaded extension | 
| 2491 |  |  |  |  |  |  | nullifies many advantages of Perl's malloc(), such as better usage of | 
| 2492 |  |  |  |  |  |  | system resources, error detection, memory usage reporting, catchable failure | 
| 2493 |  |  |  |  |  |  | of memory allocations, etc. | 
| 2494 |  |  |  |  |  |  |  | 
| 2495 |  |  |  |  |  |  | =item PERLPREFIX | 
| 2496 |  |  |  |  |  |  |  | 
| 2497 |  |  |  |  |  |  | Directory under which core modules are to be installed. | 
| 2498 |  |  |  |  |  |  |  | 
| 2499 |  |  |  |  |  |  | Defaults to $Config{installprefixexp}, falling back to | 
| 2500 |  |  |  |  |  |  | $Config{installprefix}, $Config{prefixexp} or $Config{prefix} should | 
| 2501 |  |  |  |  |  |  | $Config{installprefixexp} not exist. | 
| 2502 |  |  |  |  |  |  |  | 
| 2503 |  |  |  |  |  |  | Overridden by PREFIX. | 
| 2504 |  |  |  |  |  |  |  | 
| 2505 |  |  |  |  |  |  | =item PERLRUN | 
| 2506 |  |  |  |  |  |  |  | 
| 2507 |  |  |  |  |  |  | Use this instead of $(PERL) when you wish to run perl.  It will set up | 
| 2508 |  |  |  |  |  |  | extra necessary flags for you. | 
| 2509 |  |  |  |  |  |  |  | 
| 2510 |  |  |  |  |  |  | =item PERLRUNINST | 
| 2511 |  |  |  |  |  |  |  | 
| 2512 |  |  |  |  |  |  | Use this instead of $(PERL) when you wish to run perl to work with | 
| 2513 |  |  |  |  |  |  | modules.  It will add things like -I$(INST_ARCH) and other necessary | 
| 2514 |  |  |  |  |  |  | flags so perl can see the modules you're about to install. | 
| 2515 |  |  |  |  |  |  |  | 
| 2516 |  |  |  |  |  |  | =item PERL_SRC | 
| 2517 |  |  |  |  |  |  |  | 
| 2518 |  |  |  |  |  |  | Directory containing the Perl source code (use of this should be | 
| 2519 |  |  |  |  |  |  | avoided, it may be undefined) | 
| 2520 |  |  |  |  |  |  |  | 
| 2521 |  |  |  |  |  |  | =item PERM_DIR | 
| 2522 |  |  |  |  |  |  |  | 
| 2523 |  |  |  |  |  |  | Available in version 6.51_01 and above. | 
| 2524 |  |  |  |  |  |  |  | 
| 2525 |  |  |  |  |  |  | Desired permission for directories. Defaults to C<755>. | 
| 2526 |  |  |  |  |  |  |  | 
| 2527 |  |  |  |  |  |  | =item PERM_RW | 
| 2528 |  |  |  |  |  |  |  | 
| 2529 |  |  |  |  |  |  | Desired permission for read/writable files. Defaults to C<644>. | 
| 2530 |  |  |  |  |  |  |  | 
| 2531 |  |  |  |  |  |  | =item PERM_RWX | 
| 2532 |  |  |  |  |  |  |  | 
| 2533 |  |  |  |  |  |  | Desired permission for executable files. Defaults to C<755>. | 
| 2534 |  |  |  |  |  |  |  | 
| 2535 |  |  |  |  |  |  | =item PL_FILES | 
| 2536 |  |  |  |  |  |  |  | 
| 2537 |  |  |  |  |  |  | MakeMaker can run programs to generate files for you at build time. | 
| 2538 |  |  |  |  |  |  | By default any file named *.PL (except Makefile.PL and Build.PL) in | 
| 2539 |  |  |  |  |  |  | the top level directory will be assumed to be a Perl program and run | 
| 2540 |  |  |  |  |  |  | passing its own basename in as an argument.  This basename is actually a build | 
| 2541 |  |  |  |  |  |  | target, and there is an intention, but not a requirement, that the *.PL file | 
| 2542 |  |  |  |  |  |  | make the file passed to to as an argument. For example... | 
| 2543 |  |  |  |  |  |  |  | 
| 2544 |  |  |  |  |  |  | perl foo.PL foo | 
| 2545 |  |  |  |  |  |  |  | 
| 2546 |  |  |  |  |  |  | This behavior can be overridden by supplying your own set of files to | 
| 2547 |  |  |  |  |  |  | search.  PL_FILES accepts a hash ref, the key being the file to run | 
| 2548 |  |  |  |  |  |  | and the value is passed in as the first argument when the PL file is run. | 
| 2549 |  |  |  |  |  |  |  | 
| 2550 |  |  |  |  |  |  | PL_FILES => {'bin/foobar.PL' => 'bin/foobar'} | 
| 2551 |  |  |  |  |  |  |  | 
| 2552 |  |  |  |  |  |  | PL_FILES => {'foo.PL' => 'foo.c'} | 
| 2553 |  |  |  |  |  |  |  | 
| 2554 |  |  |  |  |  |  | Would run bin/foobar.PL like this: | 
| 2555 |  |  |  |  |  |  |  | 
| 2556 |  |  |  |  |  |  | perl bin/foobar.PL bin/foobar | 
| 2557 |  |  |  |  |  |  |  | 
| 2558 |  |  |  |  |  |  | If multiple files from one program are desired an array ref can be used. | 
| 2559 |  |  |  |  |  |  |  | 
| 2560 |  |  |  |  |  |  | PL_FILES => {'bin/foobar.PL' => [qw(bin/foobar1 bin/foobar2)]} | 
| 2561 |  |  |  |  |  |  |  | 
| 2562 |  |  |  |  |  |  | In this case the program will be run multiple times using each target file. | 
| 2563 |  |  |  |  |  |  |  | 
| 2564 |  |  |  |  |  |  | perl bin/foobar.PL bin/foobar1 | 
| 2565 |  |  |  |  |  |  | perl bin/foobar.PL bin/foobar2 | 
| 2566 |  |  |  |  |  |  |  | 
| 2567 |  |  |  |  |  |  | If an output file depends on extra input files beside the script itself, | 
| 2568 |  |  |  |  |  |  | a hash ref can be used in version 7.36 and above: | 
| 2569 |  |  |  |  |  |  |  | 
| 2570 |  |  |  |  |  |  | PL_FILES => { 'foo.PL' => { | 
| 2571 |  |  |  |  |  |  | 'foo.out' => 'foo.in', | 
| 2572 |  |  |  |  |  |  | 'bar.out' => [qw(bar1.in bar2.in)], | 
| 2573 |  |  |  |  |  |  | } | 
| 2574 |  |  |  |  |  |  |  | 
| 2575 |  |  |  |  |  |  | In this case the extra input files will be passed to the program after | 
| 2576 |  |  |  |  |  |  | the target file: | 
| 2577 |  |  |  |  |  |  |  | 
| 2578 |  |  |  |  |  |  | perl foo.PL foo.out foo.in | 
| 2579 |  |  |  |  |  |  | perl foo.PL bar.out bar1.in bar2.in | 
| 2580 |  |  |  |  |  |  |  | 
| 2581 |  |  |  |  |  |  | PL files are normally run B<after> pm_to_blib and include INST_LIB and | 
| 2582 |  |  |  |  |  |  | INST_ARCH in their C<@INC>, so the just built modules can be | 
| 2583 |  |  |  |  |  |  | accessed... unless the PL file is making a module (or anything else in | 
| 2584 |  |  |  |  |  |  | PM) in which case it is run B<before> pm_to_blib and does not include | 
| 2585 |  |  |  |  |  |  | INST_LIB and INST_ARCH in its C<@INC>.  This apparently odd behavior | 
| 2586 |  |  |  |  |  |  | is there for backwards compatibility (and it's somewhat DWIM).  The argument | 
| 2587 |  |  |  |  |  |  | passed to the .PL is set up as a target to build in the Makefile.  In other | 
| 2588 |  |  |  |  |  |  | sections such as C<postamble> you can specify a dependency on the | 
| 2589 |  |  |  |  |  |  | filename/argument that the .PL is supposed (or will have, now that that is | 
| 2590 |  |  |  |  |  |  | is a dependency) to generate.  Note the file to be generated will still be | 
| 2591 |  |  |  |  |  |  | generated and the .PL will still run even without an explicit dependency created | 
| 2592 |  |  |  |  |  |  | by you, since the C<all> target still depends on running all eligible to run.PL | 
| 2593 |  |  |  |  |  |  | files. | 
| 2594 |  |  |  |  |  |  |  | 
| 2595 |  |  |  |  |  |  | =item PM | 
| 2596 |  |  |  |  |  |  |  | 
| 2597 |  |  |  |  |  |  | Hashref of .pm files and *.pl files to be installed.  e.g. | 
| 2598 |  |  |  |  |  |  |  | 
| 2599 |  |  |  |  |  |  | {'name_of_file.pm' => '$(INST_LIB)/install_as.pm'} | 
| 2600 |  |  |  |  |  |  |  | 
| 2601 |  |  |  |  |  |  | By default this will include *.pm and *.pl and the files found in | 
| 2602 |  |  |  |  |  |  | the PMLIBDIRS directories.  Defining PM in the | 
| 2603 |  |  |  |  |  |  | Makefile.PL will override PMLIBDIRS. | 
| 2604 |  |  |  |  |  |  |  | 
| 2605 |  |  |  |  |  |  | =item PMLIBDIRS | 
| 2606 |  |  |  |  |  |  |  | 
| 2607 |  |  |  |  |  |  | Ref to array of subdirectories containing library files.  Defaults to | 
| 2608 |  |  |  |  |  |  | [ 'lib', $(BASEEXT) ]. The directories will be scanned and I<any> files | 
| 2609 |  |  |  |  |  |  | they contain will be installed in the corresponding location in the | 
| 2610 |  |  |  |  |  |  | library.  A libscan() method can be used to alter the behaviour. | 
| 2611 |  |  |  |  |  |  | Defining PM in the Makefile.PL will override PMLIBDIRS. | 
| 2612 |  |  |  |  |  |  |  | 
| 2613 |  |  |  |  |  |  | (Where BASEEXT is the last component of NAME.) | 
| 2614 |  |  |  |  |  |  |  | 
| 2615 |  |  |  |  |  |  | =item PM_FILTER | 
| 2616 |  |  |  |  |  |  |  | 
| 2617 |  |  |  |  |  |  | A filter program, in the traditional Unix sense (input from stdin, output | 
| 2618 |  |  |  |  |  |  | to stdout) that is passed on each .pm file during the build (in the | 
| 2619 |  |  |  |  |  |  | pm_to_blib() phase).  It is empty by default, meaning no filtering is done. | 
| 2620 |  |  |  |  |  |  | You could use: | 
| 2621 |  |  |  |  |  |  |  | 
| 2622 |  |  |  |  |  |  | PM_FILTER => 'perl -ne "print unless /^\\#/"', | 
| 2623 |  |  |  |  |  |  |  | 
| 2624 |  |  |  |  |  |  | to remove all the leading comments on the fly during the build.  In order | 
| 2625 |  |  |  |  |  |  | to be as portable as possible, please consider using a Perl one-liner | 
| 2626 |  |  |  |  |  |  | rather than Unix (or other) utilities, as above.  The # is escaped for | 
| 2627 |  |  |  |  |  |  | the Makefile, since what is going to be generated will then be: | 
| 2628 |  |  |  |  |  |  |  | 
| 2629 |  |  |  |  |  |  | PM_FILTER = perl -ne "print unless /^\#/" | 
| 2630 |  |  |  |  |  |  |  | 
| 2631 |  |  |  |  |  |  | Without the \ before the #, we'd have the start of a Makefile comment, | 
| 2632 |  |  |  |  |  |  | and the macro would be incorrectly defined. | 
| 2633 |  |  |  |  |  |  |  | 
| 2634 |  |  |  |  |  |  | You will almost certainly be better off using the C<PL_FILES> system, | 
| 2635 |  |  |  |  |  |  | instead. See above, or the L<ExtUtils::MakeMaker::FAQ> entry. | 
| 2636 |  |  |  |  |  |  |  | 
| 2637 |  |  |  |  |  |  | =item POLLUTE | 
| 2638 |  |  |  |  |  |  |  | 
| 2639 |  |  |  |  |  |  | Prior to 5.6 various interpreter variables were available without a C<PL_> | 
| 2640 |  |  |  |  |  |  | prefix, eg. C<PL_undef> was available as C<undef>. As of release 5.6, these | 
| 2641 |  |  |  |  |  |  | are only defined if the POLLUTE flag is enabled: | 
| 2642 |  |  |  |  |  |  |  | 
| 2643 |  |  |  |  |  |  | perl Makefile.PL POLLUTE=1 | 
| 2644 |  |  |  |  |  |  |  | 
| 2645 |  |  |  |  |  |  | Please inform the module author if this is necessary to successfully install | 
| 2646 |  |  |  |  |  |  | a module under 5.6 or later. | 
| 2647 |  |  |  |  |  |  |  | 
| 2648 |  |  |  |  |  |  | =item PPM_INSTALL_EXEC | 
| 2649 |  |  |  |  |  |  |  | 
| 2650 |  |  |  |  |  |  | Name of the executable used to run C<PPM_INSTALL_SCRIPT> below. (e.g. perl) | 
| 2651 |  |  |  |  |  |  |  | 
| 2652 |  |  |  |  |  |  | =item PPM_INSTALL_SCRIPT | 
| 2653 |  |  |  |  |  |  |  | 
| 2654 |  |  |  |  |  |  | Name of the script that gets executed by the Perl Package Manager after | 
| 2655 |  |  |  |  |  |  | the installation of a package. | 
| 2656 |  |  |  |  |  |  |  | 
| 2657 |  |  |  |  |  |  | =item PPM_UNINSTALL_EXEC | 
| 2658 |  |  |  |  |  |  |  | 
| 2659 |  |  |  |  |  |  | Available in version 6.8502 and above. | 
| 2660 |  |  |  |  |  |  |  | 
| 2661 |  |  |  |  |  |  | Name of the executable used to run C<PPM_UNINSTALL_SCRIPT> below. (e.g. perl) | 
| 2662 |  |  |  |  |  |  |  | 
| 2663 |  |  |  |  |  |  | =item PPM_UNINSTALL_SCRIPT | 
| 2664 |  |  |  |  |  |  |  | 
| 2665 |  |  |  |  |  |  | Available in version 6.8502 and above. | 
| 2666 |  |  |  |  |  |  |  | 
| 2667 |  |  |  |  |  |  | Name of the script that gets executed by the Perl Package Manager before | 
| 2668 |  |  |  |  |  |  | the removal of a package. | 
| 2669 |  |  |  |  |  |  |  | 
| 2670 |  |  |  |  |  |  | =item PREFIX | 
| 2671 |  |  |  |  |  |  |  | 
| 2672 |  |  |  |  |  |  | This overrides all the default install locations.  Man pages, | 
| 2673 |  |  |  |  |  |  | libraries, scripts, etc...  MakeMaker will try to make an educated | 
| 2674 |  |  |  |  |  |  | guess about where to place things under the new PREFIX based on your | 
| 2675 |  |  |  |  |  |  | Config defaults.  Failing that, it will fall back to a structure | 
| 2676 |  |  |  |  |  |  | which should be sensible for your platform. | 
| 2677 |  |  |  |  |  |  |  | 
| 2678 |  |  |  |  |  |  | If you specify LIB or any INSTALL* variables they will not be affected | 
| 2679 |  |  |  |  |  |  | by the PREFIX. | 
| 2680 |  |  |  |  |  |  |  | 
| 2681 |  |  |  |  |  |  | =item PREREQ_FATAL | 
| 2682 |  |  |  |  |  |  |  | 
| 2683 |  |  |  |  |  |  | Bool. If this parameter is true, failing to have the required modules | 
| 2684 |  |  |  |  |  |  | (or the right versions thereof) will be fatal. C<perl Makefile.PL> | 
| 2685 |  |  |  |  |  |  | will C<die> instead of simply informing the user of the missing dependencies. | 
| 2686 |  |  |  |  |  |  |  | 
| 2687 |  |  |  |  |  |  | It is I<extremely> rare to have to use C<PREREQ_FATAL>. Its use by module | 
| 2688 |  |  |  |  |  |  | authors is I<strongly discouraged> and should never be used lightly. | 
| 2689 |  |  |  |  |  |  |  | 
| 2690 |  |  |  |  |  |  | For dependencies that are required in order to run C<Makefile.PL>, | 
| 2691 |  |  |  |  |  |  | see C<CONFIGURE_REQUIRES>. | 
| 2692 |  |  |  |  |  |  |  | 
| 2693 |  |  |  |  |  |  | Module installation tools have ways of resolving unmet dependencies but | 
| 2694 |  |  |  |  |  |  | to do that they need a F<Makefile>.  Using C<PREREQ_FATAL> breaks this. | 
| 2695 |  |  |  |  |  |  | That's bad. | 
| 2696 |  |  |  |  |  |  |  | 
| 2697 |  |  |  |  |  |  | Assuming you have good test coverage, your tests should fail with | 
| 2698 |  |  |  |  |  |  | missing dependencies informing the user more strongly that something | 
| 2699 |  |  |  |  |  |  | is wrong.  You can write a F<t/00compile.t> test which will simply | 
| 2700 |  |  |  |  |  |  | check that your code compiles and stop "make test" prematurely if it | 
| 2701 |  |  |  |  |  |  | doesn't.  See L<Test::More/BAIL_OUT> for more details. | 
| 2702 |  |  |  |  |  |  |  | 
| 2703 |  |  |  |  |  |  |  | 
| 2704 |  |  |  |  |  |  | =item PREREQ_PM | 
| 2705 |  |  |  |  |  |  |  | 
| 2706 |  |  |  |  |  |  | A hash of modules that are needed to run your module.  The keys are | 
| 2707 |  |  |  |  |  |  | the module names ie. Test::More, and the minimum version is the | 
| 2708 |  |  |  |  |  |  | value. If the required version number is 0 any version will do. | 
| 2709 |  |  |  |  |  |  | The versions given may be a Perl v-string (see L<version>) or a range | 
| 2710 |  |  |  |  |  |  | (see L<CPAN::Meta::Requirements>). | 
| 2711 |  |  |  |  |  |  |  | 
| 2712 |  |  |  |  |  |  | This will go into the C<requires> field of your F<META.yml> and the | 
| 2713 |  |  |  |  |  |  | C<runtime> of the C<prereqs> field of your F<META.json>. | 
| 2714 |  |  |  |  |  |  |  | 
| 2715 |  |  |  |  |  |  | PREREQ_PM => { | 
| 2716 |  |  |  |  |  |  | # Require Test::More at least 0.47 | 
| 2717 |  |  |  |  |  |  | "Test::More" => "0.47", | 
| 2718 |  |  |  |  |  |  |  | 
| 2719 |  |  |  |  |  |  | # Require any version of Acme::Buffy | 
| 2720 |  |  |  |  |  |  | "Acme::Buffy" => 0, | 
| 2721 |  |  |  |  |  |  | } | 
| 2722 |  |  |  |  |  |  |  | 
| 2723 |  |  |  |  |  |  | =item PREREQ_PRINT | 
| 2724 |  |  |  |  |  |  |  | 
| 2725 |  |  |  |  |  |  | Bool.  If this parameter is true, the prerequisites will be printed to | 
| 2726 |  |  |  |  |  |  | stdout and MakeMaker will exit.  The output format is an evalable hash | 
| 2727 |  |  |  |  |  |  | ref. | 
| 2728 |  |  |  |  |  |  |  | 
| 2729 |  |  |  |  |  |  | $PREREQ_PM = { | 
| 2730 |  |  |  |  |  |  | 'A::B' => Vers1, | 
| 2731 |  |  |  |  |  |  | 'C::D' => Vers2, | 
| 2732 |  |  |  |  |  |  | ... | 
| 2733 |  |  |  |  |  |  | }; | 
| 2734 |  |  |  |  |  |  |  | 
| 2735 |  |  |  |  |  |  | If a distribution defines a minimal required perl version, this is | 
| 2736 |  |  |  |  |  |  | added to the output as an additional line of the form: | 
| 2737 |  |  |  |  |  |  |  | 
| 2738 |  |  |  |  |  |  | $MIN_PERL_VERSION = '5.008001'; | 
| 2739 |  |  |  |  |  |  |  | 
| 2740 |  |  |  |  |  |  | If BUILD_REQUIRES is not empty, it will be dumped as $BUILD_REQUIRES hashref. | 
| 2741 |  |  |  |  |  |  |  | 
| 2742 |  |  |  |  |  |  | =item PRINT_PREREQ | 
| 2743 |  |  |  |  |  |  |  | 
| 2744 |  |  |  |  |  |  | RedHatism for C<PREREQ_PRINT>.  The output format is different, though: | 
| 2745 |  |  |  |  |  |  |  | 
| 2746 |  |  |  |  |  |  | perl(A::B)>=Vers1 perl(C::D)>=Vers2 ... | 
| 2747 |  |  |  |  |  |  |  | 
| 2748 |  |  |  |  |  |  | A minimal required perl version, if present, will look like this: | 
| 2749 |  |  |  |  |  |  |  | 
| 2750 |  |  |  |  |  |  | perl(perl)>=5.008001 | 
| 2751 |  |  |  |  |  |  |  | 
| 2752 |  |  |  |  |  |  | =item SITEPREFIX | 
| 2753 |  |  |  |  |  |  |  | 
| 2754 |  |  |  |  |  |  | Like PERLPREFIX, but only for the site install locations. | 
| 2755 |  |  |  |  |  |  |  | 
| 2756 |  |  |  |  |  |  | Defaults to $Config{siteprefixexp}.  Perls prior to 5.6.0 didn't have | 
| 2757 |  |  |  |  |  |  | an explicit siteprefix in the Config.  In those cases | 
| 2758 |  |  |  |  |  |  | $Config{installprefix} will be used. | 
| 2759 |  |  |  |  |  |  |  | 
| 2760 |  |  |  |  |  |  | Overridable by PREFIX | 
| 2761 |  |  |  |  |  |  |  | 
| 2762 |  |  |  |  |  |  | =item SIGN | 
| 2763 |  |  |  |  |  |  |  | 
| 2764 |  |  |  |  |  |  | Available in version 6.18 and above. | 
| 2765 |  |  |  |  |  |  |  | 
| 2766 |  |  |  |  |  |  | When true, perform the generation and addition to the MANIFEST of the | 
| 2767 |  |  |  |  |  |  | SIGNATURE file in the distdir during 'make distdir', via 'cpansign | 
| 2768 |  |  |  |  |  |  | -s'. | 
| 2769 |  |  |  |  |  |  |  | 
| 2770 |  |  |  |  |  |  | Note that you need to install the Module::Signature module to | 
| 2771 |  |  |  |  |  |  | perform this operation. | 
| 2772 |  |  |  |  |  |  |  | 
| 2773 |  |  |  |  |  |  | Defaults to false. | 
| 2774 |  |  |  |  |  |  |  | 
| 2775 |  |  |  |  |  |  | =item SKIP | 
| 2776 |  |  |  |  |  |  |  | 
| 2777 |  |  |  |  |  |  | Arrayref. E.g. [qw(name1 name2)] skip (do not write) sections of the | 
| 2778 |  |  |  |  |  |  | Makefile. Caution! Do not use the SKIP attribute for the negligible | 
| 2779 |  |  |  |  |  |  | speedup. It may seriously damage the resulting Makefile. Only use it | 
| 2780 |  |  |  |  |  |  | if you really need it. | 
| 2781 |  |  |  |  |  |  |  | 
| 2782 |  |  |  |  |  |  | =item TEST_REQUIRES | 
| 2783 |  |  |  |  |  |  |  | 
| 2784 |  |  |  |  |  |  | Available in version 6.64 and above. | 
| 2785 |  |  |  |  |  |  |  | 
| 2786 |  |  |  |  |  |  | A hash of modules that are needed to test your module but not run or | 
| 2787 |  |  |  |  |  |  | build it. | 
| 2788 |  |  |  |  |  |  |  | 
| 2789 |  |  |  |  |  |  | This will go into the C<build_requires> field of your F<META.yml> and the C<test> of the C<prereqs> field of your F<META.json>. | 
| 2790 |  |  |  |  |  |  |  | 
| 2791 |  |  |  |  |  |  | The format is the same as PREREQ_PM. | 
| 2792 |  |  |  |  |  |  |  | 
| 2793 |  |  |  |  |  |  | =item TYPEMAPS | 
| 2794 |  |  |  |  |  |  |  | 
| 2795 |  |  |  |  |  |  | Ref to array of typemap file names.  Use this when the typemaps are | 
| 2796 |  |  |  |  |  |  | in some directory other than the current directory or when they are | 
| 2797 |  |  |  |  |  |  | not named B<typemap>.  The last typemap in the list takes | 
| 2798 |  |  |  |  |  |  | precedence.  A typemap in the current directory has highest | 
| 2799 |  |  |  |  |  |  | precedence, even if it isn't listed in TYPEMAPS.  The default system | 
| 2800 |  |  |  |  |  |  | typemap has lowest precedence. | 
| 2801 |  |  |  |  |  |  |  | 
| 2802 |  |  |  |  |  |  | =item VENDORPREFIX | 
| 2803 |  |  |  |  |  |  |  | 
| 2804 |  |  |  |  |  |  | Like PERLPREFIX, but only for the vendor install locations. | 
| 2805 |  |  |  |  |  |  |  | 
| 2806 |  |  |  |  |  |  | Defaults to $Config{vendorprefixexp}. | 
| 2807 |  |  |  |  |  |  |  | 
| 2808 |  |  |  |  |  |  | Overridable by PREFIX | 
| 2809 |  |  |  |  |  |  |  | 
| 2810 |  |  |  |  |  |  | =item VERBINST | 
| 2811 |  |  |  |  |  |  |  | 
| 2812 |  |  |  |  |  |  | If true, make install will be verbose | 
| 2813 |  |  |  |  |  |  |  | 
| 2814 |  |  |  |  |  |  | =item VERSION | 
| 2815 |  |  |  |  |  |  |  | 
| 2816 |  |  |  |  |  |  | Your version number for distributing the package.  This defaults to | 
| 2817 |  |  |  |  |  |  | 0.1. | 
| 2818 |  |  |  |  |  |  |  | 
| 2819 |  |  |  |  |  |  | =item VERSION_FROM | 
| 2820 |  |  |  |  |  |  |  | 
| 2821 |  |  |  |  |  |  | Instead of specifying the VERSION in the Makefile.PL you can let | 
| 2822 |  |  |  |  |  |  | MakeMaker parse a file to determine the version number. The parsing | 
| 2823 |  |  |  |  |  |  | routine requires that the file named by VERSION_FROM contains one | 
| 2824 |  |  |  |  |  |  | single line to compute the version number. The first line in the file | 
| 2825 |  |  |  |  |  |  | that contains something like a $VERSION assignment or C<package Name | 
| 2826 |  |  |  |  |  |  | VERSION> will be used. The following lines will be parsed o.k.: | 
| 2827 |  |  |  |  |  |  |  | 
| 2828 |  |  |  |  |  |  | # Good | 
| 2829 |  |  |  |  |  |  | package Foo::Bar 1.23;                      # 1.23 | 
| 2830 |  |  |  |  |  |  | $VERSION   = '1.00';                        # 1.00 | 
| 2831 |  |  |  |  |  |  | *VERSION   = \'1.01';                       # 1.01 | 
| 2832 |  |  |  |  |  |  | ($VERSION) = q$Revision$ =~ /(\d+)/g;       # The digits in $Revision$ | 
| 2833 |  |  |  |  |  |  | $FOO::VERSION = '1.10';                     # 1.10 | 
| 2834 |  |  |  |  |  |  | *FOO::VERSION = \'1.11';                    # 1.11 | 
| 2835 |  |  |  |  |  |  |  | 
| 2836 |  |  |  |  |  |  | but these will fail: | 
| 2837 |  |  |  |  |  |  |  | 
| 2838 |  |  |  |  |  |  | # Bad | 
| 2839 |  |  |  |  |  |  | my $VERSION         = '1.01'; | 
| 2840 |  |  |  |  |  |  | local $VERSION      = '1.02'; | 
| 2841 |  |  |  |  |  |  | local $FOO::VERSION = '1.30'; | 
| 2842 |  |  |  |  |  |  |  | 
| 2843 |  |  |  |  |  |  | (Putting C<my> or C<local> on the preceding line will work o.k.) | 
| 2844 |  |  |  |  |  |  |  | 
| 2845 |  |  |  |  |  |  | "Version strings" are incompatible and should not be used. | 
| 2846 |  |  |  |  |  |  |  | 
| 2847 |  |  |  |  |  |  | # Bad | 
| 2848 |  |  |  |  |  |  | $VERSION = 1.2.3; | 
| 2849 |  |  |  |  |  |  | $VERSION = v1.2.3; | 
| 2850 |  |  |  |  |  |  |  | 
| 2851 |  |  |  |  |  |  | L<version> objects are fine.  As of MakeMaker 6.35 version.pm will be | 
| 2852 |  |  |  |  |  |  | automatically loaded, but you must declare the dependency on version.pm. | 
| 2853 |  |  |  |  |  |  | For compatibility with older MakeMaker you should load on the same line | 
| 2854 |  |  |  |  |  |  | as $VERSION is declared. | 
| 2855 |  |  |  |  |  |  |  | 
| 2856 |  |  |  |  |  |  | # All on one line | 
| 2857 |  |  |  |  |  |  | use version; our $VERSION = qv(1.2.3); | 
| 2858 |  |  |  |  |  |  |  | 
| 2859 |  |  |  |  |  |  | The file named in VERSION_FROM is not added as a dependency to | 
| 2860 |  |  |  |  |  |  | Makefile. This is not really correct, but it would be a major pain | 
| 2861 |  |  |  |  |  |  | during development to have to rewrite the Makefile for any smallish | 
| 2862 |  |  |  |  |  |  | change in that file. If you want to make sure that the Makefile | 
| 2863 |  |  |  |  |  |  | contains the correct VERSION macro after any change of the file, you | 
| 2864 |  |  |  |  |  |  | would have to do something like | 
| 2865 |  |  |  |  |  |  |  | 
| 2866 |  |  |  |  |  |  | depend => { Makefile => '$(VERSION_FROM)' } | 
| 2867 |  |  |  |  |  |  |  | 
| 2868 |  |  |  |  |  |  | See attribute C<depend> below. | 
| 2869 |  |  |  |  |  |  |  | 
| 2870 |  |  |  |  |  |  | =item VERSION_SYM | 
| 2871 |  |  |  |  |  |  |  | 
| 2872 |  |  |  |  |  |  | A sanitized VERSION with . replaced by _.  For places where . has | 
| 2873 |  |  |  |  |  |  | special meaning (some filesystems, RCS labels, etc...) | 
| 2874 |  |  |  |  |  |  |  | 
| 2875 |  |  |  |  |  |  | =item XS | 
| 2876 |  |  |  |  |  |  |  | 
| 2877 |  |  |  |  |  |  | Hashref of .xs files. MakeMaker will default this.  e.g. | 
| 2878 |  |  |  |  |  |  |  | 
| 2879 |  |  |  |  |  |  | {'name_of_file.xs' => 'name_of_file.c'} | 
| 2880 |  |  |  |  |  |  |  | 
| 2881 |  |  |  |  |  |  | The .c files will automatically be included in the list of files | 
| 2882 |  |  |  |  |  |  | deleted by a make clean. | 
| 2883 |  |  |  |  |  |  |  | 
| 2884 |  |  |  |  |  |  | =item XSBUILD | 
| 2885 |  |  |  |  |  |  |  | 
| 2886 |  |  |  |  |  |  | Available in version 7.12 and above. | 
| 2887 |  |  |  |  |  |  |  | 
| 2888 |  |  |  |  |  |  | Hashref with options controlling the operation of C<XSMULTI>: | 
| 2889 |  |  |  |  |  |  |  | 
| 2890 |  |  |  |  |  |  | { | 
| 2891 |  |  |  |  |  |  | xs => { | 
| 2892 |  |  |  |  |  |  | all => { | 
| 2893 |  |  |  |  |  |  | # options applying to all .xs files for this distribution | 
| 2894 |  |  |  |  |  |  | }, | 
| 2895 |  |  |  |  |  |  | 'lib/Class/Name/File' => { # specifically for this file | 
| 2896 |  |  |  |  |  |  | DEFINE => '-Dfunktastic', # defines for only this file | 
| 2897 |  |  |  |  |  |  | INC => "-I$funkyliblocation", # include flags for only this file | 
| 2898 |  |  |  |  |  |  | # OBJECT => 'lib/Class/Name/File$(OBJ_EXT)', # default | 
| 2899 |  |  |  |  |  |  | LDFROM => "lib/Class/Name/File\$(OBJ_EXT) $otherfile\$(OBJ_EXT)", # what's linked | 
| 2900 |  |  |  |  |  |  | }, | 
| 2901 |  |  |  |  |  |  | }, | 
| 2902 |  |  |  |  |  |  | } | 
| 2903 |  |  |  |  |  |  |  | 
| 2904 |  |  |  |  |  |  | Note C<xs> is the file-extension. More possibilities may arise in the | 
| 2905 |  |  |  |  |  |  | future. Note that object names are specified without their XS extension. | 
| 2906 |  |  |  |  |  |  |  | 
| 2907 |  |  |  |  |  |  | C<LDFROM> defaults to the same as C<OBJECT>. C<OBJECT> defaults to, | 
| 2908 |  |  |  |  |  |  | for C<XSMULTI>, just the XS filename with the extension replaced with | 
| 2909 |  |  |  |  |  |  | the compiler-specific object-file extension. | 
| 2910 |  |  |  |  |  |  |  | 
| 2911 |  |  |  |  |  |  | The distinction between C<OBJECT> and C<LDFROM>: C<OBJECT> is the make | 
| 2912 |  |  |  |  |  |  | target, so make will try to build it. However, C<LDFROM> is what will | 
| 2913 |  |  |  |  |  |  | actually be linked together to make the shared object or static library | 
| 2914 |  |  |  |  |  |  | (SO/SL), so if you override it, make sure it includes what you want to | 
| 2915 |  |  |  |  |  |  | make the final SO/SL, almost certainly including the XS basename with | 
| 2916 |  |  |  |  |  |  | C<$(OBJ_EXT)> appended. | 
| 2917 |  |  |  |  |  |  |  | 
| 2918 |  |  |  |  |  |  | =item XSMULTI | 
| 2919 |  |  |  |  |  |  |  | 
| 2920 |  |  |  |  |  |  | Available in version 7.12 and above. | 
| 2921 |  |  |  |  |  |  |  | 
| 2922 |  |  |  |  |  |  | When this is set to C<1>, multiple XS files may be placed under F<lib/> | 
| 2923 |  |  |  |  |  |  | next to their corresponding C<*.pm> files (this is essential for compiling | 
| 2924 |  |  |  |  |  |  | with the correct C<VERSION> values). This feature should be considered | 
| 2925 |  |  |  |  |  |  | experimental, and details of it may change. | 
| 2926 |  |  |  |  |  |  |  | 
| 2927 |  |  |  |  |  |  | This feature was inspired by, and small portions of code copied from, | 
| 2928 |  |  |  |  |  |  | L<ExtUtils::MakeMaker::BigHelper>. Hopefully this feature will render | 
| 2929 |  |  |  |  |  |  | that module mainly obsolete. | 
| 2930 |  |  |  |  |  |  |  | 
| 2931 |  |  |  |  |  |  | =item XSOPT | 
| 2932 |  |  |  |  |  |  |  | 
| 2933 |  |  |  |  |  |  | String of options to pass to xsubpp.  This might include C<-C++> or | 
| 2934 |  |  |  |  |  |  | C<-extern>.  Do not include typemaps here; the TYPEMAP parameter exists for | 
| 2935 |  |  |  |  |  |  | that purpose. | 
| 2936 |  |  |  |  |  |  |  | 
| 2937 |  |  |  |  |  |  | =item XSPROTOARG | 
| 2938 |  |  |  |  |  |  |  | 
| 2939 |  |  |  |  |  |  | May be set to C<-prototypes>, C<-noprototypes> or the empty string.  The | 
| 2940 |  |  |  |  |  |  | empty string is equivalent to the xsubpp default, or C<-noprototypes>. | 
| 2941 |  |  |  |  |  |  | See the xsubpp documentation for details.  MakeMaker | 
| 2942 |  |  |  |  |  |  | defaults to the empty string. | 
| 2943 |  |  |  |  |  |  |  | 
| 2944 |  |  |  |  |  |  | =item XS_VERSION | 
| 2945 |  |  |  |  |  |  |  | 
| 2946 |  |  |  |  |  |  | Your version number for the .xs file of this package.  This defaults | 
| 2947 |  |  |  |  |  |  | to the value of the VERSION attribute. | 
| 2948 |  |  |  |  |  |  |  | 
| 2949 |  |  |  |  |  |  | =back | 
| 2950 |  |  |  |  |  |  |  | 
| 2951 |  |  |  |  |  |  | =head2 Additional lowercase attributes | 
| 2952 |  |  |  |  |  |  |  | 
| 2953 |  |  |  |  |  |  | can be used to pass parameters to the methods which implement that | 
| 2954 |  |  |  |  |  |  | part of the Makefile.  Parameters are specified as a hash ref but are | 
| 2955 |  |  |  |  |  |  | passed to the method as a hash. | 
| 2956 |  |  |  |  |  |  |  | 
| 2957 |  |  |  |  |  |  | =over 2 | 
| 2958 |  |  |  |  |  |  |  | 
| 2959 |  |  |  |  |  |  | =item clean | 
| 2960 |  |  |  |  |  |  |  | 
| 2961 |  |  |  |  |  |  | {FILES => "*.xyz foo"} | 
| 2962 |  |  |  |  |  |  |  | 
| 2963 |  |  |  |  |  |  | =item depend | 
| 2964 |  |  |  |  |  |  |  | 
| 2965 |  |  |  |  |  |  | {ANY_TARGET => ANY_DEPENDENCY, ...} | 
| 2966 |  |  |  |  |  |  |  | 
| 2967 |  |  |  |  |  |  | (ANY_TARGET must not be given a double-colon rule by MakeMaker.) | 
| 2968 |  |  |  |  |  |  |  | 
| 2969 |  |  |  |  |  |  | =item dist | 
| 2970 |  |  |  |  |  |  |  | 
| 2971 |  |  |  |  |  |  | {TARFLAGS => 'cvfF', COMPRESS => 'gzip', SUFFIX => '.gz', | 
| 2972 |  |  |  |  |  |  | SHAR => 'shar -m', DIST_CP => 'ln', ZIP => '/bin/zip', | 
| 2973 |  |  |  |  |  |  | ZIPFLAGS => '-rl', DIST_DEFAULT => 'private tardist' } | 
| 2974 |  |  |  |  |  |  |  | 
| 2975 |  |  |  |  |  |  | If you specify COMPRESS, then SUFFIX should also be altered, as it is | 
| 2976 |  |  |  |  |  |  | needed to tell make the target file of the compression. Setting | 
| 2977 |  |  |  |  |  |  | DIST_CP to ln can be useful, if you need to preserve the timestamps on | 
| 2978 |  |  |  |  |  |  | your files. DIST_CP can take the values 'cp', which copies the file, | 
| 2979 |  |  |  |  |  |  | 'ln', which links the file, and 'best' which copies symbolic links and | 
| 2980 |  |  |  |  |  |  | links the rest. Default is 'best'. | 
| 2981 |  |  |  |  |  |  |  | 
| 2982 |  |  |  |  |  |  | =item dynamic_lib | 
| 2983 |  |  |  |  |  |  |  | 
| 2984 |  |  |  |  |  |  | {ARMAYBE => 'ar', OTHERLDFLAGS => '...', INST_DYNAMIC_DEP => '...'} | 
| 2985 |  |  |  |  |  |  |  | 
| 2986 |  |  |  |  |  |  | =item linkext | 
| 2987 |  |  |  |  |  |  |  | 
| 2988 |  |  |  |  |  |  | {LINKTYPE => 'static', 'dynamic' or ''} | 
| 2989 |  |  |  |  |  |  |  | 
| 2990 |  |  |  |  |  |  | NB: Extensions that have nothing but *.pm files had to say | 
| 2991 |  |  |  |  |  |  |  | 
| 2992 |  |  |  |  |  |  | {LINKTYPE => ''} | 
| 2993 |  |  |  |  |  |  |  | 
| 2994 |  |  |  |  |  |  | with Pre-5.0 MakeMakers. Since version 5.00 of MakeMaker such a line | 
| 2995 |  |  |  |  |  |  | can be deleted safely. MakeMaker recognizes when there's nothing to | 
| 2996 |  |  |  |  |  |  | be linked. | 
| 2997 |  |  |  |  |  |  |  | 
| 2998 |  |  |  |  |  |  | =item macro | 
| 2999 |  |  |  |  |  |  |  | 
| 3000 |  |  |  |  |  |  | {ANY_MACRO => ANY_VALUE, ...} | 
| 3001 |  |  |  |  |  |  |  | 
| 3002 |  |  |  |  |  |  | =item postamble | 
| 3003 |  |  |  |  |  |  |  | 
| 3004 |  |  |  |  |  |  | Anything put here will be passed to | 
| 3005 |  |  |  |  |  |  | L<MY::postamble()|ExtUtils::MM_Any/postamble (o)> if you have one. | 
| 3006 |  |  |  |  |  |  |  | 
| 3007 |  |  |  |  |  |  | =item realclean | 
| 3008 |  |  |  |  |  |  |  | 
| 3009 |  |  |  |  |  |  | {FILES => '$(INST_ARCHAUTODIR)/*.xyz'} | 
| 3010 |  |  |  |  |  |  |  | 
| 3011 |  |  |  |  |  |  | =item test | 
| 3012 |  |  |  |  |  |  |  | 
| 3013 |  |  |  |  |  |  | Specify the targets for testing. | 
| 3014 |  |  |  |  |  |  |  | 
| 3015 |  |  |  |  |  |  | {TESTS => 't/*.t'} | 
| 3016 |  |  |  |  |  |  |  | 
| 3017 |  |  |  |  |  |  | C<RECURSIVE_TEST_FILES> can be used to include all directories | 
| 3018 |  |  |  |  |  |  | recursively under C<t> that contain C<.t> files. It will be ignored if | 
| 3019 |  |  |  |  |  |  | you provide your own C<TESTS> attribute, defaults to false. | 
| 3020 |  |  |  |  |  |  |  | 
| 3021 |  |  |  |  |  |  | {RECURSIVE_TEST_FILES=>1} | 
| 3022 |  |  |  |  |  |  |  | 
| 3023 |  |  |  |  |  |  | This is supported since 6.76 | 
| 3024 |  |  |  |  |  |  |  | 
| 3025 |  |  |  |  |  |  | =item tool_autosplit | 
| 3026 |  |  |  |  |  |  |  | 
| 3027 |  |  |  |  |  |  | {MAXLEN => 8} | 
| 3028 |  |  |  |  |  |  |  | 
| 3029 |  |  |  |  |  |  | =back | 
| 3030 |  |  |  |  |  |  |  | 
| 3031 |  |  |  |  |  |  | =head2 Overriding MakeMaker Methods | 
| 3032 |  |  |  |  |  |  |  | 
| 3033 |  |  |  |  |  |  | If you cannot achieve the desired Makefile behaviour by specifying | 
| 3034 |  |  |  |  |  |  | attributes you may define private subroutines in the Makefile.PL. | 
| 3035 |  |  |  |  |  |  | Each subroutine returns the text it wishes to have written to | 
| 3036 |  |  |  |  |  |  | the Makefile. To override a section of the Makefile you can | 
| 3037 |  |  |  |  |  |  | either say: | 
| 3038 |  |  |  |  |  |  |  | 
| 3039 |  |  |  |  |  |  | sub MY::c_o { "new literal text" } | 
| 3040 |  |  |  |  |  |  |  | 
| 3041 |  |  |  |  |  |  | or you can edit the default by saying something like: | 
| 3042 |  |  |  |  |  |  |  | 
| 3043 |  |  |  |  |  |  | package MY; # so that "SUPER" works right | 
| 3044 |  |  |  |  |  |  | sub c_o { | 
| 3045 |  |  |  |  |  |  | my $inherited = shift->SUPER::c_o(@_); | 
| 3046 |  |  |  |  |  |  | $inherited =~ s/old text/new text/; | 
| 3047 |  |  |  |  |  |  | $inherited; | 
| 3048 |  |  |  |  |  |  | } | 
| 3049 |  |  |  |  |  |  |  | 
| 3050 |  |  |  |  |  |  | If you are running experiments with embedding perl as a library into | 
| 3051 |  |  |  |  |  |  | other applications, you might find MakeMaker is not sufficient. You'd | 
| 3052 |  |  |  |  |  |  | better have a look at L<ExtUtils::Embed> which is a collection of utilities | 
| 3053 |  |  |  |  |  |  | for embedding. | 
| 3054 |  |  |  |  |  |  |  | 
| 3055 |  |  |  |  |  |  | If you still need a different solution, try to develop another | 
| 3056 |  |  |  |  |  |  | subroutine that fits your needs and submit the diffs to | 
| 3057 |  |  |  |  |  |  | C<makemaker@perl.org> | 
| 3058 |  |  |  |  |  |  |  | 
| 3059 |  |  |  |  |  |  | For a complete description of all MakeMaker methods see | 
| 3060 |  |  |  |  |  |  | L<ExtUtils::MM_Unix>. | 
| 3061 |  |  |  |  |  |  |  | 
| 3062 |  |  |  |  |  |  | Here is a simple example of how to add a new target to the generated | 
| 3063 |  |  |  |  |  |  | Makefile: | 
| 3064 |  |  |  |  |  |  |  | 
| 3065 |  |  |  |  |  |  | sub MY::postamble { | 
| 3066 |  |  |  |  |  |  | return <<'MAKE_FRAG'; | 
| 3067 |  |  |  |  |  |  | $(MYEXTLIB): sdbm/Makefile | 
| 3068 |  |  |  |  |  |  | cd sdbm && $(MAKE) all | 
| 3069 |  |  |  |  |  |  |  | 
| 3070 |  |  |  |  |  |  | MAKE_FRAG | 
| 3071 |  |  |  |  |  |  | } | 
| 3072 |  |  |  |  |  |  |  | 
| 3073 |  |  |  |  |  |  | =head2 The End Of Cargo Cult Programming | 
| 3074 |  |  |  |  |  |  |  | 
| 3075 |  |  |  |  |  |  | WriteMakefile() now does some basic sanity checks on its parameters to | 
| 3076 |  |  |  |  |  |  | protect against typos and malformatted values.  This means some things | 
| 3077 |  |  |  |  |  |  | which happened to work in the past will now throw warnings and | 
| 3078 |  |  |  |  |  |  | possibly produce internal errors. | 
| 3079 |  |  |  |  |  |  |  | 
| 3080 |  |  |  |  |  |  | Some of the most common mistakes: | 
| 3081 |  |  |  |  |  |  |  | 
| 3082 |  |  |  |  |  |  | =over 2 | 
| 3083 |  |  |  |  |  |  |  | 
| 3084 |  |  |  |  |  |  | =item C<< MAN3PODS => ' ' >> | 
| 3085 |  |  |  |  |  |  |  | 
| 3086 |  |  |  |  |  |  | This is commonly used to suppress the creation of man pages.  MAN3PODS | 
| 3087 |  |  |  |  |  |  | takes a hash ref not a string, but the above worked by accident in old | 
| 3088 |  |  |  |  |  |  | versions of MakeMaker. | 
| 3089 |  |  |  |  |  |  |  | 
| 3090 |  |  |  |  |  |  | The correct code is C<< MAN3PODS => { } >>. | 
| 3091 |  |  |  |  |  |  |  | 
| 3092 |  |  |  |  |  |  | =back | 
| 3093 |  |  |  |  |  |  |  | 
| 3094 |  |  |  |  |  |  |  | 
| 3095 |  |  |  |  |  |  | =head2 Hintsfile support | 
| 3096 |  |  |  |  |  |  |  | 
| 3097 |  |  |  |  |  |  | MakeMaker.pm uses the architecture-specific information from | 
| 3098 |  |  |  |  |  |  | Config.pm. In addition it evaluates architecture specific hints files | 
| 3099 |  |  |  |  |  |  | in a C<hints/> directory. The hints files are expected to be named | 
| 3100 |  |  |  |  |  |  | like their counterparts in C<PERL_SRC/hints>, but with an C<.pl> file | 
| 3101 |  |  |  |  |  |  | name extension (eg. C<next_3_2.pl>). They are simply C<eval>ed by | 
| 3102 |  |  |  |  |  |  | MakeMaker within the WriteMakefile() subroutine, and can be used to | 
| 3103 |  |  |  |  |  |  | execute commands as well as to include special variables. The rules | 
| 3104 |  |  |  |  |  |  | which hintsfile is chosen are the same as in Configure. | 
| 3105 |  |  |  |  |  |  |  | 
| 3106 |  |  |  |  |  |  | The hintsfile is eval()ed immediately after the arguments given to | 
| 3107 |  |  |  |  |  |  | WriteMakefile are stuffed into a hash reference $self but before this | 
| 3108 |  |  |  |  |  |  | reference becomes blessed. So if you want to do the equivalent to | 
| 3109 |  |  |  |  |  |  | override or create an attribute you would say something like | 
| 3110 |  |  |  |  |  |  |  | 
| 3111 |  |  |  |  |  |  | $self->{LIBS} = ['-ldbm -lucb -lc']; | 
| 3112 |  |  |  |  |  |  |  | 
| 3113 |  |  |  |  |  |  | =head2 Distribution Support | 
| 3114 |  |  |  |  |  |  |  | 
| 3115 |  |  |  |  |  |  | For authors of extensions MakeMaker provides several Makefile | 
| 3116 |  |  |  |  |  |  | targets. Most of the support comes from the L<ExtUtils::Manifest> module, | 
| 3117 |  |  |  |  |  |  | where additional documentation can be found. | 
| 3118 |  |  |  |  |  |  |  | 
| 3119 |  |  |  |  |  |  | =over 4 | 
| 3120 |  |  |  |  |  |  |  | 
| 3121 |  |  |  |  |  |  | =item    make distcheck | 
| 3122 |  |  |  |  |  |  |  | 
| 3123 |  |  |  |  |  |  | reports which files are below the build directory but not in the | 
| 3124 |  |  |  |  |  |  | MANIFEST file and vice versa. (See L<ExtUtils::Manifest/fullcheck> for | 
| 3125 |  |  |  |  |  |  | details) | 
| 3126 |  |  |  |  |  |  |  | 
| 3127 |  |  |  |  |  |  | =item    make skipcheck | 
| 3128 |  |  |  |  |  |  |  | 
| 3129 |  |  |  |  |  |  | reports which files are skipped due to the entries in the | 
| 3130 |  |  |  |  |  |  | C<MANIFEST.SKIP> file (See L<ExtUtils::Manifest/skipcheck> for | 
| 3131 |  |  |  |  |  |  | details) | 
| 3132 |  |  |  |  |  |  |  | 
| 3133 |  |  |  |  |  |  | =item    make distclean | 
| 3134 |  |  |  |  |  |  |  | 
| 3135 |  |  |  |  |  |  | does a realclean first and then the distcheck. Note that this is not | 
| 3136 |  |  |  |  |  |  | needed to build a new distribution as long as you are sure that the | 
| 3137 |  |  |  |  |  |  | MANIFEST file is ok. | 
| 3138 |  |  |  |  |  |  |  | 
| 3139 |  |  |  |  |  |  | =item    make veryclean | 
| 3140 |  |  |  |  |  |  |  | 
| 3141 |  |  |  |  |  |  | does a realclean first and then removes backup files such as C<*~>, | 
| 3142 |  |  |  |  |  |  | C<*.bak>, C<*.old> and C<*.orig> | 
| 3143 |  |  |  |  |  |  |  | 
| 3144 |  |  |  |  |  |  | =item    make manifest | 
| 3145 |  |  |  |  |  |  |  | 
| 3146 |  |  |  |  |  |  | rewrites the MANIFEST file, adding all remaining files found (See | 
| 3147 |  |  |  |  |  |  | L<ExtUtils::Manifest/mkmanifest> for details) | 
| 3148 |  |  |  |  |  |  |  | 
| 3149 |  |  |  |  |  |  | =item    make distdir | 
| 3150 |  |  |  |  |  |  |  | 
| 3151 |  |  |  |  |  |  | Copies all the files that are in the MANIFEST file to a newly created | 
| 3152 |  |  |  |  |  |  | directory with the name C<$(DISTNAME)-$(VERSION)>. If that directory | 
| 3153 |  |  |  |  |  |  | exists, it will be removed first. | 
| 3154 |  |  |  |  |  |  |  | 
| 3155 |  |  |  |  |  |  | Additionally, it will create META.yml and META.json module meta-data file | 
| 3156 |  |  |  |  |  |  | in the distdir and add this to the distdir's MANIFEST.  You can shut this | 
| 3157 |  |  |  |  |  |  | behavior off with the NO_META flag. | 
| 3158 |  |  |  |  |  |  |  | 
| 3159 |  |  |  |  |  |  | =item   make disttest | 
| 3160 |  |  |  |  |  |  |  | 
| 3161 |  |  |  |  |  |  | Makes a distdir first, and runs a C<perl Makefile.PL>, a make, and | 
| 3162 |  |  |  |  |  |  | a make test in that directory. | 
| 3163 |  |  |  |  |  |  |  | 
| 3164 |  |  |  |  |  |  | =item    make tardist | 
| 3165 |  |  |  |  |  |  |  | 
| 3166 |  |  |  |  |  |  | First does a distdir. Then a command $(PREOP) which defaults to a null | 
| 3167 |  |  |  |  |  |  | command, followed by $(TO_UNIX), which defaults to a null command under | 
| 3168 |  |  |  |  |  |  | UNIX, and will convert files in distribution directory to UNIX format | 
| 3169 |  |  |  |  |  |  | otherwise. Next it runs C<tar> on that directory into a tarfile and | 
| 3170 |  |  |  |  |  |  | deletes the directory. Finishes with a command $(POSTOP) which | 
| 3171 |  |  |  |  |  |  | defaults to a null command. | 
| 3172 |  |  |  |  |  |  |  | 
| 3173 |  |  |  |  |  |  | =item    make dist | 
| 3174 |  |  |  |  |  |  |  | 
| 3175 |  |  |  |  |  |  | Defaults to $(DIST_DEFAULT) which in turn defaults to tardist. | 
| 3176 |  |  |  |  |  |  |  | 
| 3177 |  |  |  |  |  |  | =item    make uutardist | 
| 3178 |  |  |  |  |  |  |  | 
| 3179 |  |  |  |  |  |  | Runs a tardist first and uuencodes the tarfile. | 
| 3180 |  |  |  |  |  |  |  | 
| 3181 |  |  |  |  |  |  | =item    make shdist | 
| 3182 |  |  |  |  |  |  |  | 
| 3183 |  |  |  |  |  |  | First does a distdir. Then a command $(PREOP) which defaults to a null | 
| 3184 |  |  |  |  |  |  | command. Next it runs C<shar> on that directory into a sharfile and | 
| 3185 |  |  |  |  |  |  | deletes the intermediate directory again. Finishes with a command | 
| 3186 |  |  |  |  |  |  | $(POSTOP) which defaults to a null command.  Note: For shdist to work | 
| 3187 |  |  |  |  |  |  | properly a C<shar> program that can handle directories is mandatory. | 
| 3188 |  |  |  |  |  |  |  | 
| 3189 |  |  |  |  |  |  | =item    make zipdist | 
| 3190 |  |  |  |  |  |  |  | 
| 3191 |  |  |  |  |  |  | First does a distdir. Then a command $(PREOP) which defaults to a null | 
| 3192 |  |  |  |  |  |  | command. Runs C<$(ZIP) $(ZIPFLAGS)> on that directory into a | 
| 3193 |  |  |  |  |  |  | zipfile. Then deletes that directory. Finishes with a command | 
| 3194 |  |  |  |  |  |  | $(POSTOP) which defaults to a null command. | 
| 3195 |  |  |  |  |  |  |  | 
| 3196 |  |  |  |  |  |  | =item    make ci | 
| 3197 |  |  |  |  |  |  |  | 
| 3198 |  |  |  |  |  |  | Does a $(CI) and a $(RCS_LABEL) on all files in the MANIFEST file. | 
| 3199 |  |  |  |  |  |  |  | 
| 3200 |  |  |  |  |  |  | =back | 
| 3201 |  |  |  |  |  |  |  | 
| 3202 |  |  |  |  |  |  | Customization of the dist targets can be done by specifying a hash | 
| 3203 |  |  |  |  |  |  | reference to the dist attribute of the WriteMakefile call. The | 
| 3204 |  |  |  |  |  |  | following parameters are recognized: | 
| 3205 |  |  |  |  |  |  |  | 
| 3206 |  |  |  |  |  |  | CI           ('ci -u') | 
| 3207 |  |  |  |  |  |  | COMPRESS     ('gzip --best') | 
| 3208 |  |  |  |  |  |  | POSTOP       ('@ :') | 
| 3209 |  |  |  |  |  |  | PREOP        ('@ :') | 
| 3210 |  |  |  |  |  |  | TO_UNIX      (depends on the system) | 
| 3211 |  |  |  |  |  |  | RCS_LABEL    ('rcs -q -Nv$(VERSION_SYM):') | 
| 3212 |  |  |  |  |  |  | SHAR         ('shar') | 
| 3213 |  |  |  |  |  |  | SUFFIX       ('.gz') | 
| 3214 |  |  |  |  |  |  | TAR          ('tar') | 
| 3215 |  |  |  |  |  |  | TARFLAGS     ('cvf') | 
| 3216 |  |  |  |  |  |  | ZIP          ('zip') | 
| 3217 |  |  |  |  |  |  | ZIPFLAGS     ('-r') | 
| 3218 |  |  |  |  |  |  |  | 
| 3219 |  |  |  |  |  |  | An example: | 
| 3220 |  |  |  |  |  |  |  | 
| 3221 |  |  |  |  |  |  | WriteMakefile( | 
| 3222 |  |  |  |  |  |  | ...other options... | 
| 3223 |  |  |  |  |  |  | dist => { | 
| 3224 |  |  |  |  |  |  | COMPRESS => "bzip2", | 
| 3225 |  |  |  |  |  |  | SUFFIX   => ".bz2" | 
| 3226 |  |  |  |  |  |  | } | 
| 3227 |  |  |  |  |  |  | ); | 
| 3228 |  |  |  |  |  |  |  | 
| 3229 |  |  |  |  |  |  |  | 
| 3230 |  |  |  |  |  |  | =head2 Module Meta-Data (META and MYMETA) | 
| 3231 |  |  |  |  |  |  |  | 
| 3232 |  |  |  |  |  |  | Long plaguing users of MakeMaker based modules has been the problem of | 
| 3233 |  |  |  |  |  |  | getting basic information about the module out of the sources | 
| 3234 |  |  |  |  |  |  | I<without> running the F<Makefile.PL> and doing a bunch of messy | 
| 3235 |  |  |  |  |  |  | heuristics on the resulting F<Makefile>.  Over the years, it has become | 
| 3236 |  |  |  |  |  |  | standard to keep this information in one or more CPAN Meta files | 
| 3237 |  |  |  |  |  |  | distributed with each distribution. | 
| 3238 |  |  |  |  |  |  |  | 
| 3239 |  |  |  |  |  |  | The original format of CPAN Meta files was L<YAML> and the corresponding | 
| 3240 |  |  |  |  |  |  | file was called F<META.yml>.  In 2010, version 2 of the L<CPAN::Meta::Spec> | 
| 3241 |  |  |  |  |  |  | was released, which mandates JSON format for the metadata in order to | 
| 3242 |  |  |  |  |  |  | overcome certain compatibility issues between YAML serializers and to | 
| 3243 |  |  |  |  |  |  | avoid breaking older clients unable to handle a new version of the spec. | 
| 3244 |  |  |  |  |  |  | The L<CPAN::Meta> library is now standard for accessing old and new-style | 
| 3245 |  |  |  |  |  |  | Meta files. | 
| 3246 |  |  |  |  |  |  |  | 
| 3247 |  |  |  |  |  |  | If L<CPAN::Meta> is installed, MakeMaker will automatically generate | 
| 3248 |  |  |  |  |  |  | F<META.json> and F<META.yml> files for you and add them to your F<MANIFEST> as | 
| 3249 |  |  |  |  |  |  | part of the 'distdir' target (and thus the 'dist' target).  This is intended to | 
| 3250 |  |  |  |  |  |  | seamlessly and rapidly populate CPAN with module meta-data.  If you wish to | 
| 3251 |  |  |  |  |  |  | shut this feature off, set the C<NO_META> C<WriteMakefile()> flag to true. | 
| 3252 |  |  |  |  |  |  |  | 
| 3253 |  |  |  |  |  |  | At the 2008 QA Hackathon in Oslo, Perl module toolchain maintainers agreed | 
| 3254 |  |  |  |  |  |  | to use the CPAN Meta format to communicate post-configuration requirements | 
| 3255 |  |  |  |  |  |  | between toolchain components.  These files, F<MYMETA.json> and F<MYMETA.yml>, | 
| 3256 |  |  |  |  |  |  | are generated when F<Makefile.PL> generates a F<Makefile> (if L<CPAN::Meta> | 
| 3257 |  |  |  |  |  |  | is installed).  Clients like L<CPAN> or L<CPANPLUS> will read these | 
| 3258 |  |  |  |  |  |  | files to see what prerequisites must be fulfilled before building or testing | 
| 3259 |  |  |  |  |  |  | the distribution.  If you wish to shut this feature off, set the C<NO_MYMETA> | 
| 3260 |  |  |  |  |  |  | C<WriteMakeFile()> flag to true. | 
| 3261 |  |  |  |  |  |  |  | 
| 3262 |  |  |  |  |  |  | =head2 Disabling an extension | 
| 3263 |  |  |  |  |  |  |  | 
| 3264 |  |  |  |  |  |  | If some events detected in F<Makefile.PL> imply that there is no way | 
| 3265 |  |  |  |  |  |  | to create the Module, but this is a normal state of things, then you | 
| 3266 |  |  |  |  |  |  | can create a F<Makefile> which does nothing, but succeeds on all the | 
| 3267 |  |  |  |  |  |  | "usual" build targets.  To do so, use | 
| 3268 |  |  |  |  |  |  |  | 
| 3269 |  |  |  |  |  |  | use ExtUtils::MakeMaker qw(WriteEmptyMakefile); | 
| 3270 |  |  |  |  |  |  | WriteEmptyMakefile(); | 
| 3271 |  |  |  |  |  |  |  | 
| 3272 |  |  |  |  |  |  | instead of WriteMakefile(). | 
| 3273 |  |  |  |  |  |  |  | 
| 3274 |  |  |  |  |  |  | This may be useful if other modules expect this module to be I<built> | 
| 3275 |  |  |  |  |  |  | OK, as opposed to I<work> OK (say, this system-dependent module builds | 
| 3276 |  |  |  |  |  |  | in a subdirectory of some other distribution, or is listed as a | 
| 3277 |  |  |  |  |  |  | dependency in a CPAN::Bundle, but the functionality is supported by | 
| 3278 |  |  |  |  |  |  | different means on the current architecture). | 
| 3279 |  |  |  |  |  |  |  | 
| 3280 |  |  |  |  |  |  | =head2 Other Handy Functions | 
| 3281 |  |  |  |  |  |  |  | 
| 3282 |  |  |  |  |  |  | =over 4 | 
| 3283 |  |  |  |  |  |  |  | 
| 3284 |  |  |  |  |  |  | =item prompt | 
| 3285 |  |  |  |  |  |  |  | 
| 3286 |  |  |  |  |  |  | my $value = prompt($message); | 
| 3287 |  |  |  |  |  |  | my $value = prompt($message, $default); | 
| 3288 |  |  |  |  |  |  |  | 
| 3289 |  |  |  |  |  |  | The C<prompt()> function provides an easy way to request user input | 
| 3290 |  |  |  |  |  |  | used to write a makefile.  It displays the $message as a prompt for | 
| 3291 |  |  |  |  |  |  | input.  If a $default is provided it will be used as a default.  The | 
| 3292 |  |  |  |  |  |  | function returns the $value selected by the user. | 
| 3293 |  |  |  |  |  |  |  | 
| 3294 |  |  |  |  |  |  | If C<prompt()> detects that it is not running interactively and there | 
| 3295 |  |  |  |  |  |  | is nothing on STDIN or if the PERL_MM_USE_DEFAULT environment variable | 
| 3296 |  |  |  |  |  |  | is set to true, the $default will be used without prompting.  This | 
| 3297 |  |  |  |  |  |  | prevents automated processes from blocking on user input. | 
| 3298 |  |  |  |  |  |  |  | 
| 3299 |  |  |  |  |  |  | If no $default is provided an empty string will be used instead. | 
| 3300 |  |  |  |  |  |  |  | 
| 3301 |  |  |  |  |  |  | =item os_unsupported | 
| 3302 |  |  |  |  |  |  |  | 
| 3303 |  |  |  |  |  |  | os_unsupported(); | 
| 3304 |  |  |  |  |  |  | os_unsupported if $^O eq 'MSWin32'; | 
| 3305 |  |  |  |  |  |  |  | 
| 3306 |  |  |  |  |  |  | The C<os_unsupported()> function provides a way to correctly exit your | 
| 3307 |  |  |  |  |  |  | C<Makefile.PL> before calling C<WriteMakefile>. It is essentially a | 
| 3308 |  |  |  |  |  |  | C<die> with the message "OS unsupported". | 
| 3309 |  |  |  |  |  |  |  | 
| 3310 |  |  |  |  |  |  | This is supported since 7.26 | 
| 3311 |  |  |  |  |  |  |  | 
| 3312 |  |  |  |  |  |  | =back | 
| 3313 |  |  |  |  |  |  |  | 
| 3314 |  |  |  |  |  |  | =head2 Supported versions of Perl | 
| 3315 |  |  |  |  |  |  |  | 
| 3316 |  |  |  |  |  |  | Please note that while this module works on Perl 5.6, it is no longer | 
| 3317 |  |  |  |  |  |  | being routinely tested on 5.6 - the earliest Perl version being routinely | 
| 3318 |  |  |  |  |  |  | tested, and expressly supported, is 5.8.1. However, patches to repair | 
| 3319 |  |  |  |  |  |  | any breakage on 5.6 are still being accepted. | 
| 3320 |  |  |  |  |  |  |  | 
| 3321 |  |  |  |  |  |  | =head1 ENVIRONMENT | 
| 3322 |  |  |  |  |  |  |  | 
| 3323 |  |  |  |  |  |  | =over 4 | 
| 3324 |  |  |  |  |  |  |  | 
| 3325 |  |  |  |  |  |  | =item PERL_MM_OPT | 
| 3326 |  |  |  |  |  |  |  | 
| 3327 |  |  |  |  |  |  | Command line options used by C<MakeMaker-E<gt>new()>, and thus by | 
| 3328 |  |  |  |  |  |  | C<WriteMakefile()>.  The string is split as the shell would, and the result | 
| 3329 |  |  |  |  |  |  | is processed before any actual command line arguments are processed. | 
| 3330 |  |  |  |  |  |  |  | 
| 3331 |  |  |  |  |  |  | PERL_MM_OPT='CCFLAGS="-Wl,-rpath -Wl,/foo/bar/lib" LIBS="-lwibble -lwobble"' | 
| 3332 |  |  |  |  |  |  |  | 
| 3333 |  |  |  |  |  |  | =item PERL_MM_USE_DEFAULT | 
| 3334 |  |  |  |  |  |  |  | 
| 3335 |  |  |  |  |  |  | If set to a true value then MakeMaker's prompt function will | 
| 3336 |  |  |  |  |  |  | always return the default without waiting for user input. | 
| 3337 |  |  |  |  |  |  |  | 
| 3338 |  |  |  |  |  |  | =item PERL_CORE | 
| 3339 |  |  |  |  |  |  |  | 
| 3340 |  |  |  |  |  |  | Same as the PERL_CORE parameter.  The parameter overrides this. | 
| 3341 |  |  |  |  |  |  |  | 
| 3342 |  |  |  |  |  |  | =back | 
| 3343 |  |  |  |  |  |  |  | 
| 3344 |  |  |  |  |  |  | =head1 SEE ALSO | 
| 3345 |  |  |  |  |  |  |  | 
| 3346 |  |  |  |  |  |  | L<Module::Build> is a pure-Perl alternative to MakeMaker which does | 
| 3347 |  |  |  |  |  |  | not rely on make or any other external utility.  It may be easier to | 
| 3348 |  |  |  |  |  |  | extend to suit your needs. | 
| 3349 |  |  |  |  |  |  |  | 
| 3350 |  |  |  |  |  |  | L<Module::Build::Tiny> is a minimal pure-Perl alternative to MakeMaker | 
| 3351 |  |  |  |  |  |  | that follows the Build.PL protocol of Module::Build but without its | 
| 3352 |  |  |  |  |  |  | complexity and cruft, implementing only the installation of the module | 
| 3353 |  |  |  |  |  |  | and leaving authoring to L<mbtiny> or other authoring tools. | 
| 3354 |  |  |  |  |  |  |  | 
| 3355 |  |  |  |  |  |  | L<Module::Install> is a (now discouraged) wrapper around MakeMaker which | 
| 3356 |  |  |  |  |  |  | adds features not normally available. | 
| 3357 |  |  |  |  |  |  |  | 
| 3358 |  |  |  |  |  |  | L<ExtUtils::ModuleMaker> and L<Module::Starter> are both modules to | 
| 3359 |  |  |  |  |  |  | help you setup your distribution. | 
| 3360 |  |  |  |  |  |  |  | 
| 3361 |  |  |  |  |  |  | L<CPAN::Meta> and L<CPAN::Meta::Spec> explain CPAN Meta files in detail. | 
| 3362 |  |  |  |  |  |  |  | 
| 3363 |  |  |  |  |  |  | L<File::ShareDir::Install> makes it easy to install static, sometimes | 
| 3364 |  |  |  |  |  |  | also referred to as 'shared' files. L<File::ShareDir> helps accessing | 
| 3365 |  |  |  |  |  |  | the shared files after installation. L<Test::File::ShareDir> helps when | 
| 3366 |  |  |  |  |  |  | writing tests to use the shared files both before and after installation. | 
| 3367 |  |  |  |  |  |  |  | 
| 3368 |  |  |  |  |  |  | L<Dist::Zilla> is an authoring tool which allows great customization and | 
| 3369 |  |  |  |  |  |  | extensibility of the author experience, relying on the existing install | 
| 3370 |  |  |  |  |  |  | tools like ExtUtils::MakeMaker only for installation. | 
| 3371 |  |  |  |  |  |  |  | 
| 3372 |  |  |  |  |  |  | L<Dist::Milla> is a Dist::Zilla bundle that greatly simplifies common | 
| 3373 |  |  |  |  |  |  | usage. | 
| 3374 |  |  |  |  |  |  |  | 
| 3375 |  |  |  |  |  |  | L<Minilla> is a minimal authoring tool that does the same things as | 
| 3376 |  |  |  |  |  |  | Dist::Milla without the overhead of Dist::Zilla. | 
| 3377 |  |  |  |  |  |  |  | 
| 3378 |  |  |  |  |  |  | =head1 AUTHORS | 
| 3379 |  |  |  |  |  |  |  | 
| 3380 |  |  |  |  |  |  | Andy Dougherty C<doughera@lafayette.edu>, Andreas KE<ouml>nig | 
| 3381 |  |  |  |  |  |  | C<andreas.koenig@mind.de>, Tim Bunce C<timb@cpan.org>.  VMS | 
| 3382 |  |  |  |  |  |  | support by Charles Bailey C<bailey@newman.upenn.edu>.  OS/2 support | 
| 3383 |  |  |  |  |  |  | by Ilya Zakharevich C<ilya@math.ohio-state.edu>. | 
| 3384 |  |  |  |  |  |  |  | 
| 3385 |  |  |  |  |  |  | Currently maintained by Michael G Schwern C<schwern@pobox.com> | 
| 3386 |  |  |  |  |  |  |  | 
| 3387 |  |  |  |  |  |  | Send patches and ideas to C<makemaker@perl.org>. | 
| 3388 |  |  |  |  |  |  |  | 
| 3389 |  |  |  |  |  |  | Send bug reports via http://rt.cpan.org/.  Please send your | 
| 3390 |  |  |  |  |  |  | generated Makefile along with your report. | 
| 3391 |  |  |  |  |  |  |  | 
| 3392 |  |  |  |  |  |  | For more up-to-date information, see L<https://metacpan.org/release/ExtUtils-MakeMaker>. | 
| 3393 |  |  |  |  |  |  |  | 
| 3394 |  |  |  |  |  |  | Repository available at L<https://github.com/Perl-Toolchain-Gang/ExtUtils-MakeMaker>. | 
| 3395 |  |  |  |  |  |  |  | 
| 3396 |  |  |  |  |  |  | =head1 LICENSE | 
| 3397 |  |  |  |  |  |  |  | 
| 3398 |  |  |  |  |  |  | This program is free software; you can redistribute it and/or | 
| 3399 |  |  |  |  |  |  | modify it under the same terms as Perl itself. | 
| 3400 |  |  |  |  |  |  |  | 
| 3401 |  |  |  |  |  |  | See L<http://www.perl.com/perl/misc/Artistic.html> | 
| 3402 |  |  |  |  |  |  |  | 
| 3403 |  |  |  |  |  |  |  | 
| 3404 |  |  |  |  |  |  | =cut |