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