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