Change use|require 5.005_64 to use|require 5.6.1.
[p5sagit/p5-mst-13.2.git] / lib / ExtUtils / MakeMaker.pm
index 1ba1825..64d2335 100644 (file)
@@ -2,7 +2,7 @@ BEGIN {require 5.002;} # MakeMaker 5.17 was the last MakeMaker that was compatib
 
 package ExtUtils::MakeMaker;
 
-$VERSION = "5.45";
+$VERSION = "5.47";
 $Version_OK = "5.17";  # Makefiles older than $Version_OK will die
                        # (Will be checked from MakeMaker version 4.13 onwards)
 ($Revision = substr(q$Revision: 1.222 $, 10)) =~ s/\s+$//;
@@ -71,6 +71,7 @@ $Is_OS2   = $^O eq 'os2';
 $Is_Mac   = $^O eq 'MacOS';
 $Is_Win32 = $^O eq 'MSWin32';
 $Is_Cygwin= $^O eq 'cygwin';
+$Is_NetWare = $Config{'osname'} eq 'NetWare';
 
 require ExtUtils::MM_Unix;
 
@@ -84,6 +85,11 @@ if ($Is_OS2) {
 if ($Is_Mac) {
     require ExtUtils::MM_MacOS;
 }
+if ($Is_NetWare) {
+       $^O = 'NetWare';
+       require ExtUtils::MM_NW5;
+       $Is_Win32=0;
+}
 if ($Is_Win32) {
     require ExtUtils::MM_Win32;
 }
@@ -144,8 +150,9 @@ sub prompt ($;$) {
 sub eval_in_subdirs {
     my($self) = @_;
     my($dir);
-    use Cwd 'cwd';
+    use Cwd qw(cwd abs_path);
     my $pwd = cwd();
+    local @INC = map eval {abs_path($_) if -e} || $_, @INC;
 
     foreach $dir (@{$self->{DIR}}){
        my($abs) = $self->catdir($pwd,$dir);
@@ -199,11 +206,15 @@ sub full_setup {
     LINKTYPE MAKEAPERL MAKEFILE MAN1PODS MAN3PODS MAP_TARGET MYEXTLIB
     PERL_MALLOC_OK
     NAME NEEDS_LINKING NOECHO NORECURS NO_VC OBJECT OPTIMIZE PERL PERLMAINCC
-    PERL_ARCHLIB PERL_LIB PERL_SRC PERM_RW PERM_RWX
-    PL_FILES PM PMLIBDIRS POLLUTE PPM_INSTALL_EXEC PPM_INSTALL_SCRIPT PREFIX
-    PREREQ_PM SKIP TYPEMAPS VERSION VERSION_FROM XS XSOPT XSPROTOARG
+    PERLRUN PERLRUNINST PERL_ARCHLIB PERL_CORE
+    PERL_LIB PERL_SRC PERM_RW PERM_RWX
+    PL_FILES PM PM_FILTER PMLIBDIRS POLLUTE PPM_INSTALL_EXEC
+    PPM_INSTALL_SCRIPT PREFIX
+    PREREQ_PM SKIP TEST_LIBS TYPEMAPS VERSION VERSION_FROM XS XSOPT XSPROTOARG
     XS_VERSION clean depend dist dynamic_lib linkext macro realclean
     tool_autosplit
+    MACPERL_SRC MACPERL_LIB MACLIBS_68K MACLIBS_PPC MACLIBS_SC MACLIBS_MRC
+    MACLIBS_ALL_68K MACLIBS_ALL_PPC MACLIBS_SHARED
        /;
 
     # IMPORTS is used under OS/2 and Win32
@@ -239,7 +250,6 @@ sub full_setup {
 
  dir_target libscan makeaperl needs_linking perm_rw perm_rwx
  subdir_x test_via_harness test_via_script
-
                         ];
 
     push @MM_Sections, qw[
@@ -326,6 +336,7 @@ sub ExtUtils::MakeMaker::new {
 
     check_hints($self);
 
+    my %configure_att;         # record &{$self->{CONFIGURE}} attributes
     my(%initial_att) = %$self; # record initial attributes
 
     my($prereq);
@@ -334,7 +345,8 @@ sub ExtUtils::MakeMaker::new {
        eval $eval;
 
        if ($@) {
-           warn "Warning: prerequisite $prereq failed to load: $@";
+       warn "Warning: prerequisite $prereq $self->{PREREQ_PM}->{$prereq} not found. We have "
+               . ($prereq->VERSION || 'unknown version');
        }
        elsif ($prereq->VERSION < $self->{PREREQ_PM}->{$prereq} ){
            warn "Warning: prerequisite $prereq $self->{PREREQ_PM}->{$prereq} not found";
@@ -365,7 +377,8 @@ sub ExtUtils::MakeMaker::new {
 
     if (defined $self->{CONFIGURE}) {
        if (ref $self->{CONFIGURE} eq 'CODE') {
-           $self = { %$self, %{&{$self->{CONFIGURE}}}};
+           %configure_att = %{&{$self->{CONFIGURE}}};
+           $self = { %$self, %configure_att };
        } else {
            Carp::croak "Attribute 'CONFIGURE' to WriteMakefile() not a code reference\n";
        }
@@ -402,7 +415,7 @@ sub ExtUtils::MakeMaker::new {
        }
        if ($self->{PARENT}) {
            $self->{PARENT}->{CHILDREN}->{$newclass} = $self;
-           foreach my $opt (qw(CAPI POLLUTE)) {
+           foreach my $opt (qw(POLLUTE PERL_CORE)) {
                if (exists $self->{PARENT}->{$opt}
                    and not exists $self->{$opt})
                    {
@@ -411,6 +424,8 @@ sub ExtUtils::MakeMaker::new {
                    }
            }
        }
+       my @fm = grep /^FIRST_MAKEFILE=/, @ARGV;
+       parse_args($self,@fm) if @fm;
     } else {
        parse_args($self,split(' ', $ENV{PERL_MM_OPT} || ''),@ARGV);
     }
@@ -471,6 +486,27 @@ END
        $v =~ tr/\n/ /s;
        push @{$self->{RESULT}}, "#     $key => $v";
     }
+    undef %initial_att;        # free memory
+
+    if (defined $self->{CONFIGURE}) {
+       push @{$self->{RESULT}}, <<END;
+
+#   MakeMaker 'CONFIGURE' Parameters:
+END
+        if (scalar(keys %configure_att) > 0) {
+            foreach $key (sort keys %configure_att){
+               my($v) = neatvalue($configure_att{$key});
+               $v =~ s/(CODE|HASH|ARRAY|SCALAR)\([\dxa-f]+\)/$1\(...\)/;
+               $v =~ tr/\n/ /s;
+               push @{$self->{RESULT}}, "#     $key => $v";
+            }
+        }
+        else
+        {
+           push @{$self->{RESULT}}, "# no values returned";
+        }
+        undef %configure_att;  # free memory
+    }
 
     # turn the SKIP array into a SKIPHASH hash
     my (%skip,$skip);
@@ -511,14 +547,20 @@ END
 }
 
 sub WriteEmptyMakefile {
-  if (-f 'Makefile.old') {
-    chmod 0666, 'Makefile.old';
-    unlink 'Makefile.old' or warn "unlink Makefile.old: $!";
-  }
-  rename 'Makefile', 'Makefile.old' or warn "rename Makefile Makefile.old: $!"
-    if -f 'Makefile';
-  open MF, '> Makefile' or die "open Makefile for write: $!";
-  print MF <<'EOP';
+    Carp::croak "WriteEmptyMakefile: Need even number of args" if @_ % 2;
+    local $SIG{__WARN__} = \&warnhandler;
+
+    my %att = @_;
+    my $self = MM->new(\%att);
+    if (-f "$self->{MAKEFILE}.old") {
+      chmod 0666, "$self->{MAKEFILE}.old";
+      unlink "$self->{MAKEFILE}.old" or warn "unlink $self->{MAKEFILE}.old: $!";
+    }
+    rename $self->{MAKEFILE}, "$self->{MAKEFILE}.old"
+      or warn "rename $self->{MAKEFILE} $self->{MAKEFILE}.old: $!"
+        if -f $self->{MAKEFILE};
+    open MF, '>', $self->{MAKEFILE} or die "open $self->{MAKEFILE} for write: $!";
+    print MF <<'EOP';
 all:
 
 clean:
@@ -530,7 +572,7 @@ makemakerdflt:
 test:
 
 EOP
-  close MF or die "close Makefile for write: $!";
+    close MF or die "close $self->{MAKEFILE} for write: $!";
 }
 
 sub check_manifest {
@@ -1051,7 +1093,7 @@ is built. You can invoke the corresponding section of the makefile with
     make perl
 
 That produces a new perl binary in the current directory with all
-extensions linked in that can be found in INST_ARCHLIB , SITELIBEXP,
+extensions linked in that can be found in INST_ARCHLIB, SITELIBEXP,
 and PERL_ARCHLIB. To do that, MakeMaker writes a new Makefile, on
 UNIX, this is called Makefile.aperl (may be system dependent). If you
 want to force the creation of a new perl, it is recommended, that you
@@ -1193,17 +1235,6 @@ Ref to array of *.c file names. Initialised from a directory scan
 and the values portion of the XS attribute hash. This is not
 currently used by MakeMaker but may be handy in Makefile.PLs.
 
-=item CAPI
-
-[This attribute is obsolete in Perl 5.6.  PERL_OBJECT builds are C-compatible
-by default.]
-
-Switch to force usage of the Perl C API even when compiling for PERL_OBJECT.
-
-Note that this attribute is passed through to any recursive build,
-but if and only if the submodule's Makefile.PL itself makes no mention
-of the 'CAPI' attribute.
-
 =item CCFLAGS
 
 String that will be included in the compiler call command line between
@@ -1519,10 +1550,11 @@ at Configure time.
 
 =item MAN3PODS
 
-Hashref of .pm and .pod files. MakeMaker will default this to all
- .pod and any .pm files that include POD directives. The files listed
-here will be converted to man pages and installed as was requested
-at Configure time.
+Hashref that assigns to *.pm and *.pod files the files into which the
+manpages are to be written. MakeMaker parses all *.pod and *.pm files
+for POD directives. Files that contain POD will be the default keys of
+the MAN3PODS hashref. These will then be converted to man pages during
+C<make> and will be installed during C<make install>.
 
 =item MAP_TARGET
 
@@ -1581,6 +1613,11 @@ passed to subdirectory makes.
 
 Perl binary for tasks that can be done by miniperl
 
+=item PERL_CORE
+
+Set only when MakeMaker is building the extensions of the Perl core
+distribution.
+
 =item PERLMAINCC
 
 The call to the program that is able to compile perlmain.c. Defaults
@@ -1588,12 +1625,20 @@ to $(CC).
 
 =item PERL_ARCHLIB
 
-Same as below, but for architecture dependent files.
+Same as for PERL_LIB, but for architecture dependent files.
+
+Used only when MakeMaker is building the extensions of the Perl core
+distribution (because normally $(PERL_ARCHLIB) is automatically in @INC,
+and adding it would get in the way of PERL5LIB).
 
 =item PERL_LIB
 
 Directory containing the Perl library to use.
 
+Used only when MakeMaker is building the extensions of the Perl core
+distribution (because normally $(PERL_LIB) is automatically in @INC,
+and adding it would get in the way of PERL5LIB).
+
 =item PERL_MALLOC_OK
 
 defaults to 0.  Should be set to TRUE if the extension can work with
@@ -1622,6 +1667,17 @@ nullifies many advantages of Perl's malloc(), such as better usage of
 system resources, error detection, memory usage reporting, catchable failure
 of memory allocations, etc.
 
+=item PERLRUN
+
+Use this instead of $(PERL) or $(FULLPERL) when you wish to run perl.
+It will set up extra necessary flags for you.
+  
+=item PERLRUNINST
+  
+Use this instead of $(PERL) or $(FULLPERL) when you wish to run
+perl to work with modules.  It will add things like -I$(INST_ARCH)
+and other necessary flags.
+  
 =item PERL_SRC
 
 Directory containing the Perl source code (use of this should be
@@ -1672,6 +1728,29 @@ Defining PM in the Makefile.PL will override PMLIBDIRS.
 
 (Where BASEEXT is the last component of NAME.)
 
+=item PM_FILTER
+
+A filter program, in the traditional Unix sense (input from stdin, output
+to stdout) that is passed on each .pm file during the build (in the
+pm_to_blib() phase).  It is empty by default, meaning no filtering is done.
+
+Great care is necessary when defining the command if quoting needs to be
+done.  For instance, you would need to say:
+
+  {'PM_FILTER' => 'grep -v \\"^\\#\\"'}
+
+to remove all the leading coments on the fly during the build.  The
+extra \\ are necessary, unfortunately, because this variable is interpolated
+within the context of a Perl program built on the command line, and double
+quotes are what is used with the -e switch to build that command line.  The
+# is escaped for the Makefile, since what is going to be generated will then
+be:
+
+  PM_FILTER = grep -v \"^\#\"
+
+Without the \\ before the #, we'd have the start of a Makefile comment,
+and the macro would be incorrectly defined.
+
 =item POLLUTE
 
 Release 5.005 grandfathered old global symbol names by providing preprocessor
@@ -1711,11 +1790,16 @@ only check if any version is installed already.
 
 =item SKIP
 
-Arryref. E.g. [qw(name1 name2)] skip (do not write) sections of the
+Arrayref. E.g. [qw(name1 name2)] skip (do not write) sections of the
 Makefile. Caution! Do not use the SKIP attribute for the negligible
 speedup. It may seriously damage the resulting Makefile. Only use it
 if you really need it.
 
+=item TEST_LIBS
+
+The set of -I's necessary to run a "make test".  Use as:
+$(PERL) $(TEST_LIBS) -e '...' for example.
+  
 =item TYPEMAPS
 
 Ref to array of typemap file names.  Use this when the typemaps are
@@ -2059,10 +2143,10 @@ ExtUtils::Install, ExtUtils::Embed
 =head1 AUTHORS
 
 Andy Dougherty <F<doughera@lafcol.lafayette.edu>>, Andreas KE<ouml>nig
-<F<A.Koenig@franz.ww.TU-Berlin.DE>>, Tim Bunce <F<Tim.Bunce@ig.co.uk>>.
-VMS support by Charles Bailey <F<bailey@newman.upenn.edu>>.  OS/2
-support by Ilya Zakharevich <F<ilya@math.ohio-state.edu>>.  Contact the
-makemaker mailing list C<mailto:makemaker@franz.ww.tu-berlin.de>, if
-you have any questions.
+<F<andreas.koenig@mind.de>>, Tim Bunce <F<Tim.Bunce@ig.co.uk>>.  VMS
+support by Charles Bailey <F<bailey@newman.upenn.edu>>.  OS/2 support
+by Ilya Zakharevich <F<ilya@math.ohio-state.edu>>.
+
+Send patches and bug reports to <F<perlbug@perl.org>>.
 
 =cut