summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorDaniel Dragan <bulk88@hotmail.com>2013-08-22 14:11:17 -0400
committerTony Cook <tony@develop-help.com>2013-08-23 16:30:55 +1000
commit58ff4bd059d6ce9e478ad12c8132ee7025c0c2ed (patch)
treefc824bceb84197633fd6f1bf8e1378854d28220f
parenta24e431812b3fe550745f08f0a6093014a73dde1 (diff)
downloadperl-58ff4bd059d6ce9e478ad12c8132ee7025c0c2ed.tar.gz
restore XS module building for WinCE
configpm - when debugging configpm, Config.pm is already loaded, so the alternate Config.pm for CE isn't loaded, warn about the problem and delete the native Config.pm to allow the cross Config.pm to be loaded win32/Makefile.cd - better build product cleanup, copy from the win32 makefile - disable a bunch of module that dont/dont yet build on CE - debugging configpm required a shortcut to make it easier to run in isolation - fix the defines that wind up in the cross Config.pm - add -GS- to disable the MS Security Cookie feature on MSVC for ARM >=14 compilers, this stops a .lib linking error, security cookie overhead isnt needed for a very space limited device sdsdkenv.bat is the file I use to set env vars to compile for WM since starting in SmartDevices SDK, there is no equivelent of vcvarsall.bat for makefile building, there was a vcvarsall.bat equivelent in EVC4 tho MSVC for non Intel CPUs sometimes isn't named cl.exe, fix config_sh.PL to deal with it how to compile CE Perl, some steps involving celib and MS SDKs not included and 2 patches to CPAN modules, Socket and MakeMaker, are not in this commit but they are required to build CE Perl -in a Win32 x86/x64 command prompt do a "nmake all" to make a Desktop Perl -then in a WinCE build env command prompt do a "nmake -f makefile.ce all" -/xlib will have all your XS DLLs and PM files, /win32/$(MACHINE) will have perl519.dll and perl.exe Tony Cook: update MANIFEST
-rw-r--r--.gitignore3
-rw-r--r--MANIFEST1
-rwxr-xr-xconfigpm7
-rw-r--r--make_ext.pl1
-rw-r--r--win32/Makefile.ce75
-rw-r--r--win32/ce-helpers/sdsdkenv.bat3
-rw-r--r--win32/config_sh.PL8
7 files changed, 65 insertions, 33 deletions
diff --git a/.gitignore b/.gitignore
index 735647319f..05cd9d7249 100644
--- a/.gitignore
+++ b/.gitignore
@@ -117,6 +117,9 @@ lib/unicore/UCD.pl
lib/unicore/lib/
lib/unicore/mktables.lst
+# generated by WinCE build
+xlib/
+
# test byproducts
ext/Test-Harness/t/ext/
t/rantests
diff --git a/MANIFEST b/MANIFEST
index b11bee4503..7a7e3eb718 100644
--- a/MANIFEST
+++ b/MANIFEST
@@ -5580,6 +5580,7 @@ win32/ce-helpers/compile.bat WinCE port
win32/ce-helpers/comp.pl WinCE port
win32/ce-helpers/makedist.pl WinCE port
win32/ce-helpers/registry.bat WinCE port
+win32/ce-helpers/sdsdkenv.bat WinCE port
win32/config.ce WinCE port
win32/config.gc Win32 base line config.sh (MinGW build)
win32/config_H.ce WinCE port
diff --git a/configpm b/configpm
index db6d7ae070..fbc471009d 100755
--- a/configpm
+++ b/configpm
@@ -1118,6 +1118,13 @@ sub import {
# 'configpm; was invoked with --cross option
$platform = '***replace-marker***';
}
+ #a Perl debugger can load a bunch of modules before -MCross with PERL5DB env
+ #var, stopping a cross compile Config.pm from being loaded because the native
+ #Config.pm was already use'd
+ if(exists $INC{'Config.pm'}) {
+ warn "Cross.pm found Config.pm is already loaded, reload required, will delete from %INC";
+ delete $INC{'Config.pm'};
+ }
@INC = map {/\blib\b/?(do{local $_=$_;s/\blib\b/xlib\/$platform/;$_},$_):($_)} @INC;
$::Cross::platform = $platform;
}
diff --git a/make_ext.pl b/make_ext.pl
index 799ab8b607..6c2caf0302 100644
--- a/make_ext.pl
+++ b/make_ext.pl
@@ -45,6 +45,7 @@ my $ext_dirs_re = '(?:' . join('|', @ext_dirs) . ')';
# If any extensions are listed with a '+' char then only those
# extensions will be built, but only if they aren't countermanded
# by an '!ext' and are appropriate to the type of building being done.
+# An extensions follows the format of Foo/Bar, which would be extension Foo::Bar
# It may be deleted in a later release of perl so try to
# avoid using it for other purposes.
diff --git a/win32/Makefile.ce b/win32/Makefile.ce
index 2f2f4b4d42..311f219f38 100644
--- a/win32/Makefile.ce
+++ b/win32/Makefile.ce
@@ -13,7 +13,7 @@ INST_TOP=$(INSTALL_ROOT)
INST_VER=
# PERLCEDIR shoud be set to current directory
-PERLCEDIR = H:\src\wince\perl\win32
+PERLCEDIR = $(MAKEDIR)
# WCEROOT is a directory where Windows CE Tools was installed
WCEROOT = D:\Windows CE Tools
@@ -33,12 +33,6 @@ CCHOME = $(MSVCDIR)
CCINCDIR = $(CCHOME)\include
CCLIBDIR = $(CCHOME)\lib
-# Only for WIN2000
-#YES = /y
-COPY = copy $(YES)
-XCOPY = xcopy $(YES) /f /r /i /d
-RCOPY = xcopy $(YES) /f /r /i /e /d
-
# cecopy program. Make shure it is in your path, as well as cemkdir, cedel
CECOPY = cecopy
@@ -358,7 +352,7 @@ STARTOBJS = $(CECONSOLEDIR)/$(MACHINE)/wmain.obj \
# common section
CEDEFS = -D_WINDOWS -D_WIN32_WCE=$(CEVersion) -DUNDER_CE=$(CEVersion) \
- $(MCFLAGS) -D PERL
+ $(MCFLAGS) -D PERL -GS-
CECFLAGS = $(CEDEFS)
@@ -384,8 +378,8 @@ PATH=$(CEPATH);$(PATH)
# attention, for eVC 4, these paths are not generated correctly since the
# WinCE SDK is organized differently from eVC 3, replace the next 2 macros
# with absolute paths to the correct directories on your system
-INCLUDE=$(WCEROOT)\$(OSVERSION)\$(PLATFORM)\include
-LIB=$(WCEROOT)\$(OSVERSION)\$(PLATFORM)\lib\$(ARCH)
+#INCLUDE=$(WCEROOT)\$(OSVERSION)\$(PLATFORM)\include
+#LIB=$(WCEROOT)\$(OSVERSION)\$(PLATFORM)\lib\$(ARCH)
######################################################################
@@ -470,6 +464,8 @@ XCOREDIR = ..\xlib\$(CROSS_NAME)\CORE
AUTODIR = ..\lib\auto
LIBDIR = ..\lib
EXTDIR = ..\ext
+DISTDIR = ..\dist
+CPANDIR = ..\cpan
PODDIR = ..\pod
EXTUTILSDIR = $(LIBDIR)\ExtUtils
@@ -507,7 +503,7 @@ LIBBASEFILES = $(CRYPT_LIB) $(CELIBS)
LIBFILES = $(LIBBASEFILES) $(LIBC)
-CFLAGS = -nologo -Gf -W3 $(INCLUDES) $(DEFINES) $(LOCDEFS) \
+CFLAGS = -nologo -GF -W3 $(INCLUDES) $(DEFINES) $(LOCDEFS) \
$(PCHFLAGS) $(OPTIMIZE)
LINK_FLAGS = -nologo -opt:ref,icf -machine:$(PROCESSOR_ARCHITECTURE)
@@ -583,10 +579,18 @@ UNIDATADIR2 = ..\lib\unicore\lib
PERLDEP = perldll.def
MAKE = nmake -nologo
+MAKE_BARE = nmake
CFGSH_TMPL = config.ce
CFGH_TMPL = config_H.ce
+XCOPY = xcopy /f /r /i /d /y
+RCOPY = xcopy /f /r /i /e /d /y
+NOOP = @rem
+NULL =
+
+DEL = del
+
MICROCORE_SRC = \
..\av.c \
..\deb.c \
@@ -701,26 +705,31 @@ CFG_VARS = \
"INST_VER=$(INST_VER)" \
"INST_ARCH=$(INST_ARCH)" \
"archname=$(ARCHNAME)" \
- "CC=$(CC)" \
+ "cc=$(CC)" \
+ "ld=$(LINK32)" \
"ccflags=$(OPTIMIZE) $(DEFINES) $(BUILDOPT)" \
"cppflags=$(OPTIMIZE) $(DEFINES) $(BUILDOPT)" \
"cf_by=vkon" \
"cf_email=$(EMAIL)" \
- "d_crypt=$(D_CRYPT)" \
+#9cef8306
"d_mymalloc=$(PERL_MALLOC)" \
"libs=$(LIBFILES)" \
"incpath=$(CCINCDIR)" \
"libperl=$(PERLIMPLIB_EXP)" \
"libpth=$(LIBPATH)" \
"libc=$(LIBC)" \
- "make=nmake" \
+ "make=$(MAKE_BARE)" \
"static_ext=$(STATIC_EXT)" \
"dynamic_ext=$(DYNAMIC_EXT)" \
+ "usethreads=$(USE_ITHREADS)" \
"useithreads=$(USE_ITHREADS)" \
"usemultiplicity=$(USE_MULTI)" \
"useperlio=$(USE_PERLIO)" \
+ "use64bitint=undef" \
+ "uselargefiles=undef" \
"LINK_FLAGS=$(LDLIBPATH) $(LINK_FLAGS) $(SUBSYS)" \
- "optimize=$(OPTIMIZE)"
+ "optimize=$(OPTIMIZE)" \
+ "WIN64=$(WIN64)"
ICWD = -I..\dist\Cwd -I..\dist\Cwd\lib
ICWD1 = -I..\..\dist\Cwd -I..\..\dist\Cwd\lib
@@ -740,11 +749,13 @@ all: hostminiperl $(MINIMOD) $(CONFIGPM) $(UNIDATAFILES) $(PERLEXE) MakePPPort E
$(DYNALOADER)$(o) : $(DYNALOADER).c xconfig.h $(EXTDIR)\DynaLoader\dlutils.c
+#convenience target
+configpm_targ : $(CONFIGPM)
+
$(CONFIGPM) : $(HPERL) ..\Cross\config-$(MACHINE).sh config_h.PL ..\minimod.pl
cd .. && $(HPERL) -Ilib configpm --cross=$(CROSS_NAME) --no-glossary
-mkdir $(XCOREDIR)
$(XCOPY) ..\*.h $(XCOREDIR)\*.*
- $(XCOPY) ..\*.inc $(XCOREDIR)\*.*
$(XCOPY) *.h $(XCOREDIR)\*.*
$(XCOPY) ..\ext\re\re.pm $(LIBDIR)\*.*
$(RCOPY) include $(XCOREDIR)\*.*
@@ -776,12 +787,12 @@ NOT_COMPILE_EXT = $(NOT_COMPILE_EXT) !XS/Typemap
NOT_COMPILE_EXT = $(NOT_COMPILE_EXT) !XS/Typemap
!endif
-Extensions: ..\make_ext.pl $(PERLDEP) $(CONFIGPM)
- $(HPERL) -I..\lib -I. -MCross=$(CROSS_NAME) ..\make_ext.pl "MAKE=$(MAKE)" --dir=$(EXTDIR) --all \
- !POSIX $(NOT_COMPILE_EXT)
+Extensions: ..\make_ext.pl $(CONFIGPM)
+ $(HPERL) -I..\lib -I. -MCross=$(CROSS_NAME) ..\make_ext.pl "MAKE=$(MAKE)" --dir=$(CPANDIR) --dir=$(DISTDIR) --dir=$(EXTDIR) --all \
+ !POSIX !Errno !Win32 !Win32API/File !Socket !Time/HiRes !Time/Piece !re $(NOT_COMPILE_EXT)
Extensions_clean:
- -if exist $(MINIPERL) $(MINIPERL) -I..\lib ..\make_ext.pl "MAKE=$(MAKE)" --dir=$(EXTDIR) --all --target=clean
+ -if exist $(MINIPERL) $(MINIPERL) -I..\lib ..\make_ext.pl "MAKE=$(MAKE)" --all --target=clean
#----------------------------------------------------------------------------------
@@ -789,14 +800,17 @@ $(PERLEXE_RES): perlexe.rc perl.rc $(PERLEXE_MANIFEST) $(PERLEXE_ICO)
rc $(RCDEFS) perlexe.rc
clean:
- -rm -f $(MACHINE)/dll/*
- -rm -f $(MACHINE)/*.obj
- -rm -f $(MACHINE)/*.exe
- -rm -f $(MACHINE)/*.dll
- -rm -f $(MACHINE)/*.lib
- -rm -f ..\Cross\config-$(MACHINE).sh ../lib/Config.pm
- -rm -f config.h xconfig.h perl.res
- -rm -f ../t/test_state
+ -if exist .\$(MACHINE)\dll rmdir /s /q .\$(MACHINE)\dll
+ -@$(DEL) .\$(MACHINE)\*.obj
+ -@$(DEL) .\$(MACHINE)\*.exe
+ -@$(DEL) .\$(MACHINE)\*.dll
+ -@$(DEL) .\$(MACHINE)\*.lib
+ -@$(DEL) .\$(MACHINE)\*.exp
+ -@$(DEL) .\$(MACHINE)\*.pdb
+ -@$(DEL) ..\Cross\config-$(MACHINE).sh ..\lib\Config.pm
+ -if exist ..\xlib rmdir /s /q ..\xlib
+ -@$(DEL) config.h xconfig.h perl.res
+ -@$(DEL) ..\t\test_state
XDLLOBJS = \
$(DLLDIR)\av.obj \
@@ -882,6 +896,9 @@ $(PERLDLL) : $(DLLDIR) perldll.def $(XDLLOBJS) $(PERLDLL_RES)
$(DLLDIR) :
if not exist "$(DLLDIR)" mkdir "$(DLLDIR)"
+$(EXTDIR)\DynaLoader\DynaLoader.c :
+ $(HPERL) -I..\lib -I. -MCross=$(CROSS_NAME) ..\make_ext.pl "MAKE=$(MAKE)" --dir=$(EXTDIR) --dynaloader
+
$(DLLDIR)\DynaLoader.obj: $(EXTDIR)\DynaLoader\DynaLoader.c
$(CC) -c $(CFLAGS_O) -DPERL_EXTERNAL_GLOB -Fo$(DLLDIR)\ \
$(EXTDIR)\DynaLoader\DynaLoader.c
@@ -921,7 +938,7 @@ makedist: all dlls
cp registry.bat $(MACHINE)
cp ../lib/Config.pm $(MACHINE)/lib
cd $(MACHINE)
- rm -f perl-$(MACHINE).tar.gz
+ -@$(DEL) perl-$(MACHINE).tar.gz
sh -c "tar cf perl-$(MACHINE).tar *.exe *.dll *.txt *.bat lib"
gzip -9 perl-$(MACHINE).tar
mv perl-$(MACHINE).tar.gz h:/freenet/new
diff --git a/win32/ce-helpers/sdsdkenv.bat b/win32/ce-helpers/sdsdkenv.bat
new file mode 100644
index 0000000000..fe72309a76
--- /dev/null
+++ b/win32/ce-helpers/sdsdkenv.bat
@@ -0,0 +1,3 @@
+set INCLUDE=C:\Program Files (x86)\Microsoft Visual Studio 9.0\VC\ce\include;C:\Program Files (x86)\Microsoft Visual Studio 9.0\SmartDevices\SDK\PocketPC2003\Include
+set LIB=C:\Program Files (x86)\Microsoft Visual Studio 9.0\VC\ce\lib\armv4;C:\Program Files (x86)\Microsoft Visual Studio 9.0\SmartDevices\SDK\PocketPC2003\Lib\armv4
+set PATH=C:\Program Files (x86)\Microsoft Visual Studio 9.0\VC\ce\bin\x86_arm;%PATH%
diff --git a/win32/config_sh.PL b/win32/config_sh.PL
index d866f7624e..f3fdf075d8 100644
--- a/win32/config_sh.PL
+++ b/win32/config_sh.PL
@@ -93,8 +93,8 @@ else {
if (exists $opt{cc}) {
# cl version detection borrowed from Test::Smoke's configsmoke.pl
- if ($opt{cc} eq 'cl') {
- my $output = `cl --version 2>&1`;
+ if ($opt{cc} =~ /\bcl/) { #MSVC can come as clarm.exe
+ my $output = `$opt{cc} --version 2>&1`;
$opt{ccversion} = $output =~ /^.*Version\s+([\d.]+)/ ? $1 : '?';
}
elsif ($opt{cc} =~ /\bgcc\b/) {
@@ -115,7 +115,7 @@ $opt{libpth} = mungepath($opt{libpth}) if exists $opt{libpth};
$opt{incpath} = mungepath($opt{incpath}) if exists $opt{incpath};
my($int64, $int64f);
-if ($opt{cc} eq 'cl') {
+if ($opt{cc} =~ /\bcl/) {
$int64 = '__int64';
$int64f = 'I64';
}
@@ -195,7 +195,7 @@ else {
# change the s{GM|LOCAL}TIME_{min|max} for VS2005 (aka VC 8) and
# VS2008 (aka VC 9) or higher (presuming that later versions will have
# at least the range of that).
-if ($opt{cc} eq 'cl' and $opt{ccversion} =~ /^(\d+)/) {
+if ($opt{cc} =~ /\bcl/ and $opt{ccversion} =~ /^(\d+)/) {
my $ccversion = $1;
if ($ccversion >= 14) {
$opt{sGMTIME_max} = 32535291599;