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