ViewVC Help
View File | Revision Log | Show Annotations | Download File
/cvs/staticperl/perl/lib/ExtUtils/MakeMaker.pm
Revision: 1.1
Committed: Thu Jun 30 14:27:11 2005 UTC (21 years, 4 months ago) by root
Branch: MAIN
CVS Tags: HEAD
Branch point for: PERL
Log Message:
*** empty log message ***

File Contents

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