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