Integrate version.pm-0.77 into bleadperl
[p5sagit/p5-mst-13.2.git] / 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 Carp ();
11 use File::Path;
12
13 our $Verbose = 0;       # exported
14 our @Parent;            # needs to be localized
15 our @Get_from_Config;   # referenced by MM_Unix
16 our @MM_Sections;
17 our @Overridable;
18 my @Prepend_parent;
19 my %Recognized_Att_Keys;
20
21 our $VERSION = '6.53_02';
22
23 # Emulate something resembling CVS $Revision$
24 (our $Revision = $VERSION) =~ s{_}{};
25 $Revision = int $Revision * 10000;
26
27 our $Filename = __FILE__;   # referenced outside MakeMaker
28
29 our @ISA = qw(Exporter);
30 our @EXPORT    = qw(&WriteMakefile &writeMakefile $Verbose &prompt);
31 our @EXPORT_OK = qw($VERSION &neatvalue &mkbootstrap &mksymlists
32                     &WriteEmptyMakefile);
33
34 # These will go away once the last of the Win32 & VMS specific code is 
35 # purged.
36 my $Is_VMS     = $^O eq 'VMS';
37 my $Is_Win32   = $^O eq 'MSWin32';
38
39 full_setup();
40
41 require ExtUtils::MM;  # Things like CPAN assume loading ExtUtils::MakeMaker
42                        # will give them MM.
43
44 require ExtUtils::MY;  # XXX pre-5.8 versions of ExtUtils::Embed expect
45                        # loading ExtUtils::MakeMaker will give them MY.
46                        # This will go when Embed is its own CPAN module.
47
48
49 sub WriteMakefile {
50     Carp::croak "WriteMakefile: Need even number of args" if @_ % 2;
51
52     require ExtUtils::MY;
53     my %att = @_;
54
55     _verify_att(\%att);
56
57     my $mm = MM->new(\%att);
58     $mm->flush;
59
60     return $mm;
61 }
62
63
64 # Basic signatures of the attributes WriteMakefile takes.  Each is the
65 # reference type.  Empty value indicate it takes a non-reference
66 # scalar.
67 my %Att_Sigs;
68 my %Special_Sigs = (
69  C                  => 'ARRAY',
70  CONFIG             => 'ARRAY',
71  CONFIGURE          => 'CODE',
72  DIR                => 'ARRAY',
73  DL_FUNCS           => 'HASH',
74  DL_VARS            => 'ARRAY',
75  EXCLUDE_EXT        => 'ARRAY',
76  EXE_FILES          => 'ARRAY',
77  FUNCLIST           => 'ARRAY',
78  H                  => 'ARRAY',
79  IMPORTS            => 'HASH',
80  INCLUDE_EXT        => 'ARRAY',
81  LIBS               => ['ARRAY',''],
82  MAN1PODS           => 'HASH',
83  MAN3PODS           => 'HASH',
84  META_ADD           => 'HASH',
85  META_MERGE         => 'HASH',
86  PL_FILES           => 'HASH',
87  PM                 => 'HASH',
88  PMLIBDIRS          => 'ARRAY',
89  PMLIBPARENTDIRS    => 'ARRAY',
90  PREREQ_PM          => 'HASH',
91  CONFIGURE_REQUIRES => 'HASH',
92  SKIP               => 'ARRAY',
93  TYPEMAPS           => 'ARRAY',
94  XS                 => 'HASH',
95  VERSION            => ['version',''],
96  _KEEP_AFTER_FLUSH  => '',
97
98  clean      => 'HASH',
99  depend     => 'HASH',
100  dist       => 'HASH',
101  dynamic_lib=> 'HASH',
102  linkext    => 'HASH',
103  macro      => 'HASH',
104  postamble  => 'HASH',
105  realclean  => 'HASH',
106  test       => 'HASH',
107  tool_autosplit => 'HASH',
108 );
109
110 @Att_Sigs{keys %Recognized_Att_Keys} = ('') x keys %Recognized_Att_Keys;
111 @Att_Sigs{keys %Special_Sigs} = values %Special_Sigs;
112
113
114 sub _verify_att {
115     my($att) = @_;
116
117     while( my($key, $val) = each %$att ) {
118         my $sig = $Att_Sigs{$key};
119         unless( defined $sig ) {
120             warn "WARNING: $key is not a known parameter.\n";
121             next;
122         }
123
124         my @sigs   = ref $sig ? @$sig : $sig;
125         my $given  = ref $val;
126         unless( grep { _is_of_type($val, $_) } @sigs ) {
127             my $takes = join " or ", map { _format_att($_) } @sigs;
128
129             my $has = _format_att($given);
130             warn "WARNING: $key takes a $takes not a $has.\n".
131                  "         Please inform the author.\n";
132         }
133     }
134 }
135
136
137 # Check if a given thing is a reference or instance of $type
138 sub _is_of_type {
139     my($thing, $type) = @_;
140
141     return 1 if ref $thing eq $type;
142
143     local $SIG{__DIE__};
144     return 1 if eval{ $thing->isa($type) };
145
146     return 0;
147 }
148
149
150 sub _format_att {
151     my $given = shift;
152     
153     return $given eq ''        ? "string/number"
154          : uc $given eq $given ? "$given reference"
155          :                       "$given object"
156          ;
157 }
158
159
160 sub prompt ($;$) {  ## no critic
161     my($mess, $def) = @_;
162     Carp::confess("prompt function called without an argument") 
163         unless defined $mess;
164
165     my $isa_tty = -t STDIN && (-t STDOUT || !(-f STDOUT || -c STDOUT)) ;
166
167     my $dispdef = defined $def ? "[$def] " : " ";
168     $def = defined $def ? $def : "";
169
170     local $|=1;
171     local $\;
172     print "$mess $dispdef";
173
174     my $ans;
175     if ($ENV{PERL_MM_USE_DEFAULT} || (!$isa_tty && eof STDIN)) {
176         print "$def\n";
177     }
178     else {
179         $ans = <STDIN>;
180         if( defined $ans ) {
181             chomp $ans;
182         }
183         else { # user hit ctrl-D
184             print "\n";
185         }
186     }
187
188     return (!defined $ans || $ans eq '') ? $def : $ans;
189 }
190
191 sub eval_in_subdirs {
192     my($self) = @_;
193     use Cwd qw(cwd abs_path);
194     my $pwd = cwd() || die "Can't figure out your cwd!";
195
196     local @INC = map eval {abs_path($_) if -e} || $_, @INC;
197     push @INC, '.';     # '.' has to always be at the end of @INC
198
199     foreach my $dir (@{$self->{DIR}}){
200         my($abs) = $self->catdir($pwd,$dir);
201         eval { $self->eval_in_x($abs); };
202         last if $@;
203     }
204     chdir $pwd;
205     die $@ if $@;
206 }
207
208 sub eval_in_x {
209     my($self,$dir) = @_;
210     chdir $dir or Carp::carp("Couldn't change to directory $dir: $!");
211
212     {
213         package main;
214         do './Makefile.PL';
215     };
216     if ($@) {
217 #         if ($@ =~ /prerequisites/) {
218 #             die "MakeMaker WARNING: $@";
219 #         } else {
220 #             warn "WARNING from evaluation of $dir/Makefile.PL: $@";
221 #         }
222         die "ERROR from evaluation of $dir/Makefile.PL: $@";
223     }
224 }
225
226
227 # package name for the classes into which the first object will be blessed
228 my $PACKNAME = 'PACK000';
229
230 sub full_setup {
231     $Verbose ||= 0;
232
233     my @attrib_help = qw/
234
235     AUTHOR ABSTRACT ABSTRACT_FROM BINARY_LOCATION
236     C CAPI CCFLAGS CONFIG CONFIGURE DEFINE DIR DISTNAME DISTVNAME
237     DL_FUNCS DL_VARS
238     EXCLUDE_EXT EXE_FILES FIRST_MAKEFILE
239     FULLPERL FULLPERLRUN FULLPERLRUNINST
240     FUNCLIST H IMPORTS
241
242     INST_ARCHLIB INST_SCRIPT INST_BIN INST_LIB INST_MAN1DIR INST_MAN3DIR
243     INSTALLDIRS
244     DESTDIR PREFIX INSTALL_BASE
245     PERLPREFIX      SITEPREFIX      VENDORPREFIX
246     INSTALLPRIVLIB  INSTALLSITELIB  INSTALLVENDORLIB
247     INSTALLARCHLIB  INSTALLSITEARCH INSTALLVENDORARCH
248     INSTALLBIN      INSTALLSITEBIN  INSTALLVENDORBIN
249     INSTALLMAN1DIR          INSTALLMAN3DIR
250     INSTALLSITEMAN1DIR      INSTALLSITEMAN3DIR
251     INSTALLVENDORMAN1DIR    INSTALLVENDORMAN3DIR
252     INSTALLSCRIPT   INSTALLSITESCRIPT  INSTALLVENDORSCRIPT
253     PERL_LIB        PERL_ARCHLIB 
254     SITELIBEXP      SITEARCHEXP 
255
256     INC INCLUDE_EXT LDFROM LIB LIBPERL_A LIBS LICENSE
257     LINKTYPE MAKE MAKEAPERL MAKEFILE MAKEFILE_OLD MAN1PODS MAN3PODS MAP_TARGET
258     META_ADD META_MERGE MIN_PERL_VERSION CONFIGURE_REQUIRES
259     MYEXTLIB NAME NEEDS_LINKING NOECHO NO_META NORECURS NO_VC OBJECT OPTIMIZE 
260     PERL_MALLOC_OK PERL PERLMAINCC PERLRUN PERLRUNINST PERL_CORE
261     PERL_SRC PERM_DIR PERM_RW PERM_RWX
262     PL_FILES PM PM_FILTER PMLIBDIRS PMLIBPARENTDIRS POLLUTE PPM_INSTALL_EXEC
263     PPM_INSTALL_SCRIPT PREREQ_FATAL PREREQ_PM PREREQ_PRINT PRINT_PREREQ
264     SIGN SKIP TYPEMAPS VERSION VERSION_FROM XS XSOPT XSPROTOARG
265     XS_VERSION clean depend dist dynamic_lib linkext macro realclean
266     tool_autosplit
267
268     MACPERL_SRC MACPERL_LIB MACLIBS_68K MACLIBS_PPC MACLIBS_SC MACLIBS_MRC
269     MACLIBS_ALL_68K MACLIBS_ALL_PPC MACLIBS_SHARED
270         /;
271
272     # IMPORTS is used under OS/2 and Win32
273
274     # @Overridable is close to @MM_Sections but not identical.  The
275     # order is important. Many subroutines declare macros. These
276     # depend on each other. Let's try to collect the macros up front,
277     # then pasthru, then the rules.
278
279     # MM_Sections are the sections we have to call explicitly
280     # in Overridable we have subroutines that are used indirectly
281
282
283     @MM_Sections = 
284         qw(
285
286  post_initialize const_config constants platform_constants 
287  tool_autosplit tool_xsubpp tools_other 
288
289  makemakerdflt
290
291  dist macro depend cflags const_loadlibs const_cccmd
292  post_constants
293
294  pasthru
295
296  special_targets
297  c_o xs_c xs_o
298  top_targets blibdirs linkext dlsyms dynamic dynamic_bs
299  dynamic_lib static static_lib manifypods processPL
300  installbin subdirs
301  clean_subdirs clean realclean_subdirs realclean 
302  metafile signature
303  dist_basics dist_core distdir dist_test dist_ci distmeta distsignature
304  install force perldepend makefile staticmake test ppd
305
306           ); # loses section ordering
307
308     @Overridable = @MM_Sections;
309     push @Overridable, qw[
310
311  libscan makeaperl needs_linking
312  subdir_x test_via_harness test_via_script 
313
314  init_VERSION init_dist init_INST init_INSTALL init_DEST init_dirscan
315  init_PM init_MANPODS init_xs init_PERL init_DIRFILESEP init_linker
316                          ];
317
318     push @MM_Sections, qw[
319
320  pm_to_blib selfdocument
321
322                          ];
323
324     # Postamble needs to be the last that was always the case
325     push @MM_Sections, "postamble";
326     push @Overridable, "postamble";
327
328     # All sections are valid keys.
329     @Recognized_Att_Keys{@MM_Sections} = (1) x @MM_Sections;
330
331     # we will use all these variables in the Makefile
332     @Get_from_Config = 
333         qw(
334            ar cc cccdlflags ccdlflags dlext dlsrc exe_ext full_ar ld 
335            lddlflags ldflags libc lib_ext obj_ext osname osvers ranlib 
336            sitelibexp sitearchexp so
337           );
338
339     # 5.5.3 doesn't have any concept of vendor libs
340     push @Get_from_Config, qw( vendorarchexp vendorlibexp ) if $] >= 5.006;
341
342     foreach my $item (@attrib_help){
343         $Recognized_Att_Keys{$item} = 1;
344     }
345     foreach my $item (@Get_from_Config) {
346         $Recognized_Att_Keys{uc $item} = $Config{$item};
347         print "Attribute '\U$item\E' => '$Config{$item}'\n"
348             if ($Verbose >= 2);
349     }
350
351     #
352     # When we eval a Makefile.PL in a subdirectory, that one will ask
353     # us (the parent) for the values and will prepend "..", so that
354     # all files to be installed end up below OUR ./blib
355     #
356     @Prepend_parent = qw(
357            INST_BIN INST_LIB INST_ARCHLIB INST_SCRIPT
358            MAP_TARGET INST_MAN1DIR INST_MAN3DIR PERL_SRC
359            PERL FULLPERL
360     );
361 }
362
363 sub writeMakefile {
364     die <<END;
365
366 The extension you are trying to build apparently is rather old and
367 most probably outdated. We detect that from the fact, that a
368 subroutine "writeMakefile" is called, and this subroutine is not
369 supported anymore since about October 1994.
370
371 Please contact the author or look into CPAN (details about CPAN can be
372 found in the FAQ and at http:/www.perl.com) for a more recent version
373 of the extension. If you're really desperate, you can try to change
374 the subroutine name from writeMakefile to WriteMakefile and rerun
375 'perl Makefile.PL', but you're most probably left alone, when you do
376 so.
377
378 The MakeMaker team
379
380 END
381 }
382
383 sub new {
384     my($class,$self) = @_;
385     my($key);
386
387     # Store the original args passed to WriteMakefile()
388     foreach my $k (keys %$self) {
389         $self->{ARGS}{$k} = $self->{$k};
390     }
391
392     if ("@ARGV" =~ /\bPREREQ_PRINT\b/) {
393         require Data::Dumper;
394         my @what = ('PREREQ_PM');
395         push @what, 'MIN_PERL_VERSION' if $self->{MIN_PERL_VERSION};
396         print Data::Dumper->Dump([@{$self}{@what}], \@what);
397         exit 0;
398     }
399
400     # PRINT_PREREQ is RedHatism.
401     if ("@ARGV" =~ /\bPRINT_PREREQ\b/) {
402         my @prereq =
403             map { [$_, $self->{PREREQ_PM}{$_}] } keys %{$self->{PREREQ_PM}};
404         if ( $self->{MIN_PERL_VERSION} ) {
405             push @prereq, ['perl' => $self->{MIN_PERL_VERSION}];
406         }
407
408         print join(" ", map { "perl($_->[0])>=$_->[1] " }
409                         sort { $a->[0] cmp $b->[0] } @prereq), "\n";
410         exit 0;
411    }
412
413     print STDOUT "MakeMaker (v$VERSION)\n" if $Verbose;
414     if (-f "MANIFEST" && ! -f "Makefile"){
415         check_manifest();
416     }
417
418     $self = {} unless (defined $self);
419
420     check_hints($self);
421
422     # Translate X.Y.Z to X.00Y00Z
423     if( defined $self->{MIN_PERL_VERSION} ) {
424         $self->{MIN_PERL_VERSION} =~ s{ ^ (\d+) \. (\d+) \. (\d+) $ }
425                                       {sprintf "%d.%03d%03d", $1, $2, $3}ex;
426     }
427
428     my $perl_version_ok = eval {
429         local $SIG{__WARN__} = sub { 
430             # simulate "use warnings FATAL => 'all'" for vintage perls
431             die @_;
432         };
433         !$self->{MIN_PERL_VERSION} or $self->{MIN_PERL_VERSION} <= $]
434     };
435     if (!$perl_version_ok) {
436         if (!defined $perl_version_ok) {
437             warn <<'END';
438 Warning: MIN_PERL_VERSION is not in a recognized format.
439 Recommended is a quoted numerical value like '5.005' or '5.008001'.
440 END
441         }
442         elsif ($self->{PREREQ_FATAL}) {
443             die sprintf <<"END", $self->{MIN_PERL_VERSION}, $];
444 MakeMaker FATAL: perl version too low for this distribution.
445 Required is %s. We run %s.
446 END
447         }
448         else {
449             warn sprintf
450                 "Warning: Perl version %s or higher required. We run %s.\n",
451                 $self->{MIN_PERL_VERSION}, $];
452         }
453     }
454
455     my %configure_att;         # record &{$self->{CONFIGURE}} attributes
456     my(%initial_att) = %$self; # record initial attributes
457
458     my(%unsatisfied) = ();
459     foreach my $prereq (sort keys %{$self->{PREREQ_PM}}) {
460         my $file = "$prereq.pm";
461         $file =~ s{::}{/}g;
462         my $path;
463         for my $dir (@INC) {
464             my $tmp = File::Spec->catfile($dir, $file);
465             if( -r $tmp ) {
466                 $path = $tmp;
467                 last;
468             }
469         }
470         my $pr_version = defined $path ? MM->parse_version($path) : 0;
471
472         # convert X.Y_Z alpha version #s to X.YZ for easier comparisons
473         $pr_version =~ s/(\d+)\.(\d+)_(\d+)/$1.$2$3/;
474
475         if (!defined $path) {
476             warn sprintf "Warning: prerequisite %s %s not found.\n", 
477               $prereq, $self->{PREREQ_PM}{$prereq} 
478                    unless $self->{PREREQ_FATAL};
479             $unsatisfied{$prereq} = 'not installed';
480         } elsif ($pr_version < $self->{PREREQ_PM}->{$prereq} ){
481             warn sprintf "Warning: prerequisite %s %s not found. We have %s.\n",
482               $prereq, $self->{PREREQ_PM}{$prereq}, 
483                 ($pr_version || 'unknown version') 
484                   unless $self->{PREREQ_FATAL};
485             $unsatisfied{$prereq} = $self->{PREREQ_PM}->{$prereq} ? 
486               $self->{PREREQ_PM}->{$prereq} : 'unknown version' ;
487         }
488     }
489     
490      if (%unsatisfied && $self->{PREREQ_FATAL}){
491         my $failedprereqs = join "\n", map {"    $_ $unsatisfied{$_}"} 
492                             sort { $a cmp $b } keys %unsatisfied;
493         die <<"END";
494 MakeMaker FATAL: prerequisites not found.
495 $failedprereqs
496
497 Please install these modules first and rerun 'perl Makefile.PL'.
498 END
499     }
500     
501     if (defined $self->{CONFIGURE}) {
502         if (ref $self->{CONFIGURE} eq 'CODE') {
503             %configure_att = %{&{$self->{CONFIGURE}}};
504             $self = { %$self, %configure_att };
505         } else {
506             Carp::croak "Attribute 'CONFIGURE' to WriteMakefile() not a code reference\n";
507         }
508     }
509
510     # This is for old Makefiles written pre 5.00, will go away
511     if ( Carp::longmess("") =~ /runsubdirpl/s ){
512         Carp::carp("WARNING: Please rerun 'perl Makefile.PL' to regenerate your Makefiles\n");
513     }
514
515     my $newclass = ++$PACKNAME;
516     local @Parent = @Parent;    # Protect against non-local exits
517     {
518         print "Blessing Object into class [$newclass]\n" if $Verbose>=2;
519         mv_all_methods("MY",$newclass);
520         bless $self, $newclass;
521         push @Parent, $self;
522         require ExtUtils::MY;
523
524         no strict 'refs';   ## no critic;
525         @{"$newclass\:\:ISA"} = 'MM';
526     }
527
528     if (defined $Parent[-2]){
529         $self->{PARENT} = $Parent[-2];
530         for my $key (@Prepend_parent) {
531             next unless defined $self->{PARENT}{$key};
532
533             # Don't stomp on WriteMakefile() args.
534             next if defined $self->{ARGS}{$key} and
535                     $self->{ARGS}{$key} eq $self->{$key};
536
537             $self->{$key} = $self->{PARENT}{$key};
538
539             unless ($Is_VMS && $key =~ /PERL$/) {
540                 $self->{$key} = $self->catdir("..",$self->{$key})
541                   unless $self->file_name_is_absolute($self->{$key});
542             } else {
543                 # PERL or FULLPERL will be a command verb or even a
544                 # command with an argument instead of a full file
545                 # specification under VMS.  So, don't turn the command
546                 # into a filespec, but do add a level to the path of
547                 # the argument if not already absolute.
548                 my @cmd = split /\s+/, $self->{$key};
549                 $cmd[1] = $self->catfile('[-]',$cmd[1])
550                   unless (@cmd < 2) || $self->file_name_is_absolute($cmd[1]);
551                 $self->{$key} = join(' ', @cmd);
552             }
553         }
554         if ($self->{PARENT}) {
555             $self->{PARENT}->{CHILDREN}->{$newclass} = $self;
556             foreach my $opt (qw(POLLUTE PERL_CORE LINKTYPE)) {
557                 if (exists $self->{PARENT}->{$opt}
558                     and not exists $self->{$opt})
559                     {
560                         # inherit, but only if already unspecified
561                         $self->{$opt} = $self->{PARENT}->{$opt};
562                     }
563             }
564         }
565         my @fm = grep /^FIRST_MAKEFILE=/, @ARGV;
566         parse_args($self,@fm) if @fm;
567     } else {
568         parse_args($self,split(' ', $ENV{PERL_MM_OPT} || ''),@ARGV);
569     }
570
571
572     $self->{NAME} ||= $self->guess_name;
573
574     ($self->{NAME_SYM} = $self->{NAME}) =~ s/\W+/_/g;
575
576     $self->init_MAKE;
577     $self->init_main;
578     $self->init_VERSION;
579     $self->init_dist;
580     $self->init_INST;
581     $self->init_INSTALL;
582     $self->init_DEST;
583     $self->init_dirscan;
584     $self->init_PM;
585     $self->init_MANPODS;
586     $self->init_xs;
587     $self->init_PERL;
588     $self->init_DIRFILESEP;
589     $self->init_linker;
590     $self->init_ABSTRACT;
591
592     $self->arch_check(
593         $INC{'Config.pm'},
594         $self->catfile($Config{'archlibexp'}, "Config.pm")
595     );
596
597     $self->init_others();
598     $self->init_platform();
599     $self->init_PERM();
600     my($argv) = neatvalue(\@ARGV);
601     $argv =~ s/^\[/(/;
602     $argv =~ s/\]$/)/;
603
604     push @{$self->{RESULT}}, <<END;
605 # This Makefile is for the $self->{NAME} extension to perl.
606 #
607 # It was generated automatically by MakeMaker version
608 # $VERSION (Revision: $Revision) from the contents of
609 # Makefile.PL. Don't edit this file, edit Makefile.PL instead.
610 #
611 #       ANY CHANGES MADE HERE WILL BE LOST!
612 #
613 #   MakeMaker ARGV: $argv
614 #
615 #   MakeMaker Parameters:
616 END
617
618     foreach my $key (sort keys %initial_att){
619         next if $key eq 'ARGS';
620
621         my($v) = neatvalue($initial_att{$key});
622         $v =~ s/(CODE|HASH|ARRAY|SCALAR)\([\dxa-f]+\)/$1\(...\)/;
623         $v =~ tr/\n/ /s;
624         push @{$self->{RESULT}}, "#     $key => $v";
625     }
626     undef %initial_att;        # free memory
627
628     if (defined $self->{CONFIGURE}) {
629        push @{$self->{RESULT}}, <<END;
630
631 #   MakeMaker 'CONFIGURE' Parameters:
632 END
633         if (scalar(keys %configure_att) > 0) {
634             foreach my $key (sort keys %configure_att){
635                next if $key eq 'ARGS';
636                my($v) = neatvalue($configure_att{$key});
637                $v =~ s/(CODE|HASH|ARRAY|SCALAR)\([\dxa-f]+\)/$1\(...\)/;
638                $v =~ tr/\n/ /s;
639                push @{$self->{RESULT}}, "#     $key => $v";
640             }
641         }
642         else
643         {
644            push @{$self->{RESULT}}, "# no values returned";
645         }
646         undef %configure_att;  # free memory
647     }
648
649     # turn the SKIP array into a SKIPHASH hash
650     for my $skip (@{$self->{SKIP} || []}) {
651         $self->{SKIPHASH}{$skip} = 1;
652     }
653     delete $self->{SKIP}; # free memory
654
655     if ($self->{PARENT}) {
656         for (qw/install dist dist_basics dist_core distdir dist_test dist_ci/) {
657             $self->{SKIPHASH}{$_} = 1;
658         }
659     }
660
661     # We run all the subdirectories now. They don't have much to query
662     # from the parent, but the parent has to query them: if they need linking!
663     unless ($self->{NORECURS}) {
664         $self->eval_in_subdirs if @{$self->{DIR}};
665     }
666
667     foreach my $section ( @MM_Sections ){
668         # Support for new foo_target() methods.
669         my $method = $section;
670         $method .= '_target' unless $self->can($method);
671
672         print "Processing Makefile '$section' section\n" if ($Verbose >= 2);
673         my($skipit) = $self->skipcheck($section);
674         if ($skipit){
675             push @{$self->{RESULT}}, "\n# --- MakeMaker $section section $skipit.";
676         } else {
677             my(%a) = %{$self->{$section} || {}};
678             push @{$self->{RESULT}}, "\n# --- MakeMaker $section section:";
679             push @{$self->{RESULT}}, "# " . join ", ", %a if $Verbose && %a;
680             push @{$self->{RESULT}}, $self->maketext_filter(
681                 $self->$method( %a )
682             );
683         }
684     }
685
686     push @{$self->{RESULT}}, "\n# End.";
687
688     $self;
689 }
690
691 sub WriteEmptyMakefile {
692     Carp::croak "WriteEmptyMakefile: Need an even number of args" if @_ % 2;
693
694     my %att = @_;
695     my $self = MM->new(\%att);
696     
697     my $new = $self->{MAKEFILE};
698     my $old = $self->{MAKEFILE_OLD};
699     if (-f $old) {
700         _unlink($old) or warn "unlink $old: $!";
701     }
702     if ( -f $new ) {
703         _rename($new, $old) or warn "rename $new => $old: $!"
704     }
705     open my $mfh, '>', $new or die "open $new for write: $!";
706     print $mfh <<'EOP';
707 all :
708
709 clean :
710
711 install :
712
713 makemakerdflt :
714
715 test :
716
717 EOP
718     close $mfh or die "close $new for write: $!";
719 }
720
721 sub check_manifest {
722     print STDOUT "Checking if your kit is complete...\n";
723     require ExtUtils::Manifest;
724     # avoid warning
725     $ExtUtils::Manifest::Quiet = $ExtUtils::Manifest::Quiet = 1;
726     my(@missed) = ExtUtils::Manifest::manicheck();
727     if (@missed) {
728         print STDOUT "Warning: the following files are missing in your kit:\n";
729         print "\t", join "\n\t", @missed;
730         print STDOUT "\n";
731         print STDOUT "Please inform the author.\n";
732     } else {
733         print STDOUT "Looks good\n";
734     }
735 }
736
737 sub parse_args{
738     my($self, @args) = @_;
739     foreach (@args) {
740         unless (m/(.*?)=(.*)/) {
741             ++$Verbose if m/^verb/;
742             next;
743         }
744         my($name, $value) = ($1, $2);
745         if ($value =~ m/^~(\w+)?/) { # tilde with optional username
746             $value =~ s [^~(\w*)]
747                 [$1 ?
748                  ((getpwnam($1))[7] || "~$1") :
749                  (getpwuid($>))[7]
750                  ]ex;
751         }
752
753         # Remember the original args passed it.  It will be useful later.
754         $self->{ARGS}{uc $name} = $self->{uc $name} = $value;
755     }
756
757     # catch old-style 'potential_libs' and inform user how to 'upgrade'
758     if (defined $self->{potential_libs}){
759         my($msg)="'potential_libs' => '$self->{potential_libs}' should be";
760         if ($self->{potential_libs}){
761             print STDOUT "$msg changed to:\n\t'LIBS' => ['$self->{potential_libs}']\n";
762         } else {
763             print STDOUT "$msg deleted.\n";
764         }
765         $self->{LIBS} = [$self->{potential_libs}];
766         delete $self->{potential_libs};
767     }
768     # catch old-style 'ARMAYBE' and inform user how to 'upgrade'
769     if (defined $self->{ARMAYBE}){
770         my($armaybe) = $self->{ARMAYBE};
771         print STDOUT "ARMAYBE => '$armaybe' should be changed to:\n",
772                         "\t'dynamic_lib' => {ARMAYBE => '$armaybe'}\n";
773         my(%dl) = %{$self->{dynamic_lib} || {}};
774         $self->{dynamic_lib} = { %dl, ARMAYBE => $armaybe};
775         delete $self->{ARMAYBE};
776     }
777     if (defined $self->{LDTARGET}){
778         print STDOUT "LDTARGET should be changed to LDFROM\n";
779         $self->{LDFROM} = $self->{LDTARGET};
780         delete $self->{LDTARGET};
781     }
782     # Turn a DIR argument on the command line into an array
783     if (defined $self->{DIR} && ref \$self->{DIR} eq 'SCALAR') {
784         # So they can choose from the command line, which extensions they want
785         # the grep enables them to have some colons too much in case they
786         # have to build a list with the shell
787         $self->{DIR} = [grep $_, split ":", $self->{DIR}];
788     }
789     # Turn a INCLUDE_EXT argument on the command line into an array
790     if (defined $self->{INCLUDE_EXT} && ref \$self->{INCLUDE_EXT} eq 'SCALAR') {
791         $self->{INCLUDE_EXT} = [grep $_, split '\s+', $self->{INCLUDE_EXT}];
792     }
793     # Turn a EXCLUDE_EXT argument on the command line into an array
794     if (defined $self->{EXCLUDE_EXT} && ref \$self->{EXCLUDE_EXT} eq 'SCALAR') {
795         $self->{EXCLUDE_EXT} = [grep $_, split '\s+', $self->{EXCLUDE_EXT}];
796     }
797
798     foreach my $mmkey (sort keys %$self){
799         next if $mmkey eq 'ARGS';
800         print STDOUT "  $mmkey => ", neatvalue($self->{$mmkey}), "\n" if $Verbose;
801         print STDOUT "'$mmkey' is not a known MakeMaker parameter name.\n"
802             unless exists $Recognized_Att_Keys{$mmkey};
803     }
804     $| = 1 if $Verbose;
805 }
806
807 sub check_hints {
808     my($self) = @_;
809     # We allow extension-specific hints files.
810
811     require File::Spec;
812     my $curdir = File::Spec->curdir;
813
814     my $hint_dir = File::Spec->catdir($curdir, "hints");
815     return unless -d $hint_dir;
816
817     # First we look for the best hintsfile we have
818     my($hint)="${^O}_$Config{osvers}";
819     $hint =~ s/\./_/g;
820     $hint =~ s/_$//;
821     return unless $hint;
822
823     # Also try without trailing minor version numbers.
824     while (1) {
825         last if -f File::Spec->catfile($hint_dir, "$hint.pl");  # found
826     } continue {
827         last unless $hint =~ s/_[^_]*$//; # nothing to cut off
828     }
829     my $hint_file = File::Spec->catfile($hint_dir, "$hint.pl");
830
831     return unless -f $hint_file;    # really there
832
833     _run_hintfile($self, $hint_file);
834 }
835
836 sub _run_hintfile {
837     our $self;
838     local($self) = shift;       # make $self available to the hint file.
839     my($hint_file) = shift;
840
841     local($@, $!);
842     print STDERR "Processing hints file $hint_file\n";
843
844     # Just in case the ./ isn't on the hint file, which File::Spec can
845     # often strip off, we bung the curdir into @INC
846     local @INC = (File::Spec->curdir, @INC);
847     my $ret = do $hint_file;
848     if( !defined $ret ) {
849         my $error = $@ || $!;
850         print STDERR $error;
851     }
852 }
853
854 sub mv_all_methods {
855     my($from,$to) = @_;
856
857     # Here you see the *current* list of methods that are overridable
858     # from Makefile.PL via MY:: subroutines. As of VERSION 5.07 I'm
859     # still trying to reduce the list to some reasonable minimum --
860     # because I want to make it easier for the user. A.K.
861
862     local $SIG{__WARN__} = sub { 
863         # can't use 'no warnings redefined', 5.6 only
864         warn @_ unless $_[0] =~ /^Subroutine .* redefined/ 
865     };
866     foreach my $method (@Overridable) {
867
868         # We cannot say "next" here. Nick might call MY->makeaperl
869         # which isn't defined right now
870
871         # Above statement was written at 4.23 time when Tk-b8 was
872         # around. As Tk-b9 only builds with 5.002something and MM 5 is
873         # standard, we try to enable the next line again. It was
874         # commented out until MM 5.23
875
876         next unless defined &{"${from}::$method"};
877
878         {
879             no strict 'refs';   ## no critic
880             *{"${to}::$method"} = \&{"${from}::$method"};
881
882             # If we delete a method, then it will be undefined and cannot
883             # be called.  But as long as we have Makefile.PLs that rely on
884             # %MY:: being intact, we have to fill the hole with an
885             # inheriting method:
886
887             {
888                 package MY;
889                 my $super = "SUPER::".$method;
890                 *{$method} = sub {
891                     shift->$super(@_);
892                 };
893             }
894         }
895     }
896
897     # We have to clean out %INC also, because the current directory is
898     # changed frequently and Graham Barr prefers to get his version
899     # out of a History.pl file which is "required" so woudn't get
900     # loaded again in another extension requiring a History.pl
901
902     # With perl5.002_01 the deletion of entries in %INC caused Tk-b11
903     # to core dump in the middle of a require statement. The required
904     # file was Tk/MMutil.pm.  The consequence is, we have to be
905     # extremely careful when we try to give perl a reason to reload a
906     # library with same name.  The workaround prefers to drop nothing
907     # from %INC and teach the writers not to use such libraries.
908
909 #    my $inc;
910 #    foreach $inc (keys %INC) {
911 #       #warn "***$inc*** deleted";
912 #       delete $INC{$inc};
913 #    }
914 }
915
916 sub skipcheck {
917     my($self) = shift;
918     my($section) = @_;
919     if ($section eq 'dynamic') {
920         print STDOUT "Warning (non-fatal): Target 'dynamic' depends on targets ",
921         "in skipped section 'dynamic_bs'\n"
922             if $self->{SKIPHASH}{dynamic_bs} && $Verbose;
923         print STDOUT "Warning (non-fatal): Target 'dynamic' depends on targets ",
924         "in skipped section 'dynamic_lib'\n"
925             if $self->{SKIPHASH}{dynamic_lib} && $Verbose;
926     }
927     if ($section eq 'dynamic_lib') {
928         print STDOUT "Warning (non-fatal): Target '\$(INST_DYNAMIC)' depends on ",
929         "targets in skipped section 'dynamic_bs'\n"
930             if $self->{SKIPHASH}{dynamic_bs} && $Verbose;
931     }
932     if ($section eq 'static') {
933         print STDOUT "Warning (non-fatal): Target 'static' depends on targets ",
934         "in skipped section 'static_lib'\n"
935             if $self->{SKIPHASH}{static_lib} && $Verbose;
936     }
937     return 'skipped' if $self->{SKIPHASH}{$section};
938     return '';
939 }
940
941 sub flush {
942     my $self = shift;
943
944     my $finalname = $self->{MAKEFILE};
945     print STDOUT "Writing $finalname for $self->{NAME}\n";
946
947     unlink($finalname, "MakeMaker.tmp", $Is_VMS ? 'Descrip.MMS' : ());
948     open(my $fh,">", "MakeMaker.tmp")
949         or die "Unable to open MakeMaker.tmp: $!";
950
951     for my $chunk (@{$self->{RESULT}}) {
952         print $fh "$chunk\n";
953     }
954
955     close $fh;
956     _rename("MakeMaker.tmp", $finalname) or
957       warn "rename MakeMaker.tmp => $finalname: $!";
958     chmod 0644, $finalname unless $Is_VMS;
959
960     my %keep = map { ($_ => 1) } qw(NEEDS_LINKING HAS_LINK_CODE);
961
962     if ($self->{PARENT} && !$self->{_KEEP_AFTER_FLUSH}) {
963         foreach (keys %$self) { # safe memory
964             delete $self->{$_} unless $keep{$_};
965         }
966     }
967
968     system("$Config::Config{eunicefix} $finalname") unless $Config::Config{eunicefix} eq ":";
969 }
970
971
972 # This is a rename for OS's where the target must be unlinked first.
973 sub _rename {
974     my($src, $dest) = @_;
975     chmod 0666, $dest;
976     unlink $dest;
977     return rename $src, $dest;
978 }
979
980 # This is an unlink for OS's where the target must be writable first.
981 sub _unlink {
982     my @files = @_;
983     chmod 0666, @files;
984     return unlink @files;
985 }
986
987
988 # The following mkbootstrap() is only for installations that are calling
989 # the pre-4.1 mkbootstrap() from their old Makefiles. This MakeMaker
990 # writes Makefiles, that use ExtUtils::Mkbootstrap directly.
991 sub mkbootstrap {
992     die <<END;
993 !!! Your Makefile has been built such a long time ago, !!!
994 !!! that is unlikely to work with current MakeMaker.   !!!
995 !!! Please rebuild your Makefile                       !!!
996 END
997 }
998
999 # Ditto for mksymlists() as of MakeMaker 5.17
1000 sub mksymlists {
1001     die <<END;
1002 !!! Your Makefile has been built such a long time ago, !!!
1003 !!! that is unlikely to work with current MakeMaker.   !!!
1004 !!! Please rebuild your Makefile                       !!!
1005 END
1006 }
1007
1008 sub neatvalue {
1009     my($v) = @_;
1010     return "undef" unless defined $v;
1011     my($t) = ref $v;
1012     return "q[$v]" unless $t;
1013     if ($t eq 'ARRAY') {
1014         my(@m, @neat);
1015         push @m, "[";
1016         foreach my $elem (@$v) {
1017             push @neat, "q[$elem]";
1018         }
1019         push @m, join ", ", @neat;
1020         push @m, "]";
1021         return join "", @m;
1022     }
1023     return "$v" unless $t eq 'HASH';
1024     my(@m, $key, $val);
1025     while (($key,$val) = each %$v){
1026         last unless defined $key; # cautious programming in case (undef,undef) is true
1027         push(@m,"$key=>".neatvalue($val)) ;
1028     }
1029     return "{ ".join(', ',@m)." }";
1030 }
1031
1032 sub selfdocument {
1033     my($self) = @_;
1034     my(@m);
1035     if ($Verbose){
1036         push @m, "\n# Full list of MakeMaker attribute values:";
1037         foreach my $key (sort keys %$self){
1038             next if $key eq 'RESULT' || $key =~ /^[A-Z][a-z]/;
1039             my($v) = neatvalue($self->{$key});
1040             $v =~ s/(CODE|HASH|ARRAY|SCALAR)\([\dxa-f]+\)/$1\(...\)/;
1041             $v =~ tr/\n/ /s;
1042             push @m, "# $key => $v";
1043         }
1044     }
1045     join "\n", @m;
1046 }
1047
1048 1;
1049
1050 __END__
1051
1052 =head1 NAME
1053
1054 ExtUtils::MakeMaker - Create a module Makefile
1055
1056 =head1 SYNOPSIS
1057
1058   use ExtUtils::MakeMaker;
1059
1060   WriteMakefile( ATTRIBUTE => VALUE [, ...] );
1061
1062 =head1 DESCRIPTION
1063
1064 This utility is designed to write a Makefile for an extension module
1065 from a Makefile.PL. It is based on the Makefile.SH model provided by
1066 Andy Dougherty and the perl5-porters.
1067
1068 It splits the task of generating the Makefile into several subroutines
1069 that can be individually overridden.  Each subroutine returns the text
1070 it wishes to have written to the Makefile.
1071
1072 MakeMaker is object oriented. Each directory below the current
1073 directory that contains a Makefile.PL is treated as a separate
1074 object. This makes it possible to write an unlimited number of
1075 Makefiles with a single invocation of WriteMakefile().
1076
1077 =head2 How To Write A Makefile.PL
1078
1079 See ExtUtils::MakeMaker::Tutorial.
1080
1081 The long answer is the rest of the manpage :-)
1082
1083 =head2 Default Makefile Behaviour
1084
1085 The generated Makefile enables the user of the extension to invoke
1086
1087   perl Makefile.PL # optionally "perl Makefile.PL verbose"
1088   make
1089   make test        # optionally set TEST_VERBOSE=1
1090   make install     # See below
1091
1092 The Makefile to be produced may be altered by adding arguments of the
1093 form C<KEY=VALUE>. E.g.
1094
1095   perl Makefile.PL INSTALL_BASE=~
1096
1097 Other interesting targets in the generated Makefile are
1098
1099   make config     # to check if the Makefile is up-to-date
1100   make clean      # delete local temp files (Makefile gets renamed)
1101   make realclean  # delete derived files (including ./blib)
1102   make ci         # check in all the files in the MANIFEST file
1103   make dist       # see below the Distribution Support section
1104
1105 =head2 make test
1106
1107 MakeMaker checks for the existence of a file named F<test.pl> in the
1108 current directory and if it exists it execute the script with the
1109 proper set of perl C<-I> options.
1110
1111 MakeMaker also checks for any files matching glob("t/*.t"). It will
1112 execute all matching files in alphabetical order via the
1113 L<Test::Harness> module with the C<-I> switches set correctly.
1114
1115 If you'd like to see the raw output of your tests, set the
1116 C<TEST_VERBOSE> variable to true.
1117
1118   make test TEST_VERBOSE=1
1119
1120 =head2 make testdb
1121
1122 A useful variation of the above is the target C<testdb>. It runs the
1123 test under the Perl debugger (see L<perldebug>). If the file
1124 F<test.pl> exists in the current directory, it is used for the test.
1125
1126 If you want to debug some other testfile, set the C<TEST_FILE> variable
1127 thusly:
1128
1129   make testdb TEST_FILE=t/mytest.t
1130
1131 By default the debugger is called using C<-d> option to perl. If you
1132 want to specify some other option, set the C<TESTDB_SW> variable:
1133
1134   make testdb TESTDB_SW=-Dx
1135
1136 =head2 make install
1137
1138 make alone puts all relevant files into directories that are named by
1139 the macros INST_LIB, INST_ARCHLIB, INST_SCRIPT, INST_MAN1DIR and
1140 INST_MAN3DIR.  All these default to something below ./blib if you are
1141 I<not> building below the perl source directory. If you I<are>
1142 building below the perl source, INST_LIB and INST_ARCHLIB default to
1143 ../../lib, and INST_SCRIPT is not defined.
1144
1145 The I<install> target of the generated Makefile copies the files found
1146 below each of the INST_* directories to their INSTALL*
1147 counterparts. Which counterparts are chosen depends on the setting of
1148 INSTALLDIRS according to the following table:
1149
1150                                  INSTALLDIRS set to
1151                            perl        site          vendor
1152
1153                  PERLPREFIX      SITEPREFIX          VENDORPREFIX
1154   INST_ARCHLIB   INSTALLARCHLIB  INSTALLSITEARCH     INSTALLVENDORARCH
1155   INST_LIB       INSTALLPRIVLIB  INSTALLSITELIB      INSTALLVENDORLIB
1156   INST_BIN       INSTALLBIN      INSTALLSITEBIN      INSTALLVENDORBIN
1157   INST_SCRIPT    INSTALLSCRIPT   INSTALLSITESCRIPT   INSTALLVENDORSCRIPT
1158   INST_MAN1DIR   INSTALLMAN1DIR  INSTALLSITEMAN1DIR  INSTALLVENDORMAN1DIR
1159   INST_MAN3DIR   INSTALLMAN3DIR  INSTALLSITEMAN3DIR  INSTALLVENDORMAN3DIR
1160
1161 The INSTALL... macros in turn default to their %Config
1162 ($Config{installprivlib}, $Config{installarchlib}, etc.) counterparts.
1163
1164 You can check the values of these variables on your system with
1165
1166     perl '-V:install.*'
1167
1168 And to check the sequence in which the library directories are
1169 searched by perl, run
1170
1171     perl -le 'print join $/, @INC'
1172
1173 Sometimes older versions of the module you're installing live in other
1174 directories in @INC.  Because Perl loads the first version of a module it 
1175 finds, not the newest, you might accidentally get one of these older
1176 versions even after installing a brand new version.  To delete I<all other
1177 versions of the module you're installing> (not simply older ones) set the
1178 C<UNINST> variable.
1179
1180     make install UNINST=1
1181
1182
1183 =head2 INSTALL_BASE
1184
1185 INSTALL_BASE can be passed into Makefile.PL to change where your
1186 module will be installed.  INSTALL_BASE is more like what everyone
1187 else calls "prefix" than PREFIX is.
1188
1189 To have everything installed in your home directory, do the following.
1190
1191     # Unix users, INSTALL_BASE=~ works fine
1192     perl Makefile.PL INSTALL_BASE=/path/to/your/home/dir
1193
1194 Like PREFIX, it sets several INSTALL* attributes at once.  Unlike
1195 PREFIX it is easy to predict where the module will end up.  The
1196 installation pattern looks like this:
1197
1198     INSTALLARCHLIB     INSTALL_BASE/lib/perl5/$Config{archname}
1199     INSTALLPRIVLIB     INSTALL_BASE/lib/perl5
1200     INSTALLBIN         INSTALL_BASE/bin
1201     INSTALLSCRIPT      INSTALL_BASE/bin
1202     INSTALLMAN1DIR     INSTALL_BASE/man/man1
1203     INSTALLMAN3DIR     INSTALL_BASE/man/man3
1204
1205 INSTALL_BASE in MakeMaker and C<--install_base> in Module::Build (as
1206 of 0.28) install to the same location.  If you want MakeMaker and
1207 Module::Build to install to the same location simply set INSTALL_BASE
1208 and C<--install_base> to the same location.
1209
1210 INSTALL_BASE was added in 6.31.
1211
1212
1213 =head2 PREFIX and LIB attribute
1214
1215 PREFIX and LIB can be used to set several INSTALL* attributes in one
1216 go.  Here's an example for installing into your home directory.
1217
1218     # Unix users, PREFIX=~ works fine
1219     perl Makefile.PL PREFIX=/path/to/your/home/dir
1220
1221 This will install all files in the module under your home directory,
1222 with man pages and libraries going into an appropriate place (usually
1223 ~/man and ~/lib).  How the exact location is determined is complicated
1224 and depends on how your Perl was configured.  INSTALL_BASE works more
1225 like what other build systems call "prefix" than PREFIX and we
1226 recommend you use that instead.
1227
1228 Another way to specify many INSTALL directories with a single
1229 parameter is LIB.
1230
1231     perl Makefile.PL LIB=~/lib
1232
1233 This will install the module's architecture-independent files into
1234 ~/lib, the architecture-dependent files into ~/lib/$archname.
1235
1236 Note, that in both cases the tilde expansion is done by MakeMaker, not
1237 by perl by default, nor by make.
1238
1239 Conflicts between parameters LIB, PREFIX and the various INSTALL*
1240 arguments are resolved so that:
1241
1242 =over 4
1243
1244 =item *
1245
1246 setting LIB overrides any setting of INSTALLPRIVLIB, INSTALLARCHLIB,
1247 INSTALLSITELIB, INSTALLSITEARCH (and they are not affected by PREFIX);
1248
1249 =item *
1250
1251 without LIB, setting PREFIX replaces the initial C<$Config{prefix}>
1252 part of those INSTALL* arguments, even if the latter are explicitly
1253 set (but are set to still start with C<$Config{prefix}>).
1254
1255 =back
1256
1257 If the user has superuser privileges, and is not working on AFS or
1258 relatives, then the defaults for INSTALLPRIVLIB, INSTALLARCHLIB,
1259 INSTALLSCRIPT, etc. will be appropriate, and this incantation will be
1260 the best:
1261
1262     perl Makefile.PL; 
1263     make; 
1264     make test
1265     make install
1266
1267 make install per default writes some documentation of what has been
1268 done into the file C<$(INSTALLARCHLIB)/perllocal.pod>. This feature
1269 can be bypassed by calling make pure_install.
1270
1271 =head2 AFS users
1272
1273 will have to specify the installation directories as these most
1274 probably have changed since perl itself has been installed. They will
1275 have to do this by calling
1276
1277     perl Makefile.PL INSTALLSITELIB=/afs/here/today \
1278         INSTALLSCRIPT=/afs/there/now INSTALLMAN3DIR=/afs/for/manpages
1279     make
1280
1281 Be careful to repeat this procedure every time you recompile an
1282 extension, unless you are sure the AFS installation directories are
1283 still valid.
1284
1285 =head2 Static Linking of a new Perl Binary
1286
1287 An extension that is built with the above steps is ready to use on
1288 systems supporting dynamic loading. On systems that do not support
1289 dynamic loading, any newly created extension has to be linked together
1290 with the available resources. MakeMaker supports the linking process
1291 by creating appropriate targets in the Makefile whenever an extension
1292 is built. You can invoke the corresponding section of the makefile with
1293
1294     make perl
1295
1296 That produces a new perl binary in the current directory with all
1297 extensions linked in that can be found in INST_ARCHLIB, SITELIBEXP,
1298 and PERL_ARCHLIB. To do that, MakeMaker writes a new Makefile, on
1299 UNIX, this is called Makefile.aperl (may be system dependent). If you
1300 want to force the creation of a new perl, it is recommended, that you
1301 delete this Makefile.aperl, so the directories are searched-through
1302 for linkable libraries again.
1303
1304 The binary can be installed into the directory where perl normally
1305 resides on your machine with
1306
1307     make inst_perl
1308
1309 To produce a perl binary with a different name than C<perl>, either say
1310
1311     perl Makefile.PL MAP_TARGET=myperl
1312     make myperl
1313     make inst_perl
1314
1315 or say
1316
1317     perl Makefile.PL
1318     make myperl MAP_TARGET=myperl
1319     make inst_perl MAP_TARGET=myperl
1320
1321 In any case you will be prompted with the correct invocation of the
1322 C<inst_perl> target that installs the new binary into INSTALLBIN.
1323
1324 make inst_perl per default writes some documentation of what has been
1325 done into the file C<$(INSTALLARCHLIB)/perllocal.pod>. This
1326 can be bypassed by calling make pure_inst_perl.
1327
1328 Warning: the inst_perl: target will most probably overwrite your
1329 existing perl binary. Use with care!
1330
1331 Sometimes you might want to build a statically linked perl although
1332 your system supports dynamic loading. In this case you may explicitly
1333 set the linktype with the invocation of the Makefile.PL or make:
1334
1335     perl Makefile.PL LINKTYPE=static    # recommended
1336
1337 or
1338
1339     make LINKTYPE=static                # works on most systems
1340
1341 =head2 Determination of Perl Library and Installation Locations
1342
1343 MakeMaker needs to know, or to guess, where certain things are
1344 located.  Especially INST_LIB and INST_ARCHLIB (where to put the files
1345 during the make(1) run), PERL_LIB and PERL_ARCHLIB (where to read
1346 existing modules from), and PERL_INC (header files and C<libperl*.*>).
1347
1348 Extensions may be built either using the contents of the perl source
1349 directory tree or from the installed perl library. The recommended way
1350 is to build extensions after you have run 'make install' on perl
1351 itself. You can do that in any directory on your hard disk that is not
1352 below the perl source tree. The support for extensions below the ext
1353 directory of the perl distribution is only good for the standard
1354 extensions that come with perl.
1355
1356 If an extension is being built below the C<ext/> directory of the perl
1357 source then MakeMaker will set PERL_SRC automatically (e.g.,
1358 C<../..>).  If PERL_SRC is defined and the extension is recognized as
1359 a standard extension, then other variables default to the following:
1360
1361   PERL_INC     = PERL_SRC
1362   PERL_LIB     = PERL_SRC/lib
1363   PERL_ARCHLIB = PERL_SRC/lib
1364   INST_LIB     = PERL_LIB
1365   INST_ARCHLIB = PERL_ARCHLIB
1366
1367 If an extension is being built away from the perl source then MakeMaker
1368 will leave PERL_SRC undefined and default to using the installed copy
1369 of the perl library. The other variables default to the following:
1370
1371   PERL_INC     = $archlibexp/CORE
1372   PERL_LIB     = $privlibexp
1373   PERL_ARCHLIB = $archlibexp
1374   INST_LIB     = ./blib/lib
1375   INST_ARCHLIB = ./blib/arch
1376
1377 If perl has not yet been installed then PERL_SRC can be defined on the
1378 command line as shown in the previous section.
1379
1380
1381 =head2 Which architecture dependent directory?
1382
1383 If you don't want to keep the defaults for the INSTALL* macros,
1384 MakeMaker helps you to minimize the typing needed: the usual
1385 relationship between INSTALLPRIVLIB and INSTALLARCHLIB is determined
1386 by Configure at perl compilation time. MakeMaker supports the user who
1387 sets INSTALLPRIVLIB. If INSTALLPRIVLIB is set, but INSTALLARCHLIB not,
1388 then MakeMaker defaults the latter to be the same subdirectory of
1389 INSTALLPRIVLIB as Configure decided for the counterparts in %Config ,
1390 otherwise it defaults to INSTALLPRIVLIB. The same relationship holds
1391 for INSTALLSITELIB and INSTALLSITEARCH.
1392
1393 MakeMaker gives you much more freedom than needed to configure
1394 internal variables and get different results. It is worth to mention,
1395 that make(1) also lets you configure most of the variables that are
1396 used in the Makefile. But in the majority of situations this will not
1397 be necessary, and should only be done if the author of a package
1398 recommends it (or you know what you're doing).
1399
1400 =head2 Using Attributes and Parameters
1401
1402 The following attributes may be specified as arguments to WriteMakefile()
1403 or as NAME=VALUE pairs on the command line.
1404
1405 =over 2
1406
1407 =item ABSTRACT
1408
1409 One line description of the module. Will be included in PPD file.
1410
1411 =item ABSTRACT_FROM
1412
1413 Name of the file that contains the package description. MakeMaker looks
1414 for a line in the POD matching /^($package\s-\s)(.*)/. This is typically
1415 the first line in the "=head1 NAME" section. $2 becomes the abstract.
1416
1417 =item AUTHOR
1418
1419 String containing name (and email address) of package author(s). Is used
1420 in PPD (Perl Package Description) files for PPM (Perl Package Manager).
1421
1422 =item BINARY_LOCATION
1423
1424 Used when creating PPD files for binary packages.  It can be set to a
1425 full or relative path or URL to the binary archive for a particular
1426 architecture.  For example:
1427
1428         perl Makefile.PL BINARY_LOCATION=x86/Agent.tar.gz
1429
1430 builds a PPD package that references a binary of the C<Agent> package,
1431 located in the C<x86> directory relative to the PPD itself.
1432
1433 =item C
1434
1435 Ref to array of *.c file names. Initialised from a directory scan
1436 and the values portion of the XS attribute hash. This is not
1437 currently used by MakeMaker but may be handy in Makefile.PLs.
1438
1439 =item CCFLAGS
1440
1441 String that will be included in the compiler call command line between
1442 the arguments INC and OPTIMIZE.
1443
1444 =item CONFIG
1445
1446 Arrayref. E.g. [qw(archname manext)] defines ARCHNAME & MANEXT from
1447 config.sh. MakeMaker will add to CONFIG the following values anyway:
1448 ar
1449 cc
1450 cccdlflags
1451 ccdlflags
1452 dlext
1453 dlsrc
1454 ld
1455 lddlflags
1456 ldflags
1457 libc
1458 lib_ext
1459 obj_ext
1460 ranlib
1461 sitelibexp
1462 sitearchexp
1463 so
1464
1465 =item CONFIGURE
1466
1467 CODE reference. The subroutine should return a hash reference. The
1468 hash may contain further attributes, e.g. {LIBS =E<gt> ...}, that have to
1469 be determined by some evaluation method.
1470
1471 =item CONFIGURE_REQUIRES
1472
1473 A hash of modules that are required to run Makefile.PL itself, but not
1474 to run your distribution.
1475
1476 This will go into the C<configure_requires> field of your F<META.yml>.
1477
1478 Defaults to C<{ "ExtUtils::MakeMaker" => 0 }>
1479
1480 The format is the same as PREREQ_PM.
1481
1482 =item DEFINE
1483
1484 Something like C<"-DHAVE_UNISTD_H">
1485
1486 =item DESTDIR
1487
1488 This is the root directory into which the code will be installed.  It
1489 I<prepends itself to the normal prefix>.  For example, if your code
1490 would normally go into F</usr/local/lib/perl> you could set DESTDIR=~/tmp/
1491 and installation would go into F<~/tmp/usr/local/lib/perl>.
1492
1493 This is primarily of use for people who repackage Perl modules.
1494
1495 NOTE: Due to the nature of make, it is important that you put the trailing
1496 slash on your DESTDIR.  F<~/tmp/> not F<~/tmp>.
1497
1498 =item DIR
1499
1500 Ref to array of subdirectories containing Makefile.PLs e.g. ['sdbm']
1501 in ext/SDBM_File
1502
1503 =item DISTNAME
1504
1505 A safe filename for the package. 
1506
1507 Defaults to NAME above but with :: replaced with -.
1508
1509 For example, Foo::Bar becomes Foo-Bar.
1510
1511 =item DISTVNAME
1512
1513 Your name for distributing the package with the version number
1514 included.  This is used by 'make dist' to name the resulting archive
1515 file.
1516
1517 Defaults to DISTNAME-VERSION.
1518
1519 For example, version 1.04 of Foo::Bar becomes Foo-Bar-1.04.
1520
1521 On some OS's where . has special meaning VERSION_SYM may be used in
1522 place of VERSION.
1523
1524 =item DL_FUNCS
1525
1526 Hashref of symbol names for routines to be made available as universal
1527 symbols.  Each key/value pair consists of the package name and an
1528 array of routine names in that package.  Used only under AIX, OS/2,
1529 VMS and Win32 at present.  The routine names supplied will be expanded
1530 in the same way as XSUB names are expanded by the XS() macro.
1531 Defaults to
1532
1533   {"$(NAME)" => ["boot_$(NAME)" ] }
1534
1535 e.g.
1536
1537   {"RPC" => [qw( boot_rpcb rpcb_gettime getnetconfigent )],
1538    "NetconfigPtr" => [ 'DESTROY'] }
1539
1540 Please see the L<ExtUtils::Mksymlists> documentation for more information
1541 about the DL_FUNCS, DL_VARS and FUNCLIST attributes.
1542
1543 =item DL_VARS
1544
1545 Array of symbol names for variables to be made available as universal symbols.
1546 Used only under AIX, OS/2, VMS and Win32 at present.  Defaults to [].
1547 (e.g. [ qw(Foo_version Foo_numstreams Foo_tree ) ])
1548
1549 =item EXCLUDE_EXT
1550
1551 Array of extension names to exclude when doing a static build.  This
1552 is ignored if INCLUDE_EXT is present.  Consult INCLUDE_EXT for more
1553 details.  (e.g.  [ qw( Socket POSIX ) ] )
1554
1555 This attribute may be most useful when specified as a string on the
1556 command line:  perl Makefile.PL EXCLUDE_EXT='Socket Safe'
1557
1558 =item EXE_FILES
1559
1560 Ref to array of executable files. The files will be copied to the
1561 INST_SCRIPT directory. Make realclean will delete them from there
1562 again.
1563
1564 If your executables start with something like #!perl or
1565 #!/usr/bin/perl MakeMaker will change this to the path of the perl
1566 'Makefile.PL' was invoked with so the programs will be sure to run
1567 properly even if perl is not in /usr/bin/perl.
1568
1569 =item FIRST_MAKEFILE
1570
1571 The name of the Makefile to be produced.  This is used for the second
1572 Makefile that will be produced for the MAP_TARGET.
1573
1574 Defaults to 'Makefile' or 'Descrip.MMS' on VMS.
1575
1576 (Note: we couldn't use MAKEFILE because dmake uses this for something
1577 else).
1578
1579 =item FULLPERL
1580
1581 Perl binary able to run this extension, load XS modules, etc...
1582
1583 =item FULLPERLRUN
1584
1585 Like PERLRUN, except it uses FULLPERL.
1586
1587 =item FULLPERLRUNINST
1588
1589 Like PERLRUNINST, except it uses FULLPERL.
1590
1591 =item FUNCLIST
1592
1593 This provides an alternate means to specify function names to be
1594 exported from the extension.  Its value is a reference to an
1595 array of function names to be exported by the extension.  These
1596 names are passed through unaltered to the linker options file.
1597
1598 =item H
1599
1600 Ref to array of *.h file names. Similar to C.
1601
1602 =item IMPORTS
1603
1604 This attribute is used to specify names to be imported into the
1605 extension. Takes a hash ref.
1606
1607 It is only used on OS/2 and Win32.
1608
1609 =item INC
1610
1611 Include file dirs eg: C<"-I/usr/5include -I/path/to/inc">
1612
1613 =item INCLUDE_EXT
1614
1615 Array of extension names to be included when doing a static build.
1616 MakeMaker will normally build with all of the installed extensions when
1617 doing a static build, and that is usually the desired behavior.  If
1618 INCLUDE_EXT is present then MakeMaker will build only with those extensions
1619 which are explicitly mentioned. (e.g.  [ qw( Socket POSIX ) ])
1620
1621 It is not necessary to mention DynaLoader or the current extension when
1622 filling in INCLUDE_EXT.  If the INCLUDE_EXT is mentioned but is empty then
1623 only DynaLoader and the current extension will be included in the build.
1624
1625 This attribute may be most useful when specified as a string on the
1626 command line:  perl Makefile.PL INCLUDE_EXT='POSIX Socket Devel::Peek'
1627
1628 =item INSTALLARCHLIB
1629
1630 Used by 'make install', which copies files from INST_ARCHLIB to this
1631 directory if INSTALLDIRS is set to perl.
1632
1633 =item INSTALLBIN
1634
1635 Directory to install binary files (e.g. tkperl) into if
1636 INSTALLDIRS=perl.
1637
1638 =item INSTALLDIRS
1639
1640 Determines which of the sets of installation directories to choose:
1641 perl, site or vendor.  Defaults to site.
1642
1643 =item INSTALLMAN1DIR
1644
1645 =item INSTALLMAN3DIR
1646
1647 These directories get the man pages at 'make install' time if
1648 INSTALLDIRS=perl.  Defaults to $Config{installman*dir}.
1649
1650 If set to 'none', no man pages will be installed.
1651
1652 =item INSTALLPRIVLIB
1653
1654 Used by 'make install', which copies files from INST_LIB to this
1655 directory if INSTALLDIRS is set to perl.
1656
1657 Defaults to $Config{installprivlib}.
1658
1659 =item INSTALLSCRIPT
1660
1661 Used by 'make install' which copies files from INST_SCRIPT to this
1662 directory if INSTALLDIRS=perl.
1663
1664 =item INSTALLSITEARCH
1665
1666 Used by 'make install', which copies files from INST_ARCHLIB to this
1667 directory if INSTALLDIRS is set to site (default).
1668
1669 =item INSTALLSITEBIN
1670
1671 Used by 'make install', which copies files from INST_BIN to this
1672 directory if INSTALLDIRS is set to site (default).
1673
1674 =item INSTALLSITELIB
1675
1676 Used by 'make install', which copies files from INST_LIB to this
1677 directory if INSTALLDIRS is set to site (default).
1678
1679 =item INSTALLSITEMAN1DIR
1680
1681 =item INSTALLSITEMAN3DIR
1682
1683 These directories get the man pages at 'make install' time if
1684 INSTALLDIRS=site (default).  Defaults to 
1685 $(SITEPREFIX)/man/man$(MAN*EXT).
1686
1687 If set to 'none', no man pages will be installed.
1688
1689 =item INSTALLSITESCRIPT
1690
1691 Used by 'make install' which copies files from INST_SCRIPT to this
1692 directory if INSTALLDIRS is set to site (default).
1693
1694 =item INSTALLVENDORARCH
1695
1696 Used by 'make install', which copies files from INST_ARCHLIB to this
1697 directory if INSTALLDIRS is set to vendor.
1698
1699 =item INSTALLVENDORBIN
1700
1701 Used by 'make install', which copies files from INST_BIN to this
1702 directory if INSTALLDIRS is set to vendor.
1703
1704 =item INSTALLVENDORLIB
1705
1706 Used by 'make install', which copies files from INST_LIB to this
1707 directory if INSTALLDIRS is set to vendor.
1708
1709 =item INSTALLVENDORMAN1DIR
1710
1711 =item INSTALLVENDORMAN3DIR
1712
1713 These directories get the man pages at 'make install' time if
1714 INSTALLDIRS=vendor.  Defaults to $(VENDORPREFIX)/man/man$(MAN*EXT).
1715
1716 If set to 'none', no man pages will be installed.
1717
1718 =item INSTALLVENDORSCRIPT
1719
1720 Used by 'make install' which copies files from INST_SCRIPT to this
1721 directory if INSTALLDIRS is set to is set to vendor.
1722
1723 =item INST_ARCHLIB
1724
1725 Same as INST_LIB for architecture dependent files.
1726
1727 =item INST_BIN
1728
1729 Directory to put real binary files during 'make'. These will be copied
1730 to INSTALLBIN during 'make install'
1731
1732 =item INST_LIB
1733
1734 Directory where we put library files of this extension while building
1735 it.
1736
1737 =item INST_MAN1DIR
1738
1739 Directory to hold the man pages at 'make' time
1740
1741 =item INST_MAN3DIR
1742
1743 Directory to hold the man pages at 'make' time
1744
1745 =item INST_SCRIPT
1746
1747 Directory, where executable files should be installed during
1748 'make'. Defaults to "./blib/script", just to have a dummy location during
1749 testing. make install will copy the files in INST_SCRIPT to
1750 INSTALLSCRIPT.
1751
1752 =item LD
1753
1754 Program to be used to link libraries for dynamic loading.
1755
1756 Defaults to $Config{ld}.
1757
1758 =item LDDLFLAGS
1759
1760 Any special flags that might need to be passed to ld to create a
1761 shared library suitable for dynamic loading.  It is up to the makefile
1762 to use it.  (See L<Config/lddlflags>)
1763
1764 Defaults to $Config{lddlflags}.
1765
1766 =item LDFROM
1767
1768 Defaults to "$(OBJECT)" and is used in the ld command to specify
1769 what files to link/load from (also see dynamic_lib below for how to
1770 specify ld flags)
1771
1772 =item LIB
1773
1774 LIB should only be set at C<perl Makefile.PL> time but is allowed as a
1775 MakeMaker argument. It has the effect of setting both INSTALLPRIVLIB
1776 and INSTALLSITELIB to that value regardless any explicit setting of
1777 those arguments (or of PREFIX).  INSTALLARCHLIB and INSTALLSITEARCH
1778 are set to the corresponding architecture subdirectory.
1779
1780 =item LIBPERL_A
1781
1782 The filename of the perllibrary that will be used together with this
1783 extension. Defaults to libperl.a.
1784
1785 =item LIBS
1786
1787 An anonymous array of alternative library
1788 specifications to be searched for (in order) until
1789 at least one library is found. E.g.
1790
1791   'LIBS' => ["-lgdbm", "-ldbm -lfoo", "-L/path -ldbm.nfs"]
1792
1793 Mind, that any element of the array
1794 contains a complete set of arguments for the ld
1795 command. So do not specify
1796
1797   'LIBS' => ["-ltcl", "-ltk", "-lX11"]
1798
1799 See ODBM_File/Makefile.PL for an example, where an array is needed. If
1800 you specify a scalar as in
1801
1802   'LIBS' => "-ltcl -ltk -lX11"
1803
1804 MakeMaker will turn it into an array with one element.
1805
1806 =item LICENSE
1807
1808 The licensing terms of your distribution.  Generally its "perl" for the
1809 same license as Perl itself.
1810
1811 See L<Module::Build::API> for the list of options.
1812
1813 Defaults to "unknown".
1814
1815 =item LINKTYPE
1816
1817 'static' or 'dynamic' (default unless usedl=undef in
1818 config.sh). Should only be used to force static linking (also see
1819 linkext below).
1820
1821 =item MAKE
1822
1823 Variant of make you intend to run the generated Makefile with.  This
1824 parameter lets Makefile.PL know what make quirks to account for when
1825 generating the Makefile.
1826
1827 MakeMaker also honors the MAKE environment variable.  This parameter
1828 takes precedent.
1829
1830 Currently the only significant values are 'dmake' and 'nmake' for Windows
1831 users.
1832
1833 Defaults to $Config{make}.
1834
1835 =item MAKEAPERL
1836
1837 Boolean which tells MakeMaker, that it should include the rules to
1838 make a perl. This is handled automatically as a switch by
1839 MakeMaker. The user normally does not need it.
1840
1841 =item MAKEFILE_OLD
1842
1843 When 'make clean' or similar is run, the $(FIRST_MAKEFILE) will be
1844 backed up at this location.
1845
1846 Defaults to $(FIRST_MAKEFILE).old or $(FIRST_MAKEFILE)_old on VMS.
1847
1848 =item MAN1PODS
1849
1850 Hashref of pod-containing files. MakeMaker will default this to all
1851 EXE_FILES files that include POD directives. The files listed
1852 here will be converted to man pages and installed as was requested
1853 at Configure time.
1854
1855 This hash should map POD files (or scripts containing POD) to the
1856 man file names under the C<blib/man1/> directory, as in the following
1857 example:
1858
1859   MAN1PODS            => {
1860     'doc/command.pod'    => 'blib/man1/command.1',
1861     'scripts/script.pl'  => 'blib/man1/script.1',
1862   }
1863
1864 =item MAN3PODS
1865
1866 Hashref that assigns to *.pm and *.pod files the files into which the
1867 manpages are to be written. MakeMaker parses all *.pod and *.pm files
1868 for POD directives. Files that contain POD will be the default keys of
1869 the MAN3PODS hashref. These will then be converted to man pages during
1870 C<make> and will be installed during C<make install>.
1871
1872 Example similar to MAN1PODS.
1873
1874 =item MAP_TARGET
1875
1876 If it is intended, that a new perl binary be produced, this variable
1877 may hold a name for that binary. Defaults to perl
1878
1879 =item META_ADD
1880
1881 =item META_MERGE
1882
1883 A hashrefs of items to add to the F<META.yml>.
1884
1885 They differ in how they behave if they have the same key as the
1886 default metadata.  META_ADD will override the default value with it's
1887 own.  META_MERGE will merge its value with the default.
1888
1889 Unless you want to override the defaults, prefer META_MERGE so as to
1890 get the advantage of any future defaults.
1891
1892 =item MIN_PERL_VERSION
1893
1894 The minimum required version of Perl for this distribution.
1895
1896 Either 5.006001 or 5.6.1 format is acceptable.
1897
1898 =item MYEXTLIB
1899
1900 If the extension links to a library that it builds set this to the
1901 name of the library (see SDBM_File)
1902
1903 =item NAME
1904
1905 Perl module name for this extension (DBD::Oracle). This will default
1906 to the directory name but should be explicitly defined in the
1907 Makefile.PL.
1908
1909 =item NEEDS_LINKING
1910
1911 MakeMaker will figure out if an extension contains linkable code
1912 anywhere down the directory tree, and will set this variable
1913 accordingly, but you can speed it up a very little bit if you define
1914 this boolean variable yourself.
1915
1916 =item NOECHO
1917
1918 Command so make does not print the literal commands its running.
1919
1920 By setting it to an empty string you can generate a Makefile that
1921 prints all commands. Mainly used in debugging MakeMaker itself.
1922
1923 Defaults to C<@>.
1924
1925 =item NORECURS
1926
1927 Boolean.  Attribute to inhibit descending into subdirectories.
1928
1929 =item NO_META
1930
1931 When true, suppresses the generation and addition to the MANIFEST of
1932 the META.yml module meta-data file during 'make distdir'.
1933
1934 Defaults to false.
1935
1936 =item NO_VC
1937
1938 In general, any generated Makefile checks for the current version of
1939 MakeMaker and the version the Makefile was built under. If NO_VC is
1940 set, the version check is neglected. Do not write this into your
1941 Makefile.PL, use it interactively instead.
1942
1943 =item OBJECT
1944
1945 List of object files, defaults to '$(BASEEXT)$(OBJ_EXT)', but can be a long
1946 string containing all object files, e.g. "tkpBind.o
1947 tkpButton.o tkpCanvas.o"
1948
1949 (Where BASEEXT is the last component of NAME, and OBJ_EXT is $Config{obj_ext}.)
1950
1951 =item OPTIMIZE
1952
1953 Defaults to C<-O>. Set it to C<-g> to turn debugging on. The flag is
1954 passed to subdirectory makes.
1955
1956 =item PERL
1957
1958 Perl binary for tasks that can be done by miniperl
1959
1960 =item PERL_CORE
1961
1962 Set only when MakeMaker is building the extensions of the Perl core
1963 distribution.
1964
1965 =item PERLMAINCC
1966
1967 The call to the program that is able to compile perlmain.c. Defaults
1968 to $(CC).
1969
1970 =item PERL_ARCHLIB
1971
1972 Same as for PERL_LIB, but for architecture dependent files.
1973
1974 Used only when MakeMaker is building the extensions of the Perl core
1975 distribution (because normally $(PERL_ARCHLIB) is automatically in @INC,
1976 and adding it would get in the way of PERL5LIB).
1977
1978 =item PERL_LIB
1979
1980 Directory containing the Perl library to use.
1981
1982 Used only when MakeMaker is building the extensions of the Perl core
1983 distribution (because normally $(PERL_LIB) is automatically in @INC,
1984 and adding it would get in the way of PERL5LIB).
1985
1986 =item PERL_MALLOC_OK
1987
1988 defaults to 0.  Should be set to TRUE if the extension can work with
1989 the memory allocation routines substituted by the Perl malloc() subsystem.
1990 This should be applicable to most extensions with exceptions of those
1991
1992 =over 4
1993
1994 =item *
1995
1996 with bugs in memory allocations which are caught by Perl's malloc();
1997
1998 =item *
1999
2000 which interact with the memory allocator in other ways than via
2001 malloc(), realloc(), free(), calloc(), sbrk() and brk();
2002
2003 =item *
2004
2005 which rely on special alignment which is not provided by Perl's malloc().
2006
2007 =back
2008
2009 B<NOTE.>  Negligence to set this flag in I<any one> of loaded extension
2010 nullifies many advantages of Perl's malloc(), such as better usage of
2011 system resources, error detection, memory usage reporting, catchable failure
2012 of memory allocations, etc.
2013
2014 =item PERLPREFIX
2015
2016 Directory under which core modules are to be installed.
2017
2018 Defaults to $Config{installprefixexp} falling back to
2019 $Config{installprefix}, $Config{prefixexp} or $Config{prefix} should
2020 $Config{installprefixexp} not exist.
2021
2022 Overridden by PREFIX.
2023
2024 =item PERLRUN
2025
2026 Use this instead of $(PERL) when you wish to run perl.  It will set up
2027 extra necessary flags for you.
2028
2029 =item PERLRUNINST
2030
2031 Use this instead of $(PERL) when you wish to run perl to work with
2032 modules.  It will add things like -I$(INST_ARCH) and other necessary
2033 flags so perl can see the modules you're about to install.
2034
2035 =item PERL_SRC
2036
2037 Directory containing the Perl source code (use of this should be
2038 avoided, it may be undefined)
2039
2040 =item PERM_DIR
2041
2042 Desired permission for directories. Defaults to C<755>.
2043
2044 =item PERM_RW
2045
2046 Desired permission for read/writable files. Defaults to C<644>.
2047
2048 =item PERM_RWX
2049
2050 Desired permission for executable files. Defaults to C<755>.
2051
2052 =item PL_FILES
2053
2054 MakeMaker can run programs to generate files for you at build time.
2055 By default any file named *.PL (except Makefile.PL and Build.PL) in
2056 the top level directory will be assumed to be a Perl program and run
2057 passing its own basename in as an argument.  For example...
2058
2059     perl foo.PL foo
2060
2061 This behavior can be overridden by supplying your own set of files to
2062 search.  PL_FILES accepts a hash ref, the key being the file to run
2063 and the value is passed in as the first argument when the PL file is run.
2064
2065     PL_FILES => {'bin/foobar.PL' => 'bin/foobar'}
2066
2067 Would run bin/foobar.PL like this:
2068
2069     perl bin/foobar.PL bin/foobar
2070
2071 If multiple files from one program are desired an array ref can be used.
2072
2073     PL_FILES => {'bin/foobar.PL' => [qw(bin/foobar1 bin/foobar2)]}
2074
2075 In this case the program will be run multiple times using each target file.
2076
2077     perl bin/foobar.PL bin/foobar1
2078     perl bin/foobar.PL bin/foobar2
2079
2080 PL files are normally run B<after> pm_to_blib and include INST_LIB and
2081 INST_ARCH in its C<@INC> so the just built modules can be
2082 accessed... unless the PL file is making a module (or anything else in
2083 PM) in which case it is run B<before> pm_to_blib and does not include
2084 INST_LIB and INST_ARCH in its C<@INC>.  This apparently odd behavior
2085 is there for backwards compatibility (and its somewhat DWIM).
2086
2087
2088 =item PM
2089
2090 Hashref of .pm files and *.pl files to be installed.  e.g.
2091
2092   {'name_of_file.pm' => '$(INST_LIBDIR)/install_as.pm'}
2093
2094 By default this will include *.pm and *.pl and the files found in
2095 the PMLIBDIRS directories.  Defining PM in the
2096 Makefile.PL will override PMLIBDIRS.
2097
2098 =item PMLIBDIRS
2099
2100 Ref to array of subdirectories containing library files.  Defaults to
2101 [ 'lib', $(BASEEXT) ]. The directories will be scanned and I<any> files
2102 they contain will be installed in the corresponding location in the
2103 library.  A libscan() method can be used to alter the behaviour.
2104 Defining PM in the Makefile.PL will override PMLIBDIRS.
2105
2106 (Where BASEEXT is the last component of NAME.)
2107
2108 =item PM_FILTER
2109
2110 A filter program, in the traditional Unix sense (input from stdin, output
2111 to stdout) that is passed on each .pm file during the build (in the
2112 pm_to_blib() phase).  It is empty by default, meaning no filtering is done.
2113
2114 Great care is necessary when defining the command if quoting needs to be
2115 done.  For instance, you would need to say:
2116
2117   {'PM_FILTER' => 'grep -v \\"^\\#\\"'}
2118
2119 to remove all the leading comments on the fly during the build.  The
2120 extra \\ are necessary, unfortunately, because this variable is interpolated
2121 within the context of a Perl program built on the command line, and double
2122 quotes are what is used with the -e switch to build that command line.  The
2123 # is escaped for the Makefile, since what is going to be generated will then
2124 be:
2125
2126   PM_FILTER = grep -v \"^\#\"
2127
2128 Without the \\ before the #, we'd have the start of a Makefile comment,
2129 and the macro would be incorrectly defined.
2130
2131 =item POLLUTE
2132
2133 Release 5.005 grandfathered old global symbol names by providing preprocessor
2134 macros for extension source compatibility.  As of release 5.6, these
2135 preprocessor definitions are not available by default.  The POLLUTE flag
2136 specifies that the old names should still be defined:
2137
2138   perl Makefile.PL POLLUTE=1
2139
2140 Please inform the module author if this is necessary to successfully install
2141 a module under 5.6 or later.
2142
2143 =item PPM_INSTALL_EXEC
2144
2145 Name of the executable used to run C<PPM_INSTALL_SCRIPT> below. (e.g. perl)
2146
2147 =item PPM_INSTALL_SCRIPT
2148
2149 Name of the script that gets executed by the Perl Package Manager after
2150 the installation of a package.
2151
2152 =item PREFIX
2153
2154 This overrides all the default install locations.  Man pages,
2155 libraries, scripts, etc...  MakeMaker will try to make an educated
2156 guess about where to place things under the new PREFIX based on your
2157 Config defaults.  Failing that, it will fall back to a structure
2158 which should be sensible for your platform.
2159
2160 If you specify LIB or any INSTALL* variables they will not be effected
2161 by the PREFIX.
2162
2163 =item PREREQ_FATAL
2164
2165 Bool. If this parameter is true, failing to have the required modules
2166 (or the right versions thereof) will be fatal. C<perl Makefile.PL>
2167 will C<die> instead of simply informing the user of the missing dependencies.
2168
2169 It is I<extremely> rare to have to use C<PREREQ_FATAL>. Its use by module
2170 authors is I<strongly discouraged> and should never be used lightly.
2171 Module installation tools have ways of resolving umet dependencies but
2172 to do that they need a F<Makefile>.  Using C<PREREQ_FATAL> breaks this.
2173 That's bad.
2174
2175 The only situation where it is appropriate is when you have
2176 dependencies that are indispensible to actually I<write> a
2177 F<Makefile>. For example, MakeMaker's F<Makefile.PL> needs L<File::Spec>.
2178 If its not available it cannot write the F<Makefile>.
2179
2180 Note: see L<Test::Harness> for a shortcut for stopping tests early
2181 if you are missing dependencies and are afraid that users might
2182 use your module with an incomplete environment.
2183
2184 =item PREREQ_PM
2185
2186 A hash of modules that are needed to run your module.  The keys are
2187 the module names ie. Test::More, and the minimum version is the
2188 value. If the required version number is 0 any version will do.
2189
2190 This will go into the C<requires> field of your F<META.yml>.
2191
2192     PREREQ_PM => {
2193         # Require Test::More at least 0.47
2194         "Test::More" => "0.47",
2195
2196         # Require any version of Acme::Buffy
2197         "Acme::Buffy" => 0,
2198     }
2199
2200 =item PREREQ_PRINT
2201
2202 Bool.  If this parameter is true, the prerequisites will be printed to
2203 stdout and MakeMaker will exit.  The output format is an evalable hash
2204 ref.
2205
2206   $PREREQ_PM = {
2207                  'A::B' => Vers1,
2208                  'C::D' => Vers2,
2209                  ...
2210                };
2211
2212 If a distribution defines a minimal required perl version, this is
2213 added to the output as an additional line of the form:
2214
2215   $MIN_PERL_VERSION = '5.008001';
2216
2217 =item PRINT_PREREQ
2218
2219 RedHatism for C<PREREQ_PRINT>.  The output format is different, though:
2220
2221     perl(A::B)>=Vers1 perl(C::D)>=Vers2 ...
2222
2223 A minimal required perl version, if present, will look like this:
2224
2225     perl(perl)>=5.008001
2226
2227 =item SITEPREFIX
2228
2229 Like PERLPREFIX, but only for the site install locations.
2230
2231 Defaults to $Config{siteprefixexp}.  Perls prior to 5.6.0 didn't have
2232 an explicit siteprefix in the Config.  In those cases
2233 $Config{installprefix} will be used.
2234
2235 Overridable by PREFIX
2236
2237 =item SIGN
2238
2239 When true, perform the generation and addition to the MANIFEST of the
2240 SIGNATURE file in the distdir during 'make distdir', via 'cpansign
2241 -s'.
2242
2243 Note that you need to install the Module::Signature module to
2244 perform this operation.
2245
2246 Defaults to false.
2247
2248 =item SKIP
2249
2250 Arrayref. E.g. [qw(name1 name2)] skip (do not write) sections of the
2251 Makefile. Caution! Do not use the SKIP attribute for the negligible
2252 speedup. It may seriously damage the resulting Makefile. Only use it
2253 if you really need it.
2254
2255 =item TYPEMAPS
2256
2257 Ref to array of typemap file names.  Use this when the typemaps are
2258 in some directory other than the current directory or when they are
2259 not named B<typemap>.  The last typemap in the list takes
2260 precedence.  A typemap in the current directory has highest
2261 precedence, even if it isn't listed in TYPEMAPS.  The default system
2262 typemap has lowest precedence.
2263
2264 =item VENDORPREFIX
2265
2266 Like PERLPREFIX, but only for the vendor install locations.
2267
2268 Defaults to $Config{vendorprefixexp}.
2269
2270 Overridable by PREFIX
2271
2272 =item VERBINST
2273
2274 If true, make install will be verbose
2275
2276 =item VERSION
2277
2278 Your version number for distributing the package.  This defaults to
2279 0.1.
2280
2281 =item VERSION_FROM
2282
2283 Instead of specifying the VERSION in the Makefile.PL you can let
2284 MakeMaker parse a file to determine the version number. The parsing
2285 routine requires that the file named by VERSION_FROM contains one
2286 single line to compute the version number. The first line in the file
2287 that contains the regular expression
2288
2289     /([\$*])(([\w\:\']*)\bVERSION)\b.*\=/
2290
2291 will be evaluated with eval() and the value of the named variable
2292 B<after> the eval() will be assigned to the VERSION attribute of the
2293 MakeMaker object. The following lines will be parsed o.k.:
2294
2295     $VERSION   = '1.00';
2296     *VERSION   = \'1.01';
2297     ($VERSION) = q$Revision$ =~ /(\d+)/g;
2298     $FOO::VERSION = '1.10';
2299     *FOO::VERSION = \'1.11';
2300
2301 but these will fail:
2302
2303     # Bad
2304     my $VERSION         = '1.01';
2305     local $VERSION      = '1.02';
2306     local $FOO::VERSION = '1.30';
2307
2308 "Version strings" are incompatible should not be used.
2309
2310     # Bad
2311     $VERSION = 1.2.3;
2312     $VERSION = v1.2.3;
2313
2314 L<version> objects are fine.  As of MakeMaker 6.35 version.pm will be
2315 automatically loaded, but you must declare the dependency on version.pm.
2316 For compatibility with older MakeMaker you should load on the same line 
2317 as $VERSION is declared.
2318
2319     # All on one line
2320     use version; our $VERSION = qv(1.2.3);
2321
2322 (Putting C<my> or C<local> on the preceding line will work o.k.)
2323
2324 The file named in VERSION_FROM is not added as a dependency to
2325 Makefile. This is not really correct, but it would be a major pain
2326 during development to have to rewrite the Makefile for any smallish
2327 change in that file. If you want to make sure that the Makefile
2328 contains the correct VERSION macro after any change of the file, you
2329 would have to do something like
2330
2331     depend => { Makefile => '$(VERSION_FROM)' }
2332
2333 See attribute C<depend> below.
2334
2335 =item VERSION_SYM
2336
2337 A sanitized VERSION with . replaced by _.  For places where . has
2338 special meaning (some filesystems, RCS labels, etc...)
2339
2340 =item XS
2341
2342 Hashref of .xs files. MakeMaker will default this.  e.g.
2343
2344   {'name_of_file.xs' => 'name_of_file.c'}
2345
2346 The .c files will automatically be included in the list of files
2347 deleted by a make clean.
2348
2349 =item XSOPT
2350
2351 String of options to pass to xsubpp.  This might include C<-C++> or
2352 C<-extern>.  Do not include typemaps here; the TYPEMAP parameter exists for
2353 that purpose.
2354
2355 =item XSPROTOARG
2356
2357 May be set to an empty string, which is identical to C<-prototypes>, or
2358 C<-noprototypes>. See the xsubpp documentation for details. MakeMaker
2359 defaults to the empty string.
2360
2361 =item XS_VERSION
2362
2363 Your version number for the .xs file of this package.  This defaults
2364 to the value of the VERSION attribute.
2365
2366 =back
2367
2368 =head2 Additional lowercase attributes
2369
2370 can be used to pass parameters to the methods which implement that
2371 part of the Makefile.  Parameters are specified as a hash ref but are
2372 passed to the method as a hash.
2373
2374 =over 2
2375
2376 =item clean
2377
2378   {FILES => "*.xyz foo"}
2379
2380 =item depend
2381
2382   {ANY_TARGET => ANY_DEPENDENCY, ...}
2383
2384 (ANY_TARGET must not be given a double-colon rule by MakeMaker.)
2385
2386 =item dist
2387
2388   {TARFLAGS => 'cvfF', COMPRESS => 'gzip', SUFFIX => '.gz',
2389   SHAR => 'shar -m', DIST_CP => 'ln', ZIP => '/bin/zip',
2390   ZIPFLAGS => '-rl', DIST_DEFAULT => 'private tardist' }
2391
2392 If you specify COMPRESS, then SUFFIX should also be altered, as it is
2393 needed to tell make the target file of the compression. Setting
2394 DIST_CP to ln can be useful, if you need to preserve the timestamps on
2395 your files. DIST_CP can take the values 'cp', which copies the file,
2396 'ln', which links the file, and 'best' which copies symbolic links and
2397 links the rest. Default is 'best'.
2398
2399 =item dynamic_lib
2400
2401   {ARMAYBE => 'ar', OTHERLDFLAGS => '...', INST_DYNAMIC_DEP => '...'}
2402
2403 =item linkext
2404
2405   {LINKTYPE => 'static', 'dynamic' or ''}
2406
2407 NB: Extensions that have nothing but *.pm files had to say
2408
2409   {LINKTYPE => ''}
2410
2411 with Pre-5.0 MakeMakers. Since version 5.00 of MakeMaker such a line
2412 can be deleted safely. MakeMaker recognizes when there's nothing to
2413 be linked.
2414
2415 =item macro
2416
2417   {ANY_MACRO => ANY_VALUE, ...}
2418
2419 =item postamble
2420
2421 Anything put here will be passed to MY::postamble() if you have one.
2422
2423 =item realclean
2424
2425   {FILES => '$(INST_ARCHAUTODIR)/*.xyz'}
2426
2427 =item test
2428
2429   {TESTS => 't/*.t'}
2430
2431 =item tool_autosplit
2432
2433   {MAXLEN => 8}
2434
2435 =back
2436
2437 =head2 Overriding MakeMaker Methods
2438
2439 If you cannot achieve the desired Makefile behaviour by specifying
2440 attributes you may define private subroutines in the Makefile.PL.
2441 Each subroutine returns the text it wishes to have written to
2442 the Makefile. To override a section of the Makefile you can
2443 either say:
2444
2445         sub MY::c_o { "new literal text" }
2446
2447 or you can edit the default by saying something like:
2448
2449         package MY; # so that "SUPER" works right
2450         sub c_o {
2451             my $inherited = shift->SUPER::c_o(@_);
2452             $inherited =~ s/old text/new text/;
2453             $inherited;
2454         }
2455
2456 If you are running experiments with embedding perl as a library into
2457 other applications, you might find MakeMaker is not sufficient. You'd
2458 better have a look at ExtUtils::Embed which is a collection of utilities
2459 for embedding.
2460
2461 If you still need a different solution, try to develop another
2462 subroutine that fits your needs and submit the diffs to
2463 C<makemaker@perl.org>
2464
2465 For a complete description of all MakeMaker methods see
2466 L<ExtUtils::MM_Unix>.
2467
2468 Here is a simple example of how to add a new target to the generated
2469 Makefile:
2470
2471     sub MY::postamble {
2472         return <<'MAKE_FRAG';
2473     $(MYEXTLIB): sdbm/Makefile
2474             cd sdbm && $(MAKE) all
2475
2476     MAKE_FRAG
2477     }
2478
2479 =head2 The End Of Cargo Cult Programming
2480
2481 WriteMakefile() now does some basic sanity checks on its parameters to
2482 protect against typos and malformatted values.  This means some things
2483 which happened to work in the past will now throw warnings and
2484 possibly produce internal errors.
2485
2486 Some of the most common mistakes:
2487
2488 =over 2
2489
2490 =item C<< MAN3PODS => ' ' >>
2491
2492 This is commonly used to suppress the creation of man pages.  MAN3PODS
2493 takes a hash ref not a string, but the above worked by accident in old
2494 versions of MakeMaker.
2495
2496 The correct code is C<< MAN3PODS => { } >>.
2497
2498 =back
2499
2500
2501 =head2 Hintsfile support
2502
2503 MakeMaker.pm uses the architecture specific information from
2504 Config.pm. In addition it evaluates architecture specific hints files
2505 in a C<hints/> directory. The hints files are expected to be named
2506 like their counterparts in C<PERL_SRC/hints>, but with an C<.pl> file
2507 name extension (eg. C<next_3_2.pl>). They are simply C<eval>ed by
2508 MakeMaker within the WriteMakefile() subroutine, and can be used to
2509 execute commands as well as to include special variables. The rules
2510 which hintsfile is chosen are the same as in Configure.
2511
2512 The hintsfile is eval()ed immediately after the arguments given to
2513 WriteMakefile are stuffed into a hash reference $self but before this
2514 reference becomes blessed. So if you want to do the equivalent to
2515 override or create an attribute you would say something like
2516
2517     $self->{LIBS} = ['-ldbm -lucb -lc'];
2518
2519 =head2 Distribution Support
2520
2521 For authors of extensions MakeMaker provides several Makefile
2522 targets. Most of the support comes from the ExtUtils::Manifest module,
2523 where additional documentation can be found.
2524
2525 =over 4
2526
2527 =item    make distcheck
2528
2529 reports which files are below the build directory but not in the
2530 MANIFEST file and vice versa. (See ExtUtils::Manifest::fullcheck() for
2531 details)
2532
2533 =item    make skipcheck
2534
2535 reports which files are skipped due to the entries in the
2536 C<MANIFEST.SKIP> file (See ExtUtils::Manifest::skipcheck() for
2537 details)
2538
2539 =item    make distclean
2540
2541 does a realclean first and then the distcheck. Note that this is not
2542 needed to build a new distribution as long as you are sure that the
2543 MANIFEST file is ok.
2544
2545 =item    make manifest
2546
2547 rewrites the MANIFEST file, adding all remaining files found (See
2548 ExtUtils::Manifest::mkmanifest() for details)
2549
2550 =item    make distdir
2551
2552 Copies all the files that are in the MANIFEST file to a newly created
2553 directory with the name C<$(DISTNAME)-$(VERSION)>. If that directory
2554 exists, it will be removed first.
2555
2556 Additionally, it will create a META.yml module meta-data file in the
2557 distdir and add this to the distdir's MANIFEST.  You can shut this
2558 behavior off with the NO_META flag.
2559
2560 =item   make disttest
2561
2562 Makes a distdir first, and runs a C<perl Makefile.PL>, a make, and
2563 a make test in that directory.
2564
2565 =item    make tardist
2566
2567 First does a distdir. Then a command $(PREOP) which defaults to a null
2568 command, followed by $(TO_UNIX), which defaults to a null command under
2569 UNIX, and will convert files in distribution directory to UNIX format
2570 otherwise. Next it runs C<tar> on that directory into a tarfile and
2571 deletes the directory. Finishes with a command $(POSTOP) which
2572 defaults to a null command.
2573
2574 =item    make dist
2575
2576 Defaults to $(DIST_DEFAULT) which in turn defaults to tardist.
2577
2578 =item    make uutardist
2579
2580 Runs a tardist first and uuencodes the tarfile.
2581
2582 =item    make shdist
2583
2584 First does a distdir. Then a command $(PREOP) which defaults to a null
2585 command. Next it runs C<shar> on that directory into a sharfile and
2586 deletes the intermediate directory again. Finishes with a command
2587 $(POSTOP) which defaults to a null command.  Note: For shdist to work
2588 properly a C<shar> program that can handle directories is mandatory.
2589
2590 =item    make zipdist
2591
2592 First does a distdir. Then a command $(PREOP) which defaults to a null
2593 command. Runs C<$(ZIP) $(ZIPFLAGS)> on that directory into a
2594 zipfile. Then deletes that directory. Finishes with a command
2595 $(POSTOP) which defaults to a null command.
2596
2597 =item    make ci
2598
2599 Does a $(CI) and a $(RCS_LABEL) on all files in the MANIFEST file.
2600
2601 =back
2602
2603 Customization of the dist targets can be done by specifying a hash
2604 reference to the dist attribute of the WriteMakefile call. The
2605 following parameters are recognized:
2606
2607     CI           ('ci -u')
2608     COMPRESS     ('gzip --best')
2609     POSTOP       ('@ :')
2610     PREOP        ('@ :')
2611     TO_UNIX      (depends on the system)
2612     RCS_LABEL    ('rcs -q -Nv$(VERSION_SYM):')
2613     SHAR         ('shar')
2614     SUFFIX       ('.gz')
2615     TAR          ('tar')
2616     TARFLAGS     ('cvf')
2617     ZIP          ('zip')
2618     ZIPFLAGS     ('-r')
2619
2620 An example:
2621
2622     WriteMakefile(
2623         ...other options...
2624         dist => {
2625             COMPRESS => "bzip2",
2626             SUFFIX   => ".bz2"
2627         }
2628     );
2629
2630
2631 =head2 Module Meta-Data
2632
2633 Long plaguing users of MakeMaker based modules has been the problem of
2634 getting basic information about the module out of the sources
2635 I<without> running the F<Makefile.PL> and doing a bunch of messy
2636 heuristics on the resulting F<Makefile>.  To this end a simple module
2637 meta-data file has been introduced, F<META.yml>.
2638
2639 F<META.yml> is a YAML document (see http://www.yaml.org) containing
2640 basic information about the module (name, version, prerequisites...)
2641 in an easy to read format.  The format is developed and defined by the
2642 Module::Build developers (see 
2643 http://module-build.sourceforge.net/META-spec.html)
2644
2645 MakeMaker will automatically generate a F<META.yml> file for you and
2646 add it to your F<MANIFEST> as part of the 'distdir' target (and thus
2647 the 'dist' target).  This is intended to seamlessly and rapidly
2648 populate CPAN with module meta-data.  If you wish to shut this feature
2649 off, set the C<NO_META> C<WriteMakefile()> flag to true.
2650
2651
2652 =head2 Disabling an extension
2653
2654 If some events detected in F<Makefile.PL> imply that there is no way
2655 to create the Module, but this is a normal state of things, then you
2656 can create a F<Makefile> which does nothing, but succeeds on all the
2657 "usual" build targets.  To do so, use
2658
2659     use ExtUtils::MakeMaker qw(WriteEmptyMakefile);
2660     WriteEmptyMakefile();
2661
2662 instead of WriteMakefile().
2663
2664 This may be useful if other modules expect this module to be I<built>
2665 OK, as opposed to I<work> OK (say, this system-dependent module builds
2666 in a subdirectory of some other distribution, or is listed as a
2667 dependency in a CPAN::Bundle, but the functionality is supported by
2668 different means on the current architecture).
2669
2670 =head2 Other Handy Functions
2671
2672 =over 4
2673
2674 =item prompt
2675
2676     my $value = prompt($message);
2677     my $value = prompt($message, $default);
2678
2679 The C<prompt()> function provides an easy way to request user input
2680 used to write a makefile.  It displays the $message as a prompt for
2681 input.  If a $default is provided it will be used as a default.  The
2682 function returns the $value selected by the user.
2683
2684 If C<prompt()> detects that it is not running interactively and there
2685 is nothing on STDIN or if the PERL_MM_USE_DEFAULT environment variable
2686 is set to true, the $default will be used without prompting.  This
2687 prevents automated processes from blocking on user input. 
2688
2689 If no $default is provided an empty string will be used instead.
2690
2691 =back
2692
2693
2694 =head1 ENVIRONMENT
2695
2696 =over 4
2697
2698 =item PERL_MM_OPT
2699
2700 Command line options used by C<MakeMaker-E<gt>new()>, and thus by
2701 C<WriteMakefile()>.  The string is split on whitespace, and the result
2702 is processed before any actual command line arguments are processed.
2703
2704 =item PERL_MM_USE_DEFAULT
2705
2706 If set to a true value then MakeMaker's prompt function will
2707 always return the default without waiting for user input.
2708
2709 =item PERL_CORE
2710
2711 Same as the PERL_CORE parameter.  The parameter overrides this.
2712
2713 =back
2714
2715 =head1 SEE ALSO
2716
2717 L<Module::Build> is a pure-Perl alternative to MakeMaker which does
2718 not rely on make or any other external utility.  It is easier to
2719 extend to suit your needs.
2720
2721 L<Module::Install> is a wrapper around MakeMaker which adds features
2722 not normally available.
2723
2724 L<ExtUtils::ModuleMaker> and L<Module::Starter> are both modules to
2725 help you setup your distribution.
2726
2727 =head1 AUTHORS
2728
2729 Andy Dougherty C<doughera@lafayette.edu>, Andreas KE<ouml>nig
2730 C<andreas.koenig@mind.de>, Tim Bunce C<timb@cpan.org>.  VMS
2731 support by Charles Bailey C<bailey@newman.upenn.edu>.  OS/2 support
2732 by Ilya Zakharevich C<ilya@math.ohio-state.edu>.
2733
2734 Currently maintained by Michael G Schwern C<schwern@pobox.com>
2735
2736 Send patches and ideas to C<makemaker@perl.org>.
2737
2738 Send bug reports via http://rt.cpan.org/.  Please send your
2739 generated Makefile along with your report.
2740
2741 For more up-to-date information, see L<http://www.makemaker.org>.
2742
2743 =head1 LICENSE
2744
2745 This program is free software; you can redistribute it and/or 
2746 modify it under the same terms as Perl itself.
2747
2748 See L<http://www.perl.com/perl/misc/Artistic.html>
2749
2750
2751 =cut