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