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