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