avoid race condition in the CAPI extension bootstrap handler
[p5sagit/p5-mst-13.2.git] / lib / ExtUtils / MakeMaker.pm
index 47c3daa..a8ea73e 100644 (file)
@@ -70,6 +70,7 @@ $Is_VMS   = $^O eq 'VMS';
 $Is_OS2   = $^O eq 'os2';
 $Is_Mac   = $^O eq 'MacOS';
 $Is_Win32 = $^O eq 'MSWin32';
+$Is_Cygwin= $^O =~ /cygwin/i;
 
 require ExtUtils::MM_Unix;
 
@@ -86,6 +87,9 @@ if ($Is_Mac) {
 if ($Is_Win32) {
     require ExtUtils::MM_Win32;
 }
+if ($Is_Cygwin) {
+    require ExtUtils::MM_Cygwin;
+}
 
 # The SelfLoader would bring a lot of overhead for MakeMaker, because
 # we know for sure we will use most of the autoloaded functions once
@@ -245,7 +249,7 @@ sub full_setup {
     LINKTYPE MAKEAPERL MAKEFILE MAN1PODS MAN3PODS MAP_TARGET MYEXTLIB
     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 PPM_INSTALL_EXEC PPM_INSTALL_SCRIPT PREFIX
+    PL_FILES PM PMLIBDIRS POLLUTE PPM_INSTALL_EXEC PPM_INSTALL_SCRIPT PREFIX
     PREREQ_PM SKIP TYPEMAPS VERSION VERSION_FROM XS XSOPT XSPROTOARG
     XS_VERSION clean depend dist dynamic_lib linkext macro realclean
     tool_autosplit
@@ -416,6 +420,7 @@ sub ExtUtils::MakeMaker::new {
     }
 
     my $newclass = ++$PACKNAME;
+    local @Parent = @Parent;   # Protect against non-local exits
     {
 #      no strict;
        print "Blessing Object into class [$newclass]\n" if $Verbose>=2;
@@ -438,7 +443,17 @@ sub ExtUtils::MakeMaker::new {
                unless $self->file_name_is_absolute($self->{$key})
                || ($^O eq 'VMS' and ($key =~ /PERL$/ && $self->{$key} =~ /^[\w\-\$]+$/));
        }
-       $self->{PARENT}->{CHILDREN}->{$newclass} = $self if $self->{PARENT};
+       if ($self->{PARENT}) {
+           $self->{PARENT}->{CHILDREN}->{$newclass} = $self;
+           foreach my $opt (qw(CAPI POLLUTE)) {
+               if (exists $self->{PARENT}->{$opt}
+                   and not exists $self->{$opt})
+                   {
+                       # inherit, but only if already unspecified
+                       $self->{$opt} = $self->{PARENT}->{$opt};
+                   }
+           }
+       }
     } else {
        parse_args($self,split(' ', $ENV{PERL_MM_OPT} || ''),@ARGV);
     }
@@ -475,6 +490,9 @@ END
 
     $self->init_dirscan();
     $self->init_others();
+    my($argv) = neatvalue(\@ARGV);
+    $argv =~ s/^\[/(/;
+    $argv =~ s/\]$/)/;
 
     push @{$self->{RESULT}}, <<END;
 # This Makefile is for the $self->{NAME} extension to perl.
@@ -485,6 +503,8 @@ END
 #
 #      ANY CHANGES MADE HERE WILL BE LOST!
 #
+#   MakeMaker ARGV: $argv
+#
 #   MakeMaker Parameters:
 END
 
@@ -529,7 +549,6 @@ END
     }
 
     push @{$self->{RESULT}}, "\n# End.";
-    pop @Parent;
 
     $self;
 }
@@ -1014,7 +1033,7 @@ This will replace the string specified by $Config{prefix} in all
 $Config{install*} values.
 
 Note, that in both cases the tilde expansion is done by MakeMaker, not
-by perl by default, nor by make. Conflicts between parmeters LIB,
+by perl by default, nor by make. Conflicts between parameters LIB,
 PREFIX and the various INSTALL* arguments are resolved so that 
 XXX
 
@@ -1202,6 +1221,10 @@ currently used by MakeMaker but may be handy in Makefile.PLs.
 
 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
@@ -1280,7 +1303,7 @@ is ignored if INCLUDE_EXT is present.  Consult INCLUDE_EXT for more
 details.  (e.g.  [ qw( Socket POSIX ) ] )
 
 This attribute may be most useful when specified as a string on the
-commandline:  perl Makefile.PL EXCLUDE_EXT='Socket Safe'
+command line:  perl Makefile.PL EXCLUDE_EXT='Socket Safe'
 
 =item EXE_FILES
 
@@ -1331,7 +1354,7 @@ filling in INCLUDE_EXT.  If the INCLUDE_EXT is mentioned but is empty then
 only DynaLoader and the current extension will be included in the build.
 
 This attribute may be most useful when specified as a string on the
-commandline:  perl Makefile.PL INCLUDE_EXT='POSIX Socket Devel::Peek'
+command line:  perl Makefile.PL INCLUDE_EXT='POSIX Socket Devel::Peek'
 
 =item INSTALLARCHLIB
 
@@ -1555,7 +1578,7 @@ avoided, it may be undefined)
 
 =item PERM_RW
 
-Desired Permission for read/writable files. Defaults to C<644>.
+Desired permission for read/writable files. Defaults to C<644>.
 See also L<MM_Unix/perm_rw>.
 
 =item PERM_RWX
@@ -1572,7 +1595,11 @@ and the basename of the file being the value. E.g.
   {'foobar.PL' => 'foobar'}
 
 The *.PL files are expected to produce output to the target files
-themselves.
+themselves. If multiple files can be generated from the same *.PL
+file then the value in the hash can be a reference to an array of
+target file names. E.g.
+
+  {'foobar.PL' => ['foobar1','foobar2']}
 
 =item PM
 
@@ -1592,6 +1619,18 @@ they contain will be installed in the corresponding location in the
 library.  A libscan() method can be used to alter the behaviour.
 Defining PM in the Makefile.PL will override PMLIBDIRS.
 
+=item POLLUTE
+
+Release 5.005 grandfathered old global symbol names by providing preprocessor
+macros for extension source compatibility.  As of release 5.006, these
+preprocessor definitions are not available by default.  The POLLUTE flag
+specifies that the old names should still be defined:
+
+  perl Makefile.PL POLLUTE=1
+
+Please inform the module author if this is necessary to successfully install
+a module under 5.006 or later.
+
 =item PPM_INSTALL_EXEC
 
 Name of the executable used to run C<PPM_INSTALL_SCRIPT> below. (e.g. perl)
@@ -1755,9 +1794,13 @@ be linked.
 
   {FILES => '$(INST_ARCHAUTODIR)/*.xyz'}
 
+=item test
+
+  {TESTS => 't/*.t'}
+
 =item tool_autosplit
 
-  {MAXLEN =E<gt> 8}
+  {MAXLEN => 8}
 
 =back