[Encode] UTF-7 Support
[p5sagit/p5-mst-13.2.git] / lib / ExtUtils / MakeMaker.pm
CommitLineData
e05e23b1 1package ExtUtils::MakeMaker;
2
57b1a898 3BEGIN {require 5.005_03;}
4
431b0fc4 5$VERSION = '6.10_03';
6($Revision = substr(q$Revision: 1.109 $, 10)) =~ 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
431b0fc4 222 LINKTYPE MAKEAPERL MAKEFILE_OLD MAN1PODS MAN3PODS MAP_TARGET MYEXTLIB
223 NAME NEEDS_LINKING NOECHO NO_META NORECURS NO_VC OBJECT OPTIMIZE
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
864a5fa8 1422=item FIRST_MAKEFILE
1423
479d2113 1424The name of the Makefile to be produced. This is used for the second
1425Makefile that will be produced for the MAP_TARGET.
1426
1427Defaults to 'Makefile' or 'Descrip.MMS' on VMS.
1428
1429(Note: we couldn't use MAKEFILE because dmake uses this for something
1430else).
864a5fa8 1431
1432=item FULLPERL
8e07c86e 1433
75e2e551 1434Perl binary able to run this extension, load XS modules, etc...
1435
1436=item FULLPERLRUN
1437
1438Like PERLRUN, except it uses FULLPERL.
1439
1440=item FULLPERLRUNINST
1441
1442Like PERLRUNINST, except it uses FULLPERL.
864a5fa8 1443
762efda7 1444=item FUNCLIST
1445
1446This provides an alternate means to specify function names to be
1447exported from the extension. Its value is a reference to an
1448array of function names to be exported by the extension. These
1449names are passed through unaltered to the linker options file.
1450
864a5fa8 1451=item H
1452
1453Ref to array of *.h file names. Similar to C.
1454
84902520 1455=item IMPORTS
1456
875fa795 1457This attribute is used to specify names to be imported into the
69ff8adf 1458extension. Takes a hash ref.
1459
1460It is only used on OS/2 and Win32.
84902520 1461
864a5fa8 1462=item INC
1463
1464Include file dirs eg: C<"-I/usr/5include -I/path/to/inc">
1465
f1387719 1466=item INCLUDE_EXT
1467
1468Array of extension names to be included when doing a static build.
1469MakeMaker will normally build with all of the installed extensions when
1470doing a static build, and that is usually the desired behavior. If
1471INCLUDE_EXT is present then MakeMaker will build only with those extensions
1472which are explicitly mentioned. (e.g. [ qw( Socket POSIX ) ])
1473
1474It is not necessary to mention DynaLoader or the current extension when
1475filling in INCLUDE_EXT. If the INCLUDE_EXT is mentioned but is empty then
1476only DynaLoader and the current extension will be included in the build.
1477
1478This attribute may be most useful when specified as a string on the
de592821 1479command line: perl Makefile.PL INCLUDE_EXT='POSIX Socket Devel::Peek'
f1387719 1480
864a5fa8 1481=item INSTALLARCHLIB
1482
e05e23b1 1483Used by 'make install', which copies files from INST_ARCHLIB to this
1484directory if INSTALLDIRS is set to perl.
864a5fa8 1485
1486=item INSTALLBIN
1487
5c161494 1488Directory to install binary files (e.g. tkperl) into if
1489INSTALLDIRS=perl.
e05e23b1 1490
1491=item INSTALLDIRS
1492
5c161494 1493Determines which of the sets of installation directories to choose:
1494perl, site or vendor. Defaults to site.
8e07c86e 1495
1496=item INSTALLMAN1DIR
1497
1498=item INSTALLMAN3DIR
1499
5c161494 1500These directories get the man pages at 'make install' time if
1501INSTALLDIRS=perl. Defaults to $Config{installman*dir}.
8e07c86e 1502
5c161494 1503If set to 'none', no man pages will be installed.
e0678a30 1504
864a5fa8 1505=item INSTALLPRIVLIB
8e07c86e 1506
e05e23b1 1507Used by 'make install', which copies files from INST_LIB to this
1508directory if INSTALLDIRS is set to perl.
1509
5c161494 1510Defaults to $Config{installprivlib}.
1511
f1387719 1512=item INSTALLSCRIPT
1513
1514Used by 'make install' which copies files from INST_SCRIPT to this
1515directory.
1516
875fa795 1517=item INSTALLSITEARCH
e05e23b1 1518
875fa795 1519Used by 'make install', which copies files from INST_ARCHLIB to this
e05e23b1 1520directory if INSTALLDIRS is set to site (default).
1521
5c161494 1522=item INSTALLSITEBIN
1523
1524Used by 'make install', which copies files from INST_BIN to this
1525directory if INSTALLDIRS is set to site (default).
1526
875fa795 1527=item INSTALLSITELIB
e05e23b1 1528
875fa795 1529Used by 'make install', which copies files from INST_LIB to this
e05e23b1 1530directory if INSTALLDIRS is set to site (default).
8e07c86e 1531
5c161494 1532=item INSTALLSITEMAN1DIR
1533
1534=item INSTALLSITEMAN3DIR
1535
1536These directories get the man pages at 'make install' time if
1537INSTALLDIRS=site (default). Defaults to
1538$(SITEPREFIX)/man/man$(MAN*EXT).
1539
1540If set to 'none', no man pages will be installed.
1541
1542=item INSTALLVENDORARCH
1543
1544Used by 'make install', which copies files from INST_ARCHLIB to this
1545directory if INSTALLDIRS is set to vendor.
1546
1547=item INSTALLVENDORBIN
1548
1549Used by 'make install', which copies files from INST_BIN to this
1550directory if INSTALLDIRS is set to vendor.
1551
1552=item INSTALLVENDORLIB
1553
1554Used by 'make install', which copies files from INST_LIB to this
1555directory if INSTALLDIRS is set to vendor.
1556
1557=item INSTALLVENDORMAN1DIR
1558
1559=item INSTALLVENDORMAN3DIR
1560
1561These directories get the man pages at 'make install' time if
1562INSTALLDIRS=vendor. Defaults to $(VENDORPREFIX)/man/man$(MAN*EXT).
1563
1564If set to 'none', no man pages will be installed.
1565
864a5fa8 1566=item INST_ARCHLIB
8e07c86e 1567
864a5fa8 1568Same as INST_LIB for architecture dependent files.
8e07c86e 1569
f1387719 1570=item INST_BIN
1571
1572Directory to put real binary files during 'make'. These will be copied
1573to INSTALLBIN during 'make install'
1574
e35b8f9e 1575=item INST_LIB
1576
1577Directory where we put library files of this extension while building
1578it.
1579
864a5fa8 1580=item INST_MAN1DIR
8e07c86e 1581
864a5fa8 1582Directory to hold the man pages at 'make' time
8e07c86e 1583
864a5fa8 1584=item INST_MAN3DIR
8e07c86e 1585
864a5fa8 1586Directory to hold the man pages at 'make' time
8e07c86e 1587
f1387719 1588=item INST_SCRIPT
1589
1590Directory, where executable files should be installed during
c3fed81c 1591'make'. Defaults to "./blib/script", just to have a dummy location during
f1387719 1592testing. make install will copy the files in INST_SCRIPT to
1593INSTALLSCRIPT.
1594
479d2113 1595=item LD
1596
1597Program to be used to link libraries for dynamic loading.
1598
1599Defaults to $Config{ld}.
1600
a884ca7c 1601=item LDDLFLAGS
1602
1603Any special flags that might need to be passed to ld to create a
1604shared library suitable for dynamic loading. It is up to the makefile
1605to use it. (See L<Config/lddlflags>)
1606
1607Defaults to $Config{lddlflags}.
1608
864a5fa8 1609=item LDFROM
8e07c86e 1610
69ff8adf 1611Defaults to "$(OBJECT)" and is used in the ld command to specify
864a5fa8 1612what files to link/load from (also see dynamic_lib below for how to
1613specify ld flags)
8e07c86e 1614
bab2b58e 1615=item LIB
1616
e35b8f9e 1617LIB should only be set at C<perl Makefile.PL> time but is allowed as a
f6d6199c 1618MakeMaker argument. It has the effect of setting both INSTALLPRIVLIB
1619and INSTALLSITELIB to that value regardless any explicit setting of
1620those arguments (or of PREFIX). INSTALLARCHLIB and INSTALLSITEARCH
1621are set to the corresponding architecture subdirectory.
bab2b58e 1622
762efda7 1623=item LIBPERL_A
1624
1625The filename of the perllibrary that will be used together with this
1626extension. Defaults to libperl.a.
1627
8e07c86e 1628=item LIBS
1629
1630An anonymous array of alternative library
1631specifications to be searched for (in order) until
864a5fa8 1632at least one library is found. E.g.
8e07c86e 1633
1634 'LIBS' => ["-lgdbm", "-ldbm -lfoo", "-L/path -ldbm.nfs"]
1635
1636Mind, that any element of the array
1637contains a complete set of arguments for the ld
1638command. So do not specify
1639
1640 'LIBS' => ["-ltcl", "-ltk", "-lX11"]
1641
1642See ODBM_File/Makefile.PL for an example, where an array is needed. If
1643you specify a scalar as in
1644
1645 'LIBS' => "-ltcl -ltk -lX11"
1646
1647MakeMaker will turn it into an array with one element.
1648
864a5fa8 1649=item LINKTYPE
8e07c86e 1650
e05e23b1 1651'static' or 'dynamic' (default unless usedl=undef in
1652config.sh). Should only be used to force static linking (also see
864a5fa8 1653linkext below).
8e07c86e 1654
864a5fa8 1655=item MAKEAPERL
8e07c86e 1656
864a5fa8 1657Boolean which tells MakeMaker, that it should include the rules to
1658make a perl. This is handled automatically as a switch by
1659MakeMaker. The user normally does not need it.
8e07c86e 1660
479d2113 1661=item MAKEFILE_OLD
1662
1663When 'make clean' or similar is run, the $(FIRST_MAKEFILE) will be
1664backed up at this location.
8e07c86e 1665
479d2113 1666Defaults to $(FIRST_MAKEFILE).old or $(FIRST_MAKEFILE)_old on VMS.
8e07c86e 1667
864a5fa8 1668=item MAN1PODS
8e07c86e 1669
864a5fa8 1670Hashref of pod-containing files. MakeMaker will default this to all
1671EXE_FILES files that include POD directives. The files listed
1672here will be converted to man pages and installed as was requested
1673at Configure time.
8e07c86e 1674
864a5fa8 1675=item MAN3PODS
8e07c86e 1676
bfa2a9ad 1677Hashref that assigns to *.pm and *.pod files the files into which the
1678manpages are to be written. MakeMaker parses all *.pod and *.pm files
1679for POD directives. Files that contain POD will be the default keys of
1680the MAN3PODS hashref. These will then be converted to man pages during
1681C<make> and will be installed during C<make install>.
8e07c86e 1682
864a5fa8 1683=item MAP_TARGET
8e07c86e 1684
864a5fa8 1685If it is intended, that a new perl binary be produced, this variable
1686may hold a name for that binary. Defaults to perl
8e07c86e 1687
864a5fa8 1688=item MYEXTLIB
4633a7c4 1689
864a5fa8 1690If the extension links to a library that it builds set this to the
1691name of the library (see SDBM_File)
4633a7c4 1692
864a5fa8 1693=item NAME
8e07c86e 1694
864a5fa8 1695Perl module name for this extension (DBD::Oracle). This will default
1696to the directory name but should be explicitly defined in the
1697Makefile.PL.
8e07c86e 1698
864a5fa8 1699=item NEEDS_LINKING
8e07c86e 1700
a7665c5e 1701MakeMaker will figure out if an extension contains linkable code
864a5fa8 1702anywhere down the directory tree, and will set this variable
a7665c5e 1703accordingly, but you can speed it up a very little bit if you define
864a5fa8 1704this boolean variable yourself.
8e07c86e 1705
e05e23b1 1706=item NOECHO
1707
479d2113 1708Command so make does not print the literal commands its running.
1709
1710By setting it to an empty string you can generate a Makefile that
1711prints all commands. Mainly used in debugging MakeMaker itself.
1712
1713Defaults to C<@>.
e05e23b1 1714
864a5fa8 1715=item NORECURS
8e07c86e 1716
e05e23b1 1717Boolean. Attribute to inhibit descending into subdirectories.
8e07c86e 1718
762efda7 1719=item NO_VC
1720
a7665c5e 1721In general, any generated Makefile checks for the current version of
762efda7 1722MakeMaker and the version the Makefile was built under. If NO_VC is
1723set, the version check is neglected. Do not write this into your
1724Makefile.PL, use it interactively instead.
1725
864a5fa8 1726=item OBJECT
8e07c86e 1727
864a5fa8 1728List of object files, defaults to '$(BASEEXT)$(OBJ_EXT)', but can be a long
1729string containing all object files, e.g. "tkpBind.o
1730tkpButton.o tkpCanvas.o"
8e07c86e 1731
e35b8f9e 1732(Where BASEEXT is the last component of NAME, and OBJ_EXT is $Config{obj_ext}.)
1733
3b03c0f3 1734=item OPTIMIZE
1735
1736Defaults to C<-O>. Set it to C<-g> to turn debugging on. The flag is
1737passed to subdirectory makes.
1738
864a5fa8 1739=item PERL
8e07c86e 1740
864a5fa8 1741Perl binary for tasks that can be done by miniperl
8e07c86e 1742
da7f727a 1743=item PERL_CORE
1744
1745Set only when MakeMaker is building the extensions of the Perl core
1746distribution.
1747
864a5fa8 1748=item PERLMAINCC
005c1a0e 1749
864a5fa8 1750The call to the program that is able to compile perlmain.c. Defaults
1751to $(CC).
005c1a0e 1752
864a5fa8 1753=item PERL_ARCHLIB
005c1a0e 1754
da7f727a 1755Same as for PERL_LIB, but for architecture dependent files.
1756
1757Used only when MakeMaker is building the extensions of the Perl core
1758distribution (because normally $(PERL_ARCHLIB) is automatically in @INC,
1759and adding it would get in the way of PERL5LIB).
8e07c86e 1760
864a5fa8 1761=item PERL_LIB
8e07c86e 1762
864a5fa8 1763Directory containing the Perl library to use.
8e07c86e 1764
da7f727a 1765Used only when MakeMaker is building the extensions of the Perl core
1766distribution (because normally $(PERL_LIB) is automatically in @INC,
1767and adding it would get in the way of PERL5LIB).
1768
e35b8f9e 1769=item PERL_MALLOC_OK
1770
1771defaults to 0. Should be set to TRUE if the extension can work with
1772the memory allocation routines substituted by the Perl malloc() subsystem.
1773This should be applicable to most extensions with exceptions of those
1774
1775=over 4
1776
1777=item *
1778
1779with bugs in memory allocations which are caught by Perl's malloc();
1780
1781=item *
1782
1783which interact with the memory allocator in other ways than via
1784malloc(), realloc(), free(), calloc(), sbrk() and brk();
1785
1786=item *
1787
1788which rely on special alignment which is not provided by Perl's malloc().
1789
1790=back
1791
1792B<NOTE.> Negligence to set this flag in I<any one> of loaded extension
1793nullifies many advantages of Perl's malloc(), such as better usage of
1794system resources, error detection, memory usage reporting, catchable failure
1795of memory allocations, etc.
1796
479d2113 1797=item PERLPREFIX
1798
1799Directory under which core modules are to be installed.
1800
1801Defaults to $Config{installprefixexp} falling back to
1802$Config{installprefix}, $Config{prefixexp} or $Config{prefix} should
1803$Config{installprefixexp} not exist.
1804
1805Overridden by PREFIX.
1806
da7f727a 1807=item PERLRUN
1808
75e2e551 1809Use this instead of $(PERL) when you wish to run perl. It will set up
1810extra necessary flags for you.
f6d6199c 1811
ffbaec2a 1812=item PERLRUNINST
f6d6199c 1813
75e2e551 1814Use this instead of $(PERL) when you wish to run perl to work with
1815modules. It will add things like -I$(INST_ARCH) and other necessary
1816flags so perl can see the modules you're about to install.
f6d6199c 1817
864a5fa8 1818=item PERL_SRC
8e07c86e 1819
864a5fa8 1820Directory containing the Perl source code (use of this should be
1821avoided, it may be undefined)
8e07c86e 1822
2366100d 1823=item PERM_RW
1824
de592821 1825Desired permission for read/writable files. Defaults to C<644>.
2366100d 1826See also L<MM_Unix/perm_rw>.
1827
1828=item PERM_RWX
1829
1830Desired permission for executable files. Defaults to C<755>.
1831See also L<MM_Unix/perm_rwx>.
1832
864a5fa8 1833=item PL_FILES
8e07c86e 1834
864a5fa8 1835Ref to hash of files to be processed as perl programs. MakeMaker
1836will default to any found *.PL file (except Makefile.PL) being keys
1837and the basename of the file being the value. E.g.
8e07c86e 1838
864a5fa8 1839 {'foobar.PL' => 'foobar'}
8e07c86e 1840
864a5fa8 1841The *.PL files are expected to produce output to the target files
3aa35033 1842themselves. If multiple files can be generated from the same *.PL
1843file then the value in the hash can be a reference to an array of
1844target file names. E.g.
1845
1846 {'foobar.PL' => ['foobar1','foobar2']}
8e07c86e 1847
864a5fa8 1848=item PM
8e07c86e 1849
864a5fa8 1850Hashref of .pm files and *.pl files to be installed. e.g.
8e07c86e 1851
864a5fa8 1852 {'name_of_file.pm' => '$(INST_LIBDIR)/install_as.pm'}
8e07c86e 1853
a3cb178b 1854By default this will include *.pm and *.pl and the files found in
1855the PMLIBDIRS directories. Defining PM in the
864a5fa8 1856Makefile.PL will override PMLIBDIRS.
8e07c86e 1857
864a5fa8 1858=item PMLIBDIRS
8e07c86e 1859
864a5fa8 1860Ref to array of subdirectories containing library files. Defaults to
a3cb178b 1861[ 'lib', $(BASEEXT) ]. The directories will be scanned and I<any> files
864a5fa8 1862they contain will be installed in the corresponding location in the
1863library. A libscan() method can be used to alter the behaviour.
1864Defining PM in the Makefile.PL will override PMLIBDIRS.
8e07c86e 1865
e35b8f9e 1866(Where BASEEXT is the last component of NAME.)
1867
131aa089 1868=item PM_FILTER
1869
1870A filter program, in the traditional Unix sense (input from stdin, output
1871to stdout) that is passed on each .pm file during the build (in the
1872pm_to_blib() phase). It is empty by default, meaning no filtering is done.
1873
1874Great care is necessary when defining the command if quoting needs to be
1875done. For instance, you would need to say:
1876
1877 {'PM_FILTER' => 'grep -v \\"^\\#\\"'}
1878
1879to remove all the leading coments on the fly during the build. The
1880extra \\ are necessary, unfortunately, because this variable is interpolated
1881within the context of a Perl program built on the command line, and double
1882quotes are what is used with the -e switch to build that command line. The
1883# is escaped for the Makefile, since what is going to be generated will then
1884be:
1885
1886 PM_FILTER = grep -v \"^\#\"
1887
1888Without the \\ before the #, we'd have the start of a Makefile comment,
1889and the macro would be incorrectly defined.
1890
2aea4d40 1891=item POLLUTE
1892
1893Release 5.005 grandfathered old global symbol names by providing preprocessor
a7665c5e 1894macros for extension source compatibility. As of release 5.6, these
2aea4d40 1895preprocessor definitions are not available by default. The POLLUTE flag
1896specifies that the old names should still be defined:
1897
1898 perl Makefile.PL POLLUTE=1
1899
1900Please inform the module author if this is necessary to successfully install
a7665c5e 1901a module under 5.6 or later.
2aea4d40 1902
875fa795 1903=item PPM_INSTALL_EXEC
1904
20e08411 1905Name of the executable used to run C<PPM_INSTALL_SCRIPT> below. (e.g. perl)
875fa795 1906
1907=item PPM_INSTALL_SCRIPT
1908
1909Name of the script that gets executed by the Perl Package Manager after
1910the installation of a package.
1911
864a5fa8 1912=item PREFIX
8e07c86e 1913
f6d6199c 1914This overrides all the default install locations. Man pages,
1915libraries, scripts, etc... MakeMaker will try to make an educated
1916guess about where to place things under the new PREFIX based on your
1917Config defaults. Failing that, it will fall back to a structure
1918which should be sensible for your platform.
1919
1920If you specify LIB or any INSTALL* variables they will not be effected
1921by the PREFIX.
a4260cbc 1922
b2340c53 1923=item PREREQ_FATAL
1924
1925Bool. If this parameter is true, failing to have the required modules
1926(or the right versions thereof) will be fatal. perl Makefile.PL will die
1927with the proper message.
1928
1929Note: see L<Test::Harness> for a shortcut for stopping tests early if
1930you are missing dependencies.
1931
1932Do I<not> use this parameter for simple requirements, which could be resolved
1933at a later time, e.g. after an unsuccessful B<make test> of your module.
1934
1935It is I<extremely> rare to have to use C<PREREQ_FATAL> at all!
1936
d5d4ec93 1937=item PREREQ_PM
1938
1939Hashref: Names of modules that need to be available to run this
1940extension (e.g. Fcntl for SDBM_File) are the keys of the hash and the
1941desired version is the value. If the required version number is 0, we
1942only check if any version is installed already.
1943
88d69b28 1944=item PREREQ_PRINT
1945
1946Bool. If this parameter is true, the prerequisites will be printed to
1947stdout and MakeMaker will exit. The output format is
1948
1949$PREREQ_PM = {
1950 'A::B' => Vers1,
1951 'C::D' => Vers2,
1952 ...
1953 };
1954
1955=item PRINT_PREREQ
1956
1957RedHatism for C<PREREQ_PRINT>. The output format is different, though:
1958
1959 perl(A::B)>=Vers1 perl(C::D)>=Vers2 ...
1960
5c161494 1961=item SITEPREFIX
1962
479d2113 1963Like PERLPREFIX, but only for the site install locations.
1964
1965Defaults to $Config{siteprefixexp}. Perls prior to 5.6.0 didn't have
1966an explicit siteprefix in the Config. In those cases
1967$Config{installprefix} will be used.
5c161494 1968
479d2113 1969Overridable by PREFIX
5c161494 1970
864a5fa8 1971=item SKIP
8e07c86e 1972
da7f727a 1973Arrayref. E.g. [qw(name1 name2)] skip (do not write) sections of the
a7665c5e 1974Makefile. Caution! Do not use the SKIP attribute for the negligible
1975speedup. It may seriously damage the resulting Makefile. Only use it
f1387719 1976if you really need it.
8e07c86e 1977
864a5fa8 1978=item TYPEMAPS
8e07c86e 1979
864a5fa8 1980Ref to array of typemap file names. Use this when the typemaps are
1981in some directory other than the current directory or when they are
1982not named B<typemap>. The last typemap in the list takes
1983precedence. A typemap in the current directory has highest
1984precedence, even if it isn't listed in TYPEMAPS. The default system
1985typemap has lowest precedence.
8e07c86e 1986
5c161494 1987=item VENDORPREFIX
1988
479d2113 1989Like PERLPREFIX, but only for the vendor install locations.
1990
1991Defaults to $Config{vendorprefixexp}.
5c161494 1992
479d2113 1993Overridable by PREFIX
5c161494 1994
45bc4d3a 1995=item VERBINST
1996
1997If true, make install will be verbose
1998
864a5fa8 1999=item VERSION
8e07c86e 2000
864a5fa8 2001Your version number for distributing the package. This defaults to
20020.1.
8e07c86e 2003
0d8023a2 2004=item VERSION_FROM
2005
2006Instead of specifying the VERSION in the Makefile.PL you can let
2007MakeMaker parse a file to determine the version number. The parsing
2008routine requires that the file named by VERSION_FROM contains one
2009single line to compute the version number. The first line in the file
2010that contains the regular expression
2011
84902520 2012 /([\$*])(([\w\:\']*)\bVERSION)\b.*\=/
0d8023a2 2013
2014will be evaluated with eval() and the value of the named variable
2015B<after> the eval() will be assigned to the VERSION attribute of the
2016MakeMaker object. The following lines will be parsed o.k.:
2017
2018 $VERSION = '1.00';
84902520 2019 *VERSION = \'1.01';
431b0fc4 2020 ( $VERSION ) = '$Revision: 1.109 $ ' =~ /\$Revision:\s+([^\s]+)/;
0d8023a2 2021 $FOO::VERSION = '1.10';
84902520 2022 *FOO::VERSION = \'1.11';
f6d6199c 2023 our $VERSION = 1.2.3; # new for perl5.6.0
0d8023a2 2024
2025but these will fail:
2026
2027 my $VERSION = '1.01';
2028 local $VERSION = '1.02';
2029 local $FOO::VERSION = '1.30';
2030
e35b8f9e 2031(Putting C<my> or C<local> on the preceding line will work o.k.)
2032
84902520 2033The file named in VERSION_FROM is not added as a dependency to
2034Makefile. This is not really correct, but it would be a major pain
2035during development to have to rewrite the Makefile for any smallish
2036change in that file. If you want to make sure that the Makefile
2037contains the correct VERSION macro after any change of the file, you
2038would have to do something like
2039
2040 depend => { Makefile => '$(VERSION_FROM)' }
2041
2042See attribute C<depend> below.
0d8023a2 2043
479d2113 2044=item VERSION_SYM
2045
2046A sanitized VERSION with . replaced by _. For places where . has
2047special meaning (some filesystems, RCS labels, etc...)
2048
864a5fa8 2049=item XS
8e07c86e 2050
864a5fa8 2051Hashref of .xs files. MakeMaker will default this. e.g.
8e07c86e 2052
864a5fa8 2053 {'name_of_file.xs' => 'name_of_file.c'}
8e07c86e 2054
864a5fa8 2055The .c files will automatically be included in the list of files
2056deleted by a make clean.
4633a7c4 2057
864a5fa8 2058=item XSOPT
8e07c86e 2059
864a5fa8 2060String of options to pass to xsubpp. This might include C<-C++> or
2061C<-extern>. Do not include typemaps here; the TYPEMAP parameter exists for
2062that purpose.
8e07c86e 2063
864a5fa8 2064=item XSPROTOARG
4633a7c4 2065
4e68a208 2066May be set to an empty string, which is identical to C<-prototypes>, or
864a5fa8 2067C<-noprototypes>. See the xsubpp documentation for details. MakeMaker
4e68a208 2068defaults to the empty string.
2069
0d8023a2 2070=item XS_VERSION
2071
2072Your version number for the .xs file of this package. This defaults
2073to the value of the VERSION attribute.
2074
8e07c86e 2075=back
2076
2077=head2 Additional lowercase attributes
2078
2079can be used to pass parameters to the methods which implement that
f1387719 2080part of the Makefile.
8e07c86e 2081
2082=over 2
2083
864a5fa8 2084=item clean
8e07c86e 2085
864a5fa8 2086 {FILES => "*.xyz foo"}
2087
c07a80fd 2088=item depend
2089
2090 {ANY_TARGET => ANY_DEPENDECY, ...}
2091
e35b8f9e 2092(ANY_TARGET must not be given a double-colon rule by MakeMaker.)
2093
864a5fa8 2094=item dist
2095
5f8e730b 2096 {TARFLAGS => 'cvfF', COMPRESS => 'gzip', SUFFIX => '.gz',
3b03c0f3 2097 SHAR => 'shar -m', DIST_CP => 'ln', ZIP => '/bin/zip',
f1387719 2098 ZIPFLAGS => '-rl', DIST_DEFAULT => 'private tardist' }
864a5fa8 2099
2100If you specify COMPRESS, then SUFFIX should also be altered, as it is
2101needed to tell make the target file of the compression. Setting
2102DIST_CP to ln can be useful, if you need to preserve the timestamps on
2103your files. DIST_CP can take the values 'cp', which copies the file,
2104'ln', which links the file, and 'best' which copies symbolic links and
2105links the rest. Default is 'best'.
2106
2107=item dynamic_lib
2108
0d8023a2 2109 {ARMAYBE => 'ar', OTHERLDFLAGS => '...', INST_DYNAMIC_DEP => '...'}
8e07c86e 2110
8e07c86e 2111=item linkext
2112
2113 {LINKTYPE => 'static', 'dynamic' or ''}
2114
864a5fa8 2115NB: Extensions that have nothing but *.pm files had to say
8e07c86e 2116
2117 {LINKTYPE => ''}
2118
864a5fa8 2119with Pre-5.0 MakeMakers. Since version 5.00 of MakeMaker such a line
a7665c5e 2120can be deleted safely. MakeMaker recognizes when there's nothing to
864a5fa8 2121be linked.
8e07c86e 2122
864a5fa8 2123=item macro
8e07c86e 2124
864a5fa8 2125 {ANY_MACRO => ANY_VALUE, ...}
8e07c86e 2126
2127=item realclean
2128
2129 {FILES => '$(INST_ARCHAUTODIR)/*.xyz'}
2130
f2f614a6 2131=item test
2132
2133 {TESTS => 't/*.t'}
2134
8e07c86e 2135=item tool_autosplit
2136
f2f614a6 2137 {MAXLEN => 8}
005c1a0e 2138
2139=back
2140
2141=head2 Overriding MakeMaker Methods
2142
2143If you cannot achieve the desired Makefile behaviour by specifying
2144attributes you may define private subroutines in the Makefile.PL.
e0678a30 2145Each subroutine returns the text it wishes to have written to
005c1a0e 2146the Makefile. To override a section of the Makefile you can
2147either say:
2148
f6d6199c 2149 sub MY::c_o { "new literal text" }
005c1a0e 2150
2151or you can edit the default by saying something like:
2152
e0678a30 2153 package MY; # so that "SUPER" works right
2154 sub c_o {
f6d6199c 2155 my $inherited = shift->SUPER::c_o(@_);
2156 $inherited =~ s/old text/new text/;
2157 $inherited;
2158 }
8e07c86e 2159
bdda3fbd 2160If you are running experiments with embedding perl as a library into
2161other applications, you might find MakeMaker is not sufficient. You'd
2162better have a look at ExtUtils::Embed which is a collection of utilities
2163for embedding.
005c1a0e 2164
2165If you still need a different solution, try to develop another
bdda3fbd 2166subroutine that fits your needs and submit the diffs to
e0678a30 2167F<makemaker@perl.org>
005c1a0e 2168
e0678a30 2169For a complete description of all MakeMaker methods see
2170L<ExtUtils::MM_Unix>.
3b03c0f3 2171
2172Here is a simple example of how to add a new target to the generated
2173Makefile:
2174
2175 sub MY::postamble {
e0678a30 2176 return <<'MAKE_FRAG';
3b03c0f3 2177 $(MYEXTLIB): sdbm/Makefile
f6d6199c 2178 cd sdbm && $(MAKE) all
e0678a30 2179
2180 MAKE_FRAG
3b03c0f3 2181 }
2182
a884ca7c 2183=head2 The End Of Cargo Cult Programming
2184
2185WriteMakefile() now does some basic sanity checks on its parameters to
2186protect against typos and malformatted values. This means some things
2187which happened to work in the past will now throw warnings and
2188possibly produce internal errors.
2189
2190Some of the most common mistakes:
2191
2192=over 2
2193
2194=item C<<MAN3PODS => ' '>>
2195
2196This is commonly used to supress the creation of man pages. MAN3PODS
2197takes a hash ref not a string, but the above worked by accident in old
2198versions of MakeMaker.
2199
2200The correct code is C<<MAN3PODS => { }>>.
2201
2202=back
2203
3b03c0f3 2204
f1387719 2205=head2 Hintsfile support
2206
2207MakeMaker.pm uses the architecture specific information from
2208Config.pm. In addition it evaluates architecture specific hints files
2209in a C<hints/> directory. The hints files are expected to be named
2210like their counterparts in C<PERL_SRC/hints>, but with an C<.pl> file
2211name extension (eg. C<next_3_2.pl>). They are simply C<eval>ed by
2212MakeMaker within the WriteMakefile() subroutine, and can be used to
2213execute commands as well as to include special variables. The rules
2214which hintsfile is chosen are the same as in Configure.
2215
2216The hintsfile is eval()ed immediately after the arguments given to
2217WriteMakefile are stuffed into a hash reference $self but before this
2218reference becomes blessed. So if you want to do the equivalent to
2219override or create an attribute you would say something like
2220
2221 $self->{LIBS} = ['-ldbm -lucb -lc'];
2222
005c1a0e 2223=head2 Distribution Support
2224
2225For authors of extensions MakeMaker provides several Makefile
2226targets. Most of the support comes from the ExtUtils::Manifest module,
2227where additional documentation can be found.
2228
2229=over 4
2230
2231=item make distcheck
8e07c86e 2232
005c1a0e 2233reports which files are below the build directory but not in the
2234MANIFEST file and vice versa. (See ExtUtils::Manifest::fullcheck() for
2235details)
2236
4633a7c4 2237=item make skipcheck
2238
2239reports which files are skipped due to the entries in the
2240C<MANIFEST.SKIP> file (See ExtUtils::Manifest::skipcheck() for
2241details)
2242
005c1a0e 2243=item make distclean
8e07c86e 2244
005c1a0e 2245does a realclean first and then the distcheck. Note that this is not
a7665c5e 2246needed to build a new distribution as long as you are sure that the
005c1a0e 2247MANIFEST file is ok.
2248
2249=item make manifest
8e07c86e 2250
005c1a0e 2251rewrites the MANIFEST file, adding all remaining files found (See
2252ExtUtils::Manifest::mkmanifest() for details)
2253
2254=item make distdir
8e07c86e 2255
005c1a0e 2256Copies all the files that are in the MANIFEST file to a newly created
2257directory with the name C<$(DISTNAME)-$(VERSION)>. If that directory
2258exists, it will be removed first.
2259
f6d6199c 2260=item make disttest
8e07c86e 2261
2262Makes a distdir first, and runs a C<perl Makefile.PL>, a make, and
4633a7c4 2263a make test in that directory.
8e07c86e 2264
005c1a0e 2265=item make tardist
8e07c86e 2266
3b03c0f3 2267First does a distdir. Then a command $(PREOP) which defaults to a null
f1387719 2268command, followed by $(TOUNIX), which defaults to a null command under
2269UNIX, and will convert files in distribution directory to UNIX format
2270otherwise. Next it runs C<tar> on that directory into a tarfile and
3b03c0f3 2271deletes the directory. Finishes with a command $(POSTOP) which
2272defaults to a null command.
005c1a0e 2273
2274=item make dist
8e07c86e 2275
005c1a0e 2276Defaults to $(DIST_DEFAULT) which in turn defaults to tardist.
2277
2278=item make uutardist
8e07c86e 2279
005c1a0e 2280Runs a tardist first and uuencodes the tarfile.
2281
2282=item make shdist
8e07c86e 2283
3b03c0f3 2284First does a distdir. Then a command $(PREOP) which defaults to a null
2285command. Next it runs C<shar> on that directory into a sharfile and
2286deletes the intermediate directory again. Finishes with a command
2287$(POSTOP) which defaults to a null command. Note: For shdist to work
2288properly a C<shar> program that can handle directories is mandatory.
2289
2290=item make zipdist
2291
2292First does a distdir. Then a command $(PREOP) which defaults to a null
2293command. Runs C<$(ZIP) $(ZIPFLAGS)> on that directory into a
2294zipfile. Then deletes that directory. Finishes with a command
2295$(POSTOP) which defaults to a null command.
005c1a0e 2296
2297=item make ci
8e07c86e 2298
2299Does a $(CI) and a $(RCS_LABEL) on all files in the MANIFEST file.
2300
2301=back
005c1a0e 2302
2303Customization of the dist targets can be done by specifying a hash
2304reference to the dist attribute of the WriteMakefile call. The
2305following parameters are recognized:
2306
8e07c86e 2307 CI ('ci -u')
5f8e730b 2308 COMPRESS ('gzip --best')
005c1a0e 2309 POSTOP ('@ :')
8e07c86e 2310 PREOP ('@ :')
f1387719 2311 TO_UNIX (depends on the system)
8e07c86e 2312 RCS_LABEL ('rcs -q -Nv$(VERSION_SYM):')
2313 SHAR ('shar')
5f8e730b 2314 SUFFIX ('.gz')
8e07c86e 2315 TAR ('tar')
2316 TARFLAGS ('cvf')
3b03c0f3 2317 ZIP ('zip')
2318 ZIPFLAGS ('-r')
005c1a0e 2319
2320An example:
2321
5f8e730b 2322 WriteMakefile( 'dist' => { COMPRESS=>"bzip2", SUFFIX=>".bz2" })
005c1a0e 2323
1b171b8d 2324=head2 Disabling an extension
2325
2326If some events detected in F<Makefile.PL> imply that there is no way
2327to create the Module, but this is a normal state of things, then you
2328can create a F<Makefile> which does nothing, but succeeds on all the
2329"usual" build targets. To do so, use
2330
2331 ExtUtils::MakeMaker::WriteEmptyMakefile();
2332
2333instead of WriteMakefile().
2334
2335This may be useful if other modules expect this module to be I<built>
2336OK, as opposed to I<work> OK (say, this system-dependent module builds
2337in a subdirectory of some other distribution, or is listed as a
2338dependency in a CPAN::Bundle, but the functionality is supported by
2339different means on the current architecture).
2340
479d2113 2341=head2 Other Handy Functions
2342
2343=over 4
2344
2345=item prompt
2346
2347 my $value = prompt($message);
2348 my $value = prompt($message, $default);
2349
2350The C<prompt()> function provides an easy way to request user input
2351used to write a makefile. It displays the $message as a prompt for
2352input. If a $default is provided it will be used as a default. The
2353function returns the $value selected by the user.
2354
2355If C<prompt()> detects that it is not running interactively and there
2356is nothing on STDIN or if the PERL_MM_USE_DEFAULT environment variable
2357is set to true, the $default will be used without prompting. This
2358prevents automated processes from blocking on user input.
2359
2360If no $default is provided an empty string will be used instead.
2361
2362=back
2363
2364
6ce21ffa 2365=head1 ENVIRONMENT
2366
479d2113 2367=over 4
6ce21ffa 2368
2443aee5 2369=item PERL_MM_OPT
6ce21ffa 2370
2371Command line options used by C<MakeMaker-E<gt>new()>, and thus by
2372C<WriteMakefile()>. The string is split on whitespace, and the result
2373is processed before any actual command line arguments are processed.
2374
9d05ba64 2375=item PERL_MM_USE_DEFAULT
2376
2377If set to a true value then MakeMaker's prompt function will
2378always return the default without waiting for user input.
2379
6ce21ffa 2380=back
2381
f1387719 2382=head1 SEE ALSO
2383
f6d6199c 2384ExtUtils::MM_Unix, ExtUtils::Manifest ExtUtils::Install,
2385ExtUtils::Embed
005c1a0e 2386
e05e23b1 2387=head1 AUTHORS
fed7345c 2388
e0678a30 2389Andy Dougherty <F<doughera@lafayette.edu>>, Andreas KE<ouml>nig
2390<F<andreas.koenig@mind.de>>, Tim Bunce <F<timb@cpan.org>>. VMS
de90321e 2391support by Charles Bailey <F<bailey@newman.upenn.edu>>. OS/2 support
2392by Ilya Zakharevich <F<ilya@math.ohio-state.edu>>.
2393
f6d6199c 2394Currently maintained by Michael G Schwern <F<schwern@pobox.com>>
2395
2396Send patches and ideas to <F<makemaker@perl.org>>.
e8012c20 2397
e0678a30 2398Send bug reports via http://rt.cpan.org/. Please send your
2399generated Makefile along with your report.
2400
2401For more up-to-date information, see http://www.makemaker.org.
fed7345c 2402
479d2113 2403=head1 LICENSE
2404
2405This program is free software; you can redistribute it and/or
2406modify it under the same terms as Perl itself.
2407
2408See F<http://www.perl.com/perl/misc/Artistic.html>
2409
2410
005c1a0e 2411=cut