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