OS2 patches
[p5sagit/p5-mst-13.2.git] / lib / ExtUtils / MakeMaker.pm
CommitLineData
e05e23b1 1package ExtUtils::MakeMaker;
2
57b1a898 3BEGIN {require 5.005_03;}
4
1df8d179 5$VERSION = '6.10_05';
6($Revision) = q$Revision: 1.115 $ =~ /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
1df8d179 1724=item NO_META
1725
1726When true, suppresses the generation and addition to the MANIFEST of
1727the META.yml module meta-data file during 'make distdir'.
1728
1729Defaults to false.
1730
762efda7 1731=item NO_VC
1732
a7665c5e 1733In general, any generated Makefile checks for the current version of
762efda7 1734MakeMaker and the version the Makefile was built under. If NO_VC is
1735set, the version check is neglected. Do not write this into your
1736Makefile.PL, use it interactively instead.
1737
864a5fa8 1738=item OBJECT
8e07c86e 1739
864a5fa8 1740List of object files, defaults to '$(BASEEXT)$(OBJ_EXT)', but can be a long
1741string containing all object files, e.g. "tkpBind.o
1742tkpButton.o tkpCanvas.o"
8e07c86e 1743
e35b8f9e 1744(Where BASEEXT is the last component of NAME, and OBJ_EXT is $Config{obj_ext}.)
1745
3b03c0f3 1746=item OPTIMIZE
1747
1748Defaults to C<-O>. Set it to C<-g> to turn debugging on. The flag is
1749passed to subdirectory makes.
1750
864a5fa8 1751=item PERL
8e07c86e 1752
864a5fa8 1753Perl binary for tasks that can be done by miniperl
8e07c86e 1754
da7f727a 1755=item PERL_CORE
1756
1757Set only when MakeMaker is building the extensions of the Perl core
1758distribution.
1759
864a5fa8 1760=item PERLMAINCC
005c1a0e 1761
864a5fa8 1762The call to the program that is able to compile perlmain.c. Defaults
1763to $(CC).
005c1a0e 1764
864a5fa8 1765=item PERL_ARCHLIB
005c1a0e 1766
da7f727a 1767Same as for PERL_LIB, but for architecture dependent files.
1768
1769Used only when MakeMaker is building the extensions of the Perl core
1770distribution (because normally $(PERL_ARCHLIB) is automatically in @INC,
1771and adding it would get in the way of PERL5LIB).
8e07c86e 1772
864a5fa8 1773=item PERL_LIB
8e07c86e 1774
864a5fa8 1775Directory containing the Perl library to use.
8e07c86e 1776
da7f727a 1777Used only when MakeMaker is building the extensions of the Perl core
1778distribution (because normally $(PERL_LIB) is automatically in @INC,
1779and adding it would get in the way of PERL5LIB).
1780
e35b8f9e 1781=item PERL_MALLOC_OK
1782
1783defaults to 0. Should be set to TRUE if the extension can work with
1784the memory allocation routines substituted by the Perl malloc() subsystem.
1785This should be applicable to most extensions with exceptions of those
1786
1787=over 4
1788
1789=item *
1790
1791with bugs in memory allocations which are caught by Perl's malloc();
1792
1793=item *
1794
1795which interact with the memory allocator in other ways than via
1796malloc(), realloc(), free(), calloc(), sbrk() and brk();
1797
1798=item *
1799
1800which rely on special alignment which is not provided by Perl's malloc().
1801
1802=back
1803
1804B<NOTE.> Negligence to set this flag in I<any one> of loaded extension
1805nullifies many advantages of Perl's malloc(), such as better usage of
1806system resources, error detection, memory usage reporting, catchable failure
1807of memory allocations, etc.
1808
479d2113 1809=item PERLPREFIX
1810
1811Directory under which core modules are to be installed.
1812
1813Defaults to $Config{installprefixexp} falling back to
1814$Config{installprefix}, $Config{prefixexp} or $Config{prefix} should
1815$Config{installprefixexp} not exist.
1816
1817Overridden by PREFIX.
1818
da7f727a 1819=item PERLRUN
1820
75e2e551 1821Use this instead of $(PERL) when you wish to run perl. It will set up
1822extra necessary flags for you.
f6d6199c 1823
ffbaec2a 1824=item PERLRUNINST
f6d6199c 1825
75e2e551 1826Use this instead of $(PERL) when you wish to run perl to work with
1827modules. It will add things like -I$(INST_ARCH) and other necessary
1828flags so perl can see the modules you're about to install.
f6d6199c 1829
864a5fa8 1830=item PERL_SRC
8e07c86e 1831
864a5fa8 1832Directory containing the Perl source code (use of this should be
1833avoided, it may be undefined)
8e07c86e 1834
2366100d 1835=item PERM_RW
1836
de592821 1837Desired permission for read/writable files. Defaults to C<644>.
2366100d 1838See also L<MM_Unix/perm_rw>.
1839
1840=item PERM_RWX
1841
1842Desired permission for executable files. Defaults to C<755>.
1843See also L<MM_Unix/perm_rwx>.
1844
864a5fa8 1845=item PL_FILES
8e07c86e 1846
864a5fa8 1847Ref to hash of files to be processed as perl programs. MakeMaker
1848will default to any found *.PL file (except Makefile.PL) being keys
1849and the basename of the file being the value. E.g.
8e07c86e 1850
864a5fa8 1851 {'foobar.PL' => 'foobar'}
8e07c86e 1852
864a5fa8 1853The *.PL files are expected to produce output to the target files
3aa35033 1854themselves. If multiple files can be generated from the same *.PL
1855file then the value in the hash can be a reference to an array of
1856target file names. E.g.
1857
1858 {'foobar.PL' => ['foobar1','foobar2']}
8e07c86e 1859
864a5fa8 1860=item PM
8e07c86e 1861
864a5fa8 1862Hashref of .pm files and *.pl files to be installed. e.g.
8e07c86e 1863
864a5fa8 1864 {'name_of_file.pm' => '$(INST_LIBDIR)/install_as.pm'}
8e07c86e 1865
a3cb178b 1866By default this will include *.pm and *.pl and the files found in
1867the PMLIBDIRS directories. Defining PM in the
864a5fa8 1868Makefile.PL will override PMLIBDIRS.
8e07c86e 1869
864a5fa8 1870=item PMLIBDIRS
8e07c86e 1871
864a5fa8 1872Ref to array of subdirectories containing library files. Defaults to
a3cb178b 1873[ 'lib', $(BASEEXT) ]. The directories will be scanned and I<any> files
864a5fa8 1874they contain will be installed in the corresponding location in the
1875library. A libscan() method can be used to alter the behaviour.
1876Defining PM in the Makefile.PL will override PMLIBDIRS.
8e07c86e 1877
e35b8f9e 1878(Where BASEEXT is the last component of NAME.)
1879
131aa089 1880=item PM_FILTER
1881
1882A filter program, in the traditional Unix sense (input from stdin, output
1883to stdout) that is passed on each .pm file during the build (in the
1884pm_to_blib() phase). It is empty by default, meaning no filtering is done.
1885
1886Great care is necessary when defining the command if quoting needs to be
1887done. For instance, you would need to say:
1888
1889 {'PM_FILTER' => 'grep -v \\"^\\#\\"'}
1890
1891to remove all the leading coments on the fly during the build. The
1892extra \\ are necessary, unfortunately, because this variable is interpolated
1893within the context of a Perl program built on the command line, and double
1894quotes are what is used with the -e switch to build that command line. The
1895# is escaped for the Makefile, since what is going to be generated will then
1896be:
1897
1898 PM_FILTER = grep -v \"^\#\"
1899
1900Without the \\ before the #, we'd have the start of a Makefile comment,
1901and the macro would be incorrectly defined.
1902
2aea4d40 1903=item POLLUTE
1904
1905Release 5.005 grandfathered old global symbol names by providing preprocessor
a7665c5e 1906macros for extension source compatibility. As of release 5.6, these
2aea4d40 1907preprocessor definitions are not available by default. The POLLUTE flag
1908specifies that the old names should still be defined:
1909
1910 perl Makefile.PL POLLUTE=1
1911
1912Please inform the module author if this is necessary to successfully install
a7665c5e 1913a module under 5.6 or later.
2aea4d40 1914
875fa795 1915=item PPM_INSTALL_EXEC
1916
20e08411 1917Name of the executable used to run C<PPM_INSTALL_SCRIPT> below. (e.g. perl)
875fa795 1918
1919=item PPM_INSTALL_SCRIPT
1920
1921Name of the script that gets executed by the Perl Package Manager after
1922the installation of a package.
1923
864a5fa8 1924=item PREFIX
8e07c86e 1925
f6d6199c 1926This overrides all the default install locations. Man pages,
1927libraries, scripts, etc... MakeMaker will try to make an educated
1928guess about where to place things under the new PREFIX based on your
1929Config defaults. Failing that, it will fall back to a structure
1930which should be sensible for your platform.
1931
1932If you specify LIB or any INSTALL* variables they will not be effected
1933by the PREFIX.
a4260cbc 1934
b2340c53 1935=item PREREQ_FATAL
1936
1937Bool. If this parameter is true, failing to have the required modules
1938(or the right versions thereof) will be fatal. perl Makefile.PL will die
1939with the proper message.
1940
1941Note: see L<Test::Harness> for a shortcut for stopping tests early if
1942you are missing dependencies.
1943
1944Do I<not> use this parameter for simple requirements, which could be resolved
1945at a later time, e.g. after an unsuccessful B<make test> of your module.
1946
1947It is I<extremely> rare to have to use C<PREREQ_FATAL> at all!
1948
d5d4ec93 1949=item PREREQ_PM
1950
1951Hashref: Names of modules that need to be available to run this
1952extension (e.g. Fcntl for SDBM_File) are the keys of the hash and the
1953desired version is the value. If the required version number is 0, we
1954only check if any version is installed already.
1955
88d69b28 1956=item PREREQ_PRINT
1957
1958Bool. If this parameter is true, the prerequisites will be printed to
1959stdout and MakeMaker will exit. The output format is
1960
1961$PREREQ_PM = {
1962 'A::B' => Vers1,
1963 'C::D' => Vers2,
1964 ...
1965 };
1966
1967=item PRINT_PREREQ
1968
1969RedHatism for C<PREREQ_PRINT>. The output format is different, though:
1970
1971 perl(A::B)>=Vers1 perl(C::D)>=Vers2 ...
1972
5c161494 1973=item SITEPREFIX
1974
479d2113 1975Like PERLPREFIX, but only for the site install locations.
1976
1977Defaults to $Config{siteprefixexp}. Perls prior to 5.6.0 didn't have
1978an explicit siteprefix in the Config. In those cases
1979$Config{installprefix} will be used.
5c161494 1980
479d2113 1981Overridable by PREFIX
5c161494 1982
864a5fa8 1983=item SKIP
8e07c86e 1984
da7f727a 1985Arrayref. E.g. [qw(name1 name2)] skip (do not write) sections of the
a7665c5e 1986Makefile. Caution! Do not use the SKIP attribute for the negligible
1987speedup. It may seriously damage the resulting Makefile. Only use it
f1387719 1988if you really need it.
8e07c86e 1989
864a5fa8 1990=item TYPEMAPS
8e07c86e 1991
864a5fa8 1992Ref to array of typemap file names. Use this when the typemaps are
1993in some directory other than the current directory or when they are
1994not named B<typemap>. The last typemap in the list takes
1995precedence. A typemap in the current directory has highest
1996precedence, even if it isn't listed in TYPEMAPS. The default system
1997typemap has lowest precedence.
8e07c86e 1998
5c161494 1999=item VENDORPREFIX
2000
479d2113 2001Like PERLPREFIX, but only for the vendor install locations.
2002
2003Defaults to $Config{vendorprefixexp}.
5c161494 2004
479d2113 2005Overridable by PREFIX
5c161494 2006
45bc4d3a 2007=item VERBINST
2008
2009If true, make install will be verbose
2010
864a5fa8 2011=item VERSION
8e07c86e 2012
864a5fa8 2013Your version number for distributing the package. This defaults to
20140.1.
8e07c86e 2015
0d8023a2 2016=item VERSION_FROM
2017
2018Instead of specifying the VERSION in the Makefile.PL you can let
2019MakeMaker parse a file to determine the version number. The parsing
2020routine requires that the file named by VERSION_FROM contains one
2021single line to compute the version number. The first line in the file
2022that contains the regular expression
2023
84902520 2024 /([\$*])(([\w\:\']*)\bVERSION)\b.*\=/
0d8023a2 2025
2026will be evaluated with eval() and the value of the named variable
2027B<after> the eval() will be assigned to the VERSION attribute of the
2028MakeMaker object. The following lines will be parsed o.k.:
2029
2030 $VERSION = '1.00';
84902520 2031 *VERSION = \'1.01';
1df8d179 2032 $VERSION = sprintf "%d.%03d", q$Revision: 1.115 $ =~ /(\d+)/g;
0d8023a2 2033 $FOO::VERSION = '1.10';
84902520 2034 *FOO::VERSION = \'1.11';
f6d6199c 2035 our $VERSION = 1.2.3; # new for perl5.6.0
0d8023a2 2036
2037but these will fail:
2038
2039 my $VERSION = '1.01';
2040 local $VERSION = '1.02';
2041 local $FOO::VERSION = '1.30';
2042
e35b8f9e 2043(Putting C<my> or C<local> on the preceding line will work o.k.)
2044
84902520 2045The file named in VERSION_FROM is not added as a dependency to
2046Makefile. This is not really correct, but it would be a major pain
2047during development to have to rewrite the Makefile for any smallish
2048change in that file. If you want to make sure that the Makefile
2049contains the correct VERSION macro after any change of the file, you
2050would have to do something like
2051
2052 depend => { Makefile => '$(VERSION_FROM)' }
2053
2054See attribute C<depend> below.
0d8023a2 2055
479d2113 2056=item VERSION_SYM
2057
2058A sanitized VERSION with . replaced by _. For places where . has
2059special meaning (some filesystems, RCS labels, etc...)
2060
864a5fa8 2061=item XS
8e07c86e 2062
864a5fa8 2063Hashref of .xs files. MakeMaker will default this. e.g.
8e07c86e 2064
864a5fa8 2065 {'name_of_file.xs' => 'name_of_file.c'}
8e07c86e 2066
864a5fa8 2067The .c files will automatically be included in the list of files
2068deleted by a make clean.
4633a7c4 2069
864a5fa8 2070=item XSOPT
8e07c86e 2071
864a5fa8 2072String of options to pass to xsubpp. This might include C<-C++> or
2073C<-extern>. Do not include typemaps here; the TYPEMAP parameter exists for
2074that purpose.
8e07c86e 2075
864a5fa8 2076=item XSPROTOARG
4633a7c4 2077
4e68a208 2078May be set to an empty string, which is identical to C<-prototypes>, or
864a5fa8 2079C<-noprototypes>. See the xsubpp documentation for details. MakeMaker
4e68a208 2080defaults to the empty string.
2081
0d8023a2 2082=item XS_VERSION
2083
2084Your version number for the .xs file of this package. This defaults
2085to the value of the VERSION attribute.
2086
8e07c86e 2087=back
2088
2089=head2 Additional lowercase attributes
2090
2091can be used to pass parameters to the methods which implement that
f1387719 2092part of the Makefile.
8e07c86e 2093
2094=over 2
2095
864a5fa8 2096=item clean
8e07c86e 2097
864a5fa8 2098 {FILES => "*.xyz foo"}
2099
c07a80fd 2100=item depend
2101
2102 {ANY_TARGET => ANY_DEPENDECY, ...}
2103
e35b8f9e 2104(ANY_TARGET must not be given a double-colon rule by MakeMaker.)
2105
864a5fa8 2106=item dist
2107
5f8e730b 2108 {TARFLAGS => 'cvfF', COMPRESS => 'gzip', SUFFIX => '.gz',
3b03c0f3 2109 SHAR => 'shar -m', DIST_CP => 'ln', ZIP => '/bin/zip',
f1387719 2110 ZIPFLAGS => '-rl', DIST_DEFAULT => 'private tardist' }
864a5fa8 2111
2112If you specify COMPRESS, then SUFFIX should also be altered, as it is
2113needed to tell make the target file of the compression. Setting
2114DIST_CP to ln can be useful, if you need to preserve the timestamps on
2115your files. DIST_CP can take the values 'cp', which copies the file,
2116'ln', which links the file, and 'best' which copies symbolic links and
2117links the rest. Default is 'best'.
2118
2119=item dynamic_lib
2120
0d8023a2 2121 {ARMAYBE => 'ar', OTHERLDFLAGS => '...', INST_DYNAMIC_DEP => '...'}
8e07c86e 2122
8e07c86e 2123=item linkext
2124
2125 {LINKTYPE => 'static', 'dynamic' or ''}
2126
864a5fa8 2127NB: Extensions that have nothing but *.pm files had to say
8e07c86e 2128
2129 {LINKTYPE => ''}
2130
864a5fa8 2131with Pre-5.0 MakeMakers. Since version 5.00 of MakeMaker such a line
a7665c5e 2132can be deleted safely. MakeMaker recognizes when there's nothing to
864a5fa8 2133be linked.
8e07c86e 2134
864a5fa8 2135=item macro
8e07c86e 2136
864a5fa8 2137 {ANY_MACRO => ANY_VALUE, ...}
8e07c86e 2138
2139=item realclean
2140
2141 {FILES => '$(INST_ARCHAUTODIR)/*.xyz'}
2142
f2f614a6 2143=item test
2144
2145 {TESTS => 't/*.t'}
2146
8e07c86e 2147=item tool_autosplit
2148
f2f614a6 2149 {MAXLEN => 8}
005c1a0e 2150
2151=back
2152
2153=head2 Overriding MakeMaker Methods
2154
2155If you cannot achieve the desired Makefile behaviour by specifying
2156attributes you may define private subroutines in the Makefile.PL.
e0678a30 2157Each subroutine returns the text it wishes to have written to
005c1a0e 2158the Makefile. To override a section of the Makefile you can
2159either say:
2160
f6d6199c 2161 sub MY::c_o { "new literal text" }
005c1a0e 2162
2163or you can edit the default by saying something like:
2164
e0678a30 2165 package MY; # so that "SUPER" works right
2166 sub c_o {
f6d6199c 2167 my $inherited = shift->SUPER::c_o(@_);
2168 $inherited =~ s/old text/new text/;
2169 $inherited;
2170 }
8e07c86e 2171
bdda3fbd 2172If you are running experiments with embedding perl as a library into
2173other applications, you might find MakeMaker is not sufficient. You'd
2174better have a look at ExtUtils::Embed which is a collection of utilities
2175for embedding.
005c1a0e 2176
2177If you still need a different solution, try to develop another
bdda3fbd 2178subroutine that fits your needs and submit the diffs to
e0678a30 2179F<makemaker@perl.org>
005c1a0e 2180
e0678a30 2181For a complete description of all MakeMaker methods see
2182L<ExtUtils::MM_Unix>.
3b03c0f3 2183
2184Here is a simple example of how to add a new target to the generated
2185Makefile:
2186
2187 sub MY::postamble {
e0678a30 2188 return <<'MAKE_FRAG';
3b03c0f3 2189 $(MYEXTLIB): sdbm/Makefile
f6d6199c 2190 cd sdbm && $(MAKE) all
e0678a30 2191
2192 MAKE_FRAG
3b03c0f3 2193 }
2194
a884ca7c 2195=head2 The End Of Cargo Cult Programming
2196
2197WriteMakefile() now does some basic sanity checks on its parameters to
2198protect against typos and malformatted values. This means some things
2199which happened to work in the past will now throw warnings and
2200possibly produce internal errors.
2201
2202Some of the most common mistakes:
2203
2204=over 2
2205
2206=item C<<MAN3PODS => ' '>>
2207
2208This is commonly used to supress the creation of man pages. MAN3PODS
2209takes a hash ref not a string, but the above worked by accident in old
2210versions of MakeMaker.
2211
2212The correct code is C<<MAN3PODS => { }>>.
2213
2214=back
2215
3b03c0f3 2216
f1387719 2217=head2 Hintsfile support
2218
2219MakeMaker.pm uses the architecture specific information from
2220Config.pm. In addition it evaluates architecture specific hints files
2221in a C<hints/> directory. The hints files are expected to be named
2222like their counterparts in C<PERL_SRC/hints>, but with an C<.pl> file
2223name extension (eg. C<next_3_2.pl>). They are simply C<eval>ed by
2224MakeMaker within the WriteMakefile() subroutine, and can be used to
2225execute commands as well as to include special variables. The rules
2226which hintsfile is chosen are the same as in Configure.
2227
2228The hintsfile is eval()ed immediately after the arguments given to
2229WriteMakefile are stuffed into a hash reference $self but before this
2230reference becomes blessed. So if you want to do the equivalent to
2231override or create an attribute you would say something like
2232
2233 $self->{LIBS} = ['-ldbm -lucb -lc'];
2234
005c1a0e 2235=head2 Distribution Support
2236
2237For authors of extensions MakeMaker provides several Makefile
2238targets. Most of the support comes from the ExtUtils::Manifest module,
2239where additional documentation can be found.
2240
2241=over 4
2242
2243=item make distcheck
8e07c86e 2244
005c1a0e 2245reports which files are below the build directory but not in the
2246MANIFEST file and vice versa. (See ExtUtils::Manifest::fullcheck() for
2247details)
2248
4633a7c4 2249=item make skipcheck
2250
2251reports which files are skipped due to the entries in the
2252C<MANIFEST.SKIP> file (See ExtUtils::Manifest::skipcheck() for
2253details)
2254
005c1a0e 2255=item make distclean
8e07c86e 2256
005c1a0e 2257does a realclean first and then the distcheck. Note that this is not
a7665c5e 2258needed to build a new distribution as long as you are sure that the
005c1a0e 2259MANIFEST file is ok.
2260
2261=item make manifest
8e07c86e 2262
005c1a0e 2263rewrites the MANIFEST file, adding all remaining files found (See
2264ExtUtils::Manifest::mkmanifest() for details)
2265
2266=item make distdir
8e07c86e 2267
005c1a0e 2268Copies all the files that are in the MANIFEST file to a newly created
2269directory with the name C<$(DISTNAME)-$(VERSION)>. If that directory
2270exists, it will be removed first.
2271
1df8d179 2272Additionally, it will create a META.yml module meta-data file and add
2273this to your MANFIEST. You can shut this behavior off with the NO_META
2274flag.
2275
f6d6199c 2276=item make disttest
8e07c86e 2277
2278Makes a distdir first, and runs a C<perl Makefile.PL>, a make, and
4633a7c4 2279a make test in that directory.
8e07c86e 2280
005c1a0e 2281=item make tardist
8e07c86e 2282
3b03c0f3 2283First does a distdir. Then a command $(PREOP) which defaults to a null
f1387719 2284command, followed by $(TOUNIX), which defaults to a null command under
2285UNIX, and will convert files in distribution directory to UNIX format
2286otherwise. Next it runs C<tar> on that directory into a tarfile and
3b03c0f3 2287deletes the directory. Finishes with a command $(POSTOP) which
2288defaults to a null command.
005c1a0e 2289
2290=item make dist
8e07c86e 2291
005c1a0e 2292Defaults to $(DIST_DEFAULT) which in turn defaults to tardist.
2293
2294=item make uutardist
8e07c86e 2295
005c1a0e 2296Runs a tardist first and uuencodes the tarfile.
2297
2298=item make shdist
8e07c86e 2299
3b03c0f3 2300First does a distdir. Then a command $(PREOP) which defaults to a null
2301command. Next it runs C<shar> on that directory into a sharfile and
2302deletes the intermediate directory again. Finishes with a command
2303$(POSTOP) which defaults to a null command. Note: For shdist to work
2304properly a C<shar> program that can handle directories is mandatory.
2305
2306=item make zipdist
2307
2308First does a distdir. Then a command $(PREOP) which defaults to a null
2309command. Runs C<$(ZIP) $(ZIPFLAGS)> on that directory into a
2310zipfile. Then deletes that directory. Finishes with a command
2311$(POSTOP) which defaults to a null command.
005c1a0e 2312
2313=item make ci
8e07c86e 2314
2315Does a $(CI) and a $(RCS_LABEL) on all files in the MANIFEST file.
2316
2317=back
005c1a0e 2318
2319Customization of the dist targets can be done by specifying a hash
2320reference to the dist attribute of the WriteMakefile call. The
2321following parameters are recognized:
2322
8e07c86e 2323 CI ('ci -u')
5f8e730b 2324 COMPRESS ('gzip --best')
005c1a0e 2325 POSTOP ('@ :')
8e07c86e 2326 PREOP ('@ :')
f1387719 2327 TO_UNIX (depends on the system)
8e07c86e 2328 RCS_LABEL ('rcs -q -Nv$(VERSION_SYM):')
2329 SHAR ('shar')
5f8e730b 2330 SUFFIX ('.gz')
8e07c86e 2331 TAR ('tar')
2332 TARFLAGS ('cvf')
3b03c0f3 2333 ZIP ('zip')
2334 ZIPFLAGS ('-r')
005c1a0e 2335
2336An example:
2337
5f8e730b 2338 WriteMakefile( 'dist' => { COMPRESS=>"bzip2", SUFFIX=>".bz2" })
005c1a0e 2339
1df8d179 2340
2341=head2 Module Meta-Data
2342
2343Long plaguing users of MakeMaker based modules has been the problem of
2344getting basic information about the module out of the sources
2345I<without> running the F<Makefile.PL> and doing a bunch of messy
2346heuristics on the resulting F<Makefile>. To this end a simple module
2347meta-data file has been introduced, F<META.yml>.
2348
2349F<META.yml> is a YAML document (see http://www.yaml.org) containing
2350basic information about the module (name, version, prerequisites...)
2351in an easy to read format. The format is developed and defined by the
2352Module::Build developers.
2353
2354MakeMaker will automatically generate a F<META.yml> file for you and
2355add it to your F<MANIFEST> as part of the 'distdir' target (and thus
2356the 'dist' target). This is intended to seamlessly and rapidly
2357populate CPAN with module meta-data. If you wish to shut this feature
2358off, set the C<NO_META> C<WriteMakefile()> flag to true.
2359
2360
1b171b8d 2361=head2 Disabling an extension
2362
2363If some events detected in F<Makefile.PL> imply that there is no way
2364to create the Module, but this is a normal state of things, then you
2365can create a F<Makefile> which does nothing, but succeeds on all the
2366"usual" build targets. To do so, use
2367
2368 ExtUtils::MakeMaker::WriteEmptyMakefile();
2369
2370instead of WriteMakefile().
2371
2372This may be useful if other modules expect this module to be I<built>
2373OK, as opposed to I<work> OK (say, this system-dependent module builds
2374in a subdirectory of some other distribution, or is listed as a
2375dependency in a CPAN::Bundle, but the functionality is supported by
2376different means on the current architecture).
2377
479d2113 2378=head2 Other Handy Functions
2379
2380=over 4
2381
2382=item prompt
2383
2384 my $value = prompt($message);
2385 my $value = prompt($message, $default);
2386
2387The C<prompt()> function provides an easy way to request user input
2388used to write a makefile. It displays the $message as a prompt for
2389input. If a $default is provided it will be used as a default. The
2390function returns the $value selected by the user.
2391
2392If C<prompt()> detects that it is not running interactively and there
2393is nothing on STDIN or if the PERL_MM_USE_DEFAULT environment variable
2394is set to true, the $default will be used without prompting. This
2395prevents automated processes from blocking on user input.
2396
2397If no $default is provided an empty string will be used instead.
2398
2399=back
2400
2401
6ce21ffa 2402=head1 ENVIRONMENT
2403
479d2113 2404=over 4
6ce21ffa 2405
2443aee5 2406=item PERL_MM_OPT
6ce21ffa 2407
2408Command line options used by C<MakeMaker-E<gt>new()>, and thus by
2409C<WriteMakefile()>. The string is split on whitespace, and the result
2410is processed before any actual command line arguments are processed.
2411
9d05ba64 2412=item PERL_MM_USE_DEFAULT
2413
2414If set to a true value then MakeMaker's prompt function will
2415always return the default without waiting for user input.
2416
6ce21ffa 2417=back
2418
f1387719 2419=head1 SEE ALSO
2420
f6d6199c 2421ExtUtils::MM_Unix, ExtUtils::Manifest ExtUtils::Install,
2422ExtUtils::Embed
005c1a0e 2423
e05e23b1 2424=head1 AUTHORS
fed7345c 2425
e0678a30 2426Andy Dougherty <F<doughera@lafayette.edu>>, Andreas KE<ouml>nig
2427<F<andreas.koenig@mind.de>>, Tim Bunce <F<timb@cpan.org>>. VMS
de90321e 2428support by Charles Bailey <F<bailey@newman.upenn.edu>>. OS/2 support
2429by Ilya Zakharevich <F<ilya@math.ohio-state.edu>>.
2430
f6d6199c 2431Currently maintained by Michael G Schwern <F<schwern@pobox.com>>
2432
2433Send patches and ideas to <F<makemaker@perl.org>>.
e8012c20 2434
e0678a30 2435Send bug reports via http://rt.cpan.org/. Please send your
2436generated Makefile along with your report.
2437
2438For more up-to-date information, see http://www.makemaker.org.
fed7345c 2439
479d2113 2440=head1 LICENSE
2441
2442This program is free software; you can redistribute it and/or
2443modify it under the same terms as Perl itself.
2444
2445See F<http://www.perl.com/perl/misc/Artistic.html>
2446
2447
005c1a0e 2448=cut