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