test suite and fix input_line_number()
[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
875fa795 252 PL_FILES PM PMLIBDIRS 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;
65d36135 448 if (exists $self->{PARENT}->{CAPI}
449 and not exists $self->{CAPI})
450 {
451 # inherit, but only if already unspecified
452 $self->{CAPI} = $self->{PARENT}->{CAPI};
453 }
ea5a1d84 454 }
8e07c86e 455 } else {
2443aee5 456 parse_args($self,split(' ', $ENV{PERL_MM_OPT} || ''),@ARGV);
8e07c86e 457 }
a0d0e21e 458
8e07c86e 459 $self->{NAME} ||= $self->guess_name;
a0d0e21e 460
8e07c86e 461 ($self->{NAME_SYM} = $self->{NAME}) =~ s/\W+/_/g;
a0d0e21e 462
8e07c86e 463 $self->init_main();
464
0d8023a2 465 if (! $self->{PERL_SRC} ) {
68dc0745 466 my($pthinks) = $self->canonpath($INC{'Config.pm'});
3e3baf6d 467 my($cthinks) = $self->catfile($Config{'archlibexp'},'Config.pm');
3b03c0f3 468 $pthinks = VMS::Filespec::vmsify($pthinks) if $Is_VMS;
3e3baf6d 469 if ($pthinks ne $cthinks &&
470 !($Is_Win32 and lc($pthinks) eq lc($cthinks))) {
471 print "Have $pthinks expected $cthinks\n";
472 if ($Is_Win32) {
473 $pthinks =~ s![/\\]Config\.pm$!!i; $pthinks =~ s!.*[/\\]!!;
474 }
475 else {
476 $pthinks =~ s!/Config\.pm$!!; $pthinks =~ s!.*/!!;
477 }
0d8023a2 478 print STDOUT <<END;
005c1a0e 479Your perl and your Config.pm seem to have different ideas about the architecture
480they are running on.
8e07c86e 481Perl thinks: [$pthinks]
e05e23b1 482Config says: [$Config{archname}]
005c1a0e 483This may or may not cause problems. Please check your installation of perl if you
484have problems building this extension.
485END
0d8023a2 486 }
005c1a0e 487 }
488
8e07c86e 489 $self->init_dirscan();
490 $self->init_others();
6071deed 491 my($argv) = neatvalue(\@ARGV);
492 $argv =~ s/^\[/(/;
493 $argv =~ s/\]$/)/;
75f92628 494
8e07c86e 495 push @{$self->{RESULT}}, <<END;
496# This Makefile is for the $self->{NAME} extension to perl.
497#
e05e23b1 498# It was generated automatically by MakeMaker version
499# $VERSION (Revision: $Revision) from the contents of
500# Makefile.PL. Don't edit this file, edit Makefile.PL instead.
8e07c86e 501#
502# ANY CHANGES MADE HERE WILL BE LOST!
503#
6071deed 504# MakeMaker ARGV: $argv
505#
8e07c86e 506# MakeMaker Parameters:
507END
a0d0e21e 508
42793c05 509 foreach $key (sort keys %initial_att){
510 my($v) = neatvalue($initial_att{$key});
8e07c86e 511 $v =~ s/(CODE|HASH|ARRAY|SCALAR)\([\dxa-f]+\)/$1\(...\)/;
42793c05 512 $v =~ tr/\n/ /s;
8e07c86e 513 push @{$self->{RESULT}}, "# $key => $v";
42793c05 514 }
a0d0e21e 515
8e07c86e 516 # turn the SKIP array into a SKIPHASH hash
517 my (%skip,$skip);
518 for $skip (@{$self->{SKIP} || []}) {
519 $self->{SKIPHASH}{$skip} = 1;
520 }
3b03c0f3 521 delete $self->{SKIP}; # free memory
522
523 if ($self->{PARENT}) {
524 for (qw/install dist dist_basics dist_core dist_dir dist_test dist_ci/) {
525 $self->{SKIPHASH}{$_} = 1;
526 }
527 }
42793c05 528
8e07c86e 529 # We run all the subdirectories now. They don't have much to query
530 # from the parent, but the parent has to query them: if they need linking!
8e07c86e 531 unless ($self->{NORECURS}) {
e05e23b1 532 $self->eval_in_subdirs if @{$self->{DIR}};
42793c05 533 }
a0d0e21e 534
8e07c86e 535 my $section;
e05e23b1 536 foreach $section ( @MM_Sections ){
537 print "Processing Makefile '$section' section\n" if ($Verbose >= 2);
8e07c86e 538 my($skipit) = $self->skipcheck($section);
539 if ($skipit){
540 push @{$self->{RESULT}}, "\n# --- MakeMaker $section section $skipit.";
4e68a208 541 } else {
8e07c86e 542 my(%a) = %{$self->{$section} || {}};
543 push @{$self->{RESULT}}, "\n# --- MakeMaker $section section:";
e05e23b1 544 push @{$self->{RESULT}}, "# " . join ", ", %a if $Verbose && %a;
8e07c86e 545 push @{$self->{RESULT}}, $self->nicetext($self->$section( %a ));
e05e23b1 546 }
232e078e 547 }
8e07c86e 548
e05e23b1 549 push @{$self->{RESULT}}, "\n# End.";
8e07c86e 550
e05e23b1 551 $self;
232e078e 552}
553
1b171b8d 554sub WriteEmptyMakefile {
555 if (-f 'Makefile.old') {
556 chmod 0666, 'Makefile.old';
557 unlink 'Makefile.old' or warn "unlink Makefile.old: $!";
558 }
559 rename 'Makefile', 'Makefile.old' or warn "rename Makefile Makefile.old: $!"
560 if -f 'Makefile';
561 open MF, '> Makefile' or die "open Makefile for write: $!";
d3ba9184 562 print MF <<'EOP';
1b171b8d 563all:
564
565clean:
566
567install:
568
569makemakerdflt:
570
571test:
572
573EOP
574 close MF or die "close Makefile for write: $!";
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
f1387719 980the macros INST_LIB, INST_ARCHLIB, INST_SCRIPT, INST_MAN1DIR, and
981INST_MAN3DIR. All these default to something below ./blib if you are
982I<not> building below the perl source directory. If you I<are>
8e07c86e 983building below the perl source, INST_LIB and INST_ARCHLIB default to
5b195008 984 ../../lib, and INST_SCRIPT is not defined.
005c1a0e 985
e05e23b1 986The I<install> target of the generated Makefile copies the files found
987below each of the INST_* directories to their INSTALL*
988counterparts. Which counterparts are chosen depends on the setting of
989INSTALLDIRS according to the following table:
005c1a0e 990
e05e23b1 991 INSTALLDIRS set to
992 perl site
993
e05e23b1 994 INST_ARCHLIB INSTALLARCHLIB INSTALLSITEARCH
3b03c0f3 995 INST_LIB INSTALLPRIVLIB INSTALLSITELIB
f1387719 996 INST_BIN INSTALLBIN
997 INST_SCRIPT INSTALLSCRIPT
e05e23b1 998 INST_MAN1DIR INSTALLMAN1DIR
999 INST_MAN3DIR INSTALLMAN3DIR
005c1a0e 1000
8e07c86e 1001The INSTALL... macros in turn default to their %Config
1002($Config{installprivlib}, $Config{installarchlib}, etc.) counterparts.
005c1a0e 1003
3b03c0f3 1004You can check the values of these variables on your system with
1005
bab2b58e 1006 perl '-V:install.*'
3b03c0f3 1007
f1387719 1008And to check the sequence in which the library directories are
1009searched by perl, run
005c1a0e 1010
f1387719 1011 perl -le 'print join $/, @INC'
005c1a0e 1012
005c1a0e 1013
bab2b58e 1014=head2 PREFIX and LIB attribute
1015
1016PREFIX and LIB can be used to set several INSTALL* attributes in one
1017go. The quickest way to install a module in a non-standard place might
1018be
1019
1020 perl Makefile.PL LIB=~/lib
005c1a0e 1021
bab2b58e 1022This will install the module's architecture-independent files into
1023~/lib, the architecture-dependent files into ~/lib/$archname/auto.
1024
1025Another way to specify many INSTALL directories with a single
1026parameter is PREFIX.
005c1a0e 1027
8e07c86e 1028 perl Makefile.PL PREFIX=~
005c1a0e 1029
0d8023a2 1030This will replace the string specified by $Config{prefix} in all
1031$Config{install*} values.
005c1a0e 1032
bab2b58e 1033Note, that in both cases the tilde expansion is done by MakeMaker, not
de592821 1034by perl by default, nor by make. Conflicts between parameters LIB,
bab2b58e 1035PREFIX and the various INSTALL* arguments are resolved so that
1036XXX
005c1a0e 1037
005c1a0e 1038If the user has superuser privileges, and is not working on AFS
1039(Andrew File System) or relatives, then the defaults for
f1387719 1040INSTALLPRIVLIB, INSTALLARCHLIB, INSTALLSCRIPT, etc. will be appropriate,
005c1a0e 1041and this incantation will be the best:
1042
1043 perl Makefile.PL; make; make test
1044 make install
1045
8e07c86e 1046make install per default writes some documentation of what has been
e05e23b1 1047done into the file C<$(INSTALLARCHLIB)/perllocal.pod>. This feature
1048can be bypassed by calling make pure_install.
8e07c86e 1049
1050=head2 AFS users
1051
1052will have to specify the installation directories as these most
1053probably have changed since perl itself has been installed. They will
1054have to do this by calling
1055
e05e23b1 1056 perl Makefile.PL INSTALLSITELIB=/afs/here/today \
f1387719 1057 INSTALLSCRIPT=/afs/there/now INSTALLMAN3DIR=/afs/for/manpages
8e07c86e 1058 make
1059
e05e23b1 1060Be careful to repeat this procedure every time you recompile an
1061extension, unless you are sure the AFS installation directories are
1062still valid.
005c1a0e 1063
8e07c86e 1064=head2 Static Linking of a new Perl Binary
005c1a0e 1065
1066An extension that is built with the above steps is ready to use on
1067systems supporting dynamic loading. On systems that do not support
1068dynamic loading, any newly created extension has to be linked together
1069with the available resources. MakeMaker supports the linking process
1070by creating appropriate targets in the Makefile whenever an extension
1071is built. You can invoke the corresponding section of the makefile with
1072
1073 make perl
1074
1075That produces a new perl binary in the current directory with all
e05e23b1 1076extensions linked in that can be found in INST_ARCHLIB , SITELIBEXP,
1077and PERL_ARCHLIB. To do that, MakeMaker writes a new Makefile, on
1078UNIX, this is called Makefile.aperl (may be system dependent). If you
1079want to force the creation of a new perl, it is recommended, that you
1080delete this Makefile.aperl, so the directories are searched-through
1081for linkable libraries again.
005c1a0e 1082
1083The binary can be installed into the directory where perl normally
1084resides on your machine with
1085
1086 make inst_perl
1087
1088To produce a perl binary with a different name than C<perl>, either say
1089
1090 perl Makefile.PL MAP_TARGET=myperl
1091 make myperl
1092 make inst_perl
1093
1094or say
1095
1096 perl Makefile.PL
1097 make myperl MAP_TARGET=myperl
1098 make inst_perl MAP_TARGET=myperl
1099
1100In any case you will be prompted with the correct invocation of the
1101C<inst_perl> target that installs the new binary into INSTALLBIN.
1102
8e07c86e 1103make inst_perl per default writes some documentation of what has been
1104done into the file C<$(INSTALLARCHLIB)/perllocal.pod>. This
1105can be bypassed by calling make pure_inst_perl.
005c1a0e 1106
e05e23b1 1107Warning: the inst_perl: target will most probably overwrite your
1108existing perl binary. Use with care!
005c1a0e 1109
8e07c86e 1110Sometimes you might want to build a statically linked perl although
1111your system supports dynamic loading. In this case you may explicitly
1112set the linktype with the invocation of the Makefile.PL or make:
1113
1114 perl Makefile.PL LINKTYPE=static # recommended
1115
1116or
1117
1118 make LINKTYPE=static # works on most systems
1119
005c1a0e 1120=head2 Determination of Perl Library and Installation Locations
1121
1122MakeMaker needs to know, or to guess, where certain things are
e05e23b1 1123located. Especially INST_LIB and INST_ARCHLIB (where to put the files
1124during the make(1) run), PERL_LIB and PERL_ARCHLIB (where to read
1125existing modules from), and PERL_INC (header files and C<libperl*.*>).
005c1a0e 1126
1127Extensions may be built either using the contents of the perl source
e05e23b1 1128directory tree or from the installed perl library. The recommended way
1129is to build extensions after you have run 'make install' on perl
1130itself. You can do that in any directory on your hard disk that is not
1131below the perl source tree. The support for extensions below the ext
1132directory of the perl distribution is only good for the standard
1133extensions that come with perl.
005c1a0e 1134
1135If an extension is being built below the C<ext/> directory of the perl
e05e23b1 1136source then MakeMaker will set PERL_SRC automatically (e.g.,
1137C<../..>). If PERL_SRC is defined and the extension is recognized as
1138a standard extension, then other variables default to the following:
005c1a0e 1139
1140 PERL_INC = PERL_SRC
1141 PERL_LIB = PERL_SRC/lib
1142 PERL_ARCHLIB = PERL_SRC/lib
1143 INST_LIB = PERL_LIB
1144 INST_ARCHLIB = PERL_ARCHLIB
1145
1146If an extension is being built away from the perl source then MakeMaker
1147will leave PERL_SRC undefined and default to using the installed copy
1148of the perl library. The other variables default to the following:
1149
e05e23b1 1150 PERL_INC = $archlibexp/CORE
1151 PERL_LIB = $privlibexp
1152 PERL_ARCHLIB = $archlibexp
1153 INST_LIB = ./blib/lib
1154 INST_ARCHLIB = ./blib/arch
005c1a0e 1155
1156If perl has not yet been installed then PERL_SRC can be defined on the
1157command line as shown in the previous section.
1158
005c1a0e 1159
f1387719 1160=head2 Which architecture dependent directory?
005c1a0e 1161
f1387719 1162If you don't want to keep the defaults for the INSTALL* macros,
1163MakeMaker helps you to minimize the typing needed: the usual
1164relationship between INSTALLPRIVLIB and INSTALLARCHLIB is determined
1165by Configure at perl compilation time. MakeMaker supports the user who
1166sets INSTALLPRIVLIB. If INSTALLPRIVLIB is set, but INSTALLARCHLIB not,
1167then MakeMaker defaults the latter to be the same subdirectory of
1168INSTALLPRIVLIB as Configure decided for the counterparts in %Config ,
1169otherwise it defaults to INSTALLPRIVLIB. The same relationship holds
1170for INSTALLSITELIB and INSTALLSITEARCH.
005c1a0e 1171
f1387719 1172MakeMaker gives you much more freedom than needed to configure
1173internal variables and get different results. It is worth to mention,
1174that make(1) also lets you configure most of the variables that are
1175used in the Makefile. But in the majority of situations this will not
1176be necessary, and should only be done, if the author of a package
1177recommends it (or you know what you're doing).
005c1a0e 1178
e05e23b1 1179=head2 Using Attributes and Parameters
005c1a0e 1180
1181The following attributes can be specified as arguments to WriteMakefile()
1182or as NAME=VALUE pairs on the command line:
1183
875fa795 1184=over 2
005c1a0e 1185
875fa795 1186=item AUTHOR
8e07c86e 1187
875fa795 1188String containing name (and email address) of package author(s). Is used
1189in PPD (Perl Package Description) files for PPM (Perl Package Manager).
1190
1191=item ABSTRACT
1192
1193One line description of the module. Will be included in PPD file.
1194
1195=item ABSTRACT_FROM
1196
1197Name of the file that contains the package description. MakeMaker looks
1198for a line in the POD matching /^($package\s-\s)(.*)/. This is typically
1199the first line in the "=head1 NAME" section. $2 becomes the abstract.
1200
1201=item BINARY_LOCATION
1202
1203Used when creating PPD files for binary packages. It can be set to a
1204full or relative path or URL to the binary archive for a particular
1205architecture. For example:
1206
1207 perl Makefile.PL BINARY_LOCATION=x86/Agent.tar.gz
1208
1209builds a PPD package that references a binary of the C<Agent> package,
20e08411 1210located in the C<x86> directory relative to the PPD itself.
8e07c86e 1211
864a5fa8 1212=item C
8e07c86e 1213
864a5fa8 1214Ref to array of *.c file names. Initialised from a directory scan
1215and the values portion of the XS attribute hash. This is not
1216currently used by MakeMaker but may be handy in Makefile.PLs.
8e07c86e 1217
875fa795 1218=item CAPI
1219
1220Switch to force usage of the Perl C API even when compiling for PERL_OBJECT.
1221
65d36135 1222Note that this attribute is passed through to any recursive build,
1223but if and only if the submodule's Makefile.PL itself makes no mention
1224of the 'CAPI' attribute.
1225
84902520 1226=item CCFLAGS
1227
1228String that will be included in the compiler call command line between
1229the arguments INC and OPTIMIZE.
1230
864a5fa8 1231=item CONFIG
8e07c86e 1232
864a5fa8 1233Arrayref. E.g. [qw(archname manext)] defines ARCHNAME & MANEXT from
1234config.sh. MakeMaker will add to CONFIG the following values anyway:
1235ar
1236cc
1237cccdlflags
1238ccdlflags
1239dlext
1240dlsrc
1241ld
1242lddlflags
1243ldflags
1244libc
1245lib_ext
1246obj_ext
1247ranlib
e05e23b1 1248sitelibexp
1249sitearchexp
864a5fa8 1250so
8e07c86e 1251
1252=item CONFIGURE
1253
e05e23b1 1254CODE reference. The subroutine should return a hash reference. The
1fef88e7 1255hash may contain further attributes, e.g. {LIBS =E<gt> ...}, that have to
8e07c86e 1256be determined by some evaluation method.
1257
864a5fa8 1258=item DEFINE
8e07c86e 1259
864a5fa8 1260Something like C<"-DHAVE_UNISTD_H">
8e07c86e 1261
864a5fa8 1262=item DIR
8e07c86e 1263
864a5fa8 1264Ref to array of subdirectories containing Makefile.PLs e.g. [ 'sdbm'
1265] in ext/SDBM_File
8e07c86e 1266
864a5fa8 1267=item DISTNAME
8e07c86e 1268
e05e23b1 1269Your name for distributing the package (by tar file). This defaults to
864a5fa8 1270NAME above.
8e07c86e 1271
864a5fa8 1272=item DL_FUNCS
8e07c86e 1273
875fa795 1274Hashref of symbol names for routines to be made available as universal
1275symbols. Each key/value pair consists of the package name and an
1276array of routine names in that package. Used only under AIX, OS/2,
1277VMS and Win32 at present. The routine names supplied will be expanded
1278in the same way as XSUB names are expanded by the XS() macro.
1279Defaults to
8e07c86e 1280
864a5fa8 1281 {"$(NAME)" => ["boot_$(NAME)" ] }
8e07c86e 1282
864a5fa8 1283e.g.
8e07c86e 1284
864a5fa8 1285 {"RPC" => [qw( boot_rpcb rpcb_gettime getnetconfigent )],
1286 "NetconfigPtr" => [ 'DESTROY'] }
8e07c86e 1287
875fa795 1288Please see the L<ExtUtils::Mksymlists> documentation for more information
1289about the DL_FUNCS, DL_VARS and FUNCLIST attributes.
1290
864a5fa8 1291=item DL_VARS
8e07c86e 1292
875fa795 1293Array of symbol names for variables to be made available as universal symbols.
1294Used only under AIX, OS/2, VMS and Win32 at present. Defaults to [].
1295(e.g. [ qw(Foo_version Foo_numstreams Foo_tree ) ])
8e07c86e 1296
f1387719 1297=item EXCLUDE_EXT
1298
1299Array of extension names to exclude when doing a static build. This
1300is ignored if INCLUDE_EXT is present. Consult INCLUDE_EXT for more
1301details. (e.g. [ qw( Socket POSIX ) ] )
1302
1303This attribute may be most useful when specified as a string on the
de592821 1304command line: perl Makefile.PL EXCLUDE_EXT='Socket Safe'
f1387719 1305
864a5fa8 1306=item EXE_FILES
8e07c86e 1307
864a5fa8 1308Ref to array of executable files. The files will be copied to the
f1387719 1309INST_SCRIPT directory. Make realclean will delete them from there
864a5fa8 1310again.
8e07c86e 1311
864a5fa8 1312=item FIRST_MAKEFILE
1313
1314The name of the Makefile to be produced. Defaults to the contents of
1315MAKEFILE, but can be overridden. This is used for the second Makefile
1316that will be produced for the MAP_TARGET.
1317
1318=item FULLPERL
8e07c86e 1319
864a5fa8 1320Perl binary able to run this extension.
1321
762efda7 1322=item FUNCLIST
1323
1324This provides an alternate means to specify function names to be
1325exported from the extension. Its value is a reference to an
1326array of function names to be exported by the extension. These
1327names are passed through unaltered to the linker options file.
1328
864a5fa8 1329=item H
1330
1331Ref to array of *.h file names. Similar to C.
1332
84902520 1333=item IMPORTS
1334
875fa795 1335This attribute is used to specify names to be imported into the
1336extension. It is only used on OS/2 and Win32.
84902520 1337
864a5fa8 1338=item INC
1339
1340Include file dirs eg: C<"-I/usr/5include -I/path/to/inc">
1341
f1387719 1342=item INCLUDE_EXT
1343
1344Array of extension names to be included when doing a static build.
1345MakeMaker will normally build with all of the installed extensions when
1346doing a static build, and that is usually the desired behavior. If
1347INCLUDE_EXT is present then MakeMaker will build only with those extensions
1348which are explicitly mentioned. (e.g. [ qw( Socket POSIX ) ])
1349
1350It is not necessary to mention DynaLoader or the current extension when
1351filling in INCLUDE_EXT. If the INCLUDE_EXT is mentioned but is empty then
1352only DynaLoader and the current extension will be included in the build.
1353
1354This attribute may be most useful when specified as a string on the
de592821 1355command line: perl Makefile.PL INCLUDE_EXT='POSIX Socket Devel::Peek'
f1387719 1356
864a5fa8 1357=item INSTALLARCHLIB
1358
e05e23b1 1359Used by 'make install', which copies files from INST_ARCHLIB to this
1360directory if INSTALLDIRS is set to perl.
864a5fa8 1361
1362=item INSTALLBIN
1363
f1387719 1364Directory to install binary files (e.g. tkperl) into.
e05e23b1 1365
1366=item INSTALLDIRS
1367
1368Determines which of the two sets of installation directories to
1369choose: installprivlib and installarchlib versus installsitelib and
1370installsitearch. The first pair is chosen with INSTALLDIRS=perl, the
1371second with INSTALLDIRS=site. Default is site.
8e07c86e 1372
1373=item INSTALLMAN1DIR
1374
864a5fa8 1375This directory gets the man pages at 'make install' time. Defaults to
1376$Config{installman1dir}.
1377
8e07c86e 1378=item INSTALLMAN3DIR
1379
864a5fa8 1380This directory gets the man pages at 'make install' time. Defaults to
1381$Config{installman3dir}.
8e07c86e 1382
864a5fa8 1383=item INSTALLPRIVLIB
8e07c86e 1384
e05e23b1 1385Used by 'make install', which copies files from INST_LIB to this
1386directory if INSTALLDIRS is set to perl.
1387
f1387719 1388=item INSTALLSCRIPT
1389
1390Used by 'make install' which copies files from INST_SCRIPT to this
1391directory.
1392
875fa795 1393=item INSTALLSITEARCH
e05e23b1 1394
875fa795 1395Used by 'make install', which copies files from INST_ARCHLIB to this
e05e23b1 1396directory if INSTALLDIRS is set to site (default).
1397
875fa795 1398=item INSTALLSITELIB
e05e23b1 1399
875fa795 1400Used by 'make install', which copies files from INST_LIB to this
e05e23b1 1401directory if INSTALLDIRS is set to site (default).
8e07c86e 1402
864a5fa8 1403=item INST_ARCHLIB
8e07c86e 1404
864a5fa8 1405Same as INST_LIB for architecture dependent files.
8e07c86e 1406
f1387719 1407=item INST_BIN
1408
1409Directory to put real binary files during 'make'. These will be copied
1410to INSTALLBIN during 'make install'
1411
864a5fa8 1412=item INST_EXE
8e07c86e 1413
f1387719 1414Old name for INST_SCRIPT. Deprecated. Please use INST_SCRIPT if you
1415need to use it.
8e07c86e 1416
864a5fa8 1417=item INST_LIB
8e07c86e 1418
864a5fa8 1419Directory where we put library files of this extension while building
1420it.
8e07c86e 1421
864a5fa8 1422=item INST_MAN1DIR
8e07c86e 1423
864a5fa8 1424Directory to hold the man pages at 'make' time
8e07c86e 1425
864a5fa8 1426=item INST_MAN3DIR
8e07c86e 1427
864a5fa8 1428Directory to hold the man pages at 'make' time
8e07c86e 1429
f1387719 1430=item INST_SCRIPT
1431
1432Directory, where executable files should be installed during
1433'make'. Defaults to "./blib/bin", just to have a dummy location during
1434testing. make install will copy the files in INST_SCRIPT to
1435INSTALLSCRIPT.
1436
864a5fa8 1437=item LDFROM
8e07c86e 1438
864a5fa8 1439defaults to "$(OBJECT)" and is used in the ld command to specify
1440what files to link/load from (also see dynamic_lib below for how to
1441specify ld flags)
8e07c86e 1442
bab2b58e 1443=item LIB
1444
1445LIB can only be set at C<perl Makefile.PL> time. It has the effect of
1446setting both INSTALLPRIVLIB and INSTALLSITELIB to that value regardless any
1447
762efda7 1448=item LIBPERL_A
1449
1450The filename of the perllibrary that will be used together with this
1451extension. Defaults to libperl.a.
1452
8e07c86e 1453=item LIBS
1454
1455An anonymous array of alternative library
1456specifications to be searched for (in order) until
864a5fa8 1457at least one library is found. E.g.
8e07c86e 1458
1459 'LIBS' => ["-lgdbm", "-ldbm -lfoo", "-L/path -ldbm.nfs"]
1460
1461Mind, that any element of the array
1462contains a complete set of arguments for the ld
1463command. So do not specify
1464
1465 'LIBS' => ["-ltcl", "-ltk", "-lX11"]
1466
1467See ODBM_File/Makefile.PL for an example, where an array is needed. If
1468you specify a scalar as in
1469
1470 'LIBS' => "-ltcl -ltk -lX11"
1471
1472MakeMaker will turn it into an array with one element.
1473
864a5fa8 1474=item LINKTYPE
8e07c86e 1475
e05e23b1 1476'static' or 'dynamic' (default unless usedl=undef in
1477config.sh). Should only be used to force static linking (also see
864a5fa8 1478linkext below).
8e07c86e 1479
864a5fa8 1480=item MAKEAPERL
8e07c86e 1481
864a5fa8 1482Boolean which tells MakeMaker, that it should include the rules to
1483make a perl. This is handled automatically as a switch by
1484MakeMaker. The user normally does not need it.
8e07c86e 1485
864a5fa8 1486=item MAKEFILE
8e07c86e 1487
864a5fa8 1488The name of the Makefile to be produced.
8e07c86e 1489
864a5fa8 1490=item MAN1PODS
8e07c86e 1491
864a5fa8 1492Hashref of pod-containing files. MakeMaker will default this to all
1493EXE_FILES files that include POD directives. The files listed
1494here will be converted to man pages and installed as was requested
1495at Configure time.
8e07c86e 1496
864a5fa8 1497=item MAN3PODS
8e07c86e 1498
864a5fa8 1499Hashref of .pm and .pod files. MakeMaker will default this to all
1500 .pod and any .pm files that include POD directives. The files listed
1501here will be converted to man pages and installed as was requested
1502at Configure time.
8e07c86e 1503
864a5fa8 1504=item MAP_TARGET
8e07c86e 1505
864a5fa8 1506If it is intended, that a new perl binary be produced, this variable
1507may hold a name for that binary. Defaults to perl
8e07c86e 1508
864a5fa8 1509=item MYEXTLIB
4633a7c4 1510
864a5fa8 1511If the extension links to a library that it builds set this to the
1512name of the library (see SDBM_File)
4633a7c4 1513
864a5fa8 1514=item NAME
8e07c86e 1515
864a5fa8 1516Perl module name for this extension (DBD::Oracle). This will default
1517to the directory name but should be explicitly defined in the
1518Makefile.PL.
8e07c86e 1519
864a5fa8 1520=item NEEDS_LINKING
8e07c86e 1521
864a5fa8 1522MakeMaker will figure out, if an extension contains linkable code
1523anywhere down the directory tree, and will set this variable
1524accordingly, but you can speed it up a very little bit, if you define
1525this boolean variable yourself.
8e07c86e 1526
e05e23b1 1527=item NOECHO
1528
f1387719 1529Defaults to C<@>. By setting it to an empty string you can generate a
e05e23b1 1530Makefile that echos all commands. Mainly used in debugging MakeMaker
1531itself.
1532
864a5fa8 1533=item NORECURS
8e07c86e 1534
e05e23b1 1535Boolean. Attribute to inhibit descending into subdirectories.
8e07c86e 1536
762efda7 1537=item NO_VC
1538
1539In general any generated Makefile checks for the current version of
1540MakeMaker and the version the Makefile was built under. If NO_VC is
1541set, the version check is neglected. Do not write this into your
1542Makefile.PL, use it interactively instead.
1543
864a5fa8 1544=item OBJECT
8e07c86e 1545
864a5fa8 1546List of object files, defaults to '$(BASEEXT)$(OBJ_EXT)', but can be a long
1547string containing all object files, e.g. "tkpBind.o
1548tkpButton.o tkpCanvas.o"
8e07c86e 1549
3b03c0f3 1550=item OPTIMIZE
1551
1552Defaults to C<-O>. Set it to C<-g> to turn debugging on. The flag is
1553passed to subdirectory makes.
1554
864a5fa8 1555=item PERL
8e07c86e 1556
864a5fa8 1557Perl binary for tasks that can be done by miniperl
8e07c86e 1558
864a5fa8 1559=item PERLMAINCC
005c1a0e 1560
864a5fa8 1561The call to the program that is able to compile perlmain.c. Defaults
1562to $(CC).
005c1a0e 1563
864a5fa8 1564=item PERL_ARCHLIB
005c1a0e 1565
864a5fa8 1566Same as above for architecture dependent files
8e07c86e 1567
864a5fa8 1568=item PERL_LIB
8e07c86e 1569
864a5fa8 1570Directory containing the Perl library to use.
8e07c86e 1571
864a5fa8 1572=item PERL_SRC
8e07c86e 1573
864a5fa8 1574Directory containing the Perl source code (use of this should be
1575avoided, it may be undefined)
8e07c86e 1576
2366100d 1577=item PERM_RW
1578
de592821 1579Desired permission for read/writable files. Defaults to C<644>.
2366100d 1580See also L<MM_Unix/perm_rw>.
1581
1582=item PERM_RWX
1583
1584Desired permission for executable files. Defaults to C<755>.
1585See also L<MM_Unix/perm_rwx>.
1586
864a5fa8 1587=item PL_FILES
8e07c86e 1588
864a5fa8 1589Ref to hash of files to be processed as perl programs. MakeMaker
1590will default to any found *.PL file (except Makefile.PL) being keys
1591and the basename of the file being the value. E.g.
8e07c86e 1592
864a5fa8 1593 {'foobar.PL' => 'foobar'}
8e07c86e 1594
864a5fa8 1595The *.PL files are expected to produce output to the target files
3aa35033 1596themselves. If multiple files can be generated from the same *.PL
1597file then the value in the hash can be a reference to an array of
1598target file names. E.g.
1599
1600 {'foobar.PL' => ['foobar1','foobar2']}
8e07c86e 1601
864a5fa8 1602=item PM
8e07c86e 1603
864a5fa8 1604Hashref of .pm files and *.pl files to be installed. e.g.
8e07c86e 1605
864a5fa8 1606 {'name_of_file.pm' => '$(INST_LIBDIR)/install_as.pm'}
8e07c86e 1607
a3cb178b 1608By default this will include *.pm and *.pl and the files found in
1609the PMLIBDIRS directories. Defining PM in the
864a5fa8 1610Makefile.PL will override PMLIBDIRS.
8e07c86e 1611
864a5fa8 1612=item PMLIBDIRS
8e07c86e 1613
864a5fa8 1614Ref to array of subdirectories containing library files. Defaults to
a3cb178b 1615[ 'lib', $(BASEEXT) ]. The directories will be scanned and I<any> files
864a5fa8 1616they contain will be installed in the corresponding location in the
1617library. A libscan() method can be used to alter the behaviour.
1618Defining PM in the Makefile.PL will override PMLIBDIRS.
8e07c86e 1619
875fa795 1620=item PPM_INSTALL_EXEC
1621
20e08411 1622Name of the executable used to run C<PPM_INSTALL_SCRIPT> below. (e.g. perl)
875fa795 1623
1624=item PPM_INSTALL_SCRIPT
1625
1626Name of the script that gets executed by the Perl Package Manager after
1627the installation of a package.
1628
864a5fa8 1629=item PREFIX
8e07c86e 1630
864a5fa8 1631Can be used to set the three INSTALL* attributes in one go (except for
e05e23b1 1632probably INSTALLMAN1DIR, if it is not below PREFIX according to
1633%Config). They will have PREFIX as a common directory node and will
1634branch from that node into lib/, lib/ARCHNAME or whatever Configure
1635decided at the build time of your perl (unless you override one of
1636them, of course).
8e07c86e 1637
f1387719 1638=item PREREQ_PM
8e07c86e 1639
f1387719 1640Hashref: Names of modules that need to be available to run this
1641extension (e.g. Fcntl for SDBM_File) are the keys of the hash and the
1642desired version is the value. If the required version number is 0, we
1643only check if any version is installed already.
8e07c86e 1644
864a5fa8 1645=item SKIP
8e07c86e 1646
864a5fa8 1647Arryref. E.g. [qw(name1 name2)] skip (do not write) sections of the
f1387719 1648Makefile. Caution! Do not use the SKIP attribute for the neglectible
1649speedup. It may seriously damage the resulting Makefile. Only use it,
1650if you really need it.
8e07c86e 1651
864a5fa8 1652=item TYPEMAPS
8e07c86e 1653
864a5fa8 1654Ref to array of typemap file names. Use this when the typemaps are
1655in some directory other than the current directory or when they are
1656not named B<typemap>. The last typemap in the list takes
1657precedence. A typemap in the current directory has highest
1658precedence, even if it isn't listed in TYPEMAPS. The default system
1659typemap has lowest precedence.
8e07c86e 1660
864a5fa8 1661=item VERSION
8e07c86e 1662
864a5fa8 1663Your version number for distributing the package. This defaults to
16640.1.
8e07c86e 1665
0d8023a2 1666=item VERSION_FROM
1667
1668Instead of specifying the VERSION in the Makefile.PL you can let
1669MakeMaker parse a file to determine the version number. The parsing
1670routine requires that the file named by VERSION_FROM contains one
1671single line to compute the version number. The first line in the file
1672that contains the regular expression
1673
84902520 1674 /([\$*])(([\w\:\']*)\bVERSION)\b.*\=/
0d8023a2 1675
1676will be evaluated with eval() and the value of the named variable
1677B<after> the eval() will be assigned to the VERSION attribute of the
1678MakeMaker object. The following lines will be parsed o.k.:
1679
1680 $VERSION = '1.00';
84902520 1681 *VERSION = \'1.01';
2366100d 1682 ( $VERSION ) = '$Revision: 1.222 $ ' =~ /\$Revision:\s+([^\s]+)/;
0d8023a2 1683 $FOO::VERSION = '1.10';
84902520 1684 *FOO::VERSION = \'1.11';
0d8023a2 1685
1686but these will fail:
1687
1688 my $VERSION = '1.01';
1689 local $VERSION = '1.02';
1690 local $FOO::VERSION = '1.30';
1691
84902520 1692The file named in VERSION_FROM is not added as a dependency to
1693Makefile. This is not really correct, but it would be a major pain
1694during development to have to rewrite the Makefile for any smallish
1695change in that file. If you want to make sure that the Makefile
1696contains the correct VERSION macro after any change of the file, you
1697would have to do something like
1698
1699 depend => { Makefile => '$(VERSION_FROM)' }
1700
1701See attribute C<depend> below.
0d8023a2 1702
864a5fa8 1703=item XS
8e07c86e 1704
864a5fa8 1705Hashref of .xs files. MakeMaker will default this. e.g.
8e07c86e 1706
864a5fa8 1707 {'name_of_file.xs' => 'name_of_file.c'}
8e07c86e 1708
864a5fa8 1709The .c files will automatically be included in the list of files
1710deleted by a make clean.
4633a7c4 1711
864a5fa8 1712=item XSOPT
8e07c86e 1713
864a5fa8 1714String of options to pass to xsubpp. This might include C<-C++> or
1715C<-extern>. Do not include typemaps here; the TYPEMAP parameter exists for
1716that purpose.
8e07c86e 1717
864a5fa8 1718=item XSPROTOARG
4633a7c4 1719
4e68a208 1720May be set to an empty string, which is identical to C<-prototypes>, or
864a5fa8 1721C<-noprototypes>. See the xsubpp documentation for details. MakeMaker
4e68a208 1722defaults to the empty string.
1723
0d8023a2 1724=item XS_VERSION
1725
1726Your version number for the .xs file of this package. This defaults
1727to the value of the VERSION attribute.
1728
8e07c86e 1729=back
1730
1731=head2 Additional lowercase attributes
1732
1733can be used to pass parameters to the methods which implement that
f1387719 1734part of the Makefile.
8e07c86e 1735
1736=over 2
1737
864a5fa8 1738=item clean
8e07c86e 1739
864a5fa8 1740 {FILES => "*.xyz foo"}
1741
c07a80fd 1742=item depend
1743
1744 {ANY_TARGET => ANY_DEPENDECY, ...}
1745
864a5fa8 1746=item dist
1747
5f8e730b 1748 {TARFLAGS => 'cvfF', COMPRESS => 'gzip', SUFFIX => '.gz',
3b03c0f3 1749 SHAR => 'shar -m', DIST_CP => 'ln', ZIP => '/bin/zip',
f1387719 1750 ZIPFLAGS => '-rl', DIST_DEFAULT => 'private tardist' }
864a5fa8 1751
1752If you specify COMPRESS, then SUFFIX should also be altered, as it is
1753needed to tell make the target file of the compression. Setting
1754DIST_CP to ln can be useful, if you need to preserve the timestamps on
1755your files. DIST_CP can take the values 'cp', which copies the file,
1756'ln', which links the file, and 'best' which copies symbolic links and
1757links the rest. Default is 'best'.
1758
1759=item dynamic_lib
1760
0d8023a2 1761 {ARMAYBE => 'ar', OTHERLDFLAGS => '...', INST_DYNAMIC_DEP => '...'}
8e07c86e 1762
8e07c86e 1763=item linkext
1764
1765 {LINKTYPE => 'static', 'dynamic' or ''}
1766
864a5fa8 1767NB: Extensions that have nothing but *.pm files had to say
8e07c86e 1768
1769 {LINKTYPE => ''}
1770
864a5fa8 1771with Pre-5.0 MakeMakers. Since version 5.00 of MakeMaker such a line
1772can be deleted safely. MakeMaker recognizes, when there's nothing to
1773be linked.
8e07c86e 1774
864a5fa8 1775=item macro
8e07c86e 1776
864a5fa8 1777 {ANY_MACRO => ANY_VALUE, ...}
8e07c86e 1778
1779=item realclean
1780
1781 {FILES => '$(INST_ARCHAUTODIR)/*.xyz'}
1782
f2f614a6 1783=item test
1784
1785 {TESTS => 't/*.t'}
1786
8e07c86e 1787=item tool_autosplit
1788
f2f614a6 1789 {MAXLEN => 8}
005c1a0e 1790
1791=back
1792
1793=head2 Overriding MakeMaker Methods
1794
1795If you cannot achieve the desired Makefile behaviour by specifying
1796attributes you may define private subroutines in the Makefile.PL.
1797Each subroutines returns the text it wishes to have written to
1798the Makefile. To override a section of the Makefile you can
1799either say:
1800
1801 sub MY::c_o { "new literal text" }
1802
1803or you can edit the default by saying something like:
1804
8e07c86e 1805 sub MY::c_o {
14870ecd 1806 package MY; # so that "SUPER" works right
1807 my $inherited = shift->SUPER::c_o(@_);
f1387719 1808 $inherited =~ s/old text/new text/;
1809 $inherited;
8e07c86e 1810 }
1811
bdda3fbd 1812If you are running experiments with embedding perl as a library into
1813other applications, you might find MakeMaker is not sufficient. You'd
1814better have a look at ExtUtils::Embed which is a collection of utilities
1815for embedding.
005c1a0e 1816
1817If you still need a different solution, try to develop another
bdda3fbd 1818subroutine that fits your needs and submit the diffs to
1819F<perl5-porters@perl.org> or F<comp.lang.perl.moderated> as appropriate.
005c1a0e 1820
3b03c0f3 1821For a complete description of all MakeMaker methods see L<ExtUtils::MM_Unix>.
1822
1823Here is a simple example of how to add a new target to the generated
1824Makefile:
1825
1826 sub MY::postamble {
1827 '
1828 $(MYEXTLIB): sdbm/Makefile
1829 cd sdbm && $(MAKE) all
1830 ';
1831 }
1832
1833
f1387719 1834=head2 Hintsfile support
1835
1836MakeMaker.pm uses the architecture specific information from
1837Config.pm. In addition it evaluates architecture specific hints files
1838in a C<hints/> directory. The hints files are expected to be named
1839like their counterparts in C<PERL_SRC/hints>, but with an C<.pl> file
1840name extension (eg. C<next_3_2.pl>). They are simply C<eval>ed by
1841MakeMaker within the WriteMakefile() subroutine, and can be used to
1842execute commands as well as to include special variables. The rules
1843which hintsfile is chosen are the same as in Configure.
1844
1845The hintsfile is eval()ed immediately after the arguments given to
1846WriteMakefile are stuffed into a hash reference $self but before this
1847reference becomes blessed. So if you want to do the equivalent to
1848override or create an attribute you would say something like
1849
1850 $self->{LIBS} = ['-ldbm -lucb -lc'];
1851
005c1a0e 1852=head2 Distribution Support
1853
1854For authors of extensions MakeMaker provides several Makefile
1855targets. Most of the support comes from the ExtUtils::Manifest module,
1856where additional documentation can be found.
1857
1858=over 4
1859
1860=item make distcheck
8e07c86e 1861
005c1a0e 1862reports which files are below the build directory but not in the
1863MANIFEST file and vice versa. (See ExtUtils::Manifest::fullcheck() for
1864details)
1865
4633a7c4 1866=item make skipcheck
1867
1868reports which files are skipped due to the entries in the
1869C<MANIFEST.SKIP> file (See ExtUtils::Manifest::skipcheck() for
1870details)
1871
005c1a0e 1872=item make distclean
8e07c86e 1873
005c1a0e 1874does a realclean first and then the distcheck. Note that this is not
1875needed to build a new distribution as long as you are sure, that the
1876MANIFEST file is ok.
1877
1878=item make manifest
8e07c86e 1879
005c1a0e 1880rewrites the MANIFEST file, adding all remaining files found (See
1881ExtUtils::Manifest::mkmanifest() for details)
1882
1883=item make distdir
8e07c86e 1884
005c1a0e 1885Copies all the files that are in the MANIFEST file to a newly created
1886directory with the name C<$(DISTNAME)-$(VERSION)>. If that directory
1887exists, it will be removed first.
1888
8e07c86e 1889=item make disttest
1890
1891Makes a distdir first, and runs a C<perl Makefile.PL>, a make, and
4633a7c4 1892a make test in that directory.
8e07c86e 1893
005c1a0e 1894=item make tardist
8e07c86e 1895
3b03c0f3 1896First does a distdir. Then a command $(PREOP) which defaults to a null
f1387719 1897command, followed by $(TOUNIX), which defaults to a null command under
1898UNIX, and will convert files in distribution directory to UNIX format
1899otherwise. Next it runs C<tar> on that directory into a tarfile and
3b03c0f3 1900deletes the directory. Finishes with a command $(POSTOP) which
1901defaults to a null command.
005c1a0e 1902
1903=item make dist
8e07c86e 1904
005c1a0e 1905Defaults to $(DIST_DEFAULT) which in turn defaults to tardist.
1906
1907=item make uutardist
8e07c86e 1908
005c1a0e 1909Runs a tardist first and uuencodes the tarfile.
1910
1911=item make shdist
8e07c86e 1912
3b03c0f3 1913First does a distdir. Then a command $(PREOP) which defaults to a null
1914command. Next it runs C<shar> on that directory into a sharfile and
1915deletes the intermediate directory again. Finishes with a command
1916$(POSTOP) which defaults to a null command. Note: For shdist to work
1917properly a C<shar> program that can handle directories is mandatory.
1918
1919=item make zipdist
1920
1921First does a distdir. Then a command $(PREOP) which defaults to a null
1922command. Runs C<$(ZIP) $(ZIPFLAGS)> on that directory into a
1923zipfile. Then deletes that directory. Finishes with a command
1924$(POSTOP) which defaults to a null command.
005c1a0e 1925
1926=item make ci
8e07c86e 1927
1928Does a $(CI) and a $(RCS_LABEL) on all files in the MANIFEST file.
1929
1930=back
005c1a0e 1931
1932Customization of the dist targets can be done by specifying a hash
1933reference to the dist attribute of the WriteMakefile call. The
1934following parameters are recognized:
1935
8e07c86e 1936 CI ('ci -u')
5f8e730b 1937 COMPRESS ('gzip --best')
005c1a0e 1938 POSTOP ('@ :')
8e07c86e 1939 PREOP ('@ :')
f1387719 1940 TO_UNIX (depends on the system)
8e07c86e 1941 RCS_LABEL ('rcs -q -Nv$(VERSION_SYM):')
1942 SHAR ('shar')
5f8e730b 1943 SUFFIX ('.gz')
8e07c86e 1944 TAR ('tar')
1945 TARFLAGS ('cvf')
3b03c0f3 1946 ZIP ('zip')
1947 ZIPFLAGS ('-r')
005c1a0e 1948
1949An example:
1950
5f8e730b 1951 WriteMakefile( 'dist' => { COMPRESS=>"bzip2", SUFFIX=>".bz2" })
005c1a0e 1952
1b171b8d 1953=head2 Disabling an extension
1954
1955If some events detected in F<Makefile.PL> imply that there is no way
1956to create the Module, but this is a normal state of things, then you
1957can create a F<Makefile> which does nothing, but succeeds on all the
1958"usual" build targets. To do so, use
1959
1960 ExtUtils::MakeMaker::WriteEmptyMakefile();
1961
1962instead of WriteMakefile().
1963
1964This may be useful if other modules expect this module to be I<built>
1965OK, as opposed to I<work> OK (say, this system-dependent module builds
1966in a subdirectory of some other distribution, or is listed as a
1967dependency in a CPAN::Bundle, but the functionality is supported by
1968different means on the current architecture).
1969
6ce21ffa 1970=head1 ENVIRONMENT
1971
1972=over 8
1973
2443aee5 1974=item PERL_MM_OPT
6ce21ffa 1975
1976Command line options used by C<MakeMaker-E<gt>new()>, and thus by
1977C<WriteMakefile()>. The string is split on whitespace, and the result
1978is processed before any actual command line arguments are processed.
1979
1980=back
1981
f1387719 1982=head1 SEE ALSO
1983
1984ExtUtils::MM_Unix, ExtUtils::Manifest, ExtUtils::testlib,
bdda3fbd 1985ExtUtils::Install, ExtUtils::Embed
005c1a0e 1986
e05e23b1 1987=head1 AUTHORS
fed7345c 1988
352854fa 1989Andy Dougherty <F<doughera@lafcol.lafayette.edu>>, Andreas KE<ouml>nig
1990<F<A.Koenig@franz.ww.TU-Berlin.DE>>, Tim Bunce <F<Tim.Bunce@ig.co.uk>>.
bd3fa61c 1991VMS support by Charles Bailey <F<bailey@newman.upenn.edu>>. OS/2
352854fa 1992support by Ilya Zakharevich <F<ilya@math.ohio-state.edu>>. Contact the
e05e23b1 1993makemaker mailing list C<mailto:makemaker@franz.ww.tu-berlin.de>, if
1994you have any questions.
fed7345c 1995
005c1a0e 1996=cut