home *** CD-ROM | disk | FTP | other *** search
/ PC Welt 2006 November (DVD) / PCWELT_11_2006.ISO / casper / filesystem.squashfs / usr / share / perl / 5.8.8 / ExtUtils / MakeMaker.pm < prev    next >
Encoding:
Perl POD Document  |  2006-07-07  |  77.3 KB  |  2,530 lines

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