Files
poky/meta/recipes-devtools/perl/perl-5.12.2/parallel_build_fix_5.patch
Nitin A Kamble 345de20815 perl-5.12.2: use of PERLHOSTLIB var fix
PERLHOSTLIB var is used to build target perl. It let perl use the native
perl .so module files at the time of compilation of target perl.

These changes to perl make the PERLHOSTLIB variable also useful for
building perl modules to use native .so perl module.

(From OE-Core rev: f4d51e63c0df777bbcbe9ad160eb3ba41ae74c6e)

Signed-off-by: Nitin A Kamble <nitin.a.kamble@intel.com>
Signed-off-by: Richard Purdie <richard.purdie@linuxfoundation.org>
2011-04-24 22:50:36 +01:00

431 lines
19 KiB
Diff

Upstream-Status:Inappropriate [Backport]
Rebased by Nitin A Kamble <nitin.a.kamble@intel.com> on 3/11/2011
commit 5e4c4c91bd52a48de59520d5e9b4e3478e49c613
Author: Nicholas Clark <nick@ccl4.org>
Date: Mon Feb 14 10:14:18 2011 +0000
Use a buildcustomize.pl to set @INC in miniperl when building extensions.
With the build tools now shipped in various subdirectories of cpan/ and dist/
we need to add several paths to @INC when invoking MakeMaker (etc) to build
extensions.
The previous approach of using $ENV{PERL5LIB} was fragile, because:
a: It was hitting the length limit for %ENV variables on VMS
b: It was running the risk of race conditions in a parallel build -
ExtUtils::Makemaker "knows" to add -I../..lib, which puts lib at the *front*
of @INC, but if one parallel process happens to copy a module into lib/
whilst another is searching for it, the second may get a partial read
c: Overwriting $ENV{PERL5LIB} breaks any system where any of the installed
build tools are actually implemented in Perl, if they are relying on
$ENV{PERL5LIB} for setup
This approach
a: Doesn't have %ENV length limits
b: Ensures that lib/ is last, so copy targets are always shadowing copy
sources
c: Only affects miniperl, and doesn't touch $ENV{PERL5LIB}
Approaches that turned out to have fatal flaws:
1: Using $ENV{PERL5OPT} with a module fails because ExtUtils::MakeMaker
searches for the build perl without setting lib, and treats the error
caused by a failed -M as "not a valid perl 5 binary"
2: Refactoring ExtUtils::MakeMaker to *not* use -I for lib, and instead rely
on $ENV{PERL5LIB} [which includes "../../lib"] fails because:
some extensions have subdirectories, and on these EU::MM correctly uses
-I../../../lib, where as $ENV{PERL5LIB} only has space for relative paths,
and only with two levels.
This approach actually takes advantage of ExtUtils::MakeMaker setting an -I
option correct for the depth of directory being built.
Index: perl-5.12.2/Cross/Makefile-cross-SH
===================================================================
--- perl-5.12.2.orig/Cross/Makefile-cross-SH
+++ perl-5.12.2/Cross/Makefile-cross-SH
@@ -324,7 +324,7 @@ $spitshell >>$Makefile <<'!NO!SUBS!'
CONFIGPM = xlib/$(CROSS_NAME)/Config.pm
-private = preplibrary $(CONFIGPM) $(CROSS_LIB)/Config.pod
+private = preplibrary $(CONFIGPM) $(CROSS_LIB)/Config.pod lib/buildcustomize.pl
shextract = Makefile cflags config.h makeaperl makedepend \
makedir myconfig writemain pod/Makefile
@@ -752,6 +752,9 @@ lib/lib.pm: miniperl $(CONFIGPM)
@-rm -f $@
$(LDLIBPTH) ./miniperl -Ilib -MCross lib/lib_pm.PL
+lib/buildcustomize.pl: $(MINIPERL_EXE) write_buildcustomize.pl
+ $(MINIPERL) write_buildcustomize.pl >lib/buildcustomize.pl
+
unidatafiles $(unidatafiles): uni.data
uni.data: miniperl$(EXE_EXT) $(CONFIGPM) lib/unicore/mktables
@@ -922,16 +925,16 @@ manicheck: FORCE
-$(DYNALOADER): preplibrary FORCE
+$(DYNALOADER): lib/buildcustomize.pl preplibrary FORCE
@$(LDLIBPTH) $(RUN) ./miniperl$(EXE_EXT) -Ilib make_ext.pl --cross $@ MAKE=$(MAKE) LIBPERL_A=$(LIBPERL) LINKTYPE=static $(STATIC_LDFLAGS)
-d_dummy $(dynamic_ext): miniperl$(EXE_EXT) preplibrary makeppport $(DYNALOADER) FORCE
+d_dummy $(dynamic_ext): miniperl$(EXE_EXT) lib/buildcustomize.pl preplibrary makeppport $(DYNALOADER) FORCE
@$(LDLIBPTH) $(RUN) ./miniperl$(EXE_EXT) -Ilib make_ext.pl --cross $@ MAKE=$(MAKE) LIBPERL_A=$(LIBPERL) LINKTYPE=dynamic
-s_dummy $(static_ext): miniperl$(EXE_EXT) preplibrary makeppport $(DYNALOADER) FORCE
+s_dummy $(static_ext): miniperl$(EXE_EXT) lib/buildcustomize.pl preplibrary makeppport $(DYNALOADER) FORCE
@$(LDLIBPTH) $(RUN) ./miniperl$(EXE_EXT) -Ilib make_ext.pl --cross $@ MAKE=$(MAKE) LIBPERL_A=$(LIBPERL) LINKTYPE=static $(STATIC_LDFLAGS)
-n_dummy $(nonxs_ext): miniperl$(EXE_EXT) preplibrary $(DYNALOADER) FORCE
+n_dummy $(nonxs_ext): miniperl$(EXE_EXT) lib/buildcustomize.pl preplibrary $(DYNALOADER) FORCE
@$(LDLIBPTH) $(RUN) ./miniperl$(EXE_EXT) -Ilib make_ext.pl --cross $@ MAKE=$(MAKE) LIBPERL_A=$(LIBPERL)
!NO!SUBS!
Index: perl-5.12.2/MANIFEST
===================================================================
--- perl-5.12.2.orig/MANIFEST
+++ perl-5.12.2/MANIFEST
@@ -4747,6 +4747,7 @@ win32/wince.c WinCE port
win32/wince.h WinCE port
win32/wincesck.c WinCE port
writemain.SH Generate perlmain.c from miniperlmain.c+extensions
+write_buildcustomize.pl Generate lib/buildcustomize.pl
x2p/a2p.c Output of a2p.y run through byacc
x2p/a2p.h Global declarations
x2p/a2p.pod Pod for awk to perl translator
Index: perl-5.12.2/Makefile.SH
===================================================================
--- perl-5.12.2.orig/Makefile.SH
+++ perl-5.12.2/Makefile.SH
@@ -428,7 +428,7 @@ esac
## In the following dollars and backticks do not need the extra backslash.
$spitshell >>$Makefile <<'!NO!SUBS!'
-private = preplibrary $(CONFIGPM) $(CONFIGPOD) lib/ExtUtils/Miniperl.pm git_version.h
+private = preplibrary $(CONFIGPM) $(CONFIGPOD) lib/ExtUtils/Miniperl.pm git_version.h lib/buildcustomize.pl
# Files to be built with variable substitution before miniperl
# is available.
@@ -991,6 +991,9 @@ $(plextract): $(MINIPERL_EXE) $(CONFIGPM
x2p/s2p: $(MINIPERL_EXE) $(CONFIGPM) $(dynamic_ext) x2p/s2p.PL
cd x2p; $(LDLIBPTH) $(MAKE) s2p
+lib/buildcustomize.pl: $(MINIPERL_EXE) write_buildcustomize.pl
+ $(MINIPERL) write_buildcustomize.pl >lib/buildcustomize.pl
+
unidatafiles $(unidatafiles) pod/perluniprops.pod: uni.data
uni.data: $(MINIPERL_EXE) $(CONFIGPM) lib/unicore/mktables $(nonxs_ext)
@@ -1160,16 +1163,16 @@ manicheck: FORCE
#
# DynaLoader may be needed for extensions that use Makefile.PL.
-$(DYNALOADER): $(MINIPERL_EXE) preplibrary FORCE $(nonxs_ext)
+$(DYNALOADER): $(MINIPERL_EXE) lib/buildcustomize.pl preplibrary FORCE $(nonxs_ext)
$(MINIPERL) make_ext.pl $@ MAKE=$(MAKE) LIBPERL_A=$(LIBPERL) LINKTYPE=static $(STATIC_LDFLAGS)
-d_dummy $(dynamic_ext): $(MINIPERL_EXE) preplibrary makeppport $(DYNALOADER) FORCE $(PERLEXPORT)
+d_dummy $(dynamic_ext): $(MINIPERL_EXE) lib/buildcustomize.pl preplibrary makeppport $(DYNALOADER) FORCE $(PERLEXPORT)
$(MINIPERL) make_ext.pl $@ MAKE=$(MAKE) LIBPERL_A=$(LIBPERL) LINKTYPE=dynamic
-s_dummy $(static_ext): $(MINIPERL_EXE) preplibrary makeppport $(DYNALOADER) FORCE
+s_dummy $(static_ext): $(MINIPERL_EXE) lib/buildcustomize.pl preplibrary makeppport $(DYNALOADER) FORCE
$(MINIPERL) make_ext.pl $@ MAKE=$(MAKE) LIBPERL_A=$(LIBPERL) LINKTYPE=static $(STATIC_LDFLAGS)
-n_dummy $(nonxs_ext): $(MINIPERL_EXE) preplibrary FORCE
+n_dummy $(nonxs_ext): $(MINIPERL_EXE) lib/buildcustomize.pl preplibrary FORCE
$(MINIPERL) make_ext.pl $@ MAKE=$(MAKE) LIBPERL_A=$(LIBPERL)
!NO!SUBS!
Index: perl-5.12.2/installperl
===================================================================
--- perl-5.12.2.orig/installperl
+++ perl-5.12.2/installperl
@@ -714,6 +714,8 @@ sub installlib {
# ignore the test extensions
return if $dir =~ m{\bXS/(?:APItest|Typemap)\b};
return if $name =~ m{\b(?:APItest|Typemap)\.pm$};
+ # ignore the build support code
+ return if $name =~ /\bbuildcustomize\.pl$/;
# ignore the demo files
return if $dir =~ /\b(?:demos?|eg)\b/;
Index: perl-5.12.2/make_ext.pl
===================================================================
--- perl-5.12.2.orig/make_ext.pl
+++ perl-5.12.2/make_ext.pl
@@ -4,11 +4,9 @@ use warnings;
use Config;
BEGIN {
if ($^O eq 'MSWin32') {
- unshift @INC, ('../cpan/Cwd', '../cpan/Cwd/lib');
- require File::Spec::Functions;
+ unshift @INC, '../cpan/Cwd';
require FindExt;
- }
- else {
+ } else {
unshift @INC, 'cpan/Cwd';
}
}
@@ -18,27 +16,6 @@ my $is_Win32 = $^O eq 'MSWin32';
my $is_VMS = $^O eq 'VMS';
my $is_Unix = !$is_Win32 && !$is_VMS;
-# To clarify, this isn't the entire suite of modules considered "toolchain"
-# It's not even all modules needed to build ext/
-# It's just the source paths of the (minimum complete set of) modules in ext/
-# needed to build the nonxs modules
-# After which, all nonxs modules are in lib, which was always sufficient to
-# allow miniperl to build everything else.
-
-# This list cannot get any longer without overflowing the length limit for
-# environment variables on VMS
-my @toolchain = qw(cpan/AutoLoader/lib
- cpan/Cwd cpan/Cwd/lib
- cpan/ExtUtils-Command/lib
- dist/ExtUtils-Install/lib
- cpan/ExtUtils-MakeMaker/lib
- cpan/ExtUtils-Manifest/lib
- cpan/File-Path/lib
- );
-
-# Used only in ExtUtils::Liblist::Kid::_win32_ext()
-push @toolchain, 'cpan/Text-ParseWords/lib' if $is_Win32;
-
my @ext_dirs = qw(cpan dist ext);
my $ext_dirs_re = '(?:' . join('|', @ext_dirs) . ')';
@@ -295,16 +272,7 @@ sub build_extension {
$perl ||= "$up/miniperl";
my $return_dir = $up;
my $lib_dir = "$up/lib";
- # $lib_dir must be last, as we're copying files into it, and in a parallel
- # make there's a race condition if one process tries to open a module that
- # another process has half-written.
- my @new_inc = ((map {"$up/$_"} @toolchain), $lib_dir);
- if ($is_Win32) {
- @new_inc = map {File::Spec::Functions::rel2abs($_)} @new_inc;
- }
- $ENV{PERL5LIB} = join $Config{path_sep}, @new_inc;
$ENV{PERL_CORE} = 1;
- # warn $ENV{PERL5LIB};
my $makefile;
if ($is_VMS) {
@@ -375,7 +343,7 @@ EOM
@cross = '-MCross';
}
- my @args = (@cross, 'Makefile.PL');
+ my @args = ("-I$lib_dir", @cross, 'Makefile.PL');
if ($is_VMS) {
my $libd = VMS::Filespec::vmspath($lib_dir);
push @args, "INST_LIB=$libd", "INST_ARCHLIB=$libd";
Index: perl-5.12.2/vms/descrip_mms.template
===================================================================
--- perl-5.12.2.orig/vms/descrip_mms.template
+++ perl-5.12.2/vms/descrip_mms.template
@@ -360,7 +360,7 @@ CRTLOPTS =,$(CRTL)/Options
unidatadirs = lib/unicore/To lib/unicore/lib
# Modules which must be installed before we can build extensions
-LIBPREREQ = $(ARCHDIR)Config.pm $(ARCHDIR)Config_heavy.pl [.lib.VMS]Filespec.pm $(ARCHDIR)vmspipe.com [.lib]re.pm
+LIBPREREQ = $(ARCHDIR)Config.pm $(ARCHDIR)Config_heavy.pl [.lib.VMS]Filespec.pm $(ARCHDIR)vmspipe.com [.lib]re.pm [.lib]buildcustomize.pl
utils1 = [.lib.pods]perldoc.com [.lib.ExtUtils]Miniperl.pm [.utils]c2ph.com [.utils]h2ph.com
utils2 = [.utils]h2xs.com [.utils]libnetcfg.com [.lib]perlbug.com [.utils]dprofpp.com
@@ -458,6 +458,9 @@ archcorefiles : $(ac) $(ARCHAUTO)time.st
[.lib]re.pm : [.ext.re]re.pm
Copy/NoConfirm/Log $(MMS$SOURCE) [.lib]
+[.lib]buildcustomize.pl : write_buildcustomize.pl $(MINIPERL_EXE)
+ $(MINIPERL) write_buildcustomize.pl > [.lib]buildcustomize.pl
+
vmspipe.com : [.vms]vmspipe.com
Copy/NoConfirm/Log $(MMS$SOURCE) []
@@ -561,7 +564,7 @@ unidatafiles.ts : $(MINIPERL_EXE) [.lib]
@ If F$Search("$(MMS$TARGET)").nes."" Then Delete/NoLog/NoConfirm $(MMS$TARGET);*
@ Copy/NoConfirm _NLA0: $(MMS$TARGET)
-DynaLoader$(O) : $(ARCHDIR)Config.pm $(MINIPERL_EXE) [.lib.VMS]Filespec.pm
+DynaLoader$(O) : [.lib]buildcustomize.pl $(ARCHDIR)Config.pm $(MINIPERL_EXE) [.lib.VMS]Filespec.pm
$(MINIPERL) make_ext.pl "MAKE=$(MMS)" "DynaLoader"
dynext : $(LIBPREREQ) $(DBG)perlshr$(E) unidatafiles.ts DynaLoader$(O) preplibrary makeppport $(MINIPERL_EXE)
@@ -1856,6 +1859,7 @@ tidy : cleanlis
- If F$Search("[.utils]*.com;-1").nes."" Then Purge/NoConfirm/Log [.utils]*.com
- If F$Search("[.x2p]*.com;-1").nes."" Then Purge/NoConfirm/Log [.x2p]*.com
- If F$Search("[.lib.pods]*.com;-1").nes."" Then Purge/NoConfirm/Log [.lib.pods]*.com
+ - If F$Search("[.lib]buildcustomize.pl;-1").nes."" Then Purge/NoConfirm/Log [.lib]buildcustomize.pl
clean : tidy cleantest
- $(MINIPERL) make_ext.pl "MAKE=$(MMS)" "--all" "--target=clean"
Index: perl-5.12.2/win32/Makefile
===================================================================
--- perl-5.12.2.orig/win32/Makefile
+++ perl-5.12.2/win32/Makefile
@@ -923,6 +923,9 @@ $(CONFIGPM) : $(MINIPERL) ..\config.sh c
-$(MINIPERL) -I..\lib $(ICWD) config_h.PL "INST_VER=$(INST_VER)"
if errorlevel 1 $(MAKE) /$(MAKEFLAGS) $(CONFIGPM)
+..\lib\buildcustomize.pl: $(MINIPERL) ..\write_buildcustomize.pl
+ $(MINIPERL) -I..\lib ..\write_buildcustomize.pl .. >..\lib\buildcustomize.pl
+
$(MINIPERL) : $(MINIDIR) $(MINI_OBJ)
$(LINK32) -subsystem:console -out:$@ @<<
$(LINK_FLAGS) $(LIBFILES) $(MINI_OBJ)
@@ -1045,24 +1048,24 @@ MakePPPort: $(MINIPERL) $(CONFIGPM) Exte
#-------------------------------------------------------------------------------
# There's no direct way to mark a dependency on
# DynaLoader.pm, so this will have to do
-Extensions: ..\make_ext.pl $(PERLDEP) $(CONFIGPM) $(DYNALOADER)
+Extensions: ..\make_ext.pl ..\lib\buildcustomize.pl $(PERLDEP) $(CONFIGPM) $(DYNALOADER)
$(XCOPY) ..\*.h $(COREDIR)\*.*
$(MINIPERL) -I..\lib ..\make_ext.pl "MAKE=$(MAKE)" --dir=$(CPANDIR) --dir=$(DISTDIR) --dir=$(EXTDIR) --dynamic
-Extensions_reonly: ..\make_ext.pl $(PERLDEP) $(CONFIGPM) $(DYNALOADER)
+Extensions_reonly: ..\make_ext.pl ..\lib\buildcustomize.pl $(PERLDEP) $(CONFIGPM) $(DYNALOADER)
$(XCOPY) ..\*.h $(COREDIR)\*.*
$(MINIPERL) -I..\lib ..\make_ext.pl "MAKE=$(MAKE)" --dir=$(CPANDIR) --dir=$(DISTDIR) --dir=$(EXTDIR) --dynamic +re
-Extensions_static : ..\make_ext.pl list_static_libs.pl $(PERLDEP) $(CONFIGPM)
+Extensions_static : ..\make_ext.pl ..\lib\buildcustomize.pl list_static_libs.pl $(PERLDEP) $(CONFIGPM)
$(XCOPY) ..\*.h $(COREDIR)\*.*
$(MINIPERL) -I..\lib ..\make_ext.pl "MAKE=$(MAKE)" --dir=$(CPANDIR) --dir=$(DISTDIR) --dir=$(EXTDIR) --static
$(MINIPERL) -I..\lib list_static_libs.pl > Extensions_static
-Extensions_nonxs: ..\make_ext.pl $(PERLDEP) $(CONFIGPM)
+Extensions_nonxs: ..\make_ext.pl ..\lib\buildcustomize.pl $(PERLDEP) $(CONFIGPM)
$(XCOPY) ..\*.h $(COREDIR)\*.*
$(MINIPERL) -I..\lib ..\make_ext.pl "MAKE=$(MAKE)" --dir=$(CPANDIR) --dir=$(DISTDIR) --dir=$(EXTDIR) --nonxs
-$(DYNALOADER) : ..\make_ext.pl $(PERLDEP) $(CONFIGPM) Extensions_nonxs
+$(DYNALOADER) : ..\make_ext.pl ..\lib\buildcustomize.pl $(PERLDEP) $(CONFIGPM) Extensions_nonxs
$(XCOPY) ..\*.h $(COREDIR)\*.*
$(MINIPERL) -I..\lib ..\make_ext.pl "MAKE=$(MAKE)" --dir=$(EXTDIR) --dynaloader
@@ -1159,6 +1162,7 @@ distclean: realclean
-del /f $(LIBDIR)\Win32CORE.pm
-del /f $(LIBDIR)\Win32API\File.pm
-del /f $(LIBDIR)\Win32API\File\cFile.pc
+ -del /f $(LIBDIR)\buildcustomize.pl
-del /f $(DISTDIR)\XSLoader\XSLoader.pm
-if exist $(LIBDIR)\App rmdir /s /q $(LIBDIR)\App
-if exist $(LIBDIR)\Archive rmdir /s /q $(LIBDIR)\Archive
Index: perl-5.12.2/win32/makefile.mk
===================================================================
--- perl-5.12.2.orig/win32/makefile.mk
+++ perl-5.12.2/win32/makefile.mk
@@ -1215,6 +1215,10 @@ $(CONFIGPM) : $(MINIPERL) ..\config.sh c
$(MINIPERL) -I..\lib $(ICWD) config_h.PL "INST_VER=$(INST_VER)" \
|| $(MAKE) $(MAKEMACROS) $(CONFIGPM) $(MAKEFILE)
+..\lib\buildcustomize.pl: $(MINIPERL) ..\write_buildcustomize.pl
+ $(MINIPERL) -I..\lib ..\write_buildcustomize.pl .. >..\lib\buildcustomize.pl
+
+
$(MINIPERL) : $(MINIDIR) $(MINI_OBJ) $(CRTIPMLIBS)
.IF "$(CCTYPE)" == "BORLAND"
if not exist $(CCLIBDIR)\PSDK\odbccp32.lib \
@@ -1423,24 +1427,24 @@ MakePPPort: $(MINIPERL) $(CONFIGPM) Exte
#-------------------------------------------------------------------------------
# There's no direct way to mark a dependency on
# DynaLoader.pm, so this will have to do
-Extensions : ..\make_ext.pl $(PERLDEP) $(CONFIGPM) $(DYNALOADER)
+Extensions : ..\make_ext.pl ..\lib\buildcustomize.pl $(PERLDEP) $(CONFIGPM) $(DYNALOADER)
$(XCOPY) ..\*.h $(COREDIR)\*.*
$(MINIPERL) -I..\lib ..\make_ext.pl "MAKE=$(MAKE)" --dir=$(CPANDIR) --dir=$(DISTDIR) --dir=$(EXTDIR) --dynamic
-Extensions_reonly : ..\make_ext.pl $(PERLDEP) $(CONFIGPM) $(DYNALOADER)
+Extensions_reonly : ..\make_ext.pl ..\lib\buildcustomize.pl $(PERLDEP) $(CONFIGPM) $(DYNALOADER)
$(XCOPY) ..\*.h $(COREDIR)\*.*
$(MINIPERL) -I..\lib ..\make_ext.pl "MAKE=$(MAKE)" --dir=$(CPANDIR) --dir=$(DISTDIR) --dir=$(EXTDIR) --dynamic +re
-Extensions_static : ..\make_ext.pl list_static_libs.pl $(PERLDEP) $(CONFIGPM)
+Extensions_static : ..\make_ext.pl ..\lib\buildcustomize.pl list_static_libs.pl $(PERLDEP) $(CONFIGPM)
$(XCOPY) ..\*.h $(COREDIR)\*.*
$(MINIPERL) -I..\lib ..\make_ext.pl "MAKE=$(MAKE)" --dir=$(CPANDIR) --dir=$(DISTDIR) --dir=$(EXTDIR) --static
$(MINIPERL) -I..\lib list_static_libs.pl > Extensions_static
-Extensions_nonxs : ..\make_ext.pl $(PERLDEP) $(CONFIGPM)
+Extensions_nonxs : ..\make_ext.pl ..\lib\buildcustomize.pl $(PERLDEP) $(CONFIGPM)
$(XCOPY) ..\*.h $(COREDIR)\*.*
$(MINIPERL) -I..\lib ..\make_ext.pl "MAKE=$(MAKE)" --dir=$(CPANDIR) --dir=$(DISTDIR) --dir=$(EXTDIR) --nonxs
-$(DYNALOADER) : ..\make_ext.pl $(PERLDEP) $(CONFIGPM) Extensions_nonxs
+$(DYNALOADER) : ..\make_ext.pl ..\lib\buildcustomize.pl $(PERLDEP) $(CONFIGPM) Extensions_nonxs
$(XCOPY) ..\*.h $(COREDIR)\*.*
$(MINIPERL) -I..\lib ..\make_ext.pl "MAKE=$(MAKE)" --dir=$(EXTDIR) --dynaloader
@@ -1534,6 +1538,7 @@ distclean: realclean
-del /f $(LIBDIR)\Win32CORE.pm
-del /f $(LIBDIR)\Win32API\File.pm
-del /f $(LIBDIR)\Win32API\File\cFile.pc
+ -del /f $(LIBDIR)\buildcustomize.pl
-del /f $(DISTDIR)\XSLoader\XSLoader.pm
-if exist $(LIBDIR)\App rmdir /s /q $(LIBDIR)\App
-if exist $(LIBDIR)\Archive rmdir /s /q $(LIBDIR)\Archive
Index: perl-5.12.2/write_buildcustomize.pl
===================================================================
--- /dev/null
+++ perl-5.12.2/write_buildcustomize.pl
@@ -0,0 +1,50 @@
+#!./miniperl -w
+
+use strict;
+if (@ARGV) {
+ my $dir = shift;
+ chdir $dir or die "Can't chdir '$dir': $!";
+ unshift @INC, 'lib';
+}
+
+unshift @INC, ('cpan/Cwd', 'cpan/Cwd/lib');
+require File::Spec::Functions;
+
+# To clarify, this isn't the entire suite of modules considered "toolchain"
+# It's not even all modules needed to build ext/
+# It's just the source paths of the (minimum complete set of) modules in ext/
+# needed to build the nonxs modules
+# After which, all nonxs modules are in lib, which was always sufficient to
+# allow miniperl to build everything else.
+
+my @toolchain = qw(cpan/AutoLoader/lib
+ cpan/Cwd cpan/Cwd/lib
+ cpan/ExtUtils-Command/lib
+ dist/ExtUtils-Install/lib
+ cpan/ExtUtils-MakeMaker/lib
+ cpan/ExtUtils-Manifest/lib
+ cpan/File-Path/lib
+ );
+
+# Used only in ExtUtils::Liblist::Kid::_win32_ext()
+push @toolchain, 'cpan/Text-ParseWords/lib' if $^O eq 'MSWin32';
+
+# lib must be last, as the the toolchain modules write themselves into it
+# as they build, and it's important that @INC order ensures that the partially
+# written files are always masked by the complete versions.
+
+my $inc = join ",\n ",
+ map { "q\0$_\0" }
+ (map {File::Spec::Functions::rel2abs($_)} @toolchain, 'lib'), '.';
+
+# If any of the system's build tools are written in Perl, then this module
+# may well be loaded by a much older version than we are building. So keep it
+# as backwards compatible as is easy.
+print <<"EOT";
+#!perl
+
+# We are miniperl, building extensions
+# Reset \@INC completely, adding the directories we need, and removing the
+# installed directories (which we don't need to read, and may confuse us)
+\@INC = ($inc);
+EOT