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