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