ExtUtils::MakeMaker 6.10_03 -> 6.10_04
[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_04';
6 ($Revision) = q$Revision: 1.111 $ =~ /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_VC
1725
1726 In general, any generated Makefile checks for the current version of
1727 MakeMaker and the version the Makefile was built under. If NO_VC is
1728 set, the version check is neglected. Do not write this into your
1729 Makefile.PL, use it interactively instead.
1730
1731 =item OBJECT
1732
1733 List of object files, defaults to '$(BASEEXT)$(OBJ_EXT)', but can be a long
1734 string containing all object files, e.g. "tkpBind.o
1735 tkpButton.o tkpCanvas.o"
1736
1737 (Where BASEEXT is the last component of NAME, and OBJ_EXT is $Config{obj_ext}.)
1738
1739 =item OPTIMIZE
1740
1741 Defaults to C<-O>. Set it to C<-g> to turn debugging on. The flag is
1742 passed to subdirectory makes.
1743
1744 =item PERL
1745
1746 Perl binary for tasks that can be done by miniperl
1747
1748 =item PERL_CORE
1749
1750 Set only when MakeMaker is building the extensions of the Perl core
1751 distribution.
1752
1753 =item PERLMAINCC
1754
1755 The call to the program that is able to compile perlmain.c. Defaults
1756 to $(CC).
1757
1758 =item PERL_ARCHLIB
1759
1760 Same as for PERL_LIB, but for architecture dependent files.
1761
1762 Used only when MakeMaker is building the extensions of the Perl core
1763 distribution (because normally $(PERL_ARCHLIB) is automatically in @INC,
1764 and adding it would get in the way of PERL5LIB).
1765
1766 =item PERL_LIB
1767
1768 Directory containing the Perl library to use.
1769
1770 Used only when MakeMaker is building the extensions of the Perl core
1771 distribution (because normally $(PERL_LIB) is automatically in @INC,
1772 and adding it would get in the way of PERL5LIB).
1773
1774 =item PERL_MALLOC_OK
1775
1776 defaults to 0.  Should be set to TRUE if the extension can work with
1777 the memory allocation routines substituted by the Perl malloc() subsystem.
1778 This should be applicable to most extensions with exceptions of those
1779
1780 =over 4
1781
1782 =item *
1783
1784 with bugs in memory allocations which are caught by Perl's malloc();
1785
1786 =item *
1787
1788 which interact with the memory allocator in other ways than via
1789 malloc(), realloc(), free(), calloc(), sbrk() and brk();
1790
1791 =item *
1792
1793 which rely on special alignment which is not provided by Perl's malloc().
1794
1795 =back
1796
1797 B<NOTE.>  Negligence to set this flag in I<any one> of loaded extension
1798 nullifies many advantages of Perl's malloc(), such as better usage of
1799 system resources, error detection, memory usage reporting, catchable failure
1800 of memory allocations, etc.
1801
1802 =item PERLPREFIX
1803
1804 Directory under which core modules are to be installed.
1805
1806 Defaults to $Config{installprefixexp} falling back to
1807 $Config{installprefix}, $Config{prefixexp} or $Config{prefix} should
1808 $Config{installprefixexp} not exist.
1809
1810 Overridden by PREFIX.
1811
1812 =item PERLRUN
1813
1814 Use this instead of $(PERL) when you wish to run perl.  It will set up
1815 extra necessary flags for you.
1816
1817 =item PERLRUNINST
1818
1819 Use this instead of $(PERL) when you wish to run perl to work with
1820 modules.  It will add things like -I$(INST_ARCH) and other necessary
1821 flags so perl can see the modules you're about to install.
1822
1823 =item PERL_SRC
1824
1825 Directory containing the Perl source code (use of this should be
1826 avoided, it may be undefined)
1827
1828 =item PERM_RW
1829
1830 Desired permission for read/writable files. Defaults to C<644>.
1831 See also L<MM_Unix/perm_rw>.
1832
1833 =item PERM_RWX
1834
1835 Desired permission for executable files. Defaults to C<755>.
1836 See also L<MM_Unix/perm_rwx>.
1837
1838 =item PL_FILES
1839
1840 Ref to hash of files to be processed as perl programs. MakeMaker
1841 will default to any found *.PL file (except Makefile.PL) being keys
1842 and the basename of the file being the value. E.g.
1843
1844   {'foobar.PL' => 'foobar'}
1845
1846 The *.PL files are expected to produce output to the target files
1847 themselves. If multiple files can be generated from the same *.PL
1848 file then the value in the hash can be a reference to an array of
1849 target file names. E.g.
1850
1851   {'foobar.PL' => ['foobar1','foobar2']}
1852
1853 =item PM
1854
1855 Hashref of .pm files and *.pl files to be installed.  e.g.
1856
1857   {'name_of_file.pm' => '$(INST_LIBDIR)/install_as.pm'}
1858
1859 By default this will include *.pm and *.pl and the files found in
1860 the PMLIBDIRS directories.  Defining PM in the
1861 Makefile.PL will override PMLIBDIRS.
1862
1863 =item PMLIBDIRS
1864
1865 Ref to array of subdirectories containing library files.  Defaults to
1866 [ 'lib', $(BASEEXT) ]. The directories will be scanned and I<any> files
1867 they contain will be installed in the corresponding location in the
1868 library.  A libscan() method can be used to alter the behaviour.
1869 Defining PM in the Makefile.PL will override PMLIBDIRS.
1870
1871 (Where BASEEXT is the last component of NAME.)
1872
1873 =item PM_FILTER
1874
1875 A filter program, in the traditional Unix sense (input from stdin, output
1876 to stdout) that is passed on each .pm file during the build (in the
1877 pm_to_blib() phase).  It is empty by default, meaning no filtering is done.
1878
1879 Great care is necessary when defining the command if quoting needs to be
1880 done.  For instance, you would need to say:
1881
1882   {'PM_FILTER' => 'grep -v \\"^\\#\\"'}
1883
1884 to remove all the leading coments on the fly during the build.  The
1885 extra \\ are necessary, unfortunately, because this variable is interpolated
1886 within the context of a Perl program built on the command line, and double
1887 quotes are what is used with the -e switch to build that command line.  The
1888 # is escaped for the Makefile, since what is going to be generated will then
1889 be:
1890
1891   PM_FILTER = grep -v \"^\#\"
1892
1893 Without the \\ before the #, we'd have the start of a Makefile comment,
1894 and the macro would be incorrectly defined.
1895
1896 =item POLLUTE
1897
1898 Release 5.005 grandfathered old global symbol names by providing preprocessor
1899 macros for extension source compatibility.  As of release 5.6, these
1900 preprocessor definitions are not available by default.  The POLLUTE flag
1901 specifies that the old names should still be defined:
1902
1903   perl Makefile.PL POLLUTE=1
1904
1905 Please inform the module author if this is necessary to successfully install
1906 a module under 5.6 or later.
1907
1908 =item PPM_INSTALL_EXEC
1909
1910 Name of the executable used to run C<PPM_INSTALL_SCRIPT> below. (e.g. perl)
1911
1912 =item PPM_INSTALL_SCRIPT
1913
1914 Name of the script that gets executed by the Perl Package Manager after
1915 the installation of a package.
1916
1917 =item PREFIX
1918
1919 This overrides all the default install locations.  Man pages,
1920 libraries, scripts, etc...  MakeMaker will try to make an educated
1921 guess about where to place things under the new PREFIX based on your
1922 Config defaults.  Failing that, it will fall back to a structure
1923 which should be sensible for your platform.
1924
1925 If you specify LIB or any INSTALL* variables they will not be effected
1926 by the PREFIX.
1927
1928 =item PREREQ_FATAL
1929
1930 Bool. If this parameter is true, failing to have the required modules
1931 (or the right versions thereof) will be fatal. perl Makefile.PL will die
1932 with the proper message.
1933
1934 Note: see L<Test::Harness> for a shortcut for stopping tests early if
1935 you are missing dependencies.
1936
1937 Do I<not> use this parameter for simple requirements, which could be resolved
1938 at a later time, e.g. after an unsuccessful B<make test> of your module.
1939
1940 It is I<extremely> rare to have to use C<PREREQ_FATAL> at all!
1941
1942 =item PREREQ_PM
1943
1944 Hashref: Names of modules that need to be available to run this
1945 extension (e.g. Fcntl for SDBM_File) are the keys of the hash and the
1946 desired version is the value. If the required version number is 0, we
1947 only check if any version is installed already.
1948
1949 =item PREREQ_PRINT
1950
1951 Bool.  If this parameter is true, the prerequisites will be printed to
1952 stdout and MakeMaker will exit.  The output format is
1953
1954 $PREREQ_PM = {
1955                'A::B' => Vers1,
1956                'C::D' => Vers2,
1957                ...
1958              };
1959
1960 =item PRINT_PREREQ
1961
1962 RedHatism for C<PREREQ_PRINT>.  The output format is different, though:
1963
1964     perl(A::B)>=Vers1 perl(C::D)>=Vers2 ...
1965
1966 =item SITEPREFIX
1967
1968 Like PERLPREFIX, but only for the site install locations.
1969
1970 Defaults to $Config{siteprefixexp}.  Perls prior to 5.6.0 didn't have
1971 an explicit siteprefix in the Config.  In those cases
1972 $Config{installprefix} will be used.
1973
1974 Overridable by PREFIX
1975
1976 =item SKIP
1977
1978 Arrayref. E.g. [qw(name1 name2)] skip (do not write) sections of the
1979 Makefile. Caution! Do not use the SKIP attribute for the negligible
1980 speedup. It may seriously damage the resulting Makefile. Only use it
1981 if you really need it.
1982
1983 =item TYPEMAPS
1984
1985 Ref to array of typemap file names.  Use this when the typemaps are
1986 in some directory other than the current directory or when they are
1987 not named B<typemap>.  The last typemap in the list takes
1988 precedence.  A typemap in the current directory has highest
1989 precedence, even if it isn't listed in TYPEMAPS.  The default system
1990 typemap has lowest precedence.
1991
1992 =item VENDORPREFIX
1993
1994 Like PERLPREFIX, but only for the vendor install locations.
1995
1996 Defaults to $Config{vendorprefixexp}.
1997
1998 Overridable by PREFIX
1999
2000 =item VERBINST
2001
2002 If true, make install will be verbose
2003
2004 =item VERSION
2005
2006 Your version number for distributing the package.  This defaults to
2007 0.1.
2008
2009 =item VERSION_FROM
2010
2011 Instead of specifying the VERSION in the Makefile.PL you can let
2012 MakeMaker parse a file to determine the version number. The parsing
2013 routine requires that the file named by VERSION_FROM contains one
2014 single line to compute the version number. The first line in the file
2015 that contains the regular expression
2016
2017     /([\$*])(([\w\:\']*)\bVERSION)\b.*\=/
2018
2019 will be evaluated with eval() and the value of the named variable
2020 B<after> the eval() will be assigned to the VERSION attribute of the
2021 MakeMaker object. The following lines will be parsed o.k.:
2022
2023     $VERSION = '1.00';
2024     *VERSION = \'1.01';
2025     $VERSION = sprintf "%d.%03d", q$Revision: 1.111 $ =~ /(\d+)/g;
2026     $FOO::VERSION = '1.10';
2027     *FOO::VERSION = \'1.11';
2028     our $VERSION = 1.2.3;       # new for perl5.6.0 
2029
2030 but these will fail:
2031
2032     my $VERSION = '1.01';
2033     local $VERSION = '1.02';
2034     local $FOO::VERSION = '1.30';
2035
2036 (Putting C<my> or C<local> on the preceding line will work o.k.)
2037
2038 The file named in VERSION_FROM is not added as a dependency to
2039 Makefile. This is not really correct, but it would be a major pain
2040 during development to have to rewrite the Makefile for any smallish
2041 change in that file. If you want to make sure that the Makefile
2042 contains the correct VERSION macro after any change of the file, you
2043 would have to do something like
2044
2045     depend => { Makefile => '$(VERSION_FROM)' }
2046
2047 See attribute C<depend> below.
2048
2049 =item VERSION_SYM
2050
2051 A sanitized VERSION with . replaced by _.  For places where . has
2052 special meaning (some filesystems, RCS labels, etc...)
2053
2054 =item XS
2055
2056 Hashref of .xs files. MakeMaker will default this.  e.g.
2057
2058   {'name_of_file.xs' => 'name_of_file.c'}
2059
2060 The .c files will automatically be included in the list of files
2061 deleted by a make clean.
2062
2063 =item XSOPT
2064
2065 String of options to pass to xsubpp.  This might include C<-C++> or
2066 C<-extern>.  Do not include typemaps here; the TYPEMAP parameter exists for
2067 that purpose.
2068
2069 =item XSPROTOARG
2070
2071 May be set to an empty string, which is identical to C<-prototypes>, or
2072 C<-noprototypes>. See the xsubpp documentation for details. MakeMaker
2073 defaults to the empty string.
2074
2075 =item XS_VERSION
2076
2077 Your version number for the .xs file of this package.  This defaults
2078 to the value of the VERSION attribute.
2079
2080 =back
2081
2082 =head2 Additional lowercase attributes
2083
2084 can be used to pass parameters to the methods which implement that
2085 part of the Makefile.
2086
2087 =over 2
2088
2089 =item clean
2090
2091   {FILES => "*.xyz foo"}
2092
2093 =item depend
2094
2095   {ANY_TARGET => ANY_DEPENDECY, ...}
2096
2097 (ANY_TARGET must not be given a double-colon rule by MakeMaker.)
2098
2099 =item dist
2100
2101   {TARFLAGS => 'cvfF', COMPRESS => 'gzip', SUFFIX => '.gz',
2102   SHAR => 'shar -m', DIST_CP => 'ln', ZIP => '/bin/zip',
2103   ZIPFLAGS => '-rl', DIST_DEFAULT => 'private tardist' }
2104
2105 If you specify COMPRESS, then SUFFIX should also be altered, as it is
2106 needed to tell make the target file of the compression. Setting
2107 DIST_CP to ln can be useful, if you need to preserve the timestamps on
2108 your files. DIST_CP can take the values 'cp', which copies the file,
2109 'ln', which links the file, and 'best' which copies symbolic links and
2110 links the rest. Default is 'best'.
2111
2112 =item dynamic_lib
2113
2114   {ARMAYBE => 'ar', OTHERLDFLAGS => '...', INST_DYNAMIC_DEP => '...'}
2115
2116 =item linkext
2117
2118   {LINKTYPE => 'static', 'dynamic' or ''}
2119
2120 NB: Extensions that have nothing but *.pm files had to say
2121
2122   {LINKTYPE => ''}
2123
2124 with Pre-5.0 MakeMakers. Since version 5.00 of MakeMaker such a line
2125 can be deleted safely. MakeMaker recognizes when there's nothing to
2126 be linked.
2127
2128 =item macro
2129
2130   {ANY_MACRO => ANY_VALUE, ...}
2131
2132 =item realclean
2133
2134   {FILES => '$(INST_ARCHAUTODIR)/*.xyz'}
2135
2136 =item test
2137
2138   {TESTS => 't/*.t'}
2139
2140 =item tool_autosplit
2141
2142   {MAXLEN => 8}
2143
2144 =back
2145
2146 =head2 Overriding MakeMaker Methods
2147
2148 If you cannot achieve the desired Makefile behaviour by specifying
2149 attributes you may define private subroutines in the Makefile.PL.
2150 Each subroutine returns the text it wishes to have written to
2151 the Makefile. To override a section of the Makefile you can
2152 either say:
2153
2154         sub MY::c_o { "new literal text" }
2155
2156 or you can edit the default by saying something like:
2157
2158         package MY; # so that "SUPER" works right
2159         sub c_o {
2160             my $inherited = shift->SUPER::c_o(@_);
2161             $inherited =~ s/old text/new text/;
2162             $inherited;
2163         }
2164
2165 If you are running experiments with embedding perl as a library into
2166 other applications, you might find MakeMaker is not sufficient. You'd
2167 better have a look at ExtUtils::Embed which is a collection of utilities
2168 for embedding.
2169
2170 If you still need a different solution, try to develop another
2171 subroutine that fits your needs and submit the diffs to
2172 F<makemaker@perl.org>
2173
2174 For a complete description of all MakeMaker methods see
2175 L<ExtUtils::MM_Unix>.
2176
2177 Here is a simple example of how to add a new target to the generated
2178 Makefile:
2179
2180     sub MY::postamble {
2181         return <<'MAKE_FRAG';
2182     $(MYEXTLIB): sdbm/Makefile
2183             cd sdbm && $(MAKE) all
2184
2185     MAKE_FRAG
2186     }
2187
2188 =head2 The End Of Cargo Cult Programming
2189
2190 WriteMakefile() now does some basic sanity checks on its parameters to
2191 protect against typos and malformatted values.  This means some things
2192 which happened to work in the past will now throw warnings and
2193 possibly produce internal errors.
2194
2195 Some of the most common mistakes:
2196
2197 =over 2
2198
2199 =item C<<MAN3PODS => ' '>>
2200
2201 This is commonly used to supress the creation of man pages.  MAN3PODS
2202 takes a hash ref not a string, but the above worked by accident in old
2203 versions of MakeMaker.
2204
2205 The correct code is C<<MAN3PODS => { }>>.
2206
2207 =back
2208
2209
2210 =head2 Hintsfile support
2211
2212 MakeMaker.pm uses the architecture specific information from
2213 Config.pm. In addition it evaluates architecture specific hints files
2214 in a C<hints/> directory. The hints files are expected to be named
2215 like their counterparts in C<PERL_SRC/hints>, but with an C<.pl> file
2216 name extension (eg. C<next_3_2.pl>). They are simply C<eval>ed by
2217 MakeMaker within the WriteMakefile() subroutine, and can be used to
2218 execute commands as well as to include special variables. The rules
2219 which hintsfile is chosen are the same as in Configure.
2220
2221 The hintsfile is eval()ed immediately after the arguments given to
2222 WriteMakefile are stuffed into a hash reference $self but before this
2223 reference becomes blessed. So if you want to do the equivalent to
2224 override or create an attribute you would say something like
2225
2226     $self->{LIBS} = ['-ldbm -lucb -lc'];
2227
2228 =head2 Distribution Support
2229
2230 For authors of extensions MakeMaker provides several Makefile
2231 targets. Most of the support comes from the ExtUtils::Manifest module,
2232 where additional documentation can be found.
2233
2234 =over 4
2235
2236 =item    make distcheck
2237
2238 reports which files are below the build directory but not in the
2239 MANIFEST file and vice versa. (See ExtUtils::Manifest::fullcheck() for
2240 details)
2241
2242 =item    make skipcheck
2243
2244 reports which files are skipped due to the entries in the
2245 C<MANIFEST.SKIP> file (See ExtUtils::Manifest::skipcheck() for
2246 details)
2247
2248 =item    make distclean
2249
2250 does a realclean first and then the distcheck. Note that this is not
2251 needed to build a new distribution as long as you are sure that the
2252 MANIFEST file is ok.
2253
2254 =item    make manifest
2255
2256 rewrites the MANIFEST file, adding all remaining files found (See
2257 ExtUtils::Manifest::mkmanifest() for details)
2258
2259 =item    make distdir
2260
2261 Copies all the files that are in the MANIFEST file to a newly created
2262 directory with the name C<$(DISTNAME)-$(VERSION)>. If that directory
2263 exists, it will be removed first.
2264
2265 =item   make disttest
2266
2267 Makes a distdir first, and runs a C<perl Makefile.PL>, a make, and
2268 a make test in that directory.
2269
2270 =item    make tardist
2271
2272 First does a distdir. Then a command $(PREOP) which defaults to a null
2273 command, followed by $(TOUNIX), which defaults to a null command under
2274 UNIX, and will convert files in distribution directory to UNIX format
2275 otherwise. Next it runs C<tar> on that directory into a tarfile and
2276 deletes the directory. Finishes with a command $(POSTOP) which
2277 defaults to a null command.
2278
2279 =item    make dist
2280
2281 Defaults to $(DIST_DEFAULT) which in turn defaults to tardist.
2282
2283 =item    make uutardist
2284
2285 Runs a tardist first and uuencodes the tarfile.
2286
2287 =item    make shdist
2288
2289 First does a distdir. Then a command $(PREOP) which defaults to a null
2290 command. Next it runs C<shar> on that directory into a sharfile and
2291 deletes the intermediate directory again. Finishes with a command
2292 $(POSTOP) which defaults to a null command.  Note: For shdist to work
2293 properly a C<shar> program that can handle directories is mandatory.
2294
2295 =item    make zipdist
2296
2297 First does a distdir. Then a command $(PREOP) which defaults to a null
2298 command. Runs C<$(ZIP) $(ZIPFLAGS)> on that directory into a
2299 zipfile. Then deletes that directory. Finishes with a command
2300 $(POSTOP) which defaults to a null command.
2301
2302 =item    make ci
2303
2304 Does a $(CI) and a $(RCS_LABEL) on all files in the MANIFEST file.
2305
2306 =back
2307
2308 Customization of the dist targets can be done by specifying a hash
2309 reference to the dist attribute of the WriteMakefile call. The
2310 following parameters are recognized:
2311
2312     CI           ('ci -u')
2313     COMPRESS     ('gzip --best')
2314     POSTOP       ('@ :')
2315     PREOP        ('@ :')
2316     TO_UNIX      (depends on the system)
2317     RCS_LABEL    ('rcs -q -Nv$(VERSION_SYM):')
2318     SHAR         ('shar')
2319     SUFFIX       ('.gz')
2320     TAR          ('tar')
2321     TARFLAGS     ('cvf')
2322     ZIP          ('zip')
2323     ZIPFLAGS     ('-r')
2324
2325 An example:
2326
2327     WriteMakefile( 'dist' => { COMPRESS=>"bzip2", SUFFIX=>".bz2" })
2328
2329 =head2 Disabling an extension
2330
2331 If some events detected in F<Makefile.PL> imply that there is no way
2332 to create the Module, but this is a normal state of things, then you
2333 can create a F<Makefile> which does nothing, but succeeds on all the
2334 "usual" build targets.  To do so, use
2335
2336    ExtUtils::MakeMaker::WriteEmptyMakefile();
2337
2338 instead of WriteMakefile().
2339
2340 This may be useful if other modules expect this module to be I<built>
2341 OK, as opposed to I<work> OK (say, this system-dependent module builds
2342 in a subdirectory of some other distribution, or is listed as a
2343 dependency in a CPAN::Bundle, but the functionality is supported by
2344 different means on the current architecture).
2345
2346 =head2 Other Handy Functions
2347
2348 =over 4
2349
2350 =item prompt
2351
2352     my $value = prompt($message);
2353     my $value = prompt($message, $default);
2354
2355 The C<prompt()> function provides an easy way to request user input
2356 used to write a makefile.  It displays the $message as a prompt for
2357 input.  If a $default is provided it will be used as a default.  The
2358 function returns the $value selected by the user.
2359
2360 If C<prompt()> detects that it is not running interactively and there
2361 is nothing on STDIN or if the PERL_MM_USE_DEFAULT environment variable
2362 is set to true, the $default will be used without prompting.  This
2363 prevents automated processes from blocking on user input. 
2364
2365 If no $default is provided an empty string will be used instead.
2366
2367 =back
2368
2369
2370 =head1 ENVIRONMENT
2371
2372 =over 4
2373
2374 =item PERL_MM_OPT
2375
2376 Command line options used by C<MakeMaker-E<gt>new()>, and thus by
2377 C<WriteMakefile()>.  The string is split on whitespace, and the result
2378 is processed before any actual command line arguments are processed.
2379
2380 =item PERL_MM_USE_DEFAULT
2381
2382 If set to a true value then MakeMaker's prompt function will
2383 always return the default without waiting for user input.
2384
2385 =back
2386
2387 =head1 SEE ALSO
2388
2389 ExtUtils::MM_Unix, ExtUtils::Manifest ExtUtils::Install,
2390 ExtUtils::Embed
2391
2392 =head1 AUTHORS
2393
2394 Andy Dougherty <F<doughera@lafayette.edu>>, Andreas KE<ouml>nig
2395 <F<andreas.koenig@mind.de>>, Tim Bunce <F<timb@cpan.org>>.  VMS
2396 support by Charles Bailey <F<bailey@newman.upenn.edu>>.  OS/2 support
2397 by Ilya Zakharevich <F<ilya@math.ohio-state.edu>>.
2398
2399 Currently maintained by Michael G Schwern <F<schwern@pobox.com>>
2400
2401 Send patches and ideas to <F<makemaker@perl.org>>.
2402
2403 Send bug reports via http://rt.cpan.org/.  Please send your
2404 generated Makefile along with your report.
2405
2406 For more up-to-date information, see http://www.makemaker.org.
2407
2408 =head1 LICENSE
2409
2410 This program is free software; you can redistribute it and/or 
2411 modify it under the same terms as Perl itself.
2412
2413 See F<http://www.perl.com/perl/misc/Artistic.html>
2414
2415
2416 =cut