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