At least, fix the MakeMaker build_man tests.
[p5sagit/p5-mst-13.2.git] / lib / ExtUtils / MakeMaker.pm
CommitLineData
1e65eb70 1# $Id: /local/ExtUtils-MakeMaker/lib/ExtUtils/MakeMaker.pm 27436 2007-02-21T15:59:55.429725Z schwern $
e05e23b1 2package ExtUtils::MakeMaker;
3
57b1a898 4BEGIN {require 5.005_03;}
5
8e07c86e 6require Exporter;
7292dc67 7use ExtUtils::MakeMaker::Config;
3b03c0f3 8use Carp ();
dedf98bc 9use File::Path;
e05e23b1 10
11use vars qw(
f6d6199c 12 @ISA @EXPORT @EXPORT_OK
1e65eb70 13 $VERSION $Verbose %Config
dedf98bc 14 @Prepend_parent @Parent
1e65eb70 15 %Recognized_Att_Keys @Get_from_Config @MM_Sections @Overridable
dedf98bc 16 $Filename
f6d6199c 17 );
7292dc67 18
19# Has to be on its own line with no $ after it to avoid being noticed by
20# the version control system
21use vars qw($Revision);
5e9e174b 22use strict;
005c1a0e 23
1e65eb70 24$VERSION = '6.32_01';
25($Revision) = q$Revision: 27436 $ =~ /Revision:\s+(\S+)/;
7292dc67 26
e05e23b1 27@ISA = qw(Exporter);
28@EXPORT = qw(&WriteMakefile &writeMakefile $Verbose &prompt);
1e65eb70 29@EXPORT_OK = qw($VERSION &neatvalue &mkbootstrap &mksymlists
30 &WriteEmptyMakefile);
42793c05 31
f6d6199c 32# These will go away once the last of the Win32 & VMS specific code is
33# purged.
5e9e174b 34my $Is_VMS = $^O eq 'VMS';
5e9e174b 35my $Is_Win32 = $^O eq 'MSWin32';
3b03c0f3 36
dedf98bc 37# Our filename for diagnostic and debugging purposes. More reliable
38# than %INC (think caseless filesystems)
39$Filename = __FILE__;
40
9ab29e2b 41full_setup();
864a5fa8 42
f6d6199c 43require ExtUtils::MM; # Things like CPAN assume loading ExtUtils::MakeMaker
44 # will give them MM.
e05e23b1 45
45bc4d3a 46require ExtUtils::MY; # XXX pre-5.8 versions of ExtUtils::Embed expect
47 # loading ExtUtils::MakeMaker will give them MY.
48 # This will go when Embed is it's own CPAN module.
49
f1387719 50
3b03c0f3 51sub WriteMakefile {
52 Carp::croak "WriteMakefile: Need even number of args" if @_ % 2;
f1387719 53
f6d6199c 54 require ExtUtils::MY;
3b03c0f3 55 my %att = @_;
69ff8adf 56
57 _verify_att(\%att);
58
e0678a30 59 my $mm = MM->new(\%att);
60 $mm->flush;
61
62 return $mm;
3b03c0f3 63}
64
69ff8adf 65
d5d4ec93 66# Basic signatures of the attributes WriteMakefile takes. Each is the
67# reference type. Empty value indicate it takes a non-reference
68# scalar.
479d2113 69my %Att_Sigs;
70my %Special_Sigs = (
d5d4ec93 71 C => 'array',
d5d4ec93 72 CONFIG => 'array',
73 CONFIGURE => 'code',
d5d4ec93 74 DIR => 'array',
d5d4ec93 75 DL_FUNCS => 'hash',
76 DL_VARS => 'array',
77 EXCLUDE_EXT => 'array',
78 EXE_FILES => 'array',
d5d4ec93 79 FUNCLIST => 'array',
80 H => 'array',
81 IMPORTS => 'hash',
d5d4ec93 82 INCLUDE_EXT => 'array',
d5d4ec93 83 LIBS => ['array',''],
d5d4ec93 84 MAN1PODS => 'hash',
85 MAN3PODS => 'hash',
d5d4ec93 86 PL_FILES => 'hash',
87 PM => 'hash',
88 PMLIBDIRS => 'array',
2977d345 89 PMLIBPARENTDIRS => 'array',
d5d4ec93 90 PREREQ_PM => 'hash',
d5d4ec93 91 SKIP => 'array',
92 TYPEMAPS => 'array',
d5d4ec93 93 XS => 'hash',
479d2113 94 _KEEP_AFTER_FLUSH => '',
69ff8adf 95
96 clean => 'hash',
97 depend => 'hash',
98 dist => 'hash',
99 dynamic_lib=> 'hash',
100 linkext => 'hash',
101 macro => 'hash',
531e2ba1 102 postamble => 'hash',
69ff8adf 103 realclean => 'hash',
104 test => 'hash',
105 tool_autosplit => 'hash',
106);
107
479d2113 108@Att_Sigs{keys %Recognized_Att_Keys} = ('') x keys %Recognized_Att_Keys;
109@Att_Sigs{keys %Special_Sigs} = values %Special_Sigs;
110
69ff8adf 111
112sub _verify_att {
113 my($att) = @_;
114
115 while( my($key, $val) = each %$att ) {
116 my $sig = $Att_Sigs{$key};
d5d4ec93 117 unless( defined $sig ) {
118 warn "WARNING: $key is not a known parameter.\n";
119 next;
120 }
121
122 my @sigs = ref $sig ? @$sig : $sig;
123 my $given = lc ref $val;
69ff8adf 124 unless( grep $given eq $_, @sigs ) {
d5d4ec93 125 my $takes = join " or ", map { $_ ne '' ? "$_ reference"
126 : "string/number"
69ff8adf 127 } @sigs;
d5d4ec93 128 my $has = $given ne '' ? "$given reference"
129 : "string/number";
69ff8adf 130 warn "WARNING: $key takes a $takes not a $has.\n".
131 " Please inform the author.\n";
69ff8adf 132 }
133 }
134}
135
f1387719 136sub prompt ($;$) {
479d2113 137 my($mess, $def) = @_;
e0678a30 138 Carp::confess("prompt function called without an argument")
139 unless defined $mess;
479d2113 140
141 my $isa_tty = -t STDIN && (-t STDOUT || !(-f STDOUT || -c STDOUT)) ;
142
f1387719 143 my $dispdef = defined $def ? "[$def] " : " ";
144 $def = defined $def ? $def : "";
479d2113 145
13bc20ff 146 local $|=1;
f6d6199c 147 local $\;
13bc20ff 148 print "$mess $dispdef";
479d2113 149
150 my $ans;
151 if ($ENV{PERL_MM_USE_DEFAULT} || (!$isa_tty && eof STDIN)) {
152 print "$def\n";
153 }
154 else {
f6d6199c 155 $ans = <STDIN>;
156 if( defined $ans ) {
157 chomp $ans;
158 }
159 else { # user hit ctrl-D
160 print "\n";
161 }
162 }
479d2113 163
f6d6199c 164 return (!defined $ans || $ans eq '') ? $def : $ans;
3b03c0f3 165}
166
e05e23b1 167sub eval_in_subdirs {
168 my($self) = @_;
a8112c7f 169 use Cwd qw(cwd abs_path);
f582e489 170 my $pwd = cwd() || die "Can't figure out your cwd!";
171
3593a55e 172 local @INC = map eval {abs_path($_) if -e} || $_, @INC;
f6d6199c 173 push @INC, '.'; # '.' has to always be at the end of @INC
e05e23b1 174
5e9e174b 175 foreach my $dir (@{$self->{DIR}}){
f6d6199c 176 my($abs) = $self->catdir($pwd,$dir);
a7d1454b 177 eval { $self->eval_in_x($abs); };
178 last if $@;
e05e23b1 179 }
e05e23b1 180 chdir $pwd;
a7d1454b 181 die $@ if $@;
864a5fa8 182}
42793c05 183
e05e23b1 184sub eval_in_x {
185 my($self,$dir) = @_;
6626a13a 186 chdir $dir or Carp::carp("Couldn't change to directory $dir: $!");
5e9e174b 187
f6d6199c 188 {
189 package main;
190 do './Makefile.PL';
191 };
f1387719 192 if ($@) {
f6d6199c 193# if ($@ =~ /prerequisites/) {
194# die "MakeMaker WARNING: $@";
195# } else {
196# warn "WARNING from evaluation of $dir/Makefile.PL: $@";
197# }
45bc4d3a 198 die "ERROR from evaluation of $dir/Makefile.PL: $@";
f1387719 199 }
e05e23b1 200}
201
479d2113 202
203# package name for the classes into which the first object will be blessed
204my $PACKNAME = 'PACK000';
205
e05e23b1 206sub full_setup {
207 $Verbose ||= 0;
3b03c0f3 208
5e9e174b 209 my @attrib_help = qw/
3b03c0f3 210
762efda7 211 AUTHOR ABSTRACT ABSTRACT_FROM BINARY_LOCATION
212 C CAPI CCFLAGS CONFIG CONFIGURE DEFINE DIR DISTNAME DL_FUNCS DL_VARS
2977d345 213 EXCLUDE_EXT EXE_FILES EXTRA_META FIRST_MAKEFILE
75e2e551 214 FULLPERL FULLPERLRUN FULLPERLRUNINST
215 FUNCLIST H IMPORTS
431b0fc4 216
45bc4d3a 217 INST_ARCHLIB INST_SCRIPT INST_BIN INST_LIB INST_MAN1DIR INST_MAN3DIR
5c161494 218 INSTALLDIRS
2977d345 219 DESTDIR PREFIX INSTALL_BASE
479d2113 220 PERLPREFIX SITEPREFIX VENDORPREFIX
5c161494 221 INSTALLPRIVLIB INSTALLSITELIB INSTALLVENDORLIB
222 INSTALLARCHLIB INSTALLSITEARCH INSTALLVENDORARCH
45bc4d3a 223 INSTALLBIN INSTALLSITEBIN INSTALLVENDORBIN
224 INSTALLMAN1DIR INSTALLMAN3DIR
225 INSTALLSITEMAN1DIR INSTALLSITEMAN3DIR
226 INSTALLVENDORMAN1DIR INSTALLVENDORMAN3DIR
002b9267 227 INSTALLSCRIPT INSTALLSITESCRIPT INSTALLVENDORSCRIPT
5c161494 228 PERL_LIB PERL_ARCHLIB
229 SITELIBEXP SITEARCHEXP
431b0fc4 230
2977d345 231 INC INCLUDE_EXT LDFROM LIB LIBPERL_A LIBS LICENSE
232 LINKTYPE MAKE MAKEAPERL MAKEFILE MAKEFILE_OLD MAN1PODS MAN3PODS MAP_TARGET
2530b651 233 MYEXTLIB NAME NEEDS_LINKING NOECHO NO_META NORECURS NO_VC OBJECT OPTIMIZE
431b0fc4 234 PERL_MALLOC_OK PERL PERLMAINCC PERLRUN PERLRUNINST PERL_CORE
5c161494 235 PERL_SRC PERM_RW PERM_RWX
2977d345 236 PL_FILES PM PM_FILTER PMLIBDIRS PMLIBPARENTDIRS POLLUTE PPM_INSTALL_EXEC
5c161494 237 PPM_INSTALL_SCRIPT PREREQ_FATAL PREREQ_PM PREREQ_PRINT PRINT_PREREQ
bb68fe9e 238 SIGN SKIP TYPEMAPS VERSION VERSION_FROM XS XSOPT XSPROTOARG
f1387719 239 XS_VERSION clean depend dist dynamic_lib linkext macro realclean
762efda7 240 tool_autosplit
431b0fc4 241
084592ab 242 MACPERL_SRC MACPERL_LIB MACLIBS_68K MACLIBS_PPC MACLIBS_SC MACLIBS_MRC
243 MACLIBS_ALL_68K MACLIBS_ALL_PPC MACLIBS_SHARED
f6d6199c 244 /;
3b03c0f3 245
875fa795 246 # IMPORTS is used under OS/2 and Win32
f1387719 247
248 # @Overridable is close to @MM_Sections but not identical. The
249 # order is important. Many subroutines declare macros. These
250 # depend on each other. Let's try to collect the macros up front,
251 # then pasthru, then the rules.
252
253 # MM_Sections are the sections we have to call explicitly
254 # in Overridable we have subroutines that are used indirectly
3b03c0f3 255
e05e23b1 256
257 @MM_Sections =
f6d6199c 258 qw(
3b03c0f3 259
479d2113 260 post_initialize const_config constants platform_constants
261 tool_autosplit tool_xsubpp tools_other
262
263 makemakerdflt
264
265 dist macro depend cflags const_loadlibs const_cccmd
f1387719 266 post_constants
267
268 pasthru
269
479d2113 270 special_targets
271 c_o xs_c xs_o
af7522e5 272 top_targets blibdirs linkext dlsyms dynamic dynamic_bs
f6d6199c 273 dynamic_lib static static_lib manifypods processPL
cae6c631 274 installbin subdirs
479d2113 275 clean_subdirs clean realclean_subdirs realclean
7292dc67 276 metafile signature
277 dist_basics dist_core distdir dist_test dist_ci distmeta distsignature
8f993c78 278 install force perldepend makefile staticmake test ppd
3b03c0f3 279
f6d6199c 280 ); # loses section ordering
e05e23b1 281
3b03c0f3 282 @Overridable = @MM_Sections;
f1387719 283 push @Overridable, qw[
284
af7522e5 285 libscan makeaperl needs_linking perm_rw perm_rwx
2977d345 286 subdir_x test_via_harness test_via_script
287
288 init_VERSION init_dist init_INST init_INSTALL init_DEST init_dirscan
289 init_PM init_MANPODS init_xs init_PERL init_DIRFILESEP init_linker
f6d6199c 290 ];
3b03c0f3 291
f1387719 292 push @MM_Sections, qw[
3b03c0f3 293
f1387719 294 pm_to_blib selfdocument
295
f6d6199c 296 ];
f1387719 297
298 # Postamble needs to be the last that was always the case
299 push @MM_Sections, "postamble";
300 push @Overridable, "postamble";
e05e23b1 301
302 # All sections are valid keys.
3b03c0f3 303 @Recognized_Att_Keys{@MM_Sections} = (1) x @MM_Sections;
e05e23b1 304
305 # we will use all these variables in the Makefile
306 @Get_from_Config =
f6d6199c 307 qw(
2977d345 308 ar cc cccdlflags ccdlflags dlext dlsrc exe_ext full_ar ld
309 lddlflags ldflags libc lib_ext obj_ext osname osvers ranlib
310 sitelibexp sitearchexp so
f6d6199c 311 );
e05e23b1 312
479d2113 313 # 5.5.3 doesn't have any concept of vendor libs
314 push @Get_from_Config, qw( vendorarchexp vendorlibexp ) if $] >= 5.006;
315
5e9e174b 316 foreach my $item (@attrib_help){
f6d6199c 317 $Recognized_Att_Keys{$item} = 1;
e05e23b1 318 }
5e9e174b 319 foreach my $item (@Get_from_Config) {
f6d6199c 320 $Recognized_Att_Keys{uc $item} = $Config{$item};
321 print "Attribute '\U$item\E' => '$Config{$item}'\n"
322 if ($Verbose >= 2);
e05e23b1 323 }
324
325 #
3b03c0f3 326 # When we eval a Makefile.PL in a subdirectory, that one will ask
327 # us (the parent) for the values and will prepend "..", so that
328 # all files to be installed end up below OUR ./blib
e05e23b1 329 #
e0678a30 330 @Prepend_parent = qw(
331 INST_BIN INST_LIB INST_ARCHLIB INST_SCRIPT
f6d6199c 332 MAP_TARGET INST_MAN1DIR INST_MAN3DIR PERL_SRC
333 PERL FULLPERL
334 );
e05e23b1 335}
42793c05 336
8e07c86e 337sub writeMakefile {
338 die <<END;
232e078e 339
8e07c86e 340The extension you are trying to build apparently is rather old and
341most probably outdated. We detect that from the fact, that a
342subroutine "writeMakefile" is called, and this subroutine is not
343supported anymore since about October 1994.
40000a8c 344
4633a7c4 345Please contact the author or look into CPAN (details about CPAN can be
346found in the FAQ and at http:/www.perl.com) for a more recent version
347of the extension. If you're really desperate, you can try to change
348the subroutine name from writeMakefile to WriteMakefile and rerun
349'perl Makefile.PL', but you're most probably left alone, when you do
350so.
42793c05 351
8e07c86e 352The MakeMaker team
1aef975c 353
42793c05 354END
8e07c86e 355}
42793c05 356
f6d6199c 357sub new {
8e07c86e 358 my($class,$self) = @_;
359 my($key);
42793c05 360
479d2113 361 # Store the original args passed to WriteMakefile()
362 foreach my $k (keys %$self) {
363 $self->{ARGS}{$k} = $self->{$k};
364 }
365
88d69b28 366 if ("@ARGV" =~ /\bPREREQ_PRINT\b/) {
f6d6199c 367 require Data::Dumper;
88d69b28 368 print Data::Dumper->Dump([$self->{PREREQ_PM}], [qw(PREREQ_PM)]);
919b8535 369 exit 0;
f6d6199c 370 }
88d69b28 371
372 # PRINT_PREREQ is RedHatism.
373 if ("@ARGV" =~ /\bPRINT_PREREQ\b/) {
2c91f887 374 print join(" ", map { "perl($_)>=$self->{PREREQ_PM}->{$_} " }
375 sort keys %{$self->{PREREQ_PM}}), "\n";
f6d6199c 376 exit 0;
88d69b28 377 }
378
e05e23b1 379 print STDOUT "MakeMaker (v$VERSION)\n" if $Verbose;
8e07c86e 380 if (-f "MANIFEST" && ! -f "Makefile"){
f6d6199c 381 check_manifest();
1aef975c 382 }
42793c05 383
8e07c86e 384 $self = {} unless (defined $self);
005c1a0e 385
864a5fa8 386 check_hints($self);
4633a7c4 387
c3be8c6e 388 my %configure_att; # record &{$self->{CONFIGURE}} attributes
8e07c86e 389 my(%initial_att) = %$self; # record initial attributes
005c1a0e 390
a4260cbc 391 my(%unsatisfied) = ();
5e9e174b 392 foreach my $prereq (sort keys %{$self->{PREREQ_PM}}) {
479d2113 393 # 5.8.0 has a bug with require Foo::Bar alone in an eval, so an
394 # extra statement is a workaround.
a7d1454b 395 my $file = "$prereq.pm";
396 $file =~ s{::}{/}g;
397 eval { require $file };
f6d6199c 398
e0678a30 399 my $pr_version = $prereq->VERSION || 0;
400
479d2113 401 # convert X.Y_Z alpha version #s to X.YZ for easier comparisons
402 $pr_version =~ s/(\d+)\.(\d+)_(\d+)/$1.$2$3/;
403
f6d6199c 404 if ($@) {
405 warn sprintf "Warning: prerequisite %s %s not found.\n",
406 $prereq, $self->{PREREQ_PM}{$prereq}
407 unless $self->{PREREQ_FATAL};
408 $unsatisfied{$prereq} = 'not installed';
e0678a30 409 } elsif ($pr_version < $self->{PREREQ_PM}->{$prereq} ){
45bc4d3a 410 warn sprintf "Warning: prerequisite %s %s not found. We have %s.\n",
f6d6199c 411 $prereq, $self->{PREREQ_PM}{$prereq},
e0678a30 412 ($pr_version || 'unknown version')
f6d6199c 413 unless $self->{PREREQ_FATAL};
414 $unsatisfied{$prereq} = $self->{PREREQ_PM}->{$prereq} ?
415 $self->{PREREQ_PM}->{$prereq} : 'unknown version' ;
416 }
f1387719 417 }
a4260cbc 418 if (%unsatisfied && $self->{PREREQ_FATAL}){
f6d6199c 419 my $failedprereqs = join ', ', map {"$_ $unsatisfied{$_}"}
420 keys %unsatisfied;
421 die qq{MakeMaker FATAL: prerequisites not found ($failedprereqs)\n
422 Please install these modules first and rerun 'perl Makefile.PL'.\n};
a4260cbc 423 }
f1387719 424
8e07c86e 425 if (defined $self->{CONFIGURE}) {
f6d6199c 426 if (ref $self->{CONFIGURE} eq 'CODE') {
427 %configure_att = %{&{$self->{CONFIGURE}}};
428 $self = { %$self, %configure_att };
429 } else {
430 Carp::croak "Attribute 'CONFIGURE' to WriteMakefile() not a code reference\n";
431 }
005c1a0e 432 }
a0d0e21e 433
8e07c86e 434 # This is for old Makefiles written pre 5.00, will go away
435 if ( Carp::longmess("") =~ /runsubdirpl/s ){
f6d6199c 436 Carp::carp("WARNING: Please rerun 'perl Makefile.PL' to regenerate your Makefiles\n");
8e07c86e 437 }
5d94fbed 438
ccd13d1e 439 my $newclass = ++$PACKNAME;
f6d6199c 440 local @Parent = @Parent; # Protect against non-local exits
8e07c86e 441 {
f6d6199c 442 no strict 'refs';
443 print "Blessing Object into class [$newclass]\n" if $Verbose>=2;
444 mv_all_methods("MY",$newclass);
445 bless $self, $newclass;
446 push @Parent, $self;
447 require ExtUtils::MY;
448 @{"$newclass\:\:ISA"} = 'MM';
8e07c86e 449 }
5d94fbed 450
e05e23b1 451 if (defined $Parent[-2]){
f6d6199c 452 $self->{PARENT} = $Parent[-2];
453 my $key;
e0678a30 454 for $key (@Prepend_parent) {
f6d6199c 455 next unless defined $self->{PARENT}{$key};
531e2ba1 456
457 # Don't stomp on WriteMakefile() args.
46442182 458 next if defined $self->{ARGS}{$key} and
459 $self->{ARGS}{$key} eq $self->{$key};
460
461 $self->{$key} = $self->{PARENT}{$key};
531e2ba1 462
479d2113 463 unless ($Is_VMS && $key =~ /PERL$/) {
f6d6199c 464 $self->{$key} = $self->catdir("..",$self->{$key})
465 unless $self->file_name_is_absolute($self->{$key});
466 } else {
467 # PERL or FULLPERL will be a command verb or even a
468 # command with an argument instead of a full file
469 # specification under VMS. So, don't turn the command
470 # into a filespec, but do add a level to the path of
471 # the argument if not already absolute.
472 my @cmd = split /\s+/, $self->{$key};
473 $cmd[1] = $self->catfile('[-]',$cmd[1])
474 unless (@cmd < 2) || $self->file_name_is_absolute($cmd[1]);
475 $self->{$key} = join(' ', @cmd);
476 }
477 }
478 if ($self->{PARENT}) {
479 $self->{PARENT}->{CHILDREN}->{$newclass} = $self;
480 foreach my $opt (qw(POLLUTE PERL_CORE)) {
481 if (exists $self->{PARENT}->{$opt}
482 and not exists $self->{$opt})
483 {
484 # inherit, but only if already unspecified
485 $self->{$opt} = $self->{PARENT}->{$opt};
486 }
487 }
488 }
489 my @fm = grep /^FIRST_MAKEFILE=/, @ARGV;
490 parse_args($self,@fm) if @fm;
8e07c86e 491 } else {
f6d6199c 492 parse_args($self,split(' ', $ENV{PERL_MM_OPT} || ''),@ARGV);
8e07c86e 493 }
a0d0e21e 494
8e07c86e 495 $self->{NAME} ||= $self->guess_name;
a0d0e21e 496
8e07c86e 497 ($self->{NAME_SYM} = $self->{NAME}) =~ s/\W+/_/g;
a0d0e21e 498
2977d345 499 $self->init_MAKE;
479d2113 500 $self->init_main;
501 $self->init_VERSION;
502 $self->init_dist;
503 $self->init_INST;
504 $self->init_INSTALL;
531e2ba1 505 $self->init_DEST;
479d2113 506 $self->init_dirscan;
2977d345 507 $self->init_PM;
508 $self->init_MANPODS;
479d2113 509 $self->init_xs;
510 $self->init_PERL;
511 $self->init_DIRFILESEP;
512 $self->init_linker;
2977d345 513 $self->init_ABSTRACT;
8e07c86e 514
0d8023a2 515 if (! $self->{PERL_SRC} ) {
f6d6199c 516 require VMS::Filespec if $Is_VMS;
517 my($pthinks) = $self->canonpath($INC{'Config.pm'});
518 my($cthinks) = $self->catfile($Config{'archlibexp'},'Config.pm');
519 $pthinks = VMS::Filespec::vmsify($pthinks) if $Is_VMS;
520 if ($pthinks ne $cthinks &&
521 !($Is_Win32 and lc($pthinks) eq lc($cthinks))) {
3e3baf6d 522 print "Have $pthinks expected $cthinks\n";
f6d6199c 523 if ($Is_Win32) {
524 $pthinks =~ s![/\\]Config\.pm$!!i; $pthinks =~ s!.*[/\\]!!;
525 }
526 else {
527 $pthinks =~ s!/Config\.pm$!!; $pthinks =~ s!.*/!!;
528 }
529 print STDOUT <<END unless $self->{UNINSTALLED_PERL};
530Your perl and your Config.pm seem to have different ideas about the
531architecture they are running on.
8e07c86e 532Perl thinks: [$pthinks]
e05e23b1 533Config says: [$Config{archname}]
f6d6199c 534This may or may not cause problems. Please check your installation of perl
535if you have problems building this extension.
005c1a0e 536END
f6d6199c 537 }
005c1a0e 538 }
539
8e07c86e 540 $self->init_others();
479d2113 541 $self->init_platform();
e0678a30 542 $self->init_PERM();
6071deed 543 my($argv) = neatvalue(\@ARGV);
544 $argv =~ s/^\[/(/;
545 $argv =~ s/\]$/)/;
75f92628 546
8e07c86e 547 push @{$self->{RESULT}}, <<END;
548# This Makefile is for the $self->{NAME} extension to perl.
549#
e05e23b1 550# It was generated automatically by MakeMaker version
551# $VERSION (Revision: $Revision) from the contents of
552# Makefile.PL. Don't edit this file, edit Makefile.PL instead.
8e07c86e 553#
f6d6199c 554# ANY CHANGES MADE HERE WILL BE LOST!
8e07c86e 555#
6071deed 556# MakeMaker ARGV: $argv
557#
8e07c86e 558# MakeMaker Parameters:
559END
a0d0e21e 560
5e9e174b 561 foreach my $key (sort keys %initial_att){
479d2113 562 next if $key eq 'ARGS';
563
f6d6199c 564 my($v) = neatvalue($initial_att{$key});
565 $v =~ s/(CODE|HASH|ARRAY|SCALAR)\([\dxa-f]+\)/$1\(...\)/;
566 $v =~ tr/\n/ /s;
567 push @{$self->{RESULT}}, "# $key => $v";
42793c05 568 }
c3be8c6e 569 undef %initial_att; # free memory
570
571 if (defined $self->{CONFIGURE}) {
572 push @{$self->{RESULT}}, <<END;
573
574# MakeMaker 'CONFIGURE' Parameters:
575END
576 if (scalar(keys %configure_att) > 0) {
5e9e174b 577 foreach my $key (sort keys %configure_att){
479d2113 578 next if $key eq 'ARGS';
c3be8c6e 579 my($v) = neatvalue($configure_att{$key});
580 $v =~ s/(CODE|HASH|ARRAY|SCALAR)\([\dxa-f]+\)/$1\(...\)/;
581 $v =~ tr/\n/ /s;
582 push @{$self->{RESULT}}, "# $key => $v";
583 }
584 }
585 else
586 {
587 push @{$self->{RESULT}}, "# no values returned";
588 }
589 undef %configure_att; # free memory
590 }
a0d0e21e 591
8e07c86e 592 # turn the SKIP array into a SKIPHASH hash
593 my (%skip,$skip);
594 for $skip (@{$self->{SKIP} || []}) {
f6d6199c 595 $self->{SKIPHASH}{$skip} = 1;
8e07c86e 596 }
3b03c0f3 597 delete $self->{SKIP}; # free memory
598
599 if ($self->{PARENT}) {
479d2113 600 for (qw/install dist dist_basics dist_core distdir dist_test dist_ci/) {
f6d6199c 601 $self->{SKIPHASH}{$_} = 1;
602 }
3b03c0f3 603 }
42793c05 604
8e07c86e 605 # We run all the subdirectories now. They don't have much to query
606 # from the parent, but the parent has to query them: if they need linking!
8e07c86e 607 unless ($self->{NORECURS}) {
f6d6199c 608 $self->eval_in_subdirs if @{$self->{DIR}};
42793c05 609 }
a0d0e21e 610
5e9e174b 611 foreach my $section ( @MM_Sections ){
479d2113 612 # Support for new foo_target() methods.
613 my $method = $section;
614 $method .= '_target' unless $self->can($method);
615
f6d6199c 616 print "Processing Makefile '$section' section\n" if ($Verbose >= 2);
617 my($skipit) = $self->skipcheck($section);
618 if ($skipit){
619 push @{$self->{RESULT}}, "\n# --- MakeMaker $section section $skipit.";
620 } else {
621 my(%a) = %{$self->{$section} || {}};
622 push @{$self->{RESULT}}, "\n# --- MakeMaker $section section:";
623 push @{$self->{RESULT}}, "# " . join ", ", %a if $Verbose && %a;
479d2113 624 push @{$self->{RESULT}}, $self->nicetext($self->$method( %a ));
f6d6199c 625 }
232e078e 626 }
8e07c86e 627
e05e23b1 628 push @{$self->{RESULT}}, "\n# End.";
8e07c86e 629
e05e23b1 630 $self;
232e078e 631}
632
1b171b8d 633sub WriteEmptyMakefile {
1e65eb70 634 Carp::croak "WriteEmptyMakefile: Need an even number of args" if @_ % 2;
a8112c7f 635
636 my %att = @_;
637 my $self = MM->new(\%att);
1151960e 638 my $new = $self->{FIRST_MAKEFILE};
639 my $old = $self->{MAKEFILE_OLD};
640 if (-f $old) {
641 _unlink($old) or warn "unlink $old: $!";
479d2113 642 }
1151960e 643 if ( -f $new ) {
644 _rename($new, $old) or warn "rename $new => $old: $!"
a8112c7f 645 }
1151960e 646 open MF, '>'.$new or die "open $new for write: $!";
a8112c7f 647 print MF <<'EOP';
1b171b8d 648all:
649
650clean:
651
652install:
653
654makemakerdflt:
655
656test:
657
658EOP
1151960e 659 close MF or die "close $new for write: $!";
1b171b8d 660}
661
e05e23b1 662sub check_manifest {
663 print STDOUT "Checking if your kit is complete...\n";
3b03c0f3 664 require ExtUtils::Manifest;
5e9e174b 665 # avoid warning
666 $ExtUtils::Manifest::Quiet = $ExtUtils::Manifest::Quiet = 1;
667 my(@missed) = ExtUtils::Manifest::manicheck();
668 if (@missed) {
f6d6199c 669 print STDOUT "Warning: the following files are missing in your kit:\n";
670 print "\t", join "\n\t", @missed;
671 print STDOUT "\n";
672 print STDOUT "Please inform the author.\n";
8e07c86e 673 } else {
f6d6199c 674 print STDOUT "Looks good\n";
8e07c86e 675 }
8e07c86e 676}
677
e05e23b1 678sub parse_args{
679 my($self, @args) = @_;
5e9e174b 680 foreach (@args) {
f6d6199c 681 unless (m/(.*?)=(.*)/) {
f6d6199c 682 ++$Verbose if m/^verb/;
683 next;
684 }
685 my($name, $value) = ($1, $2);
686 if ($value =~ m/^~(\w+)?/) { # tilde with optional username
687 $value =~ s [^~(\w*)]
688 [$1 ?
689 ((getpwnam($1))[7] || "~$1") :
690 (getpwuid($>))[7]
691 ]ex;
692 }
479d2113 693
694 # Remember the original args passed it. It will be useful later.
695 $self->{ARGS}{uc $name} = $self->{uc $name} = $value;
8e07c86e 696 }
8e07c86e 697
e05e23b1 698 # catch old-style 'potential_libs' and inform user how to 'upgrade'
699 if (defined $self->{potential_libs}){
f6d6199c 700 my($msg)="'potential_libs' => '$self->{potential_libs}' should be";
701 if ($self->{potential_libs}){
702 print STDOUT "$msg changed to:\n\t'LIBS' => ['$self->{potential_libs}']\n";
703 } else {
704 print STDOUT "$msg deleted.\n";
705 }
706 $self->{LIBS} = [$self->{potential_libs}];
707 delete $self->{potential_libs};
8e07c86e 708 }
e05e23b1 709 # catch old-style 'ARMAYBE' and inform user how to 'upgrade'
710 if (defined $self->{ARMAYBE}){
f6d6199c 711 my($armaybe) = $self->{ARMAYBE};
712 print STDOUT "ARMAYBE => '$armaybe' should be changed to:\n",
713 "\t'dynamic_lib' => {ARMAYBE => '$armaybe'}\n";
714 my(%dl) = %{$self->{dynamic_lib} || {}};
715 $self->{dynamic_lib} = { %dl, ARMAYBE => $armaybe};
716 delete $self->{ARMAYBE};
8e07c86e 717 }
e05e23b1 718 if (defined $self->{LDTARGET}){
f6d6199c 719 print STDOUT "LDTARGET should be changed to LDFROM\n";
720 $self->{LDFROM} = $self->{LDTARGET};
721 delete $self->{LDTARGET};
8e07c86e 722 }
e05e23b1 723 # Turn a DIR argument on the command line into an array
724 if (defined $self->{DIR} && ref \$self->{DIR} eq 'SCALAR') {
f6d6199c 725 # So they can choose from the command line, which extensions they want
726 # the grep enables them to have some colons too much in case they
727 # have to build a list with the shell
728 $self->{DIR} = [grep $_, split ":", $self->{DIR}];
8e07c86e 729 }
f1387719 730 # Turn a INCLUDE_EXT argument on the command line into an array
731 if (defined $self->{INCLUDE_EXT} && ref \$self->{INCLUDE_EXT} eq 'SCALAR') {
f6d6199c 732 $self->{INCLUDE_EXT} = [grep $_, split '\s+', $self->{INCLUDE_EXT}];
f1387719 733 }
734 # Turn a EXCLUDE_EXT argument on the command line into an array
735 if (defined $self->{EXCLUDE_EXT} && ref \$self->{EXCLUDE_EXT} eq 'SCALAR') {
f6d6199c 736 $self->{EXCLUDE_EXT} = [grep $_, split '\s+', $self->{EXCLUDE_EXT}];
f1387719 737 }
5e9e174b 738
739 foreach my $mmkey (sort keys %$self){
479d2113 740 next if $mmkey eq 'ARGS';
f6d6199c 741 print STDOUT " $mmkey => ", neatvalue($self->{$mmkey}), "\n" if $Verbose;
742 print STDOUT "'$mmkey' is not a known MakeMaker parameter name.\n"
743 unless exists $Recognized_Att_Keys{$mmkey};
e05e23b1 744 }
f1387719 745 $| = 1 if $Verbose;
e05e23b1 746}
8e07c86e 747
e05e23b1 748sub check_hints {
749 my($self) = @_;
750 # We allow extension-specific hints files.
864a5fa8 751
479d2113 752 require File::Spec;
753 my $curdir = File::Spec->curdir;
754
755 my $hint_dir = File::Spec->catdir($curdir, "hints");
756 return unless -d $hint_dir;
8e07c86e 757
e05e23b1 758 # First we look for the best hintsfile we have
f1387719 759 my($hint)="${^O}_$Config{osvers}";
e05e23b1 760 $hint =~ s/\./_/g;
761 $hint =~ s/_$//;
762 return unless $hint;
fed7345c 763
e05e23b1 764 # Also try without trailing minor version numbers.
765 while (1) {
479d2113 766 last if -f File::Spec->catfile($hint_dir, "$hint.pl"); # found
e05e23b1 767 } continue {
f6d6199c 768 last unless $hint =~ s/_[^_]*$//; # nothing to cut off
e05e23b1 769 }
479d2113 770 my $hint_file = File::Spec->catfile($hint_dir, "$hint.pl");
6626a13a 771
772 return unless -f $hint_file; # really there
fed7345c 773
f6d6199c 774 _run_hintfile($self, $hint_file);
775}
776
777sub _run_hintfile {
57b1a898 778 no strict 'vars';
f6d6199c 779 local($self) = shift; # make $self available to the hint file.
780 my($hint_file) = shift;
781
479d2113 782 local($@, $!);
39234879 783 print STDERR "Processing hints file $hint_file\n";
479d2113 784
785 # Just in case the ./ isn't on the hint file, which File::Spec can
786 # often strip off, we bung the curdir into @INC
787 local @INC = (File::Spec->curdir, @INC);
788 my $ret = do $hint_file;
789 if( !defined $ret ) {
790 my $error = $@ || $!;
791 print STDERR $error;
75e2e551 792 }
e05e23b1 793}
8e07c86e 794
e05e23b1 795sub mv_all_methods {
796 my($from,$to) = @_;
5e9e174b 797 no strict 'refs';
e05e23b1 798 my($symtab) = \%{"${from}::"};
fed7345c 799
e05e23b1 800 # Here you see the *current* list of methods that are overridable
801 # from Makefile.PL via MY:: subroutines. As of VERSION 5.07 I'm
802 # still trying to reduce the list to some reasonable minimum --
803 # because I want to make it easier for the user. A.K.
40000a8c 804
57b1a898 805 local $SIG{__WARN__} = sub {
806 # can't use 'no warnings redefined', 5.6 only
807 warn @_ unless $_[0] =~ /^Subroutine .* redefined/
808 };
5e9e174b 809 foreach my $method (@Overridable) {
fed7345c 810
f6d6199c 811 # We cannot say "next" here. Nick might call MY->makeaperl
812 # which isn't defined right now
813
814 # Above statement was written at 4.23 time when Tk-b8 was
815 # around. As Tk-b9 only builds with 5.002something and MM 5 is
816 # standard, we try to enable the next line again. It was
817 # commented out until MM 5.23
818
819 next unless defined &{"${from}::$method"};
fed7345c 820
f6d6199c 821 *{"${to}::$method"} = \&{"${from}::$method"};
3b03c0f3 822
f6d6199c 823 # delete would do, if we were sure, nobody ever called
824 # MY->makeaperl directly
fed7345c 825
f6d6199c 826 # delete $symtab->{$method};
8e07c86e 827
f6d6199c 828 # If we delete a method, then it will be undefined and cannot
829 # be called. But as long as we have Makefile.PLs that rely on
830 # %MY:: being intact, we have to fill the hole with an
831 # inheriting method:
fed7345c 832
f6d6199c 833 eval "package MY; sub $method { shift->SUPER::$method(\@_); }";
5d94fbed 834 }
835
e05e23b1 836 # We have to clean out %INC also, because the current directory is
837 # changed frequently and Graham Barr prefers to get his version
838 # out of a History.pl file which is "required" so woudn't get
839 # loaded again in another extension requiring a History.pl
a0d0e21e 840
f1387719 841 # With perl5.002_01 the deletion of entries in %INC caused Tk-b11
842 # to core dump in the middle of a require statement. The required
843 # file was Tk/MMutil.pm. The consequence is, we have to be
844 # extremely careful when we try to give perl a reason to reload a
845 # library with same name. The workaround prefers to drop nothing
846 # from %INC and teach the writers not to use such libraries.
847
848# my $inc;
849# foreach $inc (keys %INC) {
f6d6199c 850# #warn "***$inc*** deleted";
851# delete $INC{$inc};
f1387719 852# }
8e07c86e 853}
854
3b03c0f3 855sub skipcheck {
8e07c86e 856 my($self) = shift;
e05e23b1 857 my($section) = @_;
858 if ($section eq 'dynamic') {
f6d6199c 859 print STDOUT "Warning (non-fatal): Target 'dynamic' depends on targets ",
860 "in skipped section 'dynamic_bs'\n"
e05e23b1 861 if $self->{SKIPHASH}{dynamic_bs} && $Verbose;
862 print STDOUT "Warning (non-fatal): Target 'dynamic' depends on targets ",
f6d6199c 863 "in skipped section 'dynamic_lib'\n"
e05e23b1 864 if $self->{SKIPHASH}{dynamic_lib} && $Verbose;
8e07c86e 865 }
e05e23b1 866 if ($section eq 'dynamic_lib') {
867 print STDOUT "Warning (non-fatal): Target '\$(INST_DYNAMIC)' depends on ",
f6d6199c 868 "targets in skipped section 'dynamic_bs'\n"
e05e23b1 869 if $self->{SKIPHASH}{dynamic_bs} && $Verbose;
870 }
871 if ($section eq 'static') {
872 print STDOUT "Warning (non-fatal): Target 'static' depends on targets ",
f6d6199c 873 "in skipped section 'static_lib'\n"
e05e23b1 874 if $self->{SKIPHASH}{static_lib} && $Verbose;
8e07c86e 875 }
e05e23b1 876 return 'skipped' if $self->{SKIPHASH}{$section};
877 return '';
8e07c86e 878}
879
e05e23b1 880sub flush {
881 my $self = shift;
882 my($chunk);
3b03c0f3 883 local *FH;
1151960e 884 my($finalname) = $self->{FIRST_MAKEFILE};
885 print STDOUT "Writing $finalname for $self->{NAME}\n";
8e07c86e 886
1151960e 887 unlink($finalname, "MakeMaker.tmp", $Is_VMS ? 'Descrip.MMS' : ());
3b03c0f3 888 open(FH,">MakeMaker.tmp") or die "Unable to open MakeMaker.tmp: $!";
8e07c86e 889
e05e23b1 890 for $chunk (@{$self->{RESULT}}) {
f6d6199c 891 print FH "$chunk\n";
8e07c86e 892 }
e05e23b1 893
3b03c0f3 894 close FH;
479d2113 895 _rename("MakeMaker.tmp", $finalname) or
896 warn "rename MakeMaker.tmp => $finalname: $!";
e05e23b1 897 chmod 0644, $finalname unless $Is_VMS;
3b03c0f3 898
479d2113 899 my %keep = map { ($_ => 1) } qw(NEEDS_LINKING HAS_LINK_CODE);
900
e0678a30 901 if ($self->{PARENT} && !$self->{_KEEP_AFTER_FLUSH}) {
f6d6199c 902 foreach (keys %$self) { # safe memory
479d2113 903 delete $self->{$_} unless $keep{$_};
f6d6199c 904 }
3b03c0f3 905 }
906
e05e23b1 907 system("$Config::Config{eunicefix} $finalname") unless $Config::Config{eunicefix} eq ":";
40000a8c 908}
909
479d2113 910
911# This is a rename for OS's where the target must be unlinked first.
912sub _rename {
913 my($src, $dest) = @_;
914 chmod 0666, $dest;
915 unlink $dest;
916 return rename $src, $dest;
917}
918
dedf98bc 919# This is an unlink for OS's where the target must be writable first.
920sub _unlink {
921 my @files = @_;
922 chmod 0666, @files;
923 return unlink @files;
924}
925
479d2113 926
e05e23b1 927# The following mkbootstrap() is only for installations that are calling
928# the pre-4.1 mkbootstrap() from their old Makefiles. This MakeMaker
929# writes Makefiles, that use ExtUtils::Mkbootstrap directly.
930sub mkbootstrap {
931 die <<END;
932!!! Your Makefile has been built such a long time ago, !!!
933!!! that is unlikely to work with current MakeMaker. !!!
934!!! Please rebuild your Makefile !!!
935END
8e07c86e 936}
005c1a0e 937
e05e23b1 938# Ditto for mksymlists() as of MakeMaker 5.17
939sub mksymlists {
940 die <<END;
941!!! Your Makefile has been built such a long time ago, !!!
942!!! that is unlikely to work with current MakeMaker. !!!
943!!! Please rebuild your Makefile !!!
944END
4633a7c4 945}
946
e05e23b1 947sub neatvalue {
948 my($v) = @_;
949 return "undef" unless defined $v;
950 my($t) = ref $v;
951 return "q[$v]" unless $t;
952 if ($t eq 'ARRAY') {
f6d6199c 953 my(@m, @neat);
954 push @m, "[";
955 foreach my $elem (@$v) {
956 push @neat, "q[$elem]";
957 }
958 push @m, join ", ", @neat;
959 push @m, "]";
960 return join "", @m;
e05e23b1 961 }
962 return "$v" unless $t eq 'HASH';
963 my(@m, $key, $val);
3b03c0f3 964 while (($key,$val) = each %$v){
f6d6199c 965 last unless defined $key; # cautious programming in case (undef,undef) is true
966 push(@m,"$key=>".neatvalue($val)) ;
3b03c0f3 967 }
e05e23b1 968 return "{ ".join(', ',@m)." }";
4e68a208 969}
970
e05e23b1 971sub selfdocument {
972 my($self) = @_;
973 my(@m);
974 if ($Verbose){
f6d6199c 975 push @m, "\n# Full list of MakeMaker attribute values:";
976 foreach my $key (sort keys %$self){
977 next if $key eq 'RESULT' || $key =~ /^[A-Z][a-z]/;
978 my($v) = neatvalue($self->{$key});
979 $v =~ s/(CODE|HASH|ARRAY|SCALAR)\([\dxa-f]+\)/$1\(...\)/;
980 $v =~ tr/\n/ /s;
981 push @m, "# $key => $v";
982 }
e05e23b1 983 }
984 join "\n", @m;
985}
4e68a208 986
3b03c0f3 9871;
988
989__END__
005c1a0e 990
991=head1 NAME
992
479d2113 993ExtUtils::MakeMaker - Create a module Makefile
005c1a0e 994
995=head1 SYNOPSIS
996
e0678a30 997 use ExtUtils::MakeMaker;
005c1a0e 998
e0678a30 999 WriteMakefile( ATTRIBUTE => VALUE [, ...] );
8e07c86e 1000
005c1a0e 1001=head1 DESCRIPTION
1002
1003This utility is designed to write a Makefile for an extension module
1004from a Makefile.PL. It is based on the Makefile.SH model provided by
1005Andy Dougherty and the perl5-porters.
1006
1007It splits the task of generating the Makefile into several subroutines
1008that can be individually overridden. Each subroutine returns the text
1009it wishes to have written to the Makefile.
1010
f1387719 1011MakeMaker is object oriented. Each directory below the current
e0678a30 1012directory that contains a Makefile.PL is treated as a separate
f1387719 1013object. This makes it possible to write an unlimited number of
1014Makefiles with a single invocation of WriteMakefile().
8e07c86e 1015
f1387719 1016=head2 How To Write A Makefile.PL
8e07c86e 1017
479d2113 1018See ExtUtils::MakeMaker::Tutorial.
8e07c86e 1019
bab2b58e 1020The long answer is the rest of the manpage :-)
005c1a0e 1021
1022=head2 Default Makefile Behaviour
1023
f1387719 1024The generated Makefile enables the user of the extension to invoke
005c1a0e 1025
1026 perl Makefile.PL # optionally "perl Makefile.PL verbose"
1027 make
8e07c86e 1028 make test # optionally set TEST_VERBOSE=1
1029 make install # See below
005c1a0e 1030
1031The Makefile to be produced may be altered by adding arguments of the
e05e23b1 1032form C<KEY=VALUE>. E.g.
005c1a0e 1033
58d32538 1034 perl Makefile.PL INSTALL_BASE=~
005c1a0e 1035
1036Other interesting targets in the generated Makefile are
1037
1038 make config # to check if the Makefile is up-to-date
8e07c86e 1039 make clean # delete local temp files (Makefile gets renamed)
1040 make realclean # delete derived files (including ./blib)
e05e23b1 1041 make ci # check in all the files in the MANIFEST file
005c1a0e 1042 make dist # see below the Distribution Support section
1043
e05e23b1 1044=head2 make test
1045
bab2b58e 1046MakeMaker checks for the existence of a file named F<test.pl> in the
d5d4ec93 1047current directory and if it exists it execute the script with the
1048proper set of perl C<-I> options.
e05e23b1 1049
1050MakeMaker also checks for any files matching glob("t/*.t"). It will
d5d4ec93 1051execute all matching files in alphabetical order via the
1052L<Test::Harness> module with the C<-I> switches set correctly.
1053
1054If you'd like to see the raw output of your tests, set the
1055C<TEST_VERBOSE> variable to true.
1056
1057 make test TEST_VERBOSE=1
e05e23b1 1058
bab2b58e 1059=head2 make testdb
1060
1061A useful variation of the above is the target C<testdb>. It runs the
1062test under the Perl debugger (see L<perldebug>). If the file
1063F<test.pl> exists in the current directory, it is used for the test.
1064
d5d4ec93 1065If you want to debug some other testfile, set the C<TEST_FILE> variable
bab2b58e 1066thusly:
1067
1068 make testdb TEST_FILE=t/mytest.t
1069
1070By default the debugger is called using C<-d> option to perl. If you
d5d4ec93 1071want to specify some other option, set the C<TESTDB_SW> variable:
bab2b58e 1072
1073 make testdb TESTDB_SW=-Dx
1074
e05e23b1 1075=head2 make install
005c1a0e 1076
8e07c86e 1077make alone puts all relevant files into directories that are named by
f6d6199c 1078the macros INST_LIB, INST_ARCHLIB, INST_SCRIPT, INST_MAN1DIR and
1079INST_MAN3DIR. All these default to something below ./blib if you are
1080I<not> building below the perl source directory. If you I<are>
1081building below the perl source, INST_LIB and INST_ARCHLIB default to
1082../../lib, and INST_SCRIPT is not defined.
005c1a0e 1083
e05e23b1 1084The I<install> target of the generated Makefile copies the files found
1085below each of the INST_* directories to their INSTALL*
1086counterparts. Which counterparts are chosen depends on the setting of
1087INSTALLDIRS according to the following table:
005c1a0e 1088
f6d6199c 1089 INSTALLDIRS set to
5c161494 1090 perl site vendor
e05e23b1 1091
479d2113 1092 PERLPREFIX SITEPREFIX VENDORPREFIX
5c161494 1093 INST_ARCHLIB INSTALLARCHLIB INSTALLSITEARCH INSTALLVENDORARCH
1094 INST_LIB INSTALLPRIVLIB INSTALLSITELIB INSTALLVENDORLIB
1095 INST_BIN INSTALLBIN INSTALLSITEBIN INSTALLVENDORBIN
002b9267 1096 INST_SCRIPT INSTALLSCRIPT INSTALLSITESCRIPT INSTALLVENDORSCRIPT
5c161494 1097 INST_MAN1DIR INSTALLMAN1DIR INSTALLSITEMAN1DIR INSTALLVENDORMAN1DIR
1098 INST_MAN3DIR INSTALLMAN3DIR INSTALLSITEMAN3DIR INSTALLVENDORMAN3DIR
005c1a0e 1099
8e07c86e 1100The INSTALL... macros in turn default to their %Config
1101($Config{installprivlib}, $Config{installarchlib}, etc.) counterparts.
005c1a0e 1102
3b03c0f3 1103You can check the values of these variables on your system with
1104
bab2b58e 1105 perl '-V:install.*'
3b03c0f3 1106
f1387719 1107And to check the sequence in which the library directories are
1108searched by perl, run
005c1a0e 1109
f1387719 1110 perl -le 'print join $/, @INC'
005c1a0e 1111
a7d1454b 1112Sometimes older versions of the module you're installing live in other
1113directories in @INC. Because Perl loads the first version of a module it
1114finds, not the newest, you might accidentally get one of these older
1115versions even after installing a brand new version. To delete I<all other
1116versions of the module you're installing> (not simply older ones) set the
1117C<UNINST> variable.
1118
1119 make install UNINST=1
1120
005c1a0e 1121
58d32538 1122=head2 INSTALL_BASE
1123
1124INSTALL_BASE can be passed into Makefile.PL to change where your
1125module will be installed. INSTALL_BASE is more like what everyone
1126else calls "prefix" than PREFIX is.
1127
1128To have everything installed in your home directory, do the following.
1129
1e65eb70 1130 # Unix users, INSTALL_BASE=~ works fine
1131 perl Makefile.PL INSTALL_BASE=/path/to/your/home/dir
58d32538 1132
1133Like PREFIX, it sets several INSTALL* attributes at once. Unlike
1134PREFIX it is easy to predict where the module will end up. The
1135installation pattern looks like this:
1136
1137 INSTALLARCHLIB INSTALL_BASE/lib/perl5/$Config{archname}
1138 INSTALLPRIVLIB INSTALL_BASE/lib/perl5
1139 INSTALLBIN INSTALL_BASE/bin
1140 INSTALLSCRIPT INSTALL_BASE/bin
1141 INSTALLMAN1DIR INSTALL_BASE/man/man1
1142 INSTALLMAN3DIR INSTALL_BASE/man/man3
1143
1144INSTALL_BASE in MakeMaker and C<--install_base> in Module::Build (as
1145of 0.28) install to the same location. If you want MakeMaker and
1146Module::Build to install to the same location simply set INSTALL_BASE
1147and C<--install_base> to the same location.
1148
1149INSTALL_BASE was added in 6.31.
1150
1151
bab2b58e 1152=head2 PREFIX and LIB attribute
1153
1154PREFIX and LIB can be used to set several INSTALL* attributes in one
58d32538 1155go. Here's an example for installing into your home directory.
bab2b58e 1156
1e65eb70 1157 # Unix users, PREFIX=~ works fine
1158 perl Makefile.PL PREFIX=/path/to/your/home/dir
005c1a0e 1159
f6d6199c 1160This will install all files in the module under your home directory,
1161with man pages and libraries going into an appropriate place (usually
58d32538 1162~/man and ~/lib). How the exact location is determined is complicated
1163and depends on how your Perl was configured. INSTALL_BASE works more
1164like what other build systems call "prefix" than PREFIX and we
1165recommend you use that instead.
bab2b58e 1166
1167Another way to specify many INSTALL directories with a single
f6d6199c 1168parameter is LIB.
005c1a0e 1169
f6d6199c 1170 perl Makefile.PL LIB=~/lib
005c1a0e 1171
f6d6199c 1172This will install the module's architecture-independent files into
1173~/lib, the architecture-dependent files into ~/lib/$archname.
005c1a0e 1174
bab2b58e 1175Note, that in both cases the tilde expansion is done by MakeMaker, not
e35b8f9e 1176by perl by default, nor by make.
1177
f6d6199c 1178Conflicts between parameters LIB, PREFIX and the various INSTALL*
1179arguments are resolved so that:
e35b8f9e 1180
1181=over 4
1182
1183=item *
1184
1185setting LIB overrides any setting of INSTALLPRIVLIB, INSTALLARCHLIB,
1186INSTALLSITELIB, INSTALLSITEARCH (and they are not affected by PREFIX);
1187
1188=item *
1189
1190without LIB, setting PREFIX replaces the initial C<$Config{prefix}>
1191part of those INSTALL* arguments, even if the latter are explicitly
1192set (but are set to still start with C<$Config{prefix}>).
1193
1194=back
005c1a0e 1195
f6d6199c 1196If the user has superuser privileges, and is not working on AFS or
1197relatives, then the defaults for INSTALLPRIVLIB, INSTALLARCHLIB,
1198INSTALLSCRIPT, etc. will be appropriate, and this incantation will be
1199the best:
005c1a0e 1200
e0678a30 1201 perl Makefile.PL;
1202 make;
1203 make test
005c1a0e 1204 make install
1205
8e07c86e 1206make install per default writes some documentation of what has been
e05e23b1 1207done into the file C<$(INSTALLARCHLIB)/perllocal.pod>. This feature
1208can be bypassed by calling make pure_install.
8e07c86e 1209
1210=head2 AFS users
1211
1212will have to specify the installation directories as these most
1213probably have changed since perl itself has been installed. They will
1214have to do this by calling
1215
e05e23b1 1216 perl Makefile.PL INSTALLSITELIB=/afs/here/today \
f6d6199c 1217 INSTALLSCRIPT=/afs/there/now INSTALLMAN3DIR=/afs/for/manpages
8e07c86e 1218 make
1219
e05e23b1 1220Be careful to repeat this procedure every time you recompile an
1221extension, unless you are sure the AFS installation directories are
1222still valid.
005c1a0e 1223
8e07c86e 1224=head2 Static Linking of a new Perl Binary
005c1a0e 1225
1226An extension that is built with the above steps is ready to use on
1227systems supporting dynamic loading. On systems that do not support
1228dynamic loading, any newly created extension has to be linked together
1229with the available resources. MakeMaker supports the linking process
1230by creating appropriate targets in the Makefile whenever an extension
1231is built. You can invoke the corresponding section of the makefile with
1232
1233 make perl
1234
1235That produces a new perl binary in the current directory with all
da7f727a 1236extensions linked in that can be found in INST_ARCHLIB, SITELIBEXP,
e05e23b1 1237and PERL_ARCHLIB. To do that, MakeMaker writes a new Makefile, on
1238UNIX, this is called Makefile.aperl (may be system dependent). If you
1239want to force the creation of a new perl, it is recommended, that you
1240delete this Makefile.aperl, so the directories are searched-through
1241for linkable libraries again.
005c1a0e 1242
1243The binary can be installed into the directory where perl normally
1244resides on your machine with
1245
1246 make inst_perl
1247
1248To produce a perl binary with a different name than C<perl>, either say
1249
1250 perl Makefile.PL MAP_TARGET=myperl
1251 make myperl
1252 make inst_perl
1253
1254or say
1255
1256 perl Makefile.PL
1257 make myperl MAP_TARGET=myperl
1258 make inst_perl MAP_TARGET=myperl
1259
1260In any case you will be prompted with the correct invocation of the
1261C<inst_perl> target that installs the new binary into INSTALLBIN.
1262
8e07c86e 1263make inst_perl per default writes some documentation of what has been
1264done into the file C<$(INSTALLARCHLIB)/perllocal.pod>. This
1265can be bypassed by calling make pure_inst_perl.
005c1a0e 1266
e05e23b1 1267Warning: the inst_perl: target will most probably overwrite your
1268existing perl binary. Use with care!
005c1a0e 1269
8e07c86e 1270Sometimes you might want to build a statically linked perl although
1271your system supports dynamic loading. In this case you may explicitly
1272set the linktype with the invocation of the Makefile.PL or make:
1273
1274 perl Makefile.PL LINKTYPE=static # recommended
1275
1276or
1277
1278 make LINKTYPE=static # works on most systems
1279
005c1a0e 1280=head2 Determination of Perl Library and Installation Locations
1281
1282MakeMaker needs to know, or to guess, where certain things are
e05e23b1 1283located. Especially INST_LIB and INST_ARCHLIB (where to put the files
1284during the make(1) run), PERL_LIB and PERL_ARCHLIB (where to read
1285existing modules from), and PERL_INC (header files and C<libperl*.*>).
005c1a0e 1286
1287Extensions may be built either using the contents of the perl source
e05e23b1 1288directory tree or from the installed perl library. The recommended way
1289is to build extensions after you have run 'make install' on perl
1290itself. You can do that in any directory on your hard disk that is not
1291below the perl source tree. The support for extensions below the ext
1292directory of the perl distribution is only good for the standard
1293extensions that come with perl.
005c1a0e 1294
1295If an extension is being built below the C<ext/> directory of the perl
e05e23b1 1296source then MakeMaker will set PERL_SRC automatically (e.g.,
1297C<../..>). If PERL_SRC is defined and the extension is recognized as
1298a standard extension, then other variables default to the following:
005c1a0e 1299
1300 PERL_INC = PERL_SRC
1301 PERL_LIB = PERL_SRC/lib
1302 PERL_ARCHLIB = PERL_SRC/lib
1303 INST_LIB = PERL_LIB
1304 INST_ARCHLIB = PERL_ARCHLIB
1305
1306If an extension is being built away from the perl source then MakeMaker
1307will leave PERL_SRC undefined and default to using the installed copy
1308of the perl library. The other variables default to the following:
1309
e05e23b1 1310 PERL_INC = $archlibexp/CORE
1311 PERL_LIB = $privlibexp
1312 PERL_ARCHLIB = $archlibexp
1313 INST_LIB = ./blib/lib
1314 INST_ARCHLIB = ./blib/arch
005c1a0e 1315
1316If perl has not yet been installed then PERL_SRC can be defined on the
1317command line as shown in the previous section.
1318
005c1a0e 1319
f1387719 1320=head2 Which architecture dependent directory?
005c1a0e 1321
f1387719 1322If you don't want to keep the defaults for the INSTALL* macros,
1323MakeMaker helps you to minimize the typing needed: the usual
1324relationship between INSTALLPRIVLIB and INSTALLARCHLIB is determined
1325by Configure at perl compilation time. MakeMaker supports the user who
1326sets INSTALLPRIVLIB. If INSTALLPRIVLIB is set, but INSTALLARCHLIB not,
1327then MakeMaker defaults the latter to be the same subdirectory of
1328INSTALLPRIVLIB as Configure decided for the counterparts in %Config ,
1329otherwise it defaults to INSTALLPRIVLIB. The same relationship holds
1330for INSTALLSITELIB and INSTALLSITEARCH.
005c1a0e 1331
f1387719 1332MakeMaker gives you much more freedom than needed to configure
1333internal variables and get different results. It is worth to mention,
1334that make(1) also lets you configure most of the variables that are
1335used in the Makefile. But in the majority of situations this will not
a7665c5e 1336be necessary, and should only be done if the author of a package
f1387719 1337recommends it (or you know what you're doing).
005c1a0e 1338
e05e23b1 1339=head2 Using Attributes and Parameters
005c1a0e 1340
a884ca7c 1341The following attributes may be specified as arguments to WriteMakefile()
1342or as NAME=VALUE pairs on the command line.
005c1a0e 1343
875fa795 1344=over 2
005c1a0e 1345
875fa795 1346=item ABSTRACT
1347
1348One line description of the module. Will be included in PPD file.
1349
1350=item ABSTRACT_FROM
1351
1352Name of the file that contains the package description. MakeMaker looks
1353for a line in the POD matching /^($package\s-\s)(.*)/. This is typically
1354the first line in the "=head1 NAME" section. $2 becomes the abstract.
1355
e35b8f9e 1356=item AUTHOR
1357
1358String containing name (and email address) of package author(s). Is used
1359in PPD (Perl Package Description) files for PPM (Perl Package Manager).
1360
875fa795 1361=item BINARY_LOCATION
1362
1363Used when creating PPD files for binary packages. It can be set to a
1364full or relative path or URL to the binary archive for a particular
1365architecture. For example:
1366
f6d6199c 1367 perl Makefile.PL BINARY_LOCATION=x86/Agent.tar.gz
875fa795 1368
1369builds a PPD package that references a binary of the C<Agent> package,
20e08411 1370located in the C<x86> directory relative to the PPD itself.
8e07c86e 1371
864a5fa8 1372=item C
8e07c86e 1373
864a5fa8 1374Ref to array of *.c file names. Initialised from a directory scan
1375and the values portion of the XS attribute hash. This is not
1376currently used by MakeMaker but may be handy in Makefile.PLs.
8e07c86e 1377
84902520 1378=item CCFLAGS
1379
1380String that will be included in the compiler call command line between
1381the arguments INC and OPTIMIZE.
1382
864a5fa8 1383=item CONFIG
8e07c86e 1384
864a5fa8 1385Arrayref. E.g. [qw(archname manext)] defines ARCHNAME & MANEXT from
1386config.sh. MakeMaker will add to CONFIG the following values anyway:
1387ar
1388cc
1389cccdlflags
1390ccdlflags
1391dlext
1392dlsrc
1393ld
1394lddlflags
1395ldflags
1396libc
1397lib_ext
1398obj_ext
1399ranlib
e05e23b1 1400sitelibexp
1401sitearchexp
864a5fa8 1402so
8e07c86e 1403
1404=item CONFIGURE
1405
e05e23b1 1406CODE reference. The subroutine should return a hash reference. The
1fef88e7 1407hash may contain further attributes, e.g. {LIBS =E<gt> ...}, that have to
8e07c86e 1408be determined by some evaluation method.
1409
864a5fa8 1410=item DEFINE
8e07c86e 1411
864a5fa8 1412Something like C<"-DHAVE_UNISTD_H">
8e07c86e 1413
479d2113 1414=item DESTDIR
1415
1416This is the root directory into which the code will be installed. It
1417I<prepends itself to the normal prefix>. For example, if your code
5dca256e 1418would normally go into F</usr/local/lib/perl> you could set DESTDIR=~/tmp/
1419and installation would go into F<~/tmp/usr/local/lib/perl>.
479d2113 1420
1421This is primarily of use for people who repackage Perl modules.
1422
531e2ba1 1423NOTE: Due to the nature of make, it is important that you put the trailing
5dca256e 1424slash on your DESTDIR. F<~/tmp/> not F<~/tmp>.
479d2113 1425
864a5fa8 1426=item DIR
8e07c86e 1427
864a5fa8 1428Ref to array of subdirectories containing Makefile.PLs e.g. [ 'sdbm'
1429] in ext/SDBM_File
8e07c86e 1430
864a5fa8 1431=item DISTNAME
8e07c86e 1432
479d2113 1433A safe filename for the package.
1434
1435Defaults to NAME above but with :: replaced with -.
1436
1437For example, Foo::Bar becomes Foo-Bar.
1438
1439=item DISTVNAME
1440
1441Your name for distributing the package with the version number
1442included. This is used by 'make dist' to name the resulting archive
1443file.
1444
1445Defaults to DISTNAME-VERSION.
1446
1447For example, version 1.04 of Foo::Bar becomes Foo-Bar-1.04.
1448
1449On some OS's where . has special meaning VERSION_SYM may be used in
1450place of VERSION.
8e07c86e 1451
864a5fa8 1452=item DL_FUNCS
8e07c86e 1453
875fa795 1454Hashref of symbol names for routines to be made available as universal
1455symbols. Each key/value pair consists of the package name and an
1456array of routine names in that package. Used only under AIX, OS/2,
1457VMS and Win32 at present. The routine names supplied will be expanded
1458in the same way as XSUB names are expanded by the XS() macro.
1459Defaults to
8e07c86e 1460
864a5fa8 1461 {"$(NAME)" => ["boot_$(NAME)" ] }
8e07c86e 1462
864a5fa8 1463e.g.
8e07c86e 1464
864a5fa8 1465 {"RPC" => [qw( boot_rpcb rpcb_gettime getnetconfigent )],
1466 "NetconfigPtr" => [ 'DESTROY'] }
8e07c86e 1467
875fa795 1468Please see the L<ExtUtils::Mksymlists> documentation for more information
1469about the DL_FUNCS, DL_VARS and FUNCLIST attributes.
1470
864a5fa8 1471=item DL_VARS
8e07c86e 1472
875fa795 1473Array of symbol names for variables to be made available as universal symbols.
1474Used only under AIX, OS/2, VMS and Win32 at present. Defaults to [].
1475(e.g. [ qw(Foo_version Foo_numstreams Foo_tree ) ])
8e07c86e 1476
f1387719 1477=item EXCLUDE_EXT
1478
1479Array of extension names to exclude when doing a static build. This
1480is ignored if INCLUDE_EXT is present. Consult INCLUDE_EXT for more
1481details. (e.g. [ qw( Socket POSIX ) ] )
1482
1483This attribute may be most useful when specified as a string on the
de592821 1484command line: perl Makefile.PL EXCLUDE_EXT='Socket Safe'
f1387719 1485
864a5fa8 1486=item EXE_FILES
8e07c86e 1487
864a5fa8 1488Ref to array of executable files. The files will be copied to the
f1387719 1489INST_SCRIPT directory. Make realclean will delete them from there
864a5fa8 1490again.
8e07c86e 1491
2530b651 1492If your executables start with something like #!perl or
1493#!/usr/bin/perl MakeMaker will change this to the path of the perl
1494'Makefile.PL' was invoked with so the programs will be sure to run
1495properly even if perl is not in /usr/bin/perl.
1496
864a5fa8 1497=item FIRST_MAKEFILE
1498
479d2113 1499The name of the Makefile to be produced. This is used for the second
1500Makefile that will be produced for the MAP_TARGET.
1501
1502Defaults to 'Makefile' or 'Descrip.MMS' on VMS.
1503
1504(Note: we couldn't use MAKEFILE because dmake uses this for something
1505else).
864a5fa8 1506
1507=item FULLPERL
8e07c86e 1508
75e2e551 1509Perl binary able to run this extension, load XS modules, etc...
1510
1511=item FULLPERLRUN
1512
1513Like PERLRUN, except it uses FULLPERL.
1514
1515=item FULLPERLRUNINST
1516
1517Like PERLRUNINST, except it uses FULLPERL.
864a5fa8 1518
762efda7 1519=item FUNCLIST
1520
1521This provides an alternate means to specify function names to be
1522exported from the extension. Its value is a reference to an
1523array of function names to be exported by the extension. These
1524names are passed through unaltered to the linker options file.
1525
864a5fa8 1526=item H
1527
1528Ref to array of *.h file names. Similar to C.
1529
84902520 1530=item IMPORTS
1531
875fa795 1532This attribute is used to specify names to be imported into the
69ff8adf 1533extension. Takes a hash ref.
1534
1535It is only used on OS/2 and Win32.
84902520 1536
864a5fa8 1537=item INC
1538
1539Include file dirs eg: C<"-I/usr/5include -I/path/to/inc">
1540
f1387719 1541=item INCLUDE_EXT
1542
1543Array of extension names to be included when doing a static build.
1544MakeMaker will normally build with all of the installed extensions when
1545doing a static build, and that is usually the desired behavior. If
1546INCLUDE_EXT is present then MakeMaker will build only with those extensions
1547which are explicitly mentioned. (e.g. [ qw( Socket POSIX ) ])
1548
1549It is not necessary to mention DynaLoader or the current extension when
1550filling in INCLUDE_EXT. If the INCLUDE_EXT is mentioned but is empty then
1551only DynaLoader and the current extension will be included in the build.
1552
1553This attribute may be most useful when specified as a string on the
de592821 1554command line: perl Makefile.PL INCLUDE_EXT='POSIX Socket Devel::Peek'
f1387719 1555
864a5fa8 1556=item INSTALLARCHLIB
1557
e05e23b1 1558Used by 'make install', which copies files from INST_ARCHLIB to this
1559directory if INSTALLDIRS is set to perl.
864a5fa8 1560
1561=item INSTALLBIN
1562
5c161494 1563Directory to install binary files (e.g. tkperl) into if
1564INSTALLDIRS=perl.
e05e23b1 1565
1566=item INSTALLDIRS
1567
5c161494 1568Determines which of the sets of installation directories to choose:
1569perl, site or vendor. Defaults to site.
8e07c86e 1570
1571=item INSTALLMAN1DIR
1572
1573=item INSTALLMAN3DIR
1574
5c161494 1575These directories get the man pages at 'make install' time if
1576INSTALLDIRS=perl. Defaults to $Config{installman*dir}.
8e07c86e 1577
5c161494 1578If set to 'none', no man pages will be installed.
e0678a30 1579
864a5fa8 1580=item INSTALLPRIVLIB
8e07c86e 1581
e05e23b1 1582Used by 'make install', which copies files from INST_LIB to this
1583directory if INSTALLDIRS is set to perl.
1584
5c161494 1585Defaults to $Config{installprivlib}.
1586
f1387719 1587=item INSTALLSCRIPT
1588
1589Used by 'make install' which copies files from INST_SCRIPT to this
002b9267 1590directory if INSTALLDIRS=perl.
f1387719 1591
875fa795 1592=item INSTALLSITEARCH
e05e23b1 1593
875fa795 1594Used by 'make install', which copies files from INST_ARCHLIB to this
e05e23b1 1595directory if INSTALLDIRS is set to site (default).
1596
5c161494 1597=item INSTALLSITEBIN
1598
1599Used by 'make install', which copies files from INST_BIN to this
1600directory if INSTALLDIRS is set to site (default).
1601
875fa795 1602=item INSTALLSITELIB
e05e23b1 1603
875fa795 1604Used by 'make install', which copies files from INST_LIB to this
e05e23b1 1605directory if INSTALLDIRS is set to site (default).
8e07c86e 1606
5c161494 1607=item INSTALLSITEMAN1DIR
1608
1609=item INSTALLSITEMAN3DIR
1610
1611These directories get the man pages at 'make install' time if
1612INSTALLDIRS=site (default). Defaults to
1613$(SITEPREFIX)/man/man$(MAN*EXT).
1614
1615If set to 'none', no man pages will be installed.
1616
002b9267 1617=item INSTALLSITESCRIPT
1618
1619Used by 'make install' which copies files from INST_SCRIPT to this
1620directory if INSTALLDIRS is set to site (default).
1621
5c161494 1622=item INSTALLVENDORARCH
1623
1624Used by 'make install', which copies files from INST_ARCHLIB to this
1625directory if INSTALLDIRS is set to vendor.
1626
1627=item INSTALLVENDORBIN
1628
1629Used by 'make install', which copies files from INST_BIN to this
1630directory if INSTALLDIRS is set to vendor.
1631
1632=item INSTALLVENDORLIB
1633
1634Used by 'make install', which copies files from INST_LIB to this
1635directory if INSTALLDIRS is set to vendor.
1636
1637=item INSTALLVENDORMAN1DIR
1638
1639=item INSTALLVENDORMAN3DIR
1640
1641These directories get the man pages at 'make install' time if
1642INSTALLDIRS=vendor. Defaults to $(VENDORPREFIX)/man/man$(MAN*EXT).
1643
1644If set to 'none', no man pages will be installed.
1645
002b9267 1646=item INSTALLVENDORSCRIPT
1647
1648Used by 'make install' which copies files from INST_SCRIPT to this
1649directory if INSTALLDIRS is set to is set to vendor.
1650
864a5fa8 1651=item INST_ARCHLIB
8e07c86e 1652
864a5fa8 1653Same as INST_LIB for architecture dependent files.
8e07c86e 1654
f1387719 1655=item INST_BIN
1656
1657Directory to put real binary files during 'make'. These will be copied
1658to INSTALLBIN during 'make install'
1659
e35b8f9e 1660=item INST_LIB
1661
1662Directory where we put library files of this extension while building
1663it.
1664
864a5fa8 1665=item INST_MAN1DIR
8e07c86e 1666
864a5fa8 1667Directory to hold the man pages at 'make' time
8e07c86e 1668
864a5fa8 1669=item INST_MAN3DIR
8e07c86e 1670
864a5fa8 1671Directory to hold the man pages at 'make' time
8e07c86e 1672
f1387719 1673=item INST_SCRIPT
1674
1675Directory, where executable files should be installed during
c3fed81c 1676'make'. Defaults to "./blib/script", just to have a dummy location during
f1387719 1677testing. make install will copy the files in INST_SCRIPT to
1678INSTALLSCRIPT.
1679
479d2113 1680=item LD
1681
1682Program to be used to link libraries for dynamic loading.
1683
1684Defaults to $Config{ld}.
1685
a884ca7c 1686=item LDDLFLAGS
1687
1688Any special flags that might need to be passed to ld to create a
1689shared library suitable for dynamic loading. It is up to the makefile
1690to use it. (See L<Config/lddlflags>)
1691
1692Defaults to $Config{lddlflags}.
1693
864a5fa8 1694=item LDFROM
8e07c86e 1695
69ff8adf 1696Defaults to "$(OBJECT)" and is used in the ld command to specify
864a5fa8 1697what files to link/load from (also see dynamic_lib below for how to
1698specify ld flags)
8e07c86e 1699
bab2b58e 1700=item LIB
1701
e35b8f9e 1702LIB should only be set at C<perl Makefile.PL> time but is allowed as a
f6d6199c 1703MakeMaker argument. It has the effect of setting both INSTALLPRIVLIB
1704and INSTALLSITELIB to that value regardless any explicit setting of
1705those arguments (or of PREFIX). INSTALLARCHLIB and INSTALLSITEARCH
1706are set to the corresponding architecture subdirectory.
bab2b58e 1707
762efda7 1708=item LIBPERL_A
1709
1710The filename of the perllibrary that will be used together with this
1711extension. Defaults to libperl.a.
1712
8e07c86e 1713=item LIBS
1714
1715An anonymous array of alternative library
1716specifications to be searched for (in order) until
864a5fa8 1717at least one library is found. E.g.
8e07c86e 1718
1719 'LIBS' => ["-lgdbm", "-ldbm -lfoo", "-L/path -ldbm.nfs"]
1720
1721Mind, that any element of the array
1722contains a complete set of arguments for the ld
1723command. So do not specify
1724
1725 'LIBS' => ["-ltcl", "-ltk", "-lX11"]
1726
1727See ODBM_File/Makefile.PL for an example, where an array is needed. If
1728you specify a scalar as in
1729
1730 'LIBS' => "-ltcl -ltk -lX11"
1731
1732MakeMaker will turn it into an array with one element.
1733
2977d345 1734=item LICENSE
1735
1736The licensing terms of your distribution. Generally its "perl" for the
1737same license as Perl itself.
1738
1739See L<Module::Build::Authoring> for the list of options.
1740
1741Defaults to "unknown".
1742
864a5fa8 1743=item LINKTYPE
8e07c86e 1744
e05e23b1 1745'static' or 'dynamic' (default unless usedl=undef in
1746config.sh). Should only be used to force static linking (also see
864a5fa8 1747linkext below).
8e07c86e 1748
2977d345 1749=item MAKE
1750
1751Variant of make you intend to run the generated Makefile with. This
1752parameter lets Makefile.PL know what make quirks to account for when
1753generating the Makefile.
1754
1755MakeMaker also honors the MAKE environment variable. This parameter
1756takes precedent.
1757
1758Currently the only significant values are 'dmake' and 'nmake' for Windows
1759users.
1760
1761Defaults to $Config{make}.
1762
864a5fa8 1763=item MAKEAPERL
8e07c86e 1764
864a5fa8 1765Boolean which tells MakeMaker, that it should include the rules to
1766make a perl. This is handled automatically as a switch by
1767MakeMaker. The user normally does not need it.
8e07c86e 1768
479d2113 1769=item MAKEFILE_OLD
1770
1771When 'make clean' or similar is run, the $(FIRST_MAKEFILE) will be
1772backed up at this location.
8e07c86e 1773
479d2113 1774Defaults to $(FIRST_MAKEFILE).old or $(FIRST_MAKEFILE)_old on VMS.
8e07c86e 1775
864a5fa8 1776=item MAN1PODS
8e07c86e 1777
864a5fa8 1778Hashref of pod-containing files. MakeMaker will default this to all
1779EXE_FILES files that include POD directives. The files listed
1780here will be converted to man pages and installed as was requested
1781at Configure time.
8e07c86e 1782
864a5fa8 1783=item MAN3PODS
8e07c86e 1784
bfa2a9ad 1785Hashref that assigns to *.pm and *.pod files the files into which the
1786manpages are to be written. MakeMaker parses all *.pod and *.pm files
1787for POD directives. Files that contain POD will be the default keys of
1788the MAN3PODS hashref. These will then be converted to man pages during
1789C<make> and will be installed during C<make install>.
8e07c86e 1790
864a5fa8 1791=item MAP_TARGET
8e07c86e 1792
864a5fa8 1793If it is intended, that a new perl binary be produced, this variable
1794may hold a name for that binary. Defaults to perl
8e07c86e 1795
864a5fa8 1796=item MYEXTLIB
4633a7c4 1797
864a5fa8 1798If the extension links to a library that it builds set this to the
1799name of the library (see SDBM_File)
4633a7c4 1800
864a5fa8 1801=item NAME
8e07c86e 1802
864a5fa8 1803Perl module name for this extension (DBD::Oracle). This will default
1804to the directory name but should be explicitly defined in the
1805Makefile.PL.
8e07c86e 1806
864a5fa8 1807=item NEEDS_LINKING
8e07c86e 1808
a7665c5e 1809MakeMaker will figure out if an extension contains linkable code
864a5fa8 1810anywhere down the directory tree, and will set this variable
a7665c5e 1811accordingly, but you can speed it up a very little bit if you define
864a5fa8 1812this boolean variable yourself.
8e07c86e 1813
e05e23b1 1814=item NOECHO
1815
479d2113 1816Command so make does not print the literal commands its running.
1817
1818By setting it to an empty string you can generate a Makefile that
1819prints all commands. Mainly used in debugging MakeMaker itself.
1820
1821Defaults to C<@>.
e05e23b1 1822
864a5fa8 1823=item NORECURS
8e07c86e 1824
e05e23b1 1825Boolean. Attribute to inhibit descending into subdirectories.
8e07c86e 1826
1df8d179 1827=item NO_META
1828
1829When true, suppresses the generation and addition to the MANIFEST of
1830the META.yml module meta-data file during 'make distdir'.
1831
1832Defaults to false.
1833
762efda7 1834=item NO_VC
1835
a7665c5e 1836In general, any generated Makefile checks for the current version of
762efda7 1837MakeMaker and the version the Makefile was built under. If NO_VC is
1838set, the version check is neglected. Do not write this into your
1839Makefile.PL, use it interactively instead.
1840
864a5fa8 1841=item OBJECT
8e07c86e 1842
864a5fa8 1843List of object files, defaults to '$(BASEEXT)$(OBJ_EXT)', but can be a long
1844string containing all object files, e.g. "tkpBind.o
1845tkpButton.o tkpCanvas.o"
8e07c86e 1846
e35b8f9e 1847(Where BASEEXT is the last component of NAME, and OBJ_EXT is $Config{obj_ext}.)
1848
3b03c0f3 1849=item OPTIMIZE
1850
1851Defaults to C<-O>. Set it to C<-g> to turn debugging on. The flag is
1852passed to subdirectory makes.
1853
864a5fa8 1854=item PERL
8e07c86e 1855
864a5fa8 1856Perl binary for tasks that can be done by miniperl
8e07c86e 1857
da7f727a 1858=item PERL_CORE
1859
1860Set only when MakeMaker is building the extensions of the Perl core
1861distribution.
1862
864a5fa8 1863=item PERLMAINCC
005c1a0e 1864
864a5fa8 1865The call to the program that is able to compile perlmain.c. Defaults
1866to $(CC).
005c1a0e 1867
864a5fa8 1868=item PERL_ARCHLIB
005c1a0e 1869
da7f727a 1870Same as for PERL_LIB, but for architecture dependent files.
1871
1872Used only when MakeMaker is building the extensions of the Perl core
1873distribution (because normally $(PERL_ARCHLIB) is automatically in @INC,
1874and adding it would get in the way of PERL5LIB).
8e07c86e 1875
864a5fa8 1876=item PERL_LIB
8e07c86e 1877
864a5fa8 1878Directory containing the Perl library to use.
8e07c86e 1879
da7f727a 1880Used only when MakeMaker is building the extensions of the Perl core
1881distribution (because normally $(PERL_LIB) is automatically in @INC,
1882and adding it would get in the way of PERL5LIB).
1883
e35b8f9e 1884=item PERL_MALLOC_OK
1885
1886defaults to 0. Should be set to TRUE if the extension can work with
1887the memory allocation routines substituted by the Perl malloc() subsystem.
1888This should be applicable to most extensions with exceptions of those
1889
1890=over 4
1891
1892=item *
1893
1894with bugs in memory allocations which are caught by Perl's malloc();
1895
1896=item *
1897
1898which interact with the memory allocator in other ways than via
1899malloc(), realloc(), free(), calloc(), sbrk() and brk();
1900
1901=item *
1902
1903which rely on special alignment which is not provided by Perl's malloc().
1904
1905=back
1906
1907B<NOTE.> Negligence to set this flag in I<any one> of loaded extension
1908nullifies many advantages of Perl's malloc(), such as better usage of
1909system resources, error detection, memory usage reporting, catchable failure
1910of memory allocations, etc.
1911
479d2113 1912=item PERLPREFIX
1913
1914Directory under which core modules are to be installed.
1915
1916Defaults to $Config{installprefixexp} falling back to
1917$Config{installprefix}, $Config{prefixexp} or $Config{prefix} should
1918$Config{installprefixexp} not exist.
1919
1920Overridden by PREFIX.
1921
da7f727a 1922=item PERLRUN
1923
75e2e551 1924Use this instead of $(PERL) when you wish to run perl. It will set up
1925extra necessary flags for you.
f6d6199c 1926
ffbaec2a 1927=item PERLRUNINST
f6d6199c 1928
75e2e551 1929Use this instead of $(PERL) when you wish to run perl to work with
1930modules. It will add things like -I$(INST_ARCH) and other necessary
1931flags so perl can see the modules you're about to install.
f6d6199c 1932
864a5fa8 1933=item PERL_SRC
8e07c86e 1934
864a5fa8 1935Directory containing the Perl source code (use of this should be
1936avoided, it may be undefined)
8e07c86e 1937
2366100d 1938=item PERM_RW
1939
de592821 1940Desired permission for read/writable files. Defaults to C<644>.
2366100d 1941See also L<MM_Unix/perm_rw>.
1942
1943=item PERM_RWX
1944
1945Desired permission for executable files. Defaults to C<755>.
1946See also L<MM_Unix/perm_rwx>.
1947
864a5fa8 1948=item PL_FILES
8e07c86e 1949
7292dc67 1950MakeMaker can run programs to generate files for you at build time.
1951By default any file named *.PL (except Makefile.PL and Build.PL) in
1952the top level directory will be assumed to be a Perl program and run
1953passing its own basename in as an argument. For example...
1954
1955 perl foo.PL foo
1956
1957This behavior can be overridden by supplying your own set of files to
1958search. PL_FILES accepts a hash ref, the key being the file to run
1959and the value is passed in as the first argument when the PL file is run.
1960
41e5fcb0 1961 PL_FILES => {'bin/foobar.PL' => 'bin/foobar'}
7292dc67 1962
1963Would run bin/foobar.PL like this:
1964
1965 perl bin/foobar.PL bin/foobar
1966
1967If multiple files from one program are desired an array ref can be used.
1968
41e5fcb0 1969 PL_FILES => {'bin/foobar.PL' => [qw(bin/foobar1 bin/foobar2)]}
8e07c86e 1970
7292dc67 1971In this case the program will be run multiple times using each target file.
8e07c86e 1972
7292dc67 1973 perl bin/foobar.PL bin/foobar1
1974 perl bin/foobar.PL bin/foobar2
3aa35033 1975
4325052d 1976PL files are normally run B<after> pm_to_blib and include INST_LIB and
1977INST_ARCH in its C<@INC> so the just built modules can be
1978accessed... unless the PL file is making a module (or anything else in
1979PM) in which case it is run B<before> pm_to_blib and does not include
1980INST_LIB and INST_ARCH in its C<@INC>. This apparently odd behavior
1981is there for backwards compatibility (and its somewhat DWIM).
41e5fcb0 1982
8e07c86e 1983
864a5fa8 1984=item PM
8e07c86e 1985
864a5fa8 1986Hashref of .pm files and *.pl files to be installed. e.g.
8e07c86e 1987
864a5fa8 1988 {'name_of_file.pm' => '$(INST_LIBDIR)/install_as.pm'}
8e07c86e 1989
a3cb178b 1990By default this will include *.pm and *.pl and the files found in
1991the PMLIBDIRS directories. Defining PM in the
864a5fa8 1992Makefile.PL will override PMLIBDIRS.
8e07c86e 1993
864a5fa8 1994=item PMLIBDIRS
8e07c86e 1995
864a5fa8 1996Ref to array of subdirectories containing library files. Defaults to
a3cb178b 1997[ 'lib', $(BASEEXT) ]. The directories will be scanned and I<any> files
864a5fa8 1998they contain will be installed in the corresponding location in the
1999library. A libscan() method can be used to alter the behaviour.
2000Defining PM in the Makefile.PL will override PMLIBDIRS.
8e07c86e 2001
e35b8f9e 2002(Where BASEEXT is the last component of NAME.)
2003
131aa089 2004=item PM_FILTER
2005
2006A filter program, in the traditional Unix sense (input from stdin, output
2007to stdout) that is passed on each .pm file during the build (in the
2008pm_to_blib() phase). It is empty by default, meaning no filtering is done.
2009
2010Great care is necessary when defining the command if quoting needs to be
2011done. For instance, you would need to say:
2012
2013 {'PM_FILTER' => 'grep -v \\"^\\#\\"'}
2014
3c4b39be 2015to remove all the leading comments on the fly during the build. The
131aa089 2016extra \\ are necessary, unfortunately, because this variable is interpolated
2017within the context of a Perl program built on the command line, and double
2018quotes are what is used with the -e switch to build that command line. The
2019# is escaped for the Makefile, since what is going to be generated will then
2020be:
2021
2022 PM_FILTER = grep -v \"^\#\"
2023
2024Without the \\ before the #, we'd have the start of a Makefile comment,
2025and the macro would be incorrectly defined.
2026
2aea4d40 2027=item POLLUTE
2028
2029Release 5.005 grandfathered old global symbol names by providing preprocessor
a7665c5e 2030macros for extension source compatibility. As of release 5.6, these
2aea4d40 2031preprocessor definitions are not available by default. The POLLUTE flag
2032specifies that the old names should still be defined:
2033
2034 perl Makefile.PL POLLUTE=1
2035
2036Please inform the module author if this is necessary to successfully install
a7665c5e 2037a module under 5.6 or later.
2aea4d40 2038
875fa795 2039=item PPM_INSTALL_EXEC
2040
20e08411 2041Name of the executable used to run C<PPM_INSTALL_SCRIPT> below. (e.g. perl)
875fa795 2042
2043=item PPM_INSTALL_SCRIPT
2044
2045Name of the script that gets executed by the Perl Package Manager after
2046the installation of a package.
2047
864a5fa8 2048=item PREFIX
8e07c86e 2049
f6d6199c 2050This overrides all the default install locations. Man pages,
2051libraries, scripts, etc... MakeMaker will try to make an educated
2052guess about where to place things under the new PREFIX based on your
2053Config defaults. Failing that, it will fall back to a structure
2054which should be sensible for your platform.
2055
2056If you specify LIB or any INSTALL* variables they will not be effected
2057by the PREFIX.
a4260cbc 2058
b2340c53 2059=item PREREQ_FATAL
2060
2061Bool. If this parameter is true, failing to have the required modules
2062(or the right versions thereof) will be fatal. perl Makefile.PL will die
2063with the proper message.
2064
2065Note: see L<Test::Harness> for a shortcut for stopping tests early if
2066you are missing dependencies.
2067
2068Do I<not> use this parameter for simple requirements, which could be resolved
2069at a later time, e.g. after an unsuccessful B<make test> of your module.
2070
2071It is I<extremely> rare to have to use C<PREREQ_FATAL> at all!
2072
d5d4ec93 2073=item PREREQ_PM
2074
2075Hashref: Names of modules that need to be available to run this
2076extension (e.g. Fcntl for SDBM_File) are the keys of the hash and the
2077desired version is the value. If the required version number is 0, we
2078only check if any version is installed already.
2079
88d69b28 2080=item PREREQ_PRINT
2081
2082Bool. If this parameter is true, the prerequisites will be printed to
2c91f887 2083stdout and MakeMaker will exit. The output format is an evalable hash
2084ref.
88d69b28 2085
2086$PREREQ_PM = {
2087 'A::B' => Vers1,
2088 'C::D' => Vers2,
2089 ...
2090 };
2091
2092=item PRINT_PREREQ
2093
2094RedHatism for C<PREREQ_PRINT>. The output format is different, though:
2095
2096 perl(A::B)>=Vers1 perl(C::D)>=Vers2 ...
2097
5c161494 2098=item SITEPREFIX
2099
479d2113 2100Like PERLPREFIX, but only for the site install locations.
2101
2102Defaults to $Config{siteprefixexp}. Perls prior to 5.6.0 didn't have
2103an explicit siteprefix in the Config. In those cases
2104$Config{installprefix} will be used.
5c161494 2105
479d2113 2106Overridable by PREFIX
5c161494 2107
bb68fe9e 2108=item SIGN
2109
7292dc67 2110When true, perform the generation and addition to the MANIFEST of the
2111SIGNATURE file in the distdir during 'make distdir', via 'cpansign
2112-s'.
bb68fe9e 2113
2114Note that you need to install the Module::Signature module to
2115perform this operation.
2116
2117Defaults to false.
2118
864a5fa8 2119=item SKIP
8e07c86e 2120
da7f727a 2121Arrayref. E.g. [qw(name1 name2)] skip (do not write) sections of the
a7665c5e 2122Makefile. Caution! Do not use the SKIP attribute for the negligible
2123speedup. It may seriously damage the resulting Makefile. Only use it
f1387719 2124if you really need it.
8e07c86e 2125
864a5fa8 2126=item TYPEMAPS
8e07c86e 2127
864a5fa8 2128Ref to array of typemap file names. Use this when the typemaps are
2129in some directory other than the current directory or when they are
2130not named B<typemap>. The last typemap in the list takes
2131precedence. A typemap in the current directory has highest
2132precedence, even if it isn't listed in TYPEMAPS. The default system
2133typemap has lowest precedence.
8e07c86e 2134
5c161494 2135=item VENDORPREFIX
2136
479d2113 2137Like PERLPREFIX, but only for the vendor install locations.
2138
2139Defaults to $Config{vendorprefixexp}.
5c161494 2140
479d2113 2141Overridable by PREFIX
5c161494 2142
45bc4d3a 2143=item VERBINST
2144
2145If true, make install will be verbose
2146
864a5fa8 2147=item VERSION
8e07c86e 2148
864a5fa8 2149Your version number for distributing the package. This defaults to
21500.1.
8e07c86e 2151
0d8023a2 2152=item VERSION_FROM
2153
2154Instead of specifying the VERSION in the Makefile.PL you can let
2155MakeMaker parse a file to determine the version number. The parsing
2156routine requires that the file named by VERSION_FROM contains one
2157single line to compute the version number. The first line in the file
2158that contains the regular expression
2159
84902520 2160 /([\$*])(([\w\:\']*)\bVERSION)\b.*\=/
0d8023a2 2161
2162will be evaluated with eval() and the value of the named variable
2163B<after> the eval() will be assigned to the VERSION attribute of the
2164MakeMaker object. The following lines will be parsed o.k.:
2165
2166 $VERSION = '1.00';
84902520 2167 *VERSION = \'1.01';
1e65eb70 2168 $VERSION = (q$Revision: 27436 $) =~ /(\d+)/g;
0d8023a2 2169 $FOO::VERSION = '1.10';
84902520 2170 *FOO::VERSION = \'1.11';
f6d6199c 2171 our $VERSION = 1.2.3; # new for perl5.6.0
0d8023a2 2172
2173but these will fail:
2174
2175 my $VERSION = '1.01';
2176 local $VERSION = '1.02';
2177 local $FOO::VERSION = '1.30';
2178
e35b8f9e 2179(Putting C<my> or C<local> on the preceding line will work o.k.)
2180
84902520 2181The file named in VERSION_FROM is not added as a dependency to
2182Makefile. This is not really correct, but it would be a major pain
2183during development to have to rewrite the Makefile for any smallish
2184change in that file. If you want to make sure that the Makefile
2185contains the correct VERSION macro after any change of the file, you
2186would have to do something like
2187
2188 depend => { Makefile => '$(VERSION_FROM)' }
2189
2190See attribute C<depend> below.
0d8023a2 2191
479d2113 2192=item VERSION_SYM
2193
2194A sanitized VERSION with . replaced by _. For places where . has
2195special meaning (some filesystems, RCS labels, etc...)
2196
864a5fa8 2197=item XS
8e07c86e 2198
864a5fa8 2199Hashref of .xs files. MakeMaker will default this. e.g.
8e07c86e 2200
864a5fa8 2201 {'name_of_file.xs' => 'name_of_file.c'}
8e07c86e 2202
864a5fa8 2203The .c files will automatically be included in the list of files
2204deleted by a make clean.
4633a7c4 2205
864a5fa8 2206=item XSOPT
8e07c86e 2207
864a5fa8 2208String of options to pass to xsubpp. This might include C<-C++> or
2209C<-extern>. Do not include typemaps here; the TYPEMAP parameter exists for
2210that purpose.
8e07c86e 2211
864a5fa8 2212=item XSPROTOARG
4633a7c4 2213
4e68a208 2214May be set to an empty string, which is identical to C<-prototypes>, or
864a5fa8 2215C<-noprototypes>. See the xsubpp documentation for details. MakeMaker
4e68a208 2216defaults to the empty string.
2217
0d8023a2 2218=item XS_VERSION
2219
2220Your version number for the .xs file of this package. This defaults
2221to the value of the VERSION attribute.
2222
8e07c86e 2223=back
2224
2225=head2 Additional lowercase attributes
2226
2227can be used to pass parameters to the methods which implement that
531e2ba1 2228part of the Makefile. Parameters are specified as a hash ref but are
2229passed to the method as a hash.
8e07c86e 2230
2231=over 2
2232
864a5fa8 2233=item clean
8e07c86e 2234
864a5fa8 2235 {FILES => "*.xyz foo"}
2236
c07a80fd 2237=item depend
2238
3c4b39be 2239 {ANY_TARGET => ANY_DEPENDENCY, ...}
c07a80fd 2240
e35b8f9e 2241(ANY_TARGET must not be given a double-colon rule by MakeMaker.)
2242
864a5fa8 2243=item dist
2244
5f8e730b 2245 {TARFLAGS => 'cvfF', COMPRESS => 'gzip', SUFFIX => '.gz',
3b03c0f3 2246 SHAR => 'shar -m', DIST_CP => 'ln', ZIP => '/bin/zip',
f1387719 2247 ZIPFLAGS => '-rl', DIST_DEFAULT => 'private tardist' }
864a5fa8 2248
2249If you specify COMPRESS, then SUFFIX should also be altered, as it is
2250needed to tell make the target file of the compression. Setting
2251DIST_CP to ln can be useful, if you need to preserve the timestamps on
2252your files. DIST_CP can take the values 'cp', which copies the file,
2253'ln', which links the file, and 'best' which copies symbolic links and
2254links the rest. Default is 'best'.
2255
2256=item dynamic_lib
2257
0d8023a2 2258 {ARMAYBE => 'ar', OTHERLDFLAGS => '...', INST_DYNAMIC_DEP => '...'}
8e07c86e 2259
8e07c86e 2260=item linkext
2261
2262 {LINKTYPE => 'static', 'dynamic' or ''}
2263
864a5fa8 2264NB: Extensions that have nothing but *.pm files had to say
8e07c86e 2265
2266 {LINKTYPE => ''}
2267
864a5fa8 2268with Pre-5.0 MakeMakers. Since version 5.00 of MakeMaker such a line
a7665c5e 2269can be deleted safely. MakeMaker recognizes when there's nothing to
864a5fa8 2270be linked.
8e07c86e 2271
864a5fa8 2272=item macro
8e07c86e 2273
864a5fa8 2274 {ANY_MACRO => ANY_VALUE, ...}
8e07c86e 2275
531e2ba1 2276=item postamble
2277
2278Anything put here will be passed to MY::postamble() if you have one.
2279
8e07c86e 2280=item realclean
2281
2282 {FILES => '$(INST_ARCHAUTODIR)/*.xyz'}
2283
f2f614a6 2284=item test
2285
2286 {TESTS => 't/*.t'}
2287
8e07c86e 2288=item tool_autosplit
2289
f2f614a6 2290 {MAXLEN => 8}
005c1a0e 2291
2292=back
2293
2294=head2 Overriding MakeMaker Methods
2295
2296If you cannot achieve the desired Makefile behaviour by specifying
2297attributes you may define private subroutines in the Makefile.PL.
e0678a30 2298Each subroutine returns the text it wishes to have written to
005c1a0e 2299the Makefile. To override a section of the Makefile you can
2300either say:
2301
f6d6199c 2302 sub MY::c_o { "new literal text" }
005c1a0e 2303
2304or you can edit the default by saying something like:
2305
e0678a30 2306 package MY; # so that "SUPER" works right
2307 sub c_o {
f6d6199c 2308 my $inherited = shift->SUPER::c_o(@_);
2309 $inherited =~ s/old text/new text/;
2310 $inherited;
2311 }
8e07c86e 2312
bdda3fbd 2313If you are running experiments with embedding perl as a library into
2314other applications, you might find MakeMaker is not sufficient. You'd
2315better have a look at ExtUtils::Embed which is a collection of utilities
2316for embedding.
005c1a0e 2317
2318If you still need a different solution, try to develop another
bdda3fbd 2319subroutine that fits your needs and submit the diffs to
a7d1454b 2320C<makemaker@perl.org>
005c1a0e 2321
e0678a30 2322For a complete description of all MakeMaker methods see
2323L<ExtUtils::MM_Unix>.
3b03c0f3 2324
2325Here is a simple example of how to add a new target to the generated
2326Makefile:
2327
2328 sub MY::postamble {
e0678a30 2329 return <<'MAKE_FRAG';
3b03c0f3 2330 $(MYEXTLIB): sdbm/Makefile
f6d6199c 2331 cd sdbm && $(MAKE) all
e0678a30 2332
2333 MAKE_FRAG
3b03c0f3 2334 }
2335
a884ca7c 2336=head2 The End Of Cargo Cult Programming
2337
2338WriteMakefile() now does some basic sanity checks on its parameters to
2339protect against typos and malformatted values. This means some things
2340which happened to work in the past will now throw warnings and
2341possibly produce internal errors.
2342
2343Some of the most common mistakes:
2344
2345=over 2
2346
76ca89ed 2347=item C<< MAN3PODS => ' ' >>
a884ca7c 2348
3c4b39be 2349This is commonly used to suppress the creation of man pages. MAN3PODS
a884ca7c 2350takes a hash ref not a string, but the above worked by accident in old
2351versions of MakeMaker.
2352
76ca89ed 2353The correct code is C<< MAN3PODS => { } >>.
a884ca7c 2354
2355=back
2356
3b03c0f3 2357
f1387719 2358=head2 Hintsfile support
2359
2360MakeMaker.pm uses the architecture specific information from
2361Config.pm. In addition it evaluates architecture specific hints files
2362in a C<hints/> directory. The hints files are expected to be named
2363like their counterparts in C<PERL_SRC/hints>, but with an C<.pl> file
2364name extension (eg. C<next_3_2.pl>). They are simply C<eval>ed by
2365MakeMaker within the WriteMakefile() subroutine, and can be used to
2366execute commands as well as to include special variables. The rules
2367which hintsfile is chosen are the same as in Configure.
2368
2369The hintsfile is eval()ed immediately after the arguments given to
2370WriteMakefile are stuffed into a hash reference $self but before this
2371reference becomes blessed. So if you want to do the equivalent to
2372override or create an attribute you would say something like
2373
2374 $self->{LIBS} = ['-ldbm -lucb -lc'];
2375
005c1a0e 2376=head2 Distribution Support
2377
2378For authors of extensions MakeMaker provides several Makefile
2379targets. Most of the support comes from the ExtUtils::Manifest module,
2380where additional documentation can be found.
2381
2382=over 4
2383
2384=item make distcheck
8e07c86e 2385
005c1a0e 2386reports which files are below the build directory but not in the
2387MANIFEST file and vice versa. (See ExtUtils::Manifest::fullcheck() for
2388details)
2389
4633a7c4 2390=item make skipcheck
2391
2392reports which files are skipped due to the entries in the
2393C<MANIFEST.SKIP> file (See ExtUtils::Manifest::skipcheck() for
2394details)
2395
005c1a0e 2396=item make distclean
8e07c86e 2397
005c1a0e 2398does a realclean first and then the distcheck. Note that this is not
a7665c5e 2399needed to build a new distribution as long as you are sure that the
005c1a0e 2400MANIFEST file is ok.
2401
2402=item make manifest
8e07c86e 2403
005c1a0e 2404rewrites the MANIFEST file, adding all remaining files found (See
2405ExtUtils::Manifest::mkmanifest() for details)
2406
2407=item make distdir
8e07c86e 2408
005c1a0e 2409Copies all the files that are in the MANIFEST file to a newly created
2410directory with the name C<$(DISTNAME)-$(VERSION)>. If that directory
2411exists, it will be removed first.
2412
7292dc67 2413Additionally, it will create a META.yml module meta-data file in the
2414distdir and add this to the distdir's MANFIEST. You can shut this
2415behavior off with the NO_META flag.
1df8d179 2416
f6d6199c 2417=item make disttest
8e07c86e 2418
2419Makes a distdir first, and runs a C<perl Makefile.PL>, a make, and
4633a7c4 2420a make test in that directory.
8e07c86e 2421
005c1a0e 2422=item make tardist
8e07c86e 2423
3b03c0f3 2424First does a distdir. Then a command $(PREOP) which defaults to a null
f1387719 2425command, followed by $(TOUNIX), which defaults to a null command under
2426UNIX, and will convert files in distribution directory to UNIX format
2427otherwise. Next it runs C<tar> on that directory into a tarfile and
3b03c0f3 2428deletes the directory. Finishes with a command $(POSTOP) which
2429defaults to a null command.
005c1a0e 2430
2431=item make dist
8e07c86e 2432
005c1a0e 2433Defaults to $(DIST_DEFAULT) which in turn defaults to tardist.
2434
2435=item make uutardist
8e07c86e 2436
005c1a0e 2437Runs a tardist first and uuencodes the tarfile.
2438
2439=item make shdist
8e07c86e 2440
3b03c0f3 2441First does a distdir. Then a command $(PREOP) which defaults to a null
2442command. Next it runs C<shar> on that directory into a sharfile and
2443deletes the intermediate directory again. Finishes with a command
2444$(POSTOP) which defaults to a null command. Note: For shdist to work
2445properly a C<shar> program that can handle directories is mandatory.
2446
2447=item make zipdist
2448
2449First does a distdir. Then a command $(PREOP) which defaults to a null
2450command. Runs C<$(ZIP) $(ZIPFLAGS)> on that directory into a
2451zipfile. Then deletes that directory. Finishes with a command
2452$(POSTOP) which defaults to a null command.
005c1a0e 2453
2454=item make ci
8e07c86e 2455
2456Does a $(CI) and a $(RCS_LABEL) on all files in the MANIFEST file.
2457
2458=back
005c1a0e 2459
2460Customization of the dist targets can be done by specifying a hash
2461reference to the dist attribute of the WriteMakefile call. The
2462following parameters are recognized:
2463
8e07c86e 2464 CI ('ci -u')
5f8e730b 2465 COMPRESS ('gzip --best')
005c1a0e 2466 POSTOP ('@ :')
8e07c86e 2467 PREOP ('@ :')
f1387719 2468 TO_UNIX (depends on the system)
8e07c86e 2469 RCS_LABEL ('rcs -q -Nv$(VERSION_SYM):')
2470 SHAR ('shar')
5f8e730b 2471 SUFFIX ('.gz')
8e07c86e 2472 TAR ('tar')
2473 TARFLAGS ('cvf')
3b03c0f3 2474 ZIP ('zip')
2475 ZIPFLAGS ('-r')
005c1a0e 2476
2477An example:
2478
5f8e730b 2479 WriteMakefile( 'dist' => { COMPRESS=>"bzip2", SUFFIX=>".bz2" })
005c1a0e 2480
1df8d179 2481
2482=head2 Module Meta-Data
2483
2484Long plaguing users of MakeMaker based modules has been the problem of
2485getting basic information about the module out of the sources
2486I<without> running the F<Makefile.PL> and doing a bunch of messy
2487heuristics on the resulting F<Makefile>. To this end a simple module
2488meta-data file has been introduced, F<META.yml>.
2489
2490F<META.yml> is a YAML document (see http://www.yaml.org) containing
2491basic information about the module (name, version, prerequisites...)
2492in an easy to read format. The format is developed and defined by the
64964e6d 2493Module::Build developers (see
2494http://module-build.sourceforge.net/META-spec.html)
1df8d179 2495
2496MakeMaker will automatically generate a F<META.yml> file for you and
2497add it to your F<MANIFEST> as part of the 'distdir' target (and thus
2498the 'dist' target). This is intended to seamlessly and rapidly
2499populate CPAN with module meta-data. If you wish to shut this feature
2500off, set the C<NO_META> C<WriteMakefile()> flag to true.
2501
2502
1b171b8d 2503=head2 Disabling an extension
2504
2505If some events detected in F<Makefile.PL> imply that there is no way
2506to create the Module, but this is a normal state of things, then you
2507can create a F<Makefile> which does nothing, but succeeds on all the
2508"usual" build targets. To do so, use
2509
1e65eb70 2510 use ExtUtils::MakeMaker qw(WriteEmptyMakefile);
2511 WriteEmptyMakefile();
1b171b8d 2512
2513instead of WriteMakefile().
2514
2515This may be useful if other modules expect this module to be I<built>
2516OK, as opposed to I<work> OK (say, this system-dependent module builds
2517in a subdirectory of some other distribution, or is listed as a
2518dependency in a CPAN::Bundle, but the functionality is supported by
2519different means on the current architecture).
2520
479d2113 2521=head2 Other Handy Functions
2522
2523=over 4
2524
2525=item prompt
2526
2527 my $value = prompt($message);
2528 my $value = prompt($message, $default);
2529
2530The C<prompt()> function provides an easy way to request user input
2531used to write a makefile. It displays the $message as a prompt for
2532input. If a $default is provided it will be used as a default. The
2533function returns the $value selected by the user.
2534
2535If C<prompt()> detects that it is not running interactively and there
2536is nothing on STDIN or if the PERL_MM_USE_DEFAULT environment variable
2537is set to true, the $default will be used without prompting. This
2538prevents automated processes from blocking on user input.
2539
2540If no $default is provided an empty string will be used instead.
2541
2542=back
2543
2544
6ce21ffa 2545=head1 ENVIRONMENT
2546
479d2113 2547=over 4
6ce21ffa 2548
2443aee5 2549=item PERL_MM_OPT
6ce21ffa 2550
2551Command line options used by C<MakeMaker-E<gt>new()>, and thus by
2552C<WriteMakefile()>. The string is split on whitespace, and the result
2553is processed before any actual command line arguments are processed.
2554
9d05ba64 2555=item PERL_MM_USE_DEFAULT
2556
2557If set to a true value then MakeMaker's prompt function will
2558always return the default without waiting for user input.
2559
41e5fcb0 2560=item PERL_CORE
2561
2562Same as the PERL_CORE parameter. The parameter overrides this.
2563
6ce21ffa 2564=back
2565
f1387719 2566=head1 SEE ALSO
2567
562c8117 2568L<Module::Build> is a pure-Perl alternative to MakeMaker which does
2569not rely on make or any other external utility. It is easier to
2570extend to suit your needs.
2571
2572L<Module::Install> is a wrapper around MakeMaker which adds features
2573not normally available.
2574
2575L<ExtUtils::ModuleMaker> and L<Module::Starter> are both modules to
2576help you setup your distribution.
005c1a0e 2577
e05e23b1 2578=head1 AUTHORS
fed7345c 2579
a7d1454b 2580Andy Dougherty C<doughera@lafayette.edu>, Andreas KE<ouml>nig
2581C<andreas.koenig@mind.de>, Tim Bunce C<timb@cpan.org>. VMS
2582support by Charles Bailey C<bailey@newman.upenn.edu>. OS/2 support
2583by Ilya Zakharevich C<ilya@math.ohio-state.edu>.
de90321e 2584
a7d1454b 2585Currently maintained by Michael G Schwern C<schwern@pobox.com>
f6d6199c 2586
a7d1454b 2587Send patches and ideas to C<makemaker@perl.org>.
e8012c20 2588
e0678a30 2589Send bug reports via http://rt.cpan.org/. Please send your
2590generated Makefile along with your report.
2591
a7d1454b 2592For more up-to-date information, see L<http://www.makemaker.org>.
fed7345c 2593
479d2113 2594=head1 LICENSE
2595
2596This program is free software; you can redistribute it and/or
2597modify it under the same terms as Perl itself.
2598
a7d1454b 2599See L<http://www.perl.com/perl/misc/Artistic.html>
479d2113 2600
2601
005c1a0e 2602=cut