home *** CD-ROM | disk | FTP | other *** search
/ PC World 2005 December (Special) / PCWorld_2005-12_Special_cd.bin / Bezpecnost / lsti / lsti.exe / framework-2.5.exe / MakeMaker.pm < prev    next >
Text File  |  2005-01-27  |  77KB  |  2,466 lines

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