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