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