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