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