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