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