mirror of
https://git.yoctoproject.org/poky
synced 2026-04-27 03:32:12 +02:00
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>
431 lines
19 KiB
Diff
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
|