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