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