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