[Encode] UTF-7 Support
[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_03';
6 ($Revision = substr(q$Revision: 1.109 $, 10)) =~ 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_OLD MAN1PODS MAN3PODS MAP_TARGET MYEXTLIB
223     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 =item FIRST_MAKEFILE
1423
1424 The name of the Makefile to be produced.  This is used for the second
1425 Makefile that will be produced for the MAP_TARGET.
1426
1427 Defaults to 'Makefile' or 'Descrip.MMS' on VMS.
1428
1429 (Note: we couldn't use MAKEFILE because dmake uses this for something
1430 else).
1431
1432 =item FULLPERL
1433
1434 Perl binary able to run this extension, load XS modules, etc...
1435
1436 =item FULLPERLRUN
1437
1438 Like PERLRUN, except it uses FULLPERL.
1439
1440 =item FULLPERLRUNINST
1441
1442 Like PERLRUNINST, except it uses FULLPERL.
1443
1444 =item FUNCLIST
1445
1446 This provides an alternate means to specify function names to be
1447 exported from the extension.  Its value is a reference to an
1448 array of function names to be exported by the extension.  These
1449 names are passed through unaltered to the linker options file.
1450
1451 =item H
1452
1453 Ref to array of *.h file names. Similar to C.
1454
1455 =item IMPORTS
1456
1457 This attribute is used to specify names to be imported into the
1458 extension. Takes a hash ref.
1459
1460 It is only used on OS/2 and Win32.
1461
1462 =item INC
1463
1464 Include file dirs eg: C<"-I/usr/5include -I/path/to/inc">
1465
1466 =item INCLUDE_EXT
1467
1468 Array of extension names to be included when doing a static build.
1469 MakeMaker will normally build with all of the installed extensions when
1470 doing a static build, and that is usually the desired behavior.  If
1471 INCLUDE_EXT is present then MakeMaker will build only with those extensions
1472 which are explicitly mentioned. (e.g.  [ qw( Socket POSIX ) ])
1473
1474 It is not necessary to mention DynaLoader or the current extension when
1475 filling in INCLUDE_EXT.  If the INCLUDE_EXT is mentioned but is empty then
1476 only DynaLoader and the current extension will be included in the build.
1477
1478 This attribute may be most useful when specified as a string on the
1479 command line:  perl Makefile.PL INCLUDE_EXT='POSIX Socket Devel::Peek'
1480
1481 =item INSTALLARCHLIB
1482
1483 Used by 'make install', which copies files from INST_ARCHLIB to this
1484 directory if INSTALLDIRS is set to perl.
1485
1486 =item INSTALLBIN
1487
1488 Directory to install binary files (e.g. tkperl) into if
1489 INSTALLDIRS=perl.
1490
1491 =item INSTALLDIRS
1492
1493 Determines which of the sets of installation directories to choose:
1494 perl, site or vendor.  Defaults to site.
1495
1496 =item INSTALLMAN1DIR
1497
1498 =item INSTALLMAN3DIR
1499
1500 These directories get the man pages at 'make install' time if
1501 INSTALLDIRS=perl.  Defaults to $Config{installman*dir}.
1502
1503 If set to 'none', no man pages will be installed.
1504
1505 =item INSTALLPRIVLIB
1506
1507 Used by 'make install', which copies files from INST_LIB to this
1508 directory if INSTALLDIRS is set to perl.
1509
1510 Defaults to $Config{installprivlib}.
1511
1512 =item INSTALLSCRIPT
1513
1514 Used by 'make install' which copies files from INST_SCRIPT to this
1515 directory.
1516
1517 =item INSTALLSITEARCH
1518
1519 Used by 'make install', which copies files from INST_ARCHLIB to this
1520 directory if INSTALLDIRS is set to site (default).
1521
1522 =item INSTALLSITEBIN
1523
1524 Used by 'make install', which copies files from INST_BIN to this
1525 directory if INSTALLDIRS is set to site (default).
1526
1527 =item INSTALLSITELIB
1528
1529 Used by 'make install', which copies files from INST_LIB to this
1530 directory if INSTALLDIRS is set to site (default).
1531
1532 =item INSTALLSITEMAN1DIR
1533
1534 =item INSTALLSITEMAN3DIR
1535
1536 These directories get the man pages at 'make install' time if
1537 INSTALLDIRS=site (default).  Defaults to 
1538 $(SITEPREFIX)/man/man$(MAN*EXT).
1539
1540 If set to 'none', no man pages will be installed.
1541
1542 =item INSTALLVENDORARCH
1543
1544 Used by 'make install', which copies files from INST_ARCHLIB to this
1545 directory if INSTALLDIRS is set to vendor.
1546
1547 =item INSTALLVENDORBIN
1548
1549 Used by 'make install', which copies files from INST_BIN to this
1550 directory if INSTALLDIRS is set to vendor.
1551
1552 =item INSTALLVENDORLIB
1553
1554 Used by 'make install', which copies files from INST_LIB to this
1555 directory if INSTALLDIRS is set to vendor.
1556
1557 =item INSTALLVENDORMAN1DIR
1558
1559 =item INSTALLVENDORMAN3DIR
1560
1561 These directories get the man pages at 'make install' time if
1562 INSTALLDIRS=vendor.  Defaults to $(VENDORPREFIX)/man/man$(MAN*EXT).
1563
1564 If set to 'none', no man pages will be installed.
1565
1566 =item INST_ARCHLIB
1567
1568 Same as INST_LIB for architecture dependent files.
1569
1570 =item INST_BIN
1571
1572 Directory to put real binary files during 'make'. These will be copied
1573 to INSTALLBIN during 'make install'
1574
1575 =item INST_LIB
1576
1577 Directory where we put library files of this extension while building
1578 it.
1579
1580 =item INST_MAN1DIR
1581
1582 Directory to hold the man pages at 'make' time
1583
1584 =item INST_MAN3DIR
1585
1586 Directory to hold the man pages at 'make' time
1587
1588 =item INST_SCRIPT
1589
1590 Directory, where executable files should be installed during
1591 'make'. Defaults to "./blib/script", just to have a dummy location during
1592 testing. make install will copy the files in INST_SCRIPT to
1593 INSTALLSCRIPT.
1594
1595 =item LD
1596
1597 Program to be used to link libraries for dynamic loading.
1598
1599 Defaults to $Config{ld}.
1600
1601 =item LDDLFLAGS
1602
1603 Any special flags that might need to be passed to ld to create a
1604 shared library suitable for dynamic loading.  It is up to the makefile
1605 to use it.  (See L<Config/lddlflags>)
1606
1607 Defaults to $Config{lddlflags}.
1608
1609 =item LDFROM
1610
1611 Defaults to "$(OBJECT)" and is used in the ld command to specify
1612 what files to link/load from (also see dynamic_lib below for how to
1613 specify ld flags)
1614
1615 =item LIB
1616
1617 LIB should only be set at C<perl Makefile.PL> time but is allowed as a
1618 MakeMaker argument. It has the effect of setting both INSTALLPRIVLIB
1619 and INSTALLSITELIB to that value regardless any explicit setting of
1620 those arguments (or of PREFIX).  INSTALLARCHLIB and INSTALLSITEARCH
1621 are set to the corresponding architecture subdirectory.
1622
1623 =item LIBPERL_A
1624
1625 The filename of the perllibrary that will be used together with this
1626 extension. Defaults to libperl.a.
1627
1628 =item LIBS
1629
1630 An anonymous array of alternative library
1631 specifications to be searched for (in order) until
1632 at least one library is found. E.g.
1633
1634   'LIBS' => ["-lgdbm", "-ldbm -lfoo", "-L/path -ldbm.nfs"]
1635
1636 Mind, that any element of the array
1637 contains a complete set of arguments for the ld
1638 command. So do not specify
1639
1640   'LIBS' => ["-ltcl", "-ltk", "-lX11"]
1641
1642 See ODBM_File/Makefile.PL for an example, where an array is needed. If
1643 you specify a scalar as in
1644
1645   'LIBS' => "-ltcl -ltk -lX11"
1646
1647 MakeMaker will turn it into an array with one element.
1648
1649 =item LINKTYPE
1650
1651 'static' or 'dynamic' (default unless usedl=undef in
1652 config.sh). Should only be used to force static linking (also see
1653 linkext below).
1654
1655 =item MAKEAPERL
1656
1657 Boolean which tells MakeMaker, that it should include the rules to
1658 make a perl. This is handled automatically as a switch by
1659 MakeMaker. The user normally does not need it.
1660
1661 =item MAKEFILE_OLD
1662
1663 When 'make clean' or similar is run, the $(FIRST_MAKEFILE) will be
1664 backed up at this location.
1665
1666 Defaults to $(FIRST_MAKEFILE).old or $(FIRST_MAKEFILE)_old on VMS.
1667
1668 =item MAN1PODS
1669
1670 Hashref of pod-containing files. MakeMaker will default this to all
1671 EXE_FILES files that include POD directives. The files listed
1672 here will be converted to man pages and installed as was requested
1673 at Configure time.
1674
1675 =item MAN3PODS
1676
1677 Hashref that assigns to *.pm and *.pod files the files into which the
1678 manpages are to be written. MakeMaker parses all *.pod and *.pm files
1679 for POD directives. Files that contain POD will be the default keys of
1680 the MAN3PODS hashref. These will then be converted to man pages during
1681 C<make> and will be installed during C<make install>.
1682
1683 =item MAP_TARGET
1684
1685 If it is intended, that a new perl binary be produced, this variable
1686 may hold a name for that binary. Defaults to perl
1687
1688 =item MYEXTLIB
1689
1690 If the extension links to a library that it builds set this to the
1691 name of the library (see SDBM_File)
1692
1693 =item NAME
1694
1695 Perl module name for this extension (DBD::Oracle). This will default
1696 to the directory name but should be explicitly defined in the
1697 Makefile.PL.
1698
1699 =item NEEDS_LINKING
1700
1701 MakeMaker will figure out if an extension contains linkable code
1702 anywhere down the directory tree, and will set this variable
1703 accordingly, but you can speed it up a very little bit if you define
1704 this boolean variable yourself.
1705
1706 =item NOECHO
1707
1708 Command so make does not print the literal commands its running.
1709
1710 By setting it to an empty string you can generate a Makefile that
1711 prints all commands. Mainly used in debugging MakeMaker itself.
1712
1713 Defaults to C<@>.
1714
1715 =item NORECURS
1716
1717 Boolean.  Attribute to inhibit descending into subdirectories.
1718
1719 =item NO_VC
1720
1721 In general, any generated Makefile checks for the current version of
1722 MakeMaker and the version the Makefile was built under. If NO_VC is
1723 set, the version check is neglected. Do not write this into your
1724 Makefile.PL, use it interactively instead.
1725
1726 =item OBJECT
1727
1728 List of object files, defaults to '$(BASEEXT)$(OBJ_EXT)', but can be a long
1729 string containing all object files, e.g. "tkpBind.o
1730 tkpButton.o tkpCanvas.o"
1731
1732 (Where BASEEXT is the last component of NAME, and OBJ_EXT is $Config{obj_ext}.)
1733
1734 =item OPTIMIZE
1735
1736 Defaults to C<-O>. Set it to C<-g> to turn debugging on. The flag is
1737 passed to subdirectory makes.
1738
1739 =item PERL
1740
1741 Perl binary for tasks that can be done by miniperl
1742
1743 =item PERL_CORE
1744
1745 Set only when MakeMaker is building the extensions of the Perl core
1746 distribution.
1747
1748 =item PERLMAINCC
1749
1750 The call to the program that is able to compile perlmain.c. Defaults
1751 to $(CC).
1752
1753 =item PERL_ARCHLIB
1754
1755 Same as for PERL_LIB, but for architecture dependent files.
1756
1757 Used only when MakeMaker is building the extensions of the Perl core
1758 distribution (because normally $(PERL_ARCHLIB) is automatically in @INC,
1759 and adding it would get in the way of PERL5LIB).
1760
1761 =item PERL_LIB
1762
1763 Directory containing the Perl library to use.
1764
1765 Used only when MakeMaker is building the extensions of the Perl core
1766 distribution (because normally $(PERL_LIB) is automatically in @INC,
1767 and adding it would get in the way of PERL5LIB).
1768
1769 =item PERL_MALLOC_OK
1770
1771 defaults to 0.  Should be set to TRUE if the extension can work with
1772 the memory allocation routines substituted by the Perl malloc() subsystem.
1773 This should be applicable to most extensions with exceptions of those
1774
1775 =over 4
1776
1777 =item *
1778
1779 with bugs in memory allocations which are caught by Perl's malloc();
1780
1781 =item *
1782
1783 which interact with the memory allocator in other ways than via
1784 malloc(), realloc(), free(), calloc(), sbrk() and brk();
1785
1786 =item *
1787
1788 which rely on special alignment which is not provided by Perl's malloc().
1789
1790 =back
1791
1792 B<NOTE.>  Negligence to set this flag in I<any one> of loaded extension
1793 nullifies many advantages of Perl's malloc(), such as better usage of
1794 system resources, error detection, memory usage reporting, catchable failure
1795 of memory allocations, etc.
1796
1797 =item PERLPREFIX
1798
1799 Directory under which core modules are to be installed.
1800
1801 Defaults to $Config{installprefixexp} falling back to
1802 $Config{installprefix}, $Config{prefixexp} or $Config{prefix} should
1803 $Config{installprefixexp} not exist.
1804
1805 Overridden by PREFIX.
1806
1807 =item PERLRUN
1808
1809 Use this instead of $(PERL) when you wish to run perl.  It will set up
1810 extra necessary flags for you.
1811
1812 =item PERLRUNINST
1813
1814 Use this instead of $(PERL) when you wish to run perl to work with
1815 modules.  It will add things like -I$(INST_ARCH) and other necessary
1816 flags so perl can see the modules you're about to install.
1817
1818 =item PERL_SRC
1819
1820 Directory containing the Perl source code (use of this should be
1821 avoided, it may be undefined)
1822
1823 =item PERM_RW
1824
1825 Desired permission for read/writable files. Defaults to C<644>.
1826 See also L<MM_Unix/perm_rw>.
1827
1828 =item PERM_RWX
1829
1830 Desired permission for executable files. Defaults to C<755>.
1831 See also L<MM_Unix/perm_rwx>.
1832
1833 =item PL_FILES
1834
1835 Ref to hash of files to be processed as perl programs. MakeMaker
1836 will default to any found *.PL file (except Makefile.PL) being keys
1837 and the basename of the file being the value. E.g.
1838
1839   {'foobar.PL' => 'foobar'}
1840
1841 The *.PL files are expected to produce output to the target files
1842 themselves. If multiple files can be generated from the same *.PL
1843 file then the value in the hash can be a reference to an array of
1844 target file names. E.g.
1845
1846   {'foobar.PL' => ['foobar1','foobar2']}
1847
1848 =item PM
1849
1850 Hashref of .pm files and *.pl files to be installed.  e.g.
1851
1852   {'name_of_file.pm' => '$(INST_LIBDIR)/install_as.pm'}
1853
1854 By default this will include *.pm and *.pl and the files found in
1855 the PMLIBDIRS directories.  Defining PM in the
1856 Makefile.PL will override PMLIBDIRS.
1857
1858 =item PMLIBDIRS
1859
1860 Ref to array of subdirectories containing library files.  Defaults to
1861 [ 'lib', $(BASEEXT) ]. The directories will be scanned and I<any> files
1862 they contain will be installed in the corresponding location in the
1863 library.  A libscan() method can be used to alter the behaviour.
1864 Defining PM in the Makefile.PL will override PMLIBDIRS.
1865
1866 (Where BASEEXT is the last component of NAME.)
1867
1868 =item PM_FILTER
1869
1870 A filter program, in the traditional Unix sense (input from stdin, output
1871 to stdout) that is passed on each .pm file during the build (in the
1872 pm_to_blib() phase).  It is empty by default, meaning no filtering is done.
1873
1874 Great care is necessary when defining the command if quoting needs to be
1875 done.  For instance, you would need to say:
1876
1877   {'PM_FILTER' => 'grep -v \\"^\\#\\"'}
1878
1879 to remove all the leading coments on the fly during the build.  The
1880 extra \\ are necessary, unfortunately, because this variable is interpolated
1881 within the context of a Perl program built on the command line, and double
1882 quotes are what is used with the -e switch to build that command line.  The
1883 # is escaped for the Makefile, since what is going to be generated will then
1884 be:
1885
1886   PM_FILTER = grep -v \"^\#\"
1887
1888 Without the \\ before the #, we'd have the start of a Makefile comment,
1889 and the macro would be incorrectly defined.
1890
1891 =item POLLUTE
1892
1893 Release 5.005 grandfathered old global symbol names by providing preprocessor
1894 macros for extension source compatibility.  As of release 5.6, these
1895 preprocessor definitions are not available by default.  The POLLUTE flag
1896 specifies that the old names should still be defined:
1897
1898   perl Makefile.PL POLLUTE=1
1899
1900 Please inform the module author if this is necessary to successfully install
1901 a module under 5.6 or later.
1902
1903 =item PPM_INSTALL_EXEC
1904
1905 Name of the executable used to run C<PPM_INSTALL_SCRIPT> below. (e.g. perl)
1906
1907 =item PPM_INSTALL_SCRIPT
1908
1909 Name of the script that gets executed by the Perl Package Manager after
1910 the installation of a package.
1911
1912 =item PREFIX
1913
1914 This overrides all the default install locations.  Man pages,
1915 libraries, scripts, etc...  MakeMaker will try to make an educated
1916 guess about where to place things under the new PREFIX based on your
1917 Config defaults.  Failing that, it will fall back to a structure
1918 which should be sensible for your platform.
1919
1920 If you specify LIB or any INSTALL* variables they will not be effected
1921 by the PREFIX.
1922
1923 =item PREREQ_FATAL
1924
1925 Bool. If this parameter is true, failing to have the required modules
1926 (or the right versions thereof) will be fatal. perl Makefile.PL will die
1927 with the proper message.
1928
1929 Note: see L<Test::Harness> for a shortcut for stopping tests early if
1930 you are missing dependencies.
1931
1932 Do I<not> use this parameter for simple requirements, which could be resolved
1933 at a later time, e.g. after an unsuccessful B<make test> of your module.
1934
1935 It is I<extremely> rare to have to use C<PREREQ_FATAL> at all!
1936
1937 =item PREREQ_PM
1938
1939 Hashref: Names of modules that need to be available to run this
1940 extension (e.g. Fcntl for SDBM_File) are the keys of the hash and the
1941 desired version is the value. If the required version number is 0, we
1942 only check if any version is installed already.
1943
1944 =item PREREQ_PRINT
1945
1946 Bool.  If this parameter is true, the prerequisites will be printed to
1947 stdout and MakeMaker will exit.  The output format is
1948
1949 $PREREQ_PM = {
1950                'A::B' => Vers1,
1951                'C::D' => Vers2,
1952                ...
1953              };
1954
1955 =item PRINT_PREREQ
1956
1957 RedHatism for C<PREREQ_PRINT>.  The output format is different, though:
1958
1959     perl(A::B)>=Vers1 perl(C::D)>=Vers2 ...
1960
1961 =item SITEPREFIX
1962
1963 Like PERLPREFIX, but only for the site install locations.
1964
1965 Defaults to $Config{siteprefixexp}.  Perls prior to 5.6.0 didn't have
1966 an explicit siteprefix in the Config.  In those cases
1967 $Config{installprefix} will be used.
1968
1969 Overridable by PREFIX
1970
1971 =item SKIP
1972
1973 Arrayref. E.g. [qw(name1 name2)] skip (do not write) sections of the
1974 Makefile. Caution! Do not use the SKIP attribute for the negligible
1975 speedup. It may seriously damage the resulting Makefile. Only use it
1976 if you really need it.
1977
1978 =item TYPEMAPS
1979
1980 Ref to array of typemap file names.  Use this when the typemaps are
1981 in some directory other than the current directory or when they are
1982 not named B<typemap>.  The last typemap in the list takes
1983 precedence.  A typemap in the current directory has highest
1984 precedence, even if it isn't listed in TYPEMAPS.  The default system
1985 typemap has lowest precedence.
1986
1987 =item VENDORPREFIX
1988
1989 Like PERLPREFIX, but only for the vendor install locations.
1990
1991 Defaults to $Config{vendorprefixexp}.
1992
1993 Overridable by PREFIX
1994
1995 =item VERBINST
1996
1997 If true, make install will be verbose
1998
1999 =item VERSION
2000
2001 Your version number for distributing the package.  This defaults to
2002 0.1.
2003
2004 =item VERSION_FROM
2005
2006 Instead of specifying the VERSION in the Makefile.PL you can let
2007 MakeMaker parse a file to determine the version number. The parsing
2008 routine requires that the file named by VERSION_FROM contains one
2009 single line to compute the version number. The first line in the file
2010 that contains the regular expression
2011
2012     /([\$*])(([\w\:\']*)\bVERSION)\b.*\=/
2013
2014 will be evaluated with eval() and the value of the named variable
2015 B<after> the eval() will be assigned to the VERSION attribute of the
2016 MakeMaker object. The following lines will be parsed o.k.:
2017
2018     $VERSION = '1.00';
2019     *VERSION = \'1.01';
2020     ( $VERSION ) = '$Revision: 1.109 $ ' =~ /\$Revision:\s+([^\s]+)/;
2021     $FOO::VERSION = '1.10';
2022     *FOO::VERSION = \'1.11';
2023     our $VERSION = 1.2.3;       # new for perl5.6.0 
2024
2025 but these will fail:
2026
2027     my $VERSION = '1.01';
2028     local $VERSION = '1.02';
2029     local $FOO::VERSION = '1.30';
2030
2031 (Putting C<my> or C<local> on the preceding line will work o.k.)
2032
2033 The file named in VERSION_FROM is not added as a dependency to
2034 Makefile. This is not really correct, but it would be a major pain
2035 during development to have to rewrite the Makefile for any smallish
2036 change in that file. If you want to make sure that the Makefile
2037 contains the correct VERSION macro after any change of the file, you
2038 would have to do something like
2039
2040     depend => { Makefile => '$(VERSION_FROM)' }
2041
2042 See attribute C<depend> below.
2043
2044 =item VERSION_SYM
2045
2046 A sanitized VERSION with . replaced by _.  For places where . has
2047 special meaning (some filesystems, RCS labels, etc...)
2048
2049 =item XS
2050
2051 Hashref of .xs files. MakeMaker will default this.  e.g.
2052
2053   {'name_of_file.xs' => 'name_of_file.c'}
2054
2055 The .c files will automatically be included in the list of files
2056 deleted by a make clean.
2057
2058 =item XSOPT
2059
2060 String of options to pass to xsubpp.  This might include C<-C++> or
2061 C<-extern>.  Do not include typemaps here; the TYPEMAP parameter exists for
2062 that purpose.
2063
2064 =item XSPROTOARG
2065
2066 May be set to an empty string, which is identical to C<-prototypes>, or
2067 C<-noprototypes>. See the xsubpp documentation for details. MakeMaker
2068 defaults to the empty string.
2069
2070 =item XS_VERSION
2071
2072 Your version number for the .xs file of this package.  This defaults
2073 to the value of the VERSION attribute.
2074
2075 =back
2076
2077 =head2 Additional lowercase attributes
2078
2079 can be used to pass parameters to the methods which implement that
2080 part of the Makefile.
2081
2082 =over 2
2083
2084 =item clean
2085
2086   {FILES => "*.xyz foo"}
2087
2088 =item depend
2089
2090   {ANY_TARGET => ANY_DEPENDECY, ...}
2091
2092 (ANY_TARGET must not be given a double-colon rule by MakeMaker.)
2093
2094 =item dist
2095
2096   {TARFLAGS => 'cvfF', COMPRESS => 'gzip', SUFFIX => '.gz',
2097   SHAR => 'shar -m', DIST_CP => 'ln', ZIP => '/bin/zip',
2098   ZIPFLAGS => '-rl', DIST_DEFAULT => 'private tardist' }
2099
2100 If you specify COMPRESS, then SUFFIX should also be altered, as it is
2101 needed to tell make the target file of the compression. Setting
2102 DIST_CP to ln can be useful, if you need to preserve the timestamps on
2103 your files. DIST_CP can take the values 'cp', which copies the file,
2104 'ln', which links the file, and 'best' which copies symbolic links and
2105 links the rest. Default is 'best'.
2106
2107 =item dynamic_lib
2108
2109   {ARMAYBE => 'ar', OTHERLDFLAGS => '...', INST_DYNAMIC_DEP => '...'}
2110
2111 =item linkext
2112
2113   {LINKTYPE => 'static', 'dynamic' or ''}
2114
2115 NB: Extensions that have nothing but *.pm files had to say
2116
2117   {LINKTYPE => ''}
2118
2119 with Pre-5.0 MakeMakers. Since version 5.00 of MakeMaker such a line
2120 can be deleted safely. MakeMaker recognizes when there's nothing to
2121 be linked.
2122
2123 =item macro
2124
2125   {ANY_MACRO => ANY_VALUE, ...}
2126
2127 =item realclean
2128
2129   {FILES => '$(INST_ARCHAUTODIR)/*.xyz'}
2130
2131 =item test
2132
2133   {TESTS => 't/*.t'}
2134
2135 =item tool_autosplit
2136
2137   {MAXLEN => 8}
2138
2139 =back
2140
2141 =head2 Overriding MakeMaker Methods
2142
2143 If you cannot achieve the desired Makefile behaviour by specifying
2144 attributes you may define private subroutines in the Makefile.PL.
2145 Each subroutine returns the text it wishes to have written to
2146 the Makefile. To override a section of the Makefile you can
2147 either say:
2148
2149         sub MY::c_o { "new literal text" }
2150
2151 or you can edit the default by saying something like:
2152
2153         package MY; # so that "SUPER" works right
2154         sub c_o {
2155             my $inherited = shift->SUPER::c_o(@_);
2156             $inherited =~ s/old text/new text/;
2157             $inherited;
2158         }
2159
2160 If you are running experiments with embedding perl as a library into
2161 other applications, you might find MakeMaker is not sufficient. You'd
2162 better have a look at ExtUtils::Embed which is a collection of utilities
2163 for embedding.
2164
2165 If you still need a different solution, try to develop another
2166 subroutine that fits your needs and submit the diffs to
2167 F<makemaker@perl.org>
2168
2169 For a complete description of all MakeMaker methods see
2170 L<ExtUtils::MM_Unix>.
2171
2172 Here is a simple example of how to add a new target to the generated
2173 Makefile:
2174
2175     sub MY::postamble {
2176         return <<'MAKE_FRAG';
2177     $(MYEXTLIB): sdbm/Makefile
2178             cd sdbm && $(MAKE) all
2179
2180     MAKE_FRAG
2181     }
2182
2183 =head2 The End Of Cargo Cult Programming
2184
2185 WriteMakefile() now does some basic sanity checks on its parameters to
2186 protect against typos and malformatted values.  This means some things
2187 which happened to work in the past will now throw warnings and
2188 possibly produce internal errors.
2189
2190 Some of the most common mistakes:
2191
2192 =over 2
2193
2194 =item C<<MAN3PODS => ' '>>
2195
2196 This is commonly used to supress the creation of man pages.  MAN3PODS
2197 takes a hash ref not a string, but the above worked by accident in old
2198 versions of MakeMaker.
2199
2200 The correct code is C<<MAN3PODS => { }>>.
2201
2202 =back
2203
2204
2205 =head2 Hintsfile support
2206
2207 MakeMaker.pm uses the architecture specific information from
2208 Config.pm. In addition it evaluates architecture specific hints files
2209 in a C<hints/> directory. The hints files are expected to be named
2210 like their counterparts in C<PERL_SRC/hints>, but with an C<.pl> file
2211 name extension (eg. C<next_3_2.pl>). They are simply C<eval>ed by
2212 MakeMaker within the WriteMakefile() subroutine, and can be used to
2213 execute commands as well as to include special variables. The rules
2214 which hintsfile is chosen are the same as in Configure.
2215
2216 The hintsfile is eval()ed immediately after the arguments given to
2217 WriteMakefile are stuffed into a hash reference $self but before this
2218 reference becomes blessed. So if you want to do the equivalent to
2219 override or create an attribute you would say something like
2220
2221     $self->{LIBS} = ['-ldbm -lucb -lc'];
2222
2223 =head2 Distribution Support
2224
2225 For authors of extensions MakeMaker provides several Makefile
2226 targets. Most of the support comes from the ExtUtils::Manifest module,
2227 where additional documentation can be found.
2228
2229 =over 4
2230
2231 =item    make distcheck
2232
2233 reports which files are below the build directory but not in the
2234 MANIFEST file and vice versa. (See ExtUtils::Manifest::fullcheck() for
2235 details)
2236
2237 =item    make skipcheck
2238
2239 reports which files are skipped due to the entries in the
2240 C<MANIFEST.SKIP> file (See ExtUtils::Manifest::skipcheck() for
2241 details)
2242
2243 =item    make distclean
2244
2245 does a realclean first and then the distcheck. Note that this is not
2246 needed to build a new distribution as long as you are sure that the
2247 MANIFEST file is ok.
2248
2249 =item    make manifest
2250
2251 rewrites the MANIFEST file, adding all remaining files found (See
2252 ExtUtils::Manifest::mkmanifest() for details)
2253
2254 =item    make distdir
2255
2256 Copies all the files that are in the MANIFEST file to a newly created
2257 directory with the name C<$(DISTNAME)-$(VERSION)>. If that directory
2258 exists, it will be removed first.
2259
2260 =item   make disttest
2261
2262 Makes a distdir first, and runs a C<perl Makefile.PL>, a make, and
2263 a make test in that directory.
2264
2265 =item    make tardist
2266
2267 First does a distdir. Then a command $(PREOP) which defaults to a null
2268 command, followed by $(TOUNIX), which defaults to a null command under
2269 UNIX, and will convert files in distribution directory to UNIX format
2270 otherwise. Next it runs C<tar> on that directory into a tarfile and
2271 deletes the directory. Finishes with a command $(POSTOP) which
2272 defaults to a null command.
2273
2274 =item    make dist
2275
2276 Defaults to $(DIST_DEFAULT) which in turn defaults to tardist.
2277
2278 =item    make uutardist
2279
2280 Runs a tardist first and uuencodes the tarfile.
2281
2282 =item    make shdist
2283
2284 First does a distdir. Then a command $(PREOP) which defaults to a null
2285 command. Next it runs C<shar> on that directory into a sharfile and
2286 deletes the intermediate directory again. Finishes with a command
2287 $(POSTOP) which defaults to a null command.  Note: For shdist to work
2288 properly a C<shar> program that can handle directories is mandatory.
2289
2290 =item    make zipdist
2291
2292 First does a distdir. Then a command $(PREOP) which defaults to a null
2293 command. Runs C<$(ZIP) $(ZIPFLAGS)> on that directory into a
2294 zipfile. Then deletes that directory. Finishes with a command
2295 $(POSTOP) which defaults to a null command.
2296
2297 =item    make ci
2298
2299 Does a $(CI) and a $(RCS_LABEL) on all files in the MANIFEST file.
2300
2301 =back
2302
2303 Customization of the dist targets can be done by specifying a hash
2304 reference to the dist attribute of the WriteMakefile call. The
2305 following parameters are recognized:
2306
2307     CI           ('ci -u')
2308     COMPRESS     ('gzip --best')
2309     POSTOP       ('@ :')
2310     PREOP        ('@ :')
2311     TO_UNIX      (depends on the system)
2312     RCS_LABEL    ('rcs -q -Nv$(VERSION_SYM):')
2313     SHAR         ('shar')
2314     SUFFIX       ('.gz')
2315     TAR          ('tar')
2316     TARFLAGS     ('cvf')
2317     ZIP          ('zip')
2318     ZIPFLAGS     ('-r')
2319
2320 An example:
2321
2322     WriteMakefile( 'dist' => { COMPRESS=>"bzip2", SUFFIX=>".bz2" })
2323
2324 =head2 Disabling an extension
2325
2326 If some events detected in F<Makefile.PL> imply that there is no way
2327 to create the Module, but this is a normal state of things, then you
2328 can create a F<Makefile> which does nothing, but succeeds on all the
2329 "usual" build targets.  To do so, use
2330
2331    ExtUtils::MakeMaker::WriteEmptyMakefile();
2332
2333 instead of WriteMakefile().
2334
2335 This may be useful if other modules expect this module to be I<built>
2336 OK, as opposed to I<work> OK (say, this system-dependent module builds
2337 in a subdirectory of some other distribution, or is listed as a
2338 dependency in a CPAN::Bundle, but the functionality is supported by
2339 different means on the current architecture).
2340
2341 =head2 Other Handy Functions
2342
2343 =over 4
2344
2345 =item prompt
2346
2347     my $value = prompt($message);
2348     my $value = prompt($message, $default);
2349
2350 The C<prompt()> function provides an easy way to request user input
2351 used to write a makefile.  It displays the $message as a prompt for
2352 input.  If a $default is provided it will be used as a default.  The
2353 function returns the $value selected by the user.
2354
2355 If C<prompt()> detects that it is not running interactively and there
2356 is nothing on STDIN or if the PERL_MM_USE_DEFAULT environment variable
2357 is set to true, the $default will be used without prompting.  This
2358 prevents automated processes from blocking on user input. 
2359
2360 If no $default is provided an empty string will be used instead.
2361
2362 =back
2363
2364
2365 =head1 ENVIRONMENT
2366
2367 =over 4
2368
2369 =item PERL_MM_OPT
2370
2371 Command line options used by C<MakeMaker-E<gt>new()>, and thus by
2372 C<WriteMakefile()>.  The string is split on whitespace, and the result
2373 is processed before any actual command line arguments are processed.
2374
2375 =item PERL_MM_USE_DEFAULT
2376
2377 If set to a true value then MakeMaker's prompt function will
2378 always return the default without waiting for user input.
2379
2380 =back
2381
2382 =head1 SEE ALSO
2383
2384 ExtUtils::MM_Unix, ExtUtils::Manifest ExtUtils::Install,
2385 ExtUtils::Embed
2386
2387 =head1 AUTHORS
2388
2389 Andy Dougherty <F<doughera@lafayette.edu>>, Andreas KE<ouml>nig
2390 <F<andreas.koenig@mind.de>>, Tim Bunce <F<timb@cpan.org>>.  VMS
2391 support by Charles Bailey <F<bailey@newman.upenn.edu>>.  OS/2 support
2392 by Ilya Zakharevich <F<ilya@math.ohio-state.edu>>.
2393
2394 Currently maintained by Michael G Schwern <F<schwern@pobox.com>>
2395
2396 Send patches and ideas to <F<makemaker@perl.org>>.
2397
2398 Send bug reports via http://rt.cpan.org/.  Please send your
2399 generated Makefile along with your report.
2400
2401 For more up-to-date information, see http://www.makemaker.org.
2402
2403 =head1 LICENSE
2404
2405 This program is free software; you can redistribute it and/or 
2406 modify it under the same terms as Perl itself.
2407
2408 See F<http://www.perl.com/perl/misc/Artistic.html>
2409
2410
2411 =cut