00bcb449cce91d5acdddfb4c75d782132c03cb26
[p5sagit/p5-mst-13.2.git] / lib / ExtUtils / MakeMaker.pm
1 BEGIN {require 5.002;} # MakeMaker 5.17 was the last MakeMaker that was compatible with perl5.001m
2
3 package ExtUtils::MakeMaker;
4
5 $VERSION = "5.44";
6 $Version_OK = "5.17";   # Makefiles older than $Version_OK will die
7                         # (Will be checked from MakeMaker version 4.13 onwards)
8 ($Revision = substr(q$Revision: 1.222 $, 10)) =~ s/\s+$//;
9
10
11
12 require Exporter;
13 use Config;
14 use Carp ();
15 #use FileHandle ();
16
17 use vars qw(
18
19             @ISA @EXPORT @EXPORT_OK $AUTOLOAD
20             $ISA_TTY $Is_Mac $Is_OS2 $Is_VMS $Revision
21             $VERSION $Verbose $Version_OK %Config %Keep_after_flush
22             %MM_Sections %Prepend_dot_dot %Recognized_Att_Keys
23             @Get_from_Config @MM_Sections @Overridable @Parent
24
25            );
26 # use strict;
27
28 # &DynaLoader::mod2fname should be available to miniperl, thus 
29 # should be a pseudo-builtin (cmp. os2.c).
30 #eval {require DynaLoader;};
31
32 #
33 # Set up the inheritance before we pull in the MM_* packages, because they
34 # import variables and functions from here
35 #
36 @ISA = qw(Exporter);
37 @EXPORT = qw(&WriteMakefile &writeMakefile $Verbose &prompt);
38 @EXPORT_OK = qw($VERSION &Version_check &neatvalue &mkbootstrap &mksymlists);
39
40 #
41 # Dummy package MM inherits actual methods from OS-specific
42 # default packages.  We use this intermediate package so
43 # MY::XYZ->func() can call MM->func() and get the proper
44 # default routine without having to know under what OS
45 # it's running.
46 #
47 @MM::ISA = qw[ExtUtils::MM_Unix ExtUtils::Liblist ExtUtils::MakeMaker];
48
49 #
50 # Setup dummy package:
51 # MY exists for overriding methods to be defined within
52 #
53 {
54     package MY;
55     @MY::ISA = qw(MM);
56 ###    sub AUTOLOAD { use Devel::Symdump; print Devel::Symdump->rnew->as_string; Carp::confess "hey why? $AUTOLOAD" }
57     package MM;
58     sub DESTROY {}
59 }
60
61 # "predeclare the package: we only load it via AUTOLOAD
62 # but we have already mentioned it in @ISA
63 package ExtUtils::Liblist;
64
65 package ExtUtils::MakeMaker;
66 #
67 # Now we can pull in the friends
68 #
69 $Is_VMS   = $^O eq 'VMS';
70 $Is_OS2   = $^O eq 'os2';
71 $Is_Mac   = $^O eq 'MacOS';
72 $Is_Win32 = $^O eq 'MSWin32';
73 $Is_Cygwin= $^O =~ /cygwin/i;
74
75 require ExtUtils::MM_Unix;
76
77 if ($Is_VMS) {
78     require ExtUtils::MM_VMS;
79     require VMS::Filespec; # is a noop as long as we require it within MM_VMS
80 }
81 if ($Is_OS2) {
82     require ExtUtils::MM_OS2;
83 }
84 if ($Is_Mac) {
85     require ExtUtils::MM_Mac;
86 }
87 if ($Is_Win32) {
88     require ExtUtils::MM_Win32;
89 }
90 if ($Is_Cygwin) {
91     require ExtUtils::MM_Cygwin;
92 }
93
94 # The SelfLoader would bring a lot of overhead for MakeMaker, because
95 # we know for sure we will use most of the autoloaded functions once
96 # we have to use one of them. So we write our own loader
97
98 full_setup();
99
100 # The only subroutine we do not SelfLoad is Version_Check because it's
101 # called so often. Loading this minimum still requires 1.2 secs on my
102 # Indy :-(
103
104 # 3 years later we can say, Version_check takes 0.2 secs on my Linux
105 # and MakeMaker has become so stable that we could drop the use of
106 # Version_check altogether
107
108 sub Version_check {
109     my($checkversion) = @_;
110     die "Your Makefile was built with ExtUtils::MakeMaker v $checkversion.
111 Current Version is $ExtUtils::MakeMaker::VERSION. There have been considerable
112 changes in the meantime.
113 Please rerun 'perl Makefile.PL' to regenerate the Makefile.\n"
114     if $checkversion < $Version_OK;
115     printf STDOUT "%s %s %s %s.\n", "Makefile built with ExtUtils::MakeMaker v",
116     $checkversion, "Current Version is", $VERSION
117         unless $checkversion == $VERSION;
118 }
119
120 sub warnhandler {
121     $_[0] =~ /^Use of uninitialized value/ && return;
122     $_[0] =~ /used only once/ && return;
123     $_[0] =~ /^Subroutine\s+[\w:]+\s+redefined/ && return;
124     warn @_;
125 }
126
127 sub WriteMakefile {
128     Carp::croak "WriteMakefile: Need even number of args" if @_ % 2;
129     local $SIG{__WARN__} = \&warnhandler;
130
131     my %att = @_;
132     MM->new(\%att)->flush;
133 }
134
135 sub prompt ($;$) {
136     my($mess,$def)=@_;
137     $ISA_TTY = -t STDIN && (-t STDOUT || !(-f STDOUT || -c STDOUT)) ;   # Pipe?
138     Carp::confess("prompt function called without an argument") unless defined $mess;
139     my $dispdef = defined $def ? "[$def] " : " ";
140     $def = defined $def ? $def : "";
141     my $ans;
142     local $|=1;
143     print "$mess $dispdef";
144     if ($ISA_TTY) {
145         chomp($ans = <STDIN>);
146     } else {
147         print "$def\n";
148     }
149     return ($ans ne '') ? $ans : $def;
150 }
151
152 sub eval_in_subdirs {
153     my($self) = @_;
154     my($dir);
155     use Cwd 'cwd';
156     my $pwd = cwd();
157
158     foreach $dir (@{$self->{DIR}}){
159         my($abs) = $self->catdir($pwd,$dir);
160         $self->eval_in_x($abs);
161     }
162     chdir $pwd;
163 }
164
165 sub eval_in_x {
166     my($self,$dir) = @_;
167     package main;
168     chdir $dir or Carp::carp("Couldn't change to directory $dir: $!");
169 #    use FileHandle ();
170 #    my $fh = new FileHandle;
171 #    $fh->open("Makefile.PL") or Carp::carp("Couldn't open Makefile.PL in $dir");
172     local *FH;
173     open(FH,"Makefile.PL") or Carp::carp("Couldn't open Makefile.PL in $dir");
174 #    my $eval = join "", <$fh>;
175     my $eval = join "", <FH>;
176 #    $fh->close;
177     close FH;
178     eval $eval;
179     if ($@) {
180 #         if ($@ =~ /prerequisites/) {
181 #             die "MakeMaker WARNING: $@";
182 #         } else {
183 #             warn "WARNING from evaluation of $dir/Makefile.PL: $@";
184 #         }
185         warn "WARNING from evaluation of $dir/Makefile.PL: $@";
186     }
187 }
188
189 sub full_setup {
190     $Verbose ||= 0;
191     $^W=1;
192
193     # package name for the classes into which the first object will be blessed
194     $PACKNAME = "PACK000";
195
196     @Attrib_help = qw/
197
198     AUTHOR ABSTRACT ABSTRACT_FROM BINARY_LOCATION
199     C CAPI CCFLAGS CONFIG CONFIGURE DEFINE DIR DISTNAME DL_FUNCS DL_VARS
200     EXCLUDE_EXT EXE_FILES FIRST_MAKEFILE FULLPERL FUNCLIST H 
201     HTMLLIBPODS HTMLSCRIPTPOD IMPORTS
202     INC INCLUDE_EXT INSTALLARCHLIB INSTALLBIN INSTALLDIRS INSTALLHTMLPRIVLIBDIR
203     INSTALLHTMLSCRIPTDIR INSTALLHTMLSITELIBDIR INSTALLMAN1DIR
204     INSTALLMAN3DIR INSTALLPRIVLIB INSTALLSCRIPT INSTALLSITEARCH
205     INSTALLSITELIB INST_ARCHLIB INST_BIN INST_EXE INST_LIB
206     INST_HTMLLIBDIR INST_HTMLSCRIPTDIR
207     INST_MAN1DIR INST_MAN3DIR INST_SCRIPT LDFROM LIB LIBPERL_A LIBS
208     LINKTYPE MAKEAPERL MAKEFILE MAN1PODS MAN3PODS MAP_TARGET MYEXTLIB
209     PERL_MALLOC_OK
210     NAME NEEDS_LINKING NOECHO NORECURS NO_VC OBJECT OPTIMIZE PERL PERLMAINCC
211     PERL_ARCHLIB PERL_LIB PERL_SRC PERM_RW PERM_RWX
212     PL_FILES PM PMLIBDIRS POLLUTE PPM_INSTALL_EXEC PPM_INSTALL_SCRIPT PREFIX
213     PREREQ_PM SKIP TYPEMAPS VERSION VERSION_FROM XS XSOPT XSPROTOARG
214     XS_VERSION clean depend dist dynamic_lib linkext macro realclean
215     tool_autosplit
216         /;
217
218     # IMPORTS is used under OS/2 and Win32
219
220     # @Overridable is close to @MM_Sections but not identical.  The
221     # order is important. Many subroutines declare macros. These
222     # depend on each other. Let's try to collect the macros up front,
223     # then pasthru, then the rules.
224
225     # MM_Sections are the sections we have to call explicitly
226     # in Overridable we have subroutines that are used indirectly
227
228
229     @MM_Sections = 
230         qw(
231
232  post_initialize const_config constants tool_autosplit tool_xsubpp
233  tools_other dist macro depend cflags const_loadlibs const_cccmd
234  post_constants
235
236  pasthru
237
238  c_o xs_c xs_o top_targets linkext dlsyms dynamic dynamic_bs
239  dynamic_lib static static_lib htmlifypods manifypods processPL
240  installbin subdirs
241  clean realclean dist_basics dist_core dist_dir dist_test dist_ci
242  install force perldepend makefile staticmake test ppd
243
244           ); # loses section ordering
245
246     @Overridable = @MM_Sections;
247     push @Overridable, qw[
248
249  dir_target libscan makeaperl needs_linking perm_rw perm_rwx
250  subdir_x test_via_harness test_via_script
251
252                          ];
253
254     push @MM_Sections, qw[
255
256  pm_to_blib selfdocument
257
258                          ];
259
260     # Postamble needs to be the last that was always the case
261     push @MM_Sections, "postamble";
262     push @Overridable, "postamble";
263
264     # All sections are valid keys.
265     @Recognized_Att_Keys{@MM_Sections} = (1) x @MM_Sections;
266
267     # we will use all these variables in the Makefile
268     @Get_from_Config = 
269         qw(
270            ar cc cccdlflags ccdlflags dlext dlsrc ld lddlflags ldflags libc
271            lib_ext obj_ext osname osvers ranlib sitelibexp sitearchexp so exe_ext
272           );
273
274     my $item;
275     foreach $item (@Attrib_help){
276         $Recognized_Att_Keys{$item} = 1;
277     }
278     foreach $item (@Get_from_Config) {
279         $Recognized_Att_Keys{uc $item} = $Config{$item};
280         print "Attribute '\U$item\E' => '$Config{$item}'\n"
281             if ($Verbose >= 2);
282     }
283
284     #
285     # When we eval a Makefile.PL in a subdirectory, that one will ask
286     # us (the parent) for the values and will prepend "..", so that
287     # all files to be installed end up below OUR ./blib
288     #
289     %Prepend_dot_dot = 
290         qw(
291
292            INST_BIN 1 INST_EXE 1 INST_LIB 1 INST_ARCHLIB 1 INST_SCRIPT 1
293            MAP_TARGET 1 INST_HTMLLIBDIR 1 INST_HTMLSCRIPTDIR 1 
294            INST_MAN1DIR 1 INST_MAN3DIR 1 PERL_SRC 1 PERL 1 FULLPERL 1
295
296           );
297
298     my @keep = qw/
299         NEEDS_LINKING HAS_LINK_CODE
300         /;
301     @Keep_after_flush{@keep} = (1) x @keep;
302 }
303
304 sub writeMakefile {
305     die <<END;
306
307 The extension you are trying to build apparently is rather old and
308 most probably outdated. We detect that from the fact, that a
309 subroutine "writeMakefile" is called, and this subroutine is not
310 supported anymore since about October 1994.
311
312 Please contact the author or look into CPAN (details about CPAN can be
313 found in the FAQ and at http:/www.perl.com) for a more recent version
314 of the extension. If you're really desperate, you can try to change
315 the subroutine name from writeMakefile to WriteMakefile and rerun
316 'perl Makefile.PL', but you're most probably left alone, when you do
317 so.
318
319 The MakeMaker team
320
321 END
322 }
323
324 sub ExtUtils::MakeMaker::new {
325     my($class,$self) = @_;
326     my($key);
327
328     print STDOUT "MakeMaker (v$VERSION)\n" if $Verbose;
329     if (-f "MANIFEST" && ! -f "Makefile"){
330         check_manifest();
331     }
332
333     $self = {} unless (defined $self);
334
335     check_hints($self);
336
337     my(%initial_att) = %$self; # record initial attributes
338
339     my($prereq);
340     foreach $prereq (sort keys %{$self->{PREREQ_PM}}) {
341         my $eval = "require $prereq";
342         eval $eval;
343
344         if ($@) {
345             warn "Warning: prerequisite $prereq failed to load: $@";
346         }
347         elsif ($prereq->VERSION < $self->{PREREQ_PM}->{$prereq} ){
348             warn "Warning: prerequisite $prereq $self->{PREREQ_PM}->{$prereq} not found";
349 # Why is/was this 'delete' here?  We need PREREQ_PM later to make PPDs.
350 #       } else {
351 #           delete $self->{PREREQ_PM}{$prereq};
352         }
353     }
354 #    if (@unsatisfied){
355 #         unless (defined $ExtUtils::MakeMaker::useCPAN) {
356 #             print qq{MakeMaker WARNING: prerequisites not found (@unsatisfied)
357 # Please install these modules first and rerun 'perl Makefile.PL'.\n};
358 #             if ($ExtUtils::MakeMaker::hasCPAN) {
359 #                 $ExtUtils::MakeMaker::useCPAN = prompt(qq{Should I try to use the CPAN module to fetch them for you?},"yes");
360 #             } else {
361 #                 print qq{Hint: You may want to install the CPAN module to autofetch the needed modules\n};
362 #                 $ExtUtils::MakeMaker::useCPAN=0;
363 #             }
364 #         }
365 #         if ($ExtUtils::MakeMaker::useCPAN) {
366 #             require CPAN;
367 #             CPAN->import(@unsatisfied);
368 #         } else {
369 #             die qq{prerequisites not found (@unsatisfied)};
370 #         }
371 #       warn qq{WARNING: prerequisites not found (@unsatisfied)};
372 #    }
373
374     if (defined $self->{CONFIGURE}) {
375         if (ref $self->{CONFIGURE} eq 'CODE') {
376             $self = { %$self, %{&{$self->{CONFIGURE}}}};
377         } else {
378             Carp::croak "Attribute 'CONFIGURE' to WriteMakefile() not a code reference\n";
379         }
380     }
381
382     # This is for old Makefiles written pre 5.00, will go away
383     if ( Carp::longmess("") =~ /runsubdirpl/s ){
384         Carp::carp("WARNING: Please rerun 'perl Makefile.PL' to regenerate your Makefiles\n");
385     }
386
387     my $newclass = ++$PACKNAME;
388     local @Parent = @Parent;    # Protect against non-local exits
389     {
390 #       no strict;
391         print "Blessing Object into class [$newclass]\n" if $Verbose>=2;
392         mv_all_methods("MY",$newclass);
393         bless $self, $newclass;
394         push @Parent, $self;
395         @{"$newclass\:\:ISA"} = 'MM';
396     }
397
398     if (defined $Parent[-2]){
399         $self->{PARENT} = $Parent[-2];
400         my $key;
401         for $key (keys %Prepend_dot_dot) {
402             next unless defined $self->{PARENT}{$key};
403             $self->{$key} = $self->{PARENT}{$key};
404                 # PERL and FULLPERL may be command verbs instead of full
405                 # file specifications under VMS.  If so, don't turn them
406                 # into a filespec.
407             $self->{$key} = $self->catdir("..",$self->{$key})
408                 unless $self->file_name_is_absolute($self->{$key})
409                 || ($^O eq 'VMS' and ($key =~ /PERL$/ && $self->{$key} =~ /^[\w\-\$]+$/));
410         }
411         if ($self->{PARENT}) {
412             $self->{PARENT}->{CHILDREN}->{$newclass} = $self;
413             foreach my $opt (qw(CAPI POLLUTE)) {
414                 if (exists $self->{PARENT}->{$opt}
415                     and not exists $self->{$opt})
416                     {
417                         # inherit, but only if already unspecified
418                         $self->{$opt} = $self->{PARENT}->{$opt};
419                     }
420             }
421         }
422     } else {
423         parse_args($self,split(' ', $ENV{PERL_MM_OPT} || ''),@ARGV);
424     }
425
426     $self->{NAME} ||= $self->guess_name;
427
428     ($self->{NAME_SYM} = $self->{NAME}) =~ s/\W+/_/g;
429
430     $self->init_main();
431
432     if (! $self->{PERL_SRC} ) {
433         my($pthinks) = $self->canonpath($INC{'Config.pm'});
434         my($cthinks) = $self->catfile($Config{'archlibexp'},'Config.pm');
435         $pthinks = VMS::Filespec::vmsify($pthinks) if $Is_VMS;
436         if ($pthinks ne $cthinks &&
437             !($Is_Win32 and lc($pthinks) eq lc($cthinks))) {
438             print "Have $pthinks expected $cthinks\n";
439             if ($Is_Win32) {
440                 $pthinks =~ s![/\\]Config\.pm$!!i; $pthinks =~ s!.*[/\\]!!;
441             }
442             else {
443                 $pthinks =~ s!/Config\.pm$!!; $pthinks =~ s!.*/!!;
444             }
445             print STDOUT <<END unless $self->{UNINSTALLED_PERL};
446 Your perl and your Config.pm seem to have different ideas about the architecture
447 they are running on.
448 Perl thinks: [$pthinks]
449 Config says: [$Config{archname}]
450 This may or may not cause problems. Please check your installation of perl if you
451 have problems building this extension.
452 END
453         }
454     }
455
456     $self->init_dirscan();
457     $self->init_others();
458     my($argv) = neatvalue(\@ARGV);
459     $argv =~ s/^\[/(/;
460     $argv =~ s/\]$/)/;
461
462     push @{$self->{RESULT}}, <<END;
463 # This Makefile is for the $self->{NAME} extension to perl.
464 #
465 # It was generated automatically by MakeMaker version
466 # $VERSION (Revision: $Revision) from the contents of
467 # Makefile.PL. Don't edit this file, edit Makefile.PL instead.
468 #
469 #       ANY CHANGES MADE HERE WILL BE LOST!
470 #
471 #   MakeMaker ARGV: $argv
472 #
473 #   MakeMaker Parameters:
474 END
475
476     foreach $key (sort keys %initial_att){
477         my($v) = neatvalue($initial_att{$key});
478         $v =~ s/(CODE|HASH|ARRAY|SCALAR)\([\dxa-f]+\)/$1\(...\)/;
479         $v =~ tr/\n/ /s;
480         push @{$self->{RESULT}}, "#     $key => $v";
481     }
482
483     # turn the SKIP array into a SKIPHASH hash
484     my (%skip,$skip);
485     for $skip (@{$self->{SKIP} || []}) {
486         $self->{SKIPHASH}{$skip} = 1;
487     }
488     delete $self->{SKIP}; # free memory
489
490     if ($self->{PARENT}) {
491         for (qw/install dist dist_basics dist_core dist_dir dist_test dist_ci/) {
492             $self->{SKIPHASH}{$_} = 1;
493         }
494     }
495
496     # We run all the subdirectories now. They don't have much to query
497     # from the parent, but the parent has to query them: if they need linking!
498     unless ($self->{NORECURS}) {
499         $self->eval_in_subdirs if @{$self->{DIR}};
500     }
501
502     my $section;
503     foreach $section ( @MM_Sections ){
504         print "Processing Makefile '$section' section\n" if ($Verbose >= 2);
505         my($skipit) = $self->skipcheck($section);
506         if ($skipit){
507             push @{$self->{RESULT}}, "\n# --- MakeMaker $section section $skipit.";
508         } else {
509             my(%a) = %{$self->{$section} || {}};
510             push @{$self->{RESULT}}, "\n# --- MakeMaker $section section:";
511             push @{$self->{RESULT}}, "# " . join ", ", %a if $Verbose && %a;
512             push @{$self->{RESULT}}, $self->nicetext($self->$section( %a ));
513         }
514     }
515
516     push @{$self->{RESULT}}, "\n# End.";
517
518     $self;
519 }
520
521 sub WriteEmptyMakefile {
522   if (-f 'Makefile.old') {
523     chmod 0666, 'Makefile.old';
524     unlink 'Makefile.old' or warn "unlink Makefile.old: $!";
525   }
526   rename 'Makefile', 'Makefile.old' or warn "rename Makefile Makefile.old: $!"
527     if -f 'Makefile';
528   open MF, '> Makefile' or die "open Makefile for write: $!";
529   print MF <<'EOP';
530 all:
531
532 clean:
533
534 install:
535
536 makemakerdflt:
537
538 test:
539
540 EOP
541   close MF or die "close Makefile for write: $!";
542 }
543
544 sub check_manifest {
545     print STDOUT "Checking if your kit is complete...\n";
546     require ExtUtils::Manifest;
547     $ExtUtils::Manifest::Quiet=$ExtUtils::Manifest::Quiet=1; #avoid warning
548     my(@missed)=ExtUtils::Manifest::manicheck();
549     if (@missed){
550         print STDOUT "Warning: the following files are missing in your kit:\n";
551         print "\t", join "\n\t", @missed;
552         print STDOUT "\n";
553         print STDOUT "Please inform the author.\n";
554     } else {
555         print STDOUT "Looks good\n";
556     }
557 }
558
559 sub parse_args{
560     my($self, @args) = @_;
561     foreach (@args){
562         unless (m/(.*?)=(.*)/){
563             help(),exit 1 if m/^help$/;
564             ++$Verbose if m/^verb/;
565             next;
566         }
567         my($name, $value) = ($1, $2);
568         if ($value =~ m/^~(\w+)?/){ # tilde with optional username
569             $value =~ s [^~(\w*)]
570                 [$1 ?
571                  ((getpwnam($1))[7] || "~$1") :
572                  (getpwuid($>))[7]
573                  ]ex;
574         }
575         $self->{uc($name)} = $value;
576     }
577
578     # catch old-style 'potential_libs' and inform user how to 'upgrade'
579     if (defined $self->{potential_libs}){
580         my($msg)="'potential_libs' => '$self->{potential_libs}' should be";
581         if ($self->{potential_libs}){
582             print STDOUT "$msg changed to:\n\t'LIBS' => ['$self->{potential_libs}']\n";
583         } else {
584             print STDOUT "$msg deleted.\n";
585         }
586         $self->{LIBS} = [$self->{potential_libs}];
587         delete $self->{potential_libs};
588     }
589     # catch old-style 'ARMAYBE' and inform user how to 'upgrade'
590     if (defined $self->{ARMAYBE}){
591         my($armaybe) = $self->{ARMAYBE};
592         print STDOUT "ARMAYBE => '$armaybe' should be changed to:\n",
593                         "\t'dynamic_lib' => {ARMAYBE => '$armaybe'}\n";
594         my(%dl) = %{$self->{dynamic_lib} || {}};
595         $self->{dynamic_lib} = { %dl, ARMAYBE => $armaybe};
596         delete $self->{ARMAYBE};
597     }
598     if (defined $self->{LDTARGET}){
599         print STDOUT "LDTARGET should be changed to LDFROM\n";
600         $self->{LDFROM} = $self->{LDTARGET};
601         delete $self->{LDTARGET};
602     }
603     # Turn a DIR argument on the command line into an array
604     if (defined $self->{DIR} && ref \$self->{DIR} eq 'SCALAR') {
605         # So they can choose from the command line, which extensions they want
606         # the grep enables them to have some colons too much in case they
607         # have to build a list with the shell
608         $self->{DIR} = [grep $_, split ":", $self->{DIR}];
609     }
610     # Turn a INCLUDE_EXT argument on the command line into an array
611     if (defined $self->{INCLUDE_EXT} && ref \$self->{INCLUDE_EXT} eq 'SCALAR') {
612         $self->{INCLUDE_EXT} = [grep $_, split '\s+', $self->{INCLUDE_EXT}];
613     }
614     # Turn a EXCLUDE_EXT argument on the command line into an array
615     if (defined $self->{EXCLUDE_EXT} && ref \$self->{EXCLUDE_EXT} eq 'SCALAR') {
616         $self->{EXCLUDE_EXT} = [grep $_, split '\s+', $self->{EXCLUDE_EXT}];
617     }
618     my $mmkey;
619     foreach $mmkey (sort keys %$self){
620         print STDOUT "  $mmkey => ", neatvalue($self->{$mmkey}), "\n" if $Verbose;
621         print STDOUT "'$mmkey' is not a known MakeMaker parameter name.\n"
622             unless exists $Recognized_Att_Keys{$mmkey};
623     }
624     $| = 1 if $Verbose;
625 }
626
627 sub check_hints {
628     my($self) = @_;
629     # We allow extension-specific hints files.
630
631     return unless -d "hints";
632
633     # First we look for the best hintsfile we have
634     my(@goodhints);
635     my($hint)="${^O}_$Config{osvers}";
636     $hint =~ s/\./_/g;
637     $hint =~ s/_$//;
638     return unless $hint;
639
640     # Also try without trailing minor version numbers.
641     while (1) {
642         last if -f "hints/$hint.pl";      # found
643     } continue {
644         last unless $hint =~ s/_[^_]*$//; # nothing to cut off
645     }
646     return unless -f "hints/$hint.pl";    # really there
647
648     # execute the hintsfile:
649 #    use FileHandle ();
650 #    my $fh = new FileHandle;
651 #    $fh->open("hints/$hint.pl");
652     local *FH;
653     open(FH,"hints/$hint.pl");
654 #    @goodhints = <$fh>;
655     @goodhints = <FH>;
656 #    $fh->close;
657     close FH;
658     print STDOUT "Processing hints file hints/$hint.pl\n";
659     eval join('',@goodhints);
660     print STDOUT $@ if $@;
661 }
662
663 sub mv_all_methods {
664     my($from,$to) = @_;
665     my($method);
666     my($symtab) = \%{"${from}::"};
667 #    no strict;
668
669     # Here you see the *current* list of methods that are overridable
670     # from Makefile.PL via MY:: subroutines. As of VERSION 5.07 I'm
671     # still trying to reduce the list to some reasonable minimum --
672     # because I want to make it easier for the user. A.K.
673
674     foreach $method (@Overridable) {
675
676         # We cannot say "next" here. Nick might call MY->makeaperl
677         # which isn't defined right now
678
679         # Above statement was written at 4.23 time when Tk-b8 was
680         # around. As Tk-b9 only builds with 5.002something and MM 5 is
681         # standard, we try to enable the next line again. It was
682         # commented out until MM 5.23
683
684         next unless defined &{"${from}::$method"};
685
686         *{"${to}::$method"} = \&{"${from}::$method"};
687
688         # delete would do, if we were sure, nobody ever called
689         # MY->makeaperl directly
690         
691         # delete $symtab->{$method};
692         
693         # If we delete a method, then it will be undefined and cannot
694         # be called.  But as long as we have Makefile.PLs that rely on
695         # %MY:: being intact, we have to fill the hole with an
696         # inheriting method:
697
698         eval "package MY; sub $method { shift->SUPER::$method(\@_); }";
699     }
700
701     # We have to clean out %INC also, because the current directory is
702     # changed frequently and Graham Barr prefers to get his version
703     # out of a History.pl file which is "required" so woudn't get
704     # loaded again in another extension requiring a History.pl
705
706     # With perl5.002_01 the deletion of entries in %INC caused Tk-b11
707     # to core dump in the middle of a require statement. The required
708     # file was Tk/MMutil.pm.  The consequence is, we have to be
709     # extremely careful when we try to give perl a reason to reload a
710     # library with same name.  The workaround prefers to drop nothing
711     # from %INC and teach the writers not to use such libraries.
712
713 #    my $inc;
714 #    foreach $inc (keys %INC) {
715 #       #warn "***$inc*** deleted";
716 #       delete $INC{$inc};
717 #    }
718 }
719
720 sub skipcheck {
721     my($self) = shift;
722     my($section) = @_;
723     if ($section eq 'dynamic') {
724         print STDOUT "Warning (non-fatal): Target 'dynamic' depends on targets ",
725         "in skipped section 'dynamic_bs'\n"
726             if $self->{SKIPHASH}{dynamic_bs} && $Verbose;
727         print STDOUT "Warning (non-fatal): Target 'dynamic' depends on targets ",
728         "in skipped section 'dynamic_lib'\n"
729             if $self->{SKIPHASH}{dynamic_lib} && $Verbose;
730     }
731     if ($section eq 'dynamic_lib') {
732         print STDOUT "Warning (non-fatal): Target '\$(INST_DYNAMIC)' depends on ",
733         "targets in skipped section 'dynamic_bs'\n"
734             if $self->{SKIPHASH}{dynamic_bs} && $Verbose;
735     }
736     if ($section eq 'static') {
737         print STDOUT "Warning (non-fatal): Target 'static' depends on targets ",
738         "in skipped section 'static_lib'\n"
739             if $self->{SKIPHASH}{static_lib} && $Verbose;
740     }
741     return 'skipped' if $self->{SKIPHASH}{$section};
742     return '';
743 }
744
745 sub flush {
746     my $self = shift;
747     my($chunk);
748 #    use FileHandle ();
749 #    my $fh = new FileHandle;
750     local *FH;
751     print STDOUT "Writing $self->{MAKEFILE} for $self->{NAME}\n";
752
753     unlink($self->{MAKEFILE}, "MakeMaker.tmp", $Is_VMS ? 'Descrip.MMS' : '');
754 #    $fh->open(">MakeMaker.tmp") or die "Unable to open MakeMaker.tmp: $!";
755     open(FH,">MakeMaker.tmp") or die "Unable to open MakeMaker.tmp: $!";
756
757     for $chunk (@{$self->{RESULT}}) {
758 #       print $fh "$chunk\n";
759         print FH "$chunk\n";
760     }
761
762 #    $fh->close;
763     close FH;
764     my($finalname) = $self->{MAKEFILE};
765     rename("MakeMaker.tmp", $finalname);
766     chmod 0644, $finalname unless $Is_VMS;
767
768     if ($self->{PARENT}) {
769         foreach (keys %$self) { # safe memory
770             delete $self->{$_} unless $Keep_after_flush{$_};
771         }
772     }
773
774     system("$Config::Config{eunicefix} $finalname") unless $Config::Config{eunicefix} eq ":";
775 }
776
777 # The following mkbootstrap() is only for installations that are calling
778 # the pre-4.1 mkbootstrap() from their old Makefiles. This MakeMaker
779 # writes Makefiles, that use ExtUtils::Mkbootstrap directly.
780 sub mkbootstrap {
781     die <<END;
782 !!! Your Makefile has been built such a long time ago, !!!
783 !!! that is unlikely to work with current MakeMaker.   !!!
784 !!! Please rebuild your Makefile                       !!!
785 END
786 }
787
788 # Ditto for mksymlists() as of MakeMaker 5.17
789 sub mksymlists {
790     die <<END;
791 !!! Your Makefile has been built such a long time ago, !!!
792 !!! that is unlikely to work with current MakeMaker.   !!!
793 !!! Please rebuild your Makefile                       !!!
794 END
795 }
796
797 sub neatvalue {
798     my($v) = @_;
799     return "undef" unless defined $v;
800     my($t) = ref $v;
801     return "q[$v]" unless $t;
802     if ($t eq 'ARRAY') {
803         my(@m, $elem, @neat);
804         push @m, "[";
805         foreach $elem (@$v) {
806             push @neat, "q[$elem]";
807         }
808         push @m, join ", ", @neat;
809         push @m, "]";
810         return join "", @m;
811     }
812     return "$v" unless $t eq 'HASH';
813     my(@m, $key, $val);
814     while (($key,$val) = each %$v){
815         last unless defined $key; # cautious programming in case (undef,undef) is true
816         push(@m,"$key=>".neatvalue($val)) ;
817     }
818     return "{ ".join(', ',@m)." }";
819 }
820
821 sub selfdocument {
822     my($self) = @_;
823     my(@m);
824     if ($Verbose){
825         push @m, "\n# Full list of MakeMaker attribute values:";
826         foreach $key (sort keys %$self){
827             next if $key eq 'RESULT' || $key =~ /^[A-Z][a-z]/;
828             my($v) = neatvalue($self->{$key});
829             $v =~ s/(CODE|HASH|ARRAY|SCALAR)\([\dxa-f]+\)/$1\(...\)/;
830             $v =~ tr/\n/ /s;
831             push @m, "# $key => $v";
832         }
833     }
834     join "\n", @m;
835 }
836
837 package ExtUtils::MakeMaker;
838 1;
839
840 __END__
841
842 =head1 NAME
843
844 ExtUtils::MakeMaker - create an extension Makefile
845
846 =head1 SYNOPSIS
847
848 C<use ExtUtils::MakeMaker;>
849
850 C<WriteMakefile( ATTRIBUTE =E<gt> VALUE [, ...] );>
851
852 which is really
853
854 C<MM-E<gt>new(\%att)-E<gt>flush;>
855
856 =head1 DESCRIPTION
857
858 This utility is designed to write a Makefile for an extension module
859 from a Makefile.PL. It is based on the Makefile.SH model provided by
860 Andy Dougherty and the perl5-porters.
861
862 It splits the task of generating the Makefile into several subroutines
863 that can be individually overridden.  Each subroutine returns the text
864 it wishes to have written to the Makefile.
865
866 MakeMaker is object oriented. Each directory below the current
867 directory that contains a Makefile.PL. Is treated as a separate
868 object. This makes it possible to write an unlimited number of
869 Makefiles with a single invocation of WriteMakefile().
870
871 =head2 How To Write A Makefile.PL
872
873 The short answer is: Don't.
874
875         Always begin with h2xs.
876         Always begin with h2xs!
877         ALWAYS BEGIN WITH H2XS!
878
879 even if you're not building around a header file, and even if you
880 don't have an XS component.
881
882 Run h2xs(1) before you start thinking about writing a module. For so
883 called pm-only modules that consist of C<*.pm> files only, h2xs has
884 the C<-X> switch. This will generate dummy files of all kinds that are
885 useful for the module developer.
886
887 The medium answer is:
888
889     use ExtUtils::MakeMaker;
890     WriteMakefile( NAME => "Foo::Bar" );
891
892 The long answer is the rest of the manpage :-)
893
894 =head2 Default Makefile Behaviour
895
896 The generated Makefile enables the user of the extension to invoke
897
898   perl Makefile.PL # optionally "perl Makefile.PL verbose"
899   make
900   make test        # optionally set TEST_VERBOSE=1
901   make install     # See below
902
903 The Makefile to be produced may be altered by adding arguments of the
904 form C<KEY=VALUE>. E.g.
905
906   perl Makefile.PL PREFIX=/tmp/myperl5
907
908 Other interesting targets in the generated Makefile are
909
910   make config     # to check if the Makefile is up-to-date
911   make clean      # delete local temp files (Makefile gets renamed)
912   make realclean  # delete derived files (including ./blib)
913   make ci         # check in all the files in the MANIFEST file
914   make dist       # see below the Distribution Support section
915
916 =head2 make test
917
918 MakeMaker checks for the existence of a file named F<test.pl> in the
919 current directory and if it exists it adds commands to the test target
920 of the generated Makefile that will execute the script with the proper
921 set of perl C<-I> options.
922
923 MakeMaker also checks for any files matching glob("t/*.t"). It will
924 add commands to the test target of the generated Makefile that execute
925 all matching files via the L<Test::Harness> module with the C<-I>
926 switches set correctly.
927
928 =head2 make testdb
929
930 A useful variation of the above is the target C<testdb>. It runs the
931 test under the Perl debugger (see L<perldebug>). If the file
932 F<test.pl> exists in the current directory, it is used for the test.
933
934 If you want to debug some other testfile, set C<TEST_FILE> variable
935 thusly:
936
937   make testdb TEST_FILE=t/mytest.t
938
939 By default the debugger is called using C<-d> option to perl. If you
940 want to specify some other option, set C<TESTDB_SW> variable:
941
942   make testdb TESTDB_SW=-Dx
943
944 =head2 make install
945
946 make alone puts all relevant files into directories that are named by
947 the macros INST_LIB, INST_ARCHLIB, INST_SCRIPT, INST_HTMLLIBDIR,
948 INST_HTMLSCRIPTDIR, INST_MAN1DIR, and INST_MAN3DIR.  All these default
949 to something below ./blib if you are I<not> building below the perl
950 source directory. If you I<are> building below the perl source,
951 INST_LIB and INST_ARCHLIB default to ../../lib, and INST_SCRIPT is not
952 defined.
953
954 The I<install> target of the generated Makefile copies the files found
955 below each of the INST_* directories to their INSTALL*
956 counterparts. Which counterparts are chosen depends on the setting of
957 INSTALLDIRS according to the following table:
958
959                                  INSTALLDIRS set to
960                               perl                site
961
962     INST_ARCHLIB        INSTALLARCHLIB        INSTALLSITEARCH
963     INST_LIB            INSTALLPRIVLIB        INSTALLSITELIB
964     INST_HTMLLIBDIR     INSTALLHTMLPRIVLIBDIR INSTALLHTMLSITELIBDIR
965     INST_HTMLSCRIPTDIR            INSTALLHTMLSCRIPTDIR
966     INST_BIN                      INSTALLBIN
967     INST_SCRIPT                   INSTALLSCRIPT
968     INST_MAN1DIR                  INSTALLMAN1DIR
969     INST_MAN3DIR                  INSTALLMAN3DIR
970
971 The INSTALL... macros in turn default to their %Config
972 ($Config{installprivlib}, $Config{installarchlib}, etc.) counterparts.
973
974 You can check the values of these variables on your system with
975
976     perl '-V:install.*'
977
978 And to check the sequence in which the library directories are
979 searched by perl, run
980
981     perl -le 'print join $/, @INC'
982
983
984 =head2 PREFIX and LIB attribute
985
986 PREFIX and LIB can be used to set several INSTALL* attributes in one
987 go. The quickest way to install a module in a non-standard place might
988 be
989
990     perl Makefile.PL LIB=~/lib
991
992 This will install the module's architecture-independent files into
993 ~/lib, the architecture-dependent files into ~/lib/$archname/auto.
994
995 Another way to specify many INSTALL directories with a single
996 parameter is PREFIX.
997
998     perl Makefile.PL PREFIX=~
999
1000 This will replace the string specified by $Config{prefix} in all
1001 $Config{install*} values.
1002
1003 Note, that in both cases the tilde expansion is done by MakeMaker, not
1004 by perl by default, nor by make. Conflicts between parameters LIB,
1005 PREFIX and the various INSTALL* arguments are resolved so that 
1006 XXX
1007
1008 If the user has superuser privileges, and is not working on AFS
1009 (Andrew File System) or relatives, then the defaults for
1010 INSTALLPRIVLIB, INSTALLARCHLIB, INSTALLSCRIPT, etc. will be appropriate,
1011 and this incantation will be the best:
1012
1013     perl Makefile.PL; make; make test
1014     make install
1015
1016 make install per default writes some documentation of what has been
1017 done into the file C<$(INSTALLARCHLIB)/perllocal.pod>. This feature
1018 can be bypassed by calling make pure_install.
1019
1020 =head2 AFS users
1021
1022 will have to specify the installation directories as these most
1023 probably have changed since perl itself has been installed. They will
1024 have to do this by calling
1025
1026     perl Makefile.PL INSTALLSITELIB=/afs/here/today \
1027         INSTALLSCRIPT=/afs/there/now INSTALLMAN3DIR=/afs/for/manpages
1028     make
1029
1030 Be careful to repeat this procedure every time you recompile an
1031 extension, unless you are sure the AFS installation directories are
1032 still valid.
1033
1034 =head2 Static Linking of a new Perl Binary
1035
1036 An extension that is built with the above steps is ready to use on
1037 systems supporting dynamic loading. On systems that do not support
1038 dynamic loading, any newly created extension has to be linked together
1039 with the available resources. MakeMaker supports the linking process
1040 by creating appropriate targets in the Makefile whenever an extension
1041 is built. You can invoke the corresponding section of the makefile with
1042
1043     make perl
1044
1045 That produces a new perl binary in the current directory with all
1046 extensions linked in that can be found in INST_ARCHLIB , SITELIBEXP,
1047 and PERL_ARCHLIB. To do that, MakeMaker writes a new Makefile, on
1048 UNIX, this is called Makefile.aperl (may be system dependent). If you
1049 want to force the creation of a new perl, it is recommended, that you
1050 delete this Makefile.aperl, so the directories are searched-through
1051 for linkable libraries again.
1052
1053 The binary can be installed into the directory where perl normally
1054 resides on your machine with
1055
1056     make inst_perl
1057
1058 To produce a perl binary with a different name than C<perl>, either say
1059
1060     perl Makefile.PL MAP_TARGET=myperl
1061     make myperl
1062     make inst_perl
1063
1064 or say
1065
1066     perl Makefile.PL
1067     make myperl MAP_TARGET=myperl
1068     make inst_perl MAP_TARGET=myperl
1069
1070 In any case you will be prompted with the correct invocation of the
1071 C<inst_perl> target that installs the new binary into INSTALLBIN.
1072
1073 make inst_perl per default writes some documentation of what has been
1074 done into the file C<$(INSTALLARCHLIB)/perllocal.pod>. This
1075 can be bypassed by calling make pure_inst_perl.
1076
1077 Warning: the inst_perl: target will most probably overwrite your
1078 existing perl binary. Use with care!
1079
1080 Sometimes you might want to build a statically linked perl although
1081 your system supports dynamic loading. In this case you may explicitly
1082 set the linktype with the invocation of the Makefile.PL or make:
1083
1084     perl Makefile.PL LINKTYPE=static    # recommended
1085
1086 or
1087
1088     make LINKTYPE=static                # works on most systems
1089
1090 =head2 Determination of Perl Library and Installation Locations
1091
1092 MakeMaker needs to know, or to guess, where certain things are
1093 located.  Especially INST_LIB and INST_ARCHLIB (where to put the files
1094 during the make(1) run), PERL_LIB and PERL_ARCHLIB (where to read
1095 existing modules from), and PERL_INC (header files and C<libperl*.*>).
1096
1097 Extensions may be built either using the contents of the perl source
1098 directory tree or from the installed perl library. The recommended way
1099 is to build extensions after you have run 'make install' on perl
1100 itself. You can do that in any directory on your hard disk that is not
1101 below the perl source tree. The support for extensions below the ext
1102 directory of the perl distribution is only good for the standard
1103 extensions that come with perl.
1104
1105 If an extension is being built below the C<ext/> directory of the perl
1106 source then MakeMaker will set PERL_SRC automatically (e.g.,
1107 C<../..>).  If PERL_SRC is defined and the extension is recognized as
1108 a standard extension, then other variables default to the following:
1109
1110   PERL_INC     = PERL_SRC
1111   PERL_LIB     = PERL_SRC/lib
1112   PERL_ARCHLIB = PERL_SRC/lib
1113   INST_LIB     = PERL_LIB
1114   INST_ARCHLIB = PERL_ARCHLIB
1115
1116 If an extension is being built away from the perl source then MakeMaker
1117 will leave PERL_SRC undefined and default to using the installed copy
1118 of the perl library. The other variables default to the following:
1119
1120   PERL_INC     = $archlibexp/CORE
1121   PERL_LIB     = $privlibexp
1122   PERL_ARCHLIB = $archlibexp
1123   INST_LIB     = ./blib/lib
1124   INST_ARCHLIB = ./blib/arch
1125
1126 If perl has not yet been installed then PERL_SRC can be defined on the
1127 command line as shown in the previous section.
1128
1129
1130 =head2 Which architecture dependent directory?
1131
1132 If you don't want to keep the defaults for the INSTALL* macros,
1133 MakeMaker helps you to minimize the typing needed: the usual
1134 relationship between INSTALLPRIVLIB and INSTALLARCHLIB is determined
1135 by Configure at perl compilation time. MakeMaker supports the user who
1136 sets INSTALLPRIVLIB. If INSTALLPRIVLIB is set, but INSTALLARCHLIB not,
1137 then MakeMaker defaults the latter to be the same subdirectory of
1138 INSTALLPRIVLIB as Configure decided for the counterparts in %Config ,
1139 otherwise it defaults to INSTALLPRIVLIB. The same relationship holds
1140 for INSTALLSITELIB and INSTALLSITEARCH.
1141
1142 MakeMaker gives you much more freedom than needed to configure
1143 internal variables and get different results. It is worth to mention,
1144 that make(1) also lets you configure most of the variables that are
1145 used in the Makefile. But in the majority of situations this will not
1146 be necessary, and should only be done if the author of a package
1147 recommends it (or you know what you're doing).
1148
1149 =head2 Using Attributes and Parameters
1150
1151 The following attributes can be specified as arguments to WriteMakefile()
1152 or as NAME=VALUE pairs on the command line:
1153
1154 =over 2
1155
1156 =item AUTHOR
1157
1158 String containing name (and email address) of package author(s). Is used
1159 in PPD (Perl Package Description) files for PPM (Perl Package Manager).
1160
1161 =item ABSTRACT
1162
1163 One line description of the module. Will be included in PPD file.
1164
1165 =item ABSTRACT_FROM
1166
1167 Name of the file that contains the package description. MakeMaker looks
1168 for a line in the POD matching /^($package\s-\s)(.*)/. This is typically
1169 the first line in the "=head1 NAME" section. $2 becomes the abstract.
1170
1171 =item BINARY_LOCATION
1172
1173 Used when creating PPD files for binary packages.  It can be set to a
1174 full or relative path or URL to the binary archive for a particular
1175 architecture.  For example:
1176
1177         perl Makefile.PL BINARY_LOCATION=x86/Agent.tar.gz
1178
1179 builds a PPD package that references a binary of the C<Agent> package,
1180 located in the C<x86> directory relative to the PPD itself.
1181
1182 =item C
1183
1184 Ref to array of *.c file names. Initialised from a directory scan
1185 and the values portion of the XS attribute hash. This is not
1186 currently used by MakeMaker but may be handy in Makefile.PLs.
1187
1188 =item CAPI
1189
1190 [This attribute is obsolete in Perl 5.6.  PERL_OBJECT builds are C-compatible
1191 by default.]
1192
1193 Switch to force usage of the Perl C API even when compiling for PERL_OBJECT.
1194
1195 Note that this attribute is passed through to any recursive build,
1196 but if and only if the submodule's Makefile.PL itself makes no mention
1197 of the 'CAPI' attribute.
1198
1199 =item CCFLAGS
1200
1201 String that will be included in the compiler call command line between
1202 the arguments INC and OPTIMIZE.
1203
1204 =item CONFIG
1205
1206 Arrayref. E.g. [qw(archname manext)] defines ARCHNAME & MANEXT from
1207 config.sh. MakeMaker will add to CONFIG the following values anyway:
1208 ar
1209 cc
1210 cccdlflags
1211 ccdlflags
1212 dlext
1213 dlsrc
1214 ld
1215 lddlflags
1216 ldflags
1217 libc
1218 lib_ext
1219 obj_ext
1220 ranlib
1221 sitelibexp
1222 sitearchexp
1223 so
1224
1225 =item CONFIGURE
1226
1227 CODE reference. The subroutine should return a hash reference. The
1228 hash may contain further attributes, e.g. {LIBS =E<gt> ...}, that have to
1229 be determined by some evaluation method.
1230
1231 =item DEFINE
1232
1233 Something like C<"-DHAVE_UNISTD_H">
1234
1235 =item DIR
1236
1237 Ref to array of subdirectories containing Makefile.PLs e.g. [ 'sdbm'
1238 ] in ext/SDBM_File
1239
1240 =item DISTNAME
1241
1242 Your name for distributing the package (by tar file). This defaults to
1243 NAME above.
1244
1245 =item DL_FUNCS
1246
1247 Hashref of symbol names for routines to be made available as universal
1248 symbols.  Each key/value pair consists of the package name and an
1249 array of routine names in that package.  Used only under AIX, OS/2,
1250 VMS and Win32 at present.  The routine names supplied will be expanded
1251 in the same way as XSUB names are expanded by the XS() macro.
1252 Defaults to
1253
1254   {"$(NAME)" => ["boot_$(NAME)" ] }
1255
1256 e.g.
1257
1258   {"RPC" => [qw( boot_rpcb rpcb_gettime getnetconfigent )],
1259    "NetconfigPtr" => [ 'DESTROY'] }
1260
1261 Please see the L<ExtUtils::Mksymlists> documentation for more information
1262 about the DL_FUNCS, DL_VARS and FUNCLIST attributes.
1263
1264 =item DL_VARS
1265
1266 Array of symbol names for variables to be made available as universal symbols.
1267 Used only under AIX, OS/2, VMS and Win32 at present.  Defaults to [].
1268 (e.g. [ qw(Foo_version Foo_numstreams Foo_tree ) ])
1269
1270 =item EXCLUDE_EXT
1271
1272 Array of extension names to exclude when doing a static build.  This
1273 is ignored if INCLUDE_EXT is present.  Consult INCLUDE_EXT for more
1274 details.  (e.g.  [ qw( Socket POSIX ) ] )
1275
1276 This attribute may be most useful when specified as a string on the
1277 command line:  perl Makefile.PL EXCLUDE_EXT='Socket Safe'
1278
1279 =item EXE_FILES
1280
1281 Ref to array of executable files. The files will be copied to the
1282 INST_SCRIPT directory. Make realclean will delete them from there
1283 again.
1284
1285 =item FIRST_MAKEFILE
1286
1287 The name of the Makefile to be produced. Defaults to the contents of
1288 MAKEFILE, but can be overridden. This is used for the second Makefile
1289 that will be produced for the MAP_TARGET.
1290
1291 =item FULLPERL
1292
1293 Perl binary able to run this extension.
1294
1295 =item FUNCLIST
1296
1297 This provides an alternate means to specify function names to be
1298 exported from the extension.  Its value is a reference to an
1299 array of function names to be exported by the extension.  These
1300 names are passed through unaltered to the linker options file.
1301
1302 =item H
1303
1304 Ref to array of *.h file names. Similar to C.
1305
1306 =item HTMLLIBPODS
1307
1308 Hashref of .pm and .pod files.  MakeMaker will default this to all
1309  .pod and any .pm files that include POD directives.  The files listed
1310 here will be converted to HTML format and installed as was requested
1311 at Configure time.
1312
1313 =item HTMLSCRIPTPODS
1314
1315 Hashref of pod-containing files.  MakeMaker will default this to all
1316 EXE_FILES files that include POD directives.  The files listed
1317 here will be converted to HTML format and installed as was requested
1318 at Configure time.
1319
1320 =item IMPORTS
1321
1322 This attribute is used to specify names to be imported into the
1323 extension. It is only used on OS/2 and Win32.
1324
1325 =item INC
1326
1327 Include file dirs eg: C<"-I/usr/5include -I/path/to/inc">
1328
1329 =item INCLUDE_EXT
1330
1331 Array of extension names to be included when doing a static build.
1332 MakeMaker will normally build with all of the installed extensions when
1333 doing a static build, and that is usually the desired behavior.  If
1334 INCLUDE_EXT is present then MakeMaker will build only with those extensions
1335 which are explicitly mentioned. (e.g.  [ qw( Socket POSIX ) ])
1336
1337 It is not necessary to mention DynaLoader or the current extension when
1338 filling in INCLUDE_EXT.  If the INCLUDE_EXT is mentioned but is empty then
1339 only DynaLoader and the current extension will be included in the build.
1340
1341 This attribute may be most useful when specified as a string on the
1342 command line:  perl Makefile.PL INCLUDE_EXT='POSIX Socket Devel::Peek'
1343
1344 =item INSTALLARCHLIB
1345
1346 Used by 'make install', which copies files from INST_ARCHLIB to this
1347 directory if INSTALLDIRS is set to perl.
1348
1349 =item INSTALLBIN
1350
1351 Directory to install binary files (e.g. tkperl) into.
1352
1353 =item INSTALLDIRS
1354
1355 Determines which of the two sets of installation directories to
1356 choose: installprivlib and installarchlib versus installsitelib and
1357 installsitearch. The first pair is chosen with INSTALLDIRS=perl, the
1358 second with INSTALLDIRS=site. Default is site.
1359
1360 =item INSTALLHTMLPRIVLIBDIR
1361
1362 This directory gets the HTML pages at 'make install' time. Defaults to
1363 $Config{installhtmlprivlibdir}.
1364
1365 =item INSTALLHTMLSCRIPTDIR
1366
1367 This directory gets the HTML pages at 'make install' time. Defaults to
1368 $Config{installhtmlscriptdir}.
1369
1370 =item INSTALLHTMLSITELIBDIR
1371
1372 This directory gets the HTML pages at 'make install' time. Defaults to
1373 $Config{installhtmlsitelibdir}.
1374
1375
1376 =item INSTALLMAN1DIR
1377
1378 This directory gets the man pages at 'make install' time. Defaults to
1379 $Config{installman1dir}.
1380
1381 =item INSTALLMAN3DIR
1382
1383 This directory gets the man pages at 'make install' time. Defaults to
1384 $Config{installman3dir}.
1385
1386 =item INSTALLPRIVLIB
1387
1388 Used by 'make install', which copies files from INST_LIB to this
1389 directory if INSTALLDIRS is set to perl.
1390
1391 =item INSTALLSCRIPT
1392
1393 Used by 'make install' which copies files from INST_SCRIPT to this
1394 directory.
1395
1396 =item INSTALLSITEARCH
1397
1398 Used by 'make install', which copies files from INST_ARCHLIB to this
1399 directory if INSTALLDIRS is set to site (default).
1400
1401 =item INSTALLSITELIB
1402
1403 Used by 'make install', which copies files from INST_LIB to this
1404 directory if INSTALLDIRS is set to site (default).
1405
1406 =item INST_ARCHLIB
1407
1408 Same as INST_LIB for architecture dependent files.
1409
1410 =item INST_BIN
1411
1412 Directory to put real binary files during 'make'. These will be copied
1413 to INSTALLBIN during 'make install'
1414
1415 =item INST_EXE
1416
1417 Old name for INST_SCRIPT. Deprecated. Please use INST_SCRIPT if you
1418 need to use it.
1419
1420 =item INST_LIB
1421
1422 Directory where we put library files of this extension while building
1423 it.
1424
1425 =item INST_HTMLLIBDIR
1426
1427 Directory to hold the man pages in HTML format at 'make' time
1428
1429 =item INST_HTMLSCRIPTDIR
1430
1431 Directory to hold the man pages in HTML format at 'make' time
1432
1433 =item INST_MAN1DIR
1434
1435 Directory to hold the man pages at 'make' time
1436
1437 =item INST_MAN3DIR
1438
1439 Directory to hold the man pages at 'make' time
1440
1441 =item INST_SCRIPT
1442
1443 Directory, where executable files should be installed during
1444 'make'. Defaults to "./blib/script", just to have a dummy location during
1445 testing. make install will copy the files in INST_SCRIPT to
1446 INSTALLSCRIPT.
1447
1448 =item PERL_MALLOC_OK
1449
1450 defaults to 0.  Should be set to TRUE if the extension can work with
1451 the memory allocation routines substituted by the Perl malloc() subsystem.
1452 This should be applicable to most extensions with exceptions of those
1453
1454 =over
1455
1456 =item *
1457
1458 with bugs in memory allocations which are caught by Perl's malloc();
1459
1460 =item *
1461
1462 which interact with the memory allocator in other ways than via
1463 malloc(), realloc(), free(), calloc(), sbrk() and brk();
1464
1465 =item *
1466
1467 which rely on special alignment which is not provided by Perl's malloc().
1468
1469 =back
1470
1471 B<NOTE.>  Negligence to set this flag in I<any one> of loaded extension
1472 nullifies many advantages of Perl's malloc(), such as better usage of
1473 system resources, error detection, memory usage reporting, catchable failure
1474 of memory allocations, etc.
1475
1476 =item LDFROM
1477
1478 defaults to "$(OBJECT)" and is used in the ld command to specify
1479 what files to link/load from (also see dynamic_lib below for how to
1480 specify ld flags)
1481
1482 =item LIB
1483
1484 LIB can only be set at C<perl Makefile.PL> time. It has the effect of
1485 setting both INSTALLPRIVLIB and INSTALLSITELIB to that value regardless any
1486
1487 =item LIBPERL_A
1488
1489 The filename of the perllibrary that will be used together with this
1490 extension. Defaults to libperl.a.
1491
1492 =item LIBS
1493
1494 An anonymous array of alternative library
1495 specifications to be searched for (in order) until
1496 at least one library is found. E.g.
1497
1498   'LIBS' => ["-lgdbm", "-ldbm -lfoo", "-L/path -ldbm.nfs"]
1499
1500 Mind, that any element of the array
1501 contains a complete set of arguments for the ld
1502 command. So do not specify
1503
1504   'LIBS' => ["-ltcl", "-ltk", "-lX11"]
1505
1506 See ODBM_File/Makefile.PL for an example, where an array is needed. If
1507 you specify a scalar as in
1508
1509   'LIBS' => "-ltcl -ltk -lX11"
1510
1511 MakeMaker will turn it into an array with one element.
1512
1513 =item LINKTYPE
1514
1515 'static' or 'dynamic' (default unless usedl=undef in
1516 config.sh). Should only be used to force static linking (also see
1517 linkext below).
1518
1519 =item MAKEAPERL
1520
1521 Boolean which tells MakeMaker, that it should include the rules to
1522 make a perl. This is handled automatically as a switch by
1523 MakeMaker. The user normally does not need it.
1524
1525 =item MAKEFILE
1526
1527 The name of the Makefile to be produced.
1528
1529 =item MAN1PODS
1530
1531 Hashref of pod-containing files. MakeMaker will default this to all
1532 EXE_FILES files that include POD directives. The files listed
1533 here will be converted to man pages and installed as was requested
1534 at Configure time.
1535
1536 =item MAN3PODS
1537
1538 Hashref of .pm and .pod files. MakeMaker will default this to all
1539  .pod and any .pm files that include POD directives. The files listed
1540 here will be converted to man pages and installed as was requested
1541 at Configure time.
1542
1543 =item MAP_TARGET
1544
1545 If it is intended, that a new perl binary be produced, this variable
1546 may hold a name for that binary. Defaults to perl
1547
1548 =item MYEXTLIB
1549
1550 If the extension links to a library that it builds set this to the
1551 name of the library (see SDBM_File)
1552
1553 =item NAME
1554
1555 Perl module name for this extension (DBD::Oracle). This will default
1556 to the directory name but should be explicitly defined in the
1557 Makefile.PL.
1558
1559 =item NEEDS_LINKING
1560
1561 MakeMaker will figure out if an extension contains linkable code
1562 anywhere down the directory tree, and will set this variable
1563 accordingly, but you can speed it up a very little bit if you define
1564 this boolean variable yourself.
1565
1566 =item NOECHO
1567
1568 Defaults to C<@>. By setting it to an empty string you can generate a
1569 Makefile that echos all commands. Mainly used in debugging MakeMaker
1570 itself.
1571
1572 =item NORECURS
1573
1574 Boolean.  Attribute to inhibit descending into subdirectories.
1575
1576 =item NO_VC
1577
1578 In general, any generated Makefile checks for the current version of
1579 MakeMaker and the version the Makefile was built under. If NO_VC is
1580 set, the version check is neglected. Do not write this into your
1581 Makefile.PL, use it interactively instead.
1582
1583 =item OBJECT
1584
1585 List of object files, defaults to '$(BASEEXT)$(OBJ_EXT)', but can be a long
1586 string containing all object files, e.g. "tkpBind.o
1587 tkpButton.o tkpCanvas.o"
1588
1589 =item OPTIMIZE
1590
1591 Defaults to C<-O>. Set it to C<-g> to turn debugging on. The flag is
1592 passed to subdirectory makes.
1593
1594 =item PERL
1595
1596 Perl binary for tasks that can be done by miniperl
1597
1598 =item PERLMAINCC
1599
1600 The call to the program that is able to compile perlmain.c. Defaults
1601 to $(CC).
1602
1603 =item PERL_ARCHLIB
1604
1605 Same as above for architecture dependent files.
1606
1607 =item PERL_LIB
1608
1609 Directory containing the Perl library to use.
1610
1611 =item PERL_SRC
1612
1613 Directory containing the Perl source code (use of this should be
1614 avoided, it may be undefined)
1615
1616 =item PERM_RW
1617
1618 Desired permission for read/writable files. Defaults to C<644>.
1619 See also L<MM_Unix/perm_rw>.
1620
1621 =item PERM_RWX
1622
1623 Desired permission for executable files. Defaults to C<755>.
1624 See also L<MM_Unix/perm_rwx>.
1625
1626 =item PL_FILES
1627
1628 Ref to hash of files to be processed as perl programs. MakeMaker
1629 will default to any found *.PL file (except Makefile.PL) being keys
1630 and the basename of the file being the value. E.g.
1631
1632   {'foobar.PL' => 'foobar'}
1633
1634 The *.PL files are expected to produce output to the target files
1635 themselves. If multiple files can be generated from the same *.PL
1636 file then the value in the hash can be a reference to an array of
1637 target file names. E.g.
1638
1639   {'foobar.PL' => ['foobar1','foobar2']}
1640
1641 =item PM
1642
1643 Hashref of .pm files and *.pl files to be installed.  e.g.
1644
1645   {'name_of_file.pm' => '$(INST_LIBDIR)/install_as.pm'}
1646
1647 By default this will include *.pm and *.pl and the files found in
1648 the PMLIBDIRS directories.  Defining PM in the
1649 Makefile.PL will override PMLIBDIRS.
1650
1651 =item PMLIBDIRS
1652
1653 Ref to array of subdirectories containing library files.  Defaults to
1654 [ 'lib', $(BASEEXT) ]. The directories will be scanned and I<any> files
1655 they contain will be installed in the corresponding location in the
1656 library.  A libscan() method can be used to alter the behaviour.
1657 Defining PM in the Makefile.PL will override PMLIBDIRS.
1658
1659 =item POLLUTE
1660
1661 Release 5.005 grandfathered old global symbol names by providing preprocessor
1662 macros for extension source compatibility.  As of release 5.6, these
1663 preprocessor definitions are not available by default.  The POLLUTE flag
1664 specifies that the old names should still be defined:
1665
1666   perl Makefile.PL POLLUTE=1
1667
1668 Please inform the module author if this is necessary to successfully install
1669 a module under 5.6 or later.
1670
1671 =item PPM_INSTALL_EXEC
1672
1673 Name of the executable used to run C<PPM_INSTALL_SCRIPT> below. (e.g. perl)
1674
1675 =item PPM_INSTALL_SCRIPT
1676
1677 Name of the script that gets executed by the Perl Package Manager after
1678 the installation of a package.
1679
1680 =item PREFIX
1681
1682 Can be used to set the three INSTALL* attributes in one go (except for
1683 probably INSTALLMAN1DIR, if it is not below PREFIX according to
1684 %Config).  They will have PREFIX as a common directory node and will
1685 branch from that node into lib/, lib/ARCHNAME or whatever Configure
1686 decided at the build time of your perl (unless you override one of
1687 them, of course).
1688
1689 =item PREREQ_PM
1690
1691 Hashref: Names of modules that need to be available to run this
1692 extension (e.g. Fcntl for SDBM_File) are the keys of the hash and the
1693 desired version is the value. If the required version number is 0, we
1694 only check if any version is installed already.
1695
1696 =item SKIP
1697
1698 Arryref. E.g. [qw(name1 name2)] skip (do not write) sections of the
1699 Makefile. Caution! Do not use the SKIP attribute for the negligible
1700 speedup. It may seriously damage the resulting Makefile. Only use it
1701 if you really need it.
1702
1703 =item TYPEMAPS
1704
1705 Ref to array of typemap file names.  Use this when the typemaps are
1706 in some directory other than the current directory or when they are
1707 not named B<typemap>.  The last typemap in the list takes
1708 precedence.  A typemap in the current directory has highest
1709 precedence, even if it isn't listed in TYPEMAPS.  The default system
1710 typemap has lowest precedence.
1711
1712 =item VERSION
1713
1714 Your version number for distributing the package.  This defaults to
1715 0.1.
1716
1717 =item VERSION_FROM
1718
1719 Instead of specifying the VERSION in the Makefile.PL you can let
1720 MakeMaker parse a file to determine the version number. The parsing
1721 routine requires that the file named by VERSION_FROM contains one
1722 single line to compute the version number. The first line in the file
1723 that contains the regular expression
1724
1725     /([\$*])(([\w\:\']*)\bVERSION)\b.*\=/
1726
1727 will be evaluated with eval() and the value of the named variable
1728 B<after> the eval() will be assigned to the VERSION attribute of the
1729 MakeMaker object. The following lines will be parsed o.k.:
1730
1731     $VERSION = '1.00';
1732     *VERSION = \'1.01';
1733     ( $VERSION ) = '$Revision: 1.222 $ ' =~ /\$Revision:\s+([^\s]+)/;
1734     $FOO::VERSION = '1.10';
1735     *FOO::VERSION = \'1.11';
1736
1737 but these will fail:
1738
1739     my $VERSION = '1.01';
1740     local $VERSION = '1.02';
1741     local $FOO::VERSION = '1.30';
1742
1743 The file named in VERSION_FROM is not added as a dependency to
1744 Makefile. This is not really correct, but it would be a major pain
1745 during development to have to rewrite the Makefile for any smallish
1746 change in that file. If you want to make sure that the Makefile
1747 contains the correct VERSION macro after any change of the file, you
1748 would have to do something like
1749
1750     depend => { Makefile => '$(VERSION_FROM)' }
1751
1752 See attribute C<depend> below.
1753
1754 =item XS
1755
1756 Hashref of .xs files. MakeMaker will default this.  e.g.
1757
1758   {'name_of_file.xs' => 'name_of_file.c'}
1759
1760 The .c files will automatically be included in the list of files
1761 deleted by a make clean.
1762
1763 =item XSOPT
1764
1765 String of options to pass to xsubpp.  This might include C<-C++> or
1766 C<-extern>.  Do not include typemaps here; the TYPEMAP parameter exists for
1767 that purpose.
1768
1769 =item XSPROTOARG
1770
1771 May be set to an empty string, which is identical to C<-prototypes>, or
1772 C<-noprototypes>. See the xsubpp documentation for details. MakeMaker
1773 defaults to the empty string.
1774
1775 =item XS_VERSION
1776
1777 Your version number for the .xs file of this package.  This defaults
1778 to the value of the VERSION attribute.
1779
1780 =back
1781
1782 =head2 Additional lowercase attributes
1783
1784 can be used to pass parameters to the methods which implement that
1785 part of the Makefile.
1786
1787 =over 2
1788
1789 =item clean
1790
1791   {FILES => "*.xyz foo"}
1792
1793 =item depend
1794
1795   {ANY_TARGET => ANY_DEPENDECY, ...}
1796
1797 =item dist
1798
1799   {TARFLAGS => 'cvfF', COMPRESS => 'gzip', SUFFIX => '.gz',
1800   SHAR => 'shar -m', DIST_CP => 'ln', ZIP => '/bin/zip',
1801   ZIPFLAGS => '-rl', DIST_DEFAULT => 'private tardist' }
1802
1803 If you specify COMPRESS, then SUFFIX should also be altered, as it is
1804 needed to tell make the target file of the compression. Setting
1805 DIST_CP to ln can be useful, if you need to preserve the timestamps on
1806 your files. DIST_CP can take the values 'cp', which copies the file,
1807 'ln', which links the file, and 'best' which copies symbolic links and
1808 links the rest. Default is 'best'.
1809
1810 =item dynamic_lib
1811
1812   {ARMAYBE => 'ar', OTHERLDFLAGS => '...', INST_DYNAMIC_DEP => '...'}
1813
1814 =item linkext
1815
1816   {LINKTYPE => 'static', 'dynamic' or ''}
1817
1818 NB: Extensions that have nothing but *.pm files had to say
1819
1820   {LINKTYPE => ''}
1821
1822 with Pre-5.0 MakeMakers. Since version 5.00 of MakeMaker such a line
1823 can be deleted safely. MakeMaker recognizes when there's nothing to
1824 be linked.
1825
1826 =item macro
1827
1828   {ANY_MACRO => ANY_VALUE, ...}
1829
1830 =item realclean
1831
1832   {FILES => '$(INST_ARCHAUTODIR)/*.xyz'}
1833
1834 =item test
1835
1836   {TESTS => 't/*.t'}
1837
1838 =item tool_autosplit
1839
1840   {MAXLEN => 8}
1841
1842 =back
1843
1844 =head2 Overriding MakeMaker Methods
1845
1846 If you cannot achieve the desired Makefile behaviour by specifying
1847 attributes you may define private subroutines in the Makefile.PL.
1848 Each subroutines returns the text it wishes to have written to
1849 the Makefile. To override a section of the Makefile you can
1850 either say:
1851
1852         sub MY::c_o { "new literal text" }
1853
1854 or you can edit the default by saying something like:
1855
1856         sub MY::c_o {
1857             package MY; # so that "SUPER" works right
1858             my $inherited = shift->SUPER::c_o(@_);
1859             $inherited =~ s/old text/new text/;
1860             $inherited;
1861         }
1862
1863 If you are running experiments with embedding perl as a library into
1864 other applications, you might find MakeMaker is not sufficient. You'd
1865 better have a look at ExtUtils::Embed which is a collection of utilities
1866 for embedding.
1867
1868 If you still need a different solution, try to develop another
1869 subroutine that fits your needs and submit the diffs to
1870 F<perl5-porters@perl.org> or F<comp.lang.perl.moderated> as appropriate.
1871
1872 For a complete description of all MakeMaker methods see L<ExtUtils::MM_Unix>.
1873
1874 Here is a simple example of how to add a new target to the generated
1875 Makefile:
1876
1877     sub MY::postamble {
1878         '
1879     $(MYEXTLIB): sdbm/Makefile
1880             cd sdbm && $(MAKE) all
1881     ';
1882     }
1883
1884
1885 =head2 Hintsfile support
1886
1887 MakeMaker.pm uses the architecture specific information from
1888 Config.pm. In addition it evaluates architecture specific hints files
1889 in a C<hints/> directory. The hints files are expected to be named
1890 like their counterparts in C<PERL_SRC/hints>, but with an C<.pl> file
1891 name extension (eg. C<next_3_2.pl>). They are simply C<eval>ed by
1892 MakeMaker within the WriteMakefile() subroutine, and can be used to
1893 execute commands as well as to include special variables. The rules
1894 which hintsfile is chosen are the same as in Configure.
1895
1896 The hintsfile is eval()ed immediately after the arguments given to
1897 WriteMakefile are stuffed into a hash reference $self but before this
1898 reference becomes blessed. So if you want to do the equivalent to
1899 override or create an attribute you would say something like
1900
1901     $self->{LIBS} = ['-ldbm -lucb -lc'];
1902
1903 =head2 Distribution Support
1904
1905 For authors of extensions MakeMaker provides several Makefile
1906 targets. Most of the support comes from the ExtUtils::Manifest module,
1907 where additional documentation can be found.
1908
1909 =over 4
1910
1911 =item    make distcheck
1912
1913 reports which files are below the build directory but not in the
1914 MANIFEST file and vice versa. (See ExtUtils::Manifest::fullcheck() for
1915 details)
1916
1917 =item    make skipcheck
1918
1919 reports which files are skipped due to the entries in the
1920 C<MANIFEST.SKIP> file (See ExtUtils::Manifest::skipcheck() for
1921 details)
1922
1923 =item    make distclean
1924
1925 does a realclean first and then the distcheck. Note that this is not
1926 needed to build a new distribution as long as you are sure that the
1927 MANIFEST file is ok.
1928
1929 =item    make manifest
1930
1931 rewrites the MANIFEST file, adding all remaining files found (See
1932 ExtUtils::Manifest::mkmanifest() for details)
1933
1934 =item    make distdir
1935
1936 Copies all the files that are in the MANIFEST file to a newly created
1937 directory with the name C<$(DISTNAME)-$(VERSION)>. If that directory
1938 exists, it will be removed first.
1939
1940 =item   make disttest
1941
1942 Makes a distdir first, and runs a C<perl Makefile.PL>, a make, and
1943 a make test in that directory.
1944
1945 =item    make tardist
1946
1947 First does a distdir. Then a command $(PREOP) which defaults to a null
1948 command, followed by $(TOUNIX), which defaults to a null command under
1949 UNIX, and will convert files in distribution directory to UNIX format
1950 otherwise. Next it runs C<tar> on that directory into a tarfile and
1951 deletes the directory. Finishes with a command $(POSTOP) which
1952 defaults to a null command.
1953
1954 =item    make dist
1955
1956 Defaults to $(DIST_DEFAULT) which in turn defaults to tardist.
1957
1958 =item    make uutardist
1959
1960 Runs a tardist first and uuencodes the tarfile.
1961
1962 =item    make shdist
1963
1964 First does a distdir. Then a command $(PREOP) which defaults to a null
1965 command. Next it runs C<shar> on that directory into a sharfile and
1966 deletes the intermediate directory again. Finishes with a command
1967 $(POSTOP) which defaults to a null command.  Note: For shdist to work
1968 properly a C<shar> program that can handle directories is mandatory.
1969
1970 =item    make zipdist
1971
1972 First does a distdir. Then a command $(PREOP) which defaults to a null
1973 command. Runs C<$(ZIP) $(ZIPFLAGS)> on that directory into a
1974 zipfile. Then deletes that directory. Finishes with a command
1975 $(POSTOP) which defaults to a null command.
1976
1977 =item    make ci
1978
1979 Does a $(CI) and a $(RCS_LABEL) on all files in the MANIFEST file.
1980
1981 =back
1982
1983 Customization of the dist targets can be done by specifying a hash
1984 reference to the dist attribute of the WriteMakefile call. The
1985 following parameters are recognized:
1986
1987     CI           ('ci -u')
1988     COMPRESS     ('gzip --best')
1989     POSTOP       ('@ :')
1990     PREOP        ('@ :')
1991     TO_UNIX      (depends on the system)
1992     RCS_LABEL    ('rcs -q -Nv$(VERSION_SYM):')
1993     SHAR         ('shar')
1994     SUFFIX       ('.gz')
1995     TAR          ('tar')
1996     TARFLAGS     ('cvf')
1997     ZIP          ('zip')
1998     ZIPFLAGS     ('-r')
1999
2000 An example:
2001
2002     WriteMakefile( 'dist' => { COMPRESS=>"bzip2", SUFFIX=>".bz2" })
2003
2004 =head2 Disabling an extension
2005
2006 If some events detected in F<Makefile.PL> imply that there is no way
2007 to create the Module, but this is a normal state of things, then you
2008 can create a F<Makefile> which does nothing, but succeeds on all the
2009 "usual" build targets.  To do so, use
2010
2011    ExtUtils::MakeMaker::WriteEmptyMakefile();
2012
2013 instead of WriteMakefile().
2014
2015 This may be useful if other modules expect this module to be I<built>
2016 OK, as opposed to I<work> OK (say, this system-dependent module builds
2017 in a subdirectory of some other distribution, or is listed as a
2018 dependency in a CPAN::Bundle, but the functionality is supported by
2019 different means on the current architecture).
2020
2021 =head1 ENVIRONMENT
2022
2023 =over 8
2024
2025 =item PERL_MM_OPT
2026
2027 Command line options used by C<MakeMaker-E<gt>new()>, and thus by
2028 C<WriteMakefile()>.  The string is split on whitespace, and the result
2029 is processed before any actual command line arguments are processed.
2030
2031 =back
2032
2033 =head1 SEE ALSO
2034
2035 ExtUtils::MM_Unix, ExtUtils::Manifest, ExtUtils::testlib,
2036 ExtUtils::Install, ExtUtils::Embed
2037
2038 =head1 AUTHORS
2039
2040 Andy Dougherty <F<doughera@lafcol.lafayette.edu>>, Andreas KE<ouml>nig
2041 <F<A.Koenig@franz.ww.TU-Berlin.DE>>, Tim Bunce <F<Tim.Bunce@ig.co.uk>>.
2042 VMS support by Charles Bailey <F<bailey@newman.upenn.edu>>.  OS/2
2043 support by Ilya Zakharevich <F<ilya@math.ohio-state.edu>>.  Contact the
2044 makemaker mailing list C<mailto:makemaker@franz.ww.tu-berlin.de>, if
2045 you have any questions.
2046
2047 =cut