This is a live mirror of the Perl 5 development currently hosted at https://github.com/perl/perl5
Fix Win32 build with MinGW/gcc-4.8+ which define some errno.h values >= 100
[perl5.git] / win32 / Makefile.ce
index 7d87670..1df3bb6 100644 (file)
@@ -5,8 +5,7 @@
 #
 
 SRCDIR     = ..
-PV         = 59
-INST_VER   = 5.11.2
+PV         = 519
 
 # INSTALL_ROOT specifies a path where this perl will be installed on CE device
 INSTALL_ROOT=/netzwerk/sprache/perl
@@ -14,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
@@ -34,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
 
@@ -82,6 +75,7 @@ MACHINE=wince-arm-hpc-wce300
 #MACHINE=wince-mips-palm-wce211
 #MACHINE=wince-sh3-palm-wce211
 #MACHINE=wince-x86em-palm-wce211
+#MACHINE=wince-x86-hpc-wce300
 !endif
 
 # set this to your email address
@@ -336,11 +330,29 @@ STARTOBJS  = $(CECONSOLEDIR)/$(MACHINE)/wmain.obj \
              $(CECONSOLEDIR)/$(MACHINE)/w32console.obj
 !endif
 
+!if "$(MACHINE)" == "wince-x86-hpc-wce300"
+CC         = cl.exe
+ARCH       = X86EM
+CPU        = X86
+TARGETCPU  = X86
+CEVersion  = 400
+OSVERSION  = WCE400
+PLATFORM   = MS Pocket PC
+MCFLAGS    = -DX86 -D_X86_ -Dx86 -DPROCESSOR_X86 -D _MT -D _DLL \
+             -DPALM_SIZE -DPOCKET_SIZE -I $(CELIBDLLDIR)\inc
+MACH       = -machine:IX86
+SUBSYS     = -subsystem:windowsce,2.0
+CELIBPATH  = $(CELIBDLLDIR)\wince-x86-hpc-wce300-release
+LDLIBPATH  = -libpath:$(CELIBPATH)
+STARTOBJS  = $(CECONSOLEDIR)/$(MACHINE)/wmain.obj \
+             $(CECONSOLEDIR)/$(MACHINE)/w32console.obj
+!endif
+
 ######################################################################
 # common section
 
 CEDEFS    = -D_WINDOWS -D_WIN32_WCE=$(CEVersion) -DUNDER_CE=$(CEVersion) \
-            $(MCFLAGS) -D PERL
+            $(MCFLAGS) -D PERL -GS-
 
 CECFLAGS  = $(CEDEFS)
 
@@ -363,8 +375,11 @@ RCDEFS    = /l 0x407 /r /d "UNICODE" /d UNDER_CE=$(CEVersion) \
 
 PATH=$(CEPATH);$(PATH)
 
-INCLUDE=$(WCEROOT)\$(OSVERSION)\$(PLATFORM)\include
-LIB=$(WCEROOT)\$(OSVERSION)\$(PLATFORM)\lib\$(ARCH)
+# 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)
 
 ######################################################################
 
@@ -449,6 +464,8 @@ XCOREDIR    = ..\xlib\$(CROSS_NAME)\CORE
 AUTODIR                = ..\lib\auto
 LIBDIR         = ..\lib
 EXTDIR         = ..\ext
+DISTDIR                = ..\dist
+CPANDIR                = ..\cpan
 PODDIR         = ..\pod
 EXTUTILSDIR    = $(LIBDIR)\ExtUtils
 
@@ -472,8 +489,9 @@ CELIB           = celib.lib
 CELIB           = celib.lib
 !endif
 
+#use ws2.lib instead of winsock.lib for WSAGetLastError
 CELIBS          = -nodefaultlib \
-                  winsock.lib $(CELIB) coredll.lib
+                  ws2.lib $(CELIB) coredll.lib
 
 !if $(CEVersion) > 200
 CELIBS          = $(CELIBS) corelibc.lib
@@ -485,13 +503,13 @@ 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 -machine:$(PROCESSOR_ARCHITECTURE)
+LINK_FLAGS     = -nologo -opt:ref,icf -machine:$(PROCESSOR_ARCHITECTURE)
 
 !if "$(CFG)" == "DEBUG"
-LINK_FLAGS      = $(LINK_FLAGS) -debug:full -pdb:none
+LINK_FLAGS      = $(LINK_FLAGS) -debug
 !else
 LINK_FLAGS      = $(LINK_FLAGS) -release
 !endif
@@ -512,6 +530,9 @@ o = .obj
 .c$(o):
        $(CC) -c -I$(<D) $(CFLAGS_O) $(OBJOUT_FLAG)$@ $<
 
+.c.i:
+       $(CC) -c -I$(<D) $(CFLAGS_O) -P $(OBJOUT_FLAG)$@ $<
+
 .y.c:
        $(NOOP)
 
@@ -535,10 +556,17 @@ CONFIGPM  = ..\xlib\$(CROSS_NAME)\Config.pm
 MINIMOD                = ..\lib\ExtUtils\Miniperl.pm
 
 # Unicode data files generated by mktables
+FIRSTUNIFILE     = ..\lib\unicore\Decomposition.pl
 UNIDATAFILES    = ..\lib\unicore\Decomposition.pl \
                   ..\lib\unicore\CombiningClass.pl ..\lib\unicore\Name.pl \
                   ..\lib\unicore\Heavy.pl ..\lib\unicore\mktables.lst \
-                  ..\lib\unicore\TestProp.pl ..\lib\unicore\version
+                  ..\lib\unicore\UCD.pl ..\lib\unicore\Name.pm \
+                  ..\lib\unicore\TestProp.pl
+
+PERLEXE_MANIFEST= .\perlexe.manifest
+PERLEXE_ICO    = .\perlexe.ico
+PERLEXE_RES    = .\perlexe.res
+PERLDLL_RES    =
 
 # Directories of Unicode data files generated by mktables
 UNIDATADIR1    = ..\lib\unicore\To
@@ -551,15 +579,17 @@ UNIDATADIR2       = ..\lib\unicore\lib
 PERLDEP                = perldll.def
 
 MAKE           = nmake -nologo
+MAKE_BARE      = nmake
 
 CFGSH_TMPL     = config.ce
 CFGH_TMPL      = config_H.ce
 
-#
-# filenames given to xsubpp must have forward slashes (since it puts
-# full pathnames in #line strings)
-XSUBPP         = $(HPERL) -I..\..\lib -MCross=$(CROSS_NAME) ..\$(EXTUTILSDIR)\xsubpp \
-               -C++ -prototypes
+XCOPY          = xcopy /f /r /i /d /y
+RCOPY          = xcopy /f /r /i /e /d /y
+NOOP           = @rem
+NULL           =
+
+DEL            = del
 
 MICROCORE_SRC  =               \
                ..\av.c         \
@@ -571,7 +601,11 @@ MICROCORE_SRC      =               \
                ..\gv.c         \
                ..\mro.c        \
                ..\hv.c         \
+               ..\locale.c     \
+               ..\keywords.c   \
+               ..\mathoms.c    \
                ..\mg.c         \
+               ..\numeric.c    \
                ..\op.c         \
                ..\pad.c        \
                ..\perl.c       \
@@ -612,8 +646,6 @@ WIN32_SRC   =               \
 WIN32_SRC      = $(WIN32_SRC) .\$(CRYPT_SRC)
 !ENDIF
 
-DLL_SRC                = $(DYNALOADER).c
-
 CORE_NOCFG_H   =               \
                ..\av.h         \
                ..\cop.h        \
@@ -624,6 +656,7 @@ CORE_NOCFG_H        =               \
                ..\gv.h         \
                ..\handy.h      \
                ..\hv.h         \
+               ..\hv_func.h    \
                ..\iperlsys.h   \
                ..\mg.h         \
                ..\nostdio.h    \
@@ -650,6 +683,7 @@ CORE_NOCFG_H        =               \
                ..\intrpvar.h   \
                .\include\dirent.h      \
                .\include\netdb.h       \
+               .\include\sys\errno2.h  \
                .\include\sys\socket.h  \
                .\win32.h
 
@@ -667,37 +701,46 @@ ERRNO_PM  = $(LIBDIR)\Errno.pm
 EXTENSION_PM   =               \
                $(ERRNO_PM)
 
-POD2HTML       = $(PODDIR)\pod2html
-POD2MAN                = $(PODDIR)\pod2man
-POD2LATEX      = $(PODDIR)\pod2latex
-POD2TEXT       = $(PODDIR)\pod2text
-
 CFG_VARS = \
- "INST_DRV=$(INST_DRV)" \
  "INST_TOP=$(INST_TOP)" \
  "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
+
+#
+# filenames given to xsubpp must have forward slashes (since it puts
+# full pathnames in #line strings)
+XSUBPP         = $(HPERL) -I..\..\lib $(ICWD1) -MCross=$(CROSS_NAME) ..\$(EXTUTILSDIR)\xsubpp \
+               -C++ -prototypes
+
 
 #
 # Top targets
@@ -707,11 +750,13 @@ all: hostminiperl $(MINIMOD) $(CONFIGPM) $(UNIDATAFILES) $(PERLEXE) MakePPPort E
 
 $(DYNALOADER)$(o) : $(DYNALOADER).c xconfig.h $(EXTDIR)\DynaLoader\dlutils.c
 
-$(CONFIGPM) : $(HPERL) ..\config.sh .\xconfig.h config_h.PL ..\minimod.pl
-       cd .. && $(HPERL) configpm --cross=$(CROSS_NAME) --no-glossary
+#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)\*.*
@@ -719,30 +764,15 @@ $(CONFIGPM) : $(HPERL) ..\config.sh .\xconfig.h config_h.PL ..\minimod.pl
 .\xconfig.h:
        -del /f xconfig.h
        -mkdir $(XCOREDIR)
-       -$(HPERL) -I..\lib -MCross=$(CROSS_NAME) config_h.PL "INST_VER=$(INST_VER)" "CORE_DIR=$(XCOREDIR)" "CONFIG_H=xconfig.h"
+       -$(HPERL) -I..\lib $(ICWD) -MCross=$(CROSS_NAME) config_h.PL "INST_VER=$(INST_VER)" "CORE_DIR=$(XCOREDIR)" "CONFIG_H=xconfig.h"
        $(XCOPY) xconfig.h $(XCOREDIR)\config.h
 
-..\config.sh: config.ce config_sh.PL
-       $(HPERL) -I..\lib -I. config_sh.PL $(CFG_VARS) config.ce > ..\config.sh
+..\Cross\config-$(MACHINE).sh: config.ce config_sh.PL
+       $(HPERL) -I..\lib -I. config_sh.PL $(CFG_VARS) config.ce > ..\Cross\config-$(MACHINE).sh
 
 $(MINIMOD) : ..\minimod.pl
        cd .. && $(HPERL) minimod.pl > lib\ExtUtils\Miniperl.pm
 
-$(DYNALOADER).c: $(EXTDIR)\DynaLoader\dl_win32.xs $(CONFIGPM)
-       if not exist $(AUTODIR) mkdir $(AUTODIR)
-       cd $(EXTDIR)\$(*B)
-       $(HPERL) -I..\..\lib -MCross=$(CROSS_NAME) $(*B)_pm.PL
-       $(HPERL) -I..\..\lib -MCross=$(CROSS_NAME) XSLoader_pm.PL
-       cd ..\..\win32
-       $(XCOPY) $(EXTDIR)\$(*B)\$(*B).pm $(LIBDIR)\$(NULL)
-       $(XCOPY) $(EXTDIR)\$(*B)\XSLoader.pm $(LIBDIR)\$(NULL)
-       cd $(EXTDIR)\$(*B)
-       $(XSUBPP) dl_win32.xs > $(*B).c
-       cd ..\..\win32
-
-$(EXTDIR)\DynaLoader\dl_win32.xs: dl_win32.xs
-       $(COPY) dl_win32.xs $(EXTDIR)\DynaLoader\dl_win32.xs
-
 MakePPPort: $(MINIPERL) $(CONFIGPM)
        $(HPERL) -I..\lib -MCross=$(CROSS_NAME) ..\mkppport
 
@@ -758,27 +788,30 @@ 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 
 
 #----------------------------------------------------------------------------------
 
-$(PERLEXE_RES): perl.rc perl.ico
-       rc $(RCDEFS) perl.rc
+$(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 ../config.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 \
@@ -791,6 +824,7 @@ $(DLLDIR)\gv.obj \
 $(DLLDIR)\mro.obj \
 $(DLLDIR)\hv.obj \
 $(DLLDIR)\locale.obj \
+$(DLLDIR)\keywords.obj \
 $(DLLDIR)\mathoms.obj \
 $(DLLDIR)\mg.obj \
 $(DLLDIR)\numeric.obj \
@@ -849,13 +883,13 @@ $(DLLDIR)\perllib$(o)     : perllib.c .\perlhost.h .\vdir.h .\vmem.h
        rem (frustrated) mv perllib.obj $(DLLDIR)
 !ENDIF
 
-perldll.def : $(HPERL) $(CONFIGPM) ..\global.sym ..\pp.sym ..\makedef.pl create_perllibst_h.pl
-       $(HPERL) -MCross -I..\lib create_perllibst_h.pl
-       $(HPERL) -w ..\makedef.pl PLATFORM=wince $(OPTIMIZE) $(DEFINES) $(BUILDOPT) \
-           CCTYPE=$(CCTYPE) -DPERL_DLL=$(PERLDLL) > perldll.def
+perldll.def : $(HPERL) $(CONFIGPM) ..\embed.fnc ..\makedef.pl create_perllibst_h.pl .\xconfig.h
+       $(HPERL) -I..\lib -MCross create_perllibst_h.pl
+       $(HPERL) -I..\lib -MCross -w ..\makedef.pl PLATFORM=wince $(OPTIMIZE) $(DEFINES) $(BUILDOPT) \
+           CCTYPE=$(CCTYPE) -DPERL_DLL=$(PERLDLL) TARG_DIR=..\ > perldll.def
 
 $(PERLDLL) : $(DLLDIR) perldll.def $(XDLLOBJS) $(PERLDLL_RES)
-       $(LINK32) -dll -def:perldll.def -out:$@ \
+       $(LINK32) -dll -def:perldll.def -base:0x28000000 -out:$@ \
                   $(SUBSYS) $(LDLIBPATH) \
                  $(LINK_FLAGS) $(LIBFILES) \
                  $(XDLLOBJS) $(PERLDLL_RES)
@@ -863,6 +897,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
@@ -902,7 +939,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
@@ -918,7 +955,7 @@ install: all
 
 $(UNIDATAFILES) : $(HPERL) $(CONFIGPM) ..\lib\unicore\mktables
        cd ..\lib\unicore && \
-       $(HPERL) -I.. mktables -P ..\..\pod -maketest -makelist -p
+       $(HPERL) -I.. -I..\..\lib $(ICWD1) -MCross=$(CROSS_NAME) mktables -P ..\..\pod -maketest -makelist -p -check $@ $(FIRSTUNIFILE)
 
 dist: all
        $(HPERL) -I..\lib -MCross=$(CROSS_NAME) ce-helpers\makedist.pl --distdir=dist-$(CROSS_NAME) --cross-name=$(CROSS_NAME)