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