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