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