This is a live mirror of the Perl 5 development currently hosted at https://github.com/perl/perl5
new perldelta for 5.31.4
[perl5.git] / win32 / makefile.mk
index 297cb36..7e45914 100644 (file)
@@ -2,11 +2,12 @@
 # Makefile to build perl on Windows using DMAKE.
 # Supported compilers:
 #      Microsoft Visual C++ 6.0 or later
-#      MinGW with gcc-3.4.5 or later
+#      MinGW with gcc-3.4.5 or later with runtime < 3.21
+#      MinGW64 with gcc-4.4.3 or later
 #      Windows SDK 64-bit compiler and tools
 #
 # This is set up to build a perl.exe that runs off a shared library
-# (perl527.dll).  Also makes individual DLLs for the XS extensions.
+# (perl531.dll).  Also makes individual DLLs for the XS extensions.
 #
 
 ##
@@ -44,7 +45,7 @@ INST_TOP      *= $(INST_DRV)\perl
 # versioned installation can be obtained by setting INST_TOP above to a
 # path that includes an arbitrary version string.
 #
-#INST_VER      *= \5.27.7
+#INST_VER      *= \5.31.4
 
 #
 # Comment this out if you DON'T want your perl installation to have
@@ -137,7 +138,7 @@ DEFAULT_INC_EXCLUDES_DOT *= define
 #CCTYPE                *= MSVC70
 # Visual C++ Toolkit 2003 (aka Visual C++ 7.1) (free command-line tools)
 #CCTYPE                *= MSVC70FREE
-# Windows Server 2003 SP1 Platform SDK (April 2005)
+# Windows Server 2003 SP1 Platform SDK (April 2005) (64-bit compiler and tools)
 #CCTYPE                = SDK2003SP1
 # Visual C++ 2005 (aka Visual C++ 8.0) (full version or Express Edition)
 #CCTYPE                *= MSVC80
@@ -153,6 +154,8 @@ DEFAULT_INC_EXCLUDES_DOT *= define
 #CCTYPE                = MSVC140
 # Visual C++ 2017 (aka Visual C++ 14.1) (full version or Community Edition)
 #CCTYPE                = MSVC141
+# Visual C++ 2019 (aka Visual C++ 14.2) (full version or Community Edition)
+#CCTYPE                = MSVC142
 # MinGW or mingw-w64 with gcc-3.4.5 or later
 #CCTYPE                = GCC
 
@@ -220,17 +223,17 @@ DEFAULT_INC_EXCLUDES_DOT *= define
 # set this to additionally provide a statically linked perl-static.exe.
 # Note that dynamic loading will not work with this perl, so you must
 # include required modules statically using the STATIC_EXT or ALL_STATIC
-# variables below. A static library perl527s.lib will also be created.
+# variables below. A static library perl531s.lib will also be created.
 # Ordinary perl.exe is not affected by this option.
 #
 #BUILD_STATIC  *= define
 
 #
 # in addition to BUILD_STATIC the option ALL_STATIC makes *every*
-# extension get statically built
+# extension get statically built.
 # This will result in a very large perl executable, but the main purpose
 # is to have proper linking set so as to be able to create miscellaneous
-# executables with different built-in extensions
+# executables with different built-in extensions. It implies BUILD_STATIC.
 #
 #ALL_STATIC    *= define
 
@@ -239,6 +242,9 @@ DEFAULT_INC_EXCLUDES_DOT *= define
 # Running VCVARS32.BAT, VCVARSALL.BAT or similar is *required* when using
 # Visual C++.
 #
+# For GCC builds this should be the directory containing the bin, include,
+# lib directories for your compiler.
+#
 
 #CCHOME                *= C:\MinGW
 
@@ -346,17 +352,40 @@ BUILDOPT  += -DPERL_IMPLICIT_SYS
 BUILDOPT       += -DWIN32_NO_REGISTRY
 .ENDIF
 
+.IF "$(CCTYPE)" == "GCC"
+GCCTARGET      := $(shell gcc -dumpmachine & exit /b 0)
+.ENDIF
+
 #no explicit CCTYPE given, do auto detection
 .IF "$(CCTYPE)" == ""
-GCCTARGET      *= $(shell gcc -dumpmachine 2>NUL & exit /b 0)
+GCCTARGET      := $(shell gcc -dumpmachine 2>NUL & exit /b 0)
 #do we have a GCC?
 .IF "$(GCCTARGET)" != ""
 CCTYPE         = GCC
 .ELSE
+WIN64          := $(shell for /f "tokens=3 delims=.^ " \
+       %i in ('cl ^2^>^&1') do @if "%i" == "32-bit" echo undef)
+#major version of CL has diff position based on 32 vs 64
+#Microsoft (R) C/C++ Optimizing Compiler Version 15.00.30729.01 for x64
+#Microsoft (R) 32-bit C/C++ Optimizing Compiler Version 15.00.30729.01 for 80x86
 #use var to capture 1st line only, not 8th token of lines 2 & 3 in cl.exe output
-MSVCVER                := $(shell (set MSVCVER=) & (for /f "tokens=8 delims=.^ " \
-       %i in ('cl ^2^>^&1') do @if not defined MSVCVER set /A "MSVCVER=%i-6"))
-CCTYPE         := MSVC$(MSVCVER)0
+.IF "$(WIN64)" == "undef"
+MSVCVER                := $(shell (set MSVCVER=) & (for /f "tokens=8,9 delims=.^ " \
+       %i in ('cl ^2^>^&1') do @if not defined MSVCVER if %i% geq 19 \
+       (set /A "MSVCVER=((%i-5)*10)+(%j/10)") \
+       else (set /A "MSVCVER=(%i-6)*10")))
+.ELSE
+MSVCVER                := $(shell (set MSVCVER=) & (for /f "tokens=7,8 delims=.^ " \
+       %i in ('cl ^2^>^&1') do @if not defined MSVCVER if %i% geq 19 \
+       (set /A "MSVCVER=((%i-5)*10)+(%j/10)") \
+       else (set /A "MSVCVER=(%i-6)*10")))
+.ENDIF
+#autodetect failed, reset to empty string
+.IF "$(MSVCVER)" == "-50"
+CCTYPE         := 
+.ELSE
+CCTYPE         := MSVC$(MSVCVER)
+.ENDIF
 .ENDIF
 .ENDIF
 
@@ -369,7 +398,7 @@ CCHOME              *= C:\MinGW
 .ELIF "$(CCTYPE)" == "MSVC60" || \
     "$(CCTYPE)" == "MSVC70" || "$(CCTYPE)" == "MSVC70FREE"
 CCHOME         *= $(MSVCDir)
-.ELIF "$(CCTYPE)" == "MSVC141"
+.ELIF "$(CCTYPE)" == "MSVC141" || "$(CCTYPE)" == "MSVC142"
 CCHOME         *= $(VCToolsInstallDir)
 .ELSE
 CCHOME         *= $(VCINSTALLDIR)
@@ -452,18 +481,25 @@ ARCHNAME  !:= $(ARCHNAME)-ld
 .IF "$(GCCCROSS)" == "define"
 CCINCDIR *= $(CCHOME)\x86_64-w64-mingw32\include
 CCLIBDIR *= $(CCHOME)\x86_64-w64-mingw32\lib
+.ELIF "$(CCTYPE)" == "GCC"
+CCINCDIR *= $(CCHOME)\include
+CCLIBDIR *= $(CCHOME)\lib
 .ELSE
 CCINCDIR *= $(CCHOME)\include
-.IF "$(CCTYPE)" == "MSVC141"
+.IF "$(CCTYPE)" == "MSVC141" || "$(CCTYPE)" == "MSVC142"
 .IF "$(WIN64)" == "define"
 CCLIBDIR *= $(CCHOME)\lib\x64
 .ELSE
 CCLIBDIR *= $(CCHOME)\lib\x86
 .ENDIF
 .ELSE
+.IF "$(WIN64)" == "define"
+CCLIBDIR *= $(CCHOME)\lib\amd64
+.ELSE
 CCLIBDIR *= $(CCHOME)\lib
 .ENDIF
 .ENDIF
+.ENDIF
 
 # Set DLL location for GCC compilers.
 .IF "$(CCTYPE)" == "GCC"
@@ -516,7 +552,14 @@ BUILDOPT        += -D__USE_MINGW_ANSI_STDIO
 MINIBUILDOPT    += -D__USE_MINGW_ANSI_STDIO
 .ENDIF
 
-GCCWRAPV *= $(shell for /f "delims=. tokens=1,2,3" %i in ('$(CC) -dumpversion') do @if "%i"=="4" (if "%j" geq "3" echo define) else if "%i" geq "5" (echo define))
+GCCVER1:= $(shell for /f "delims=. tokens=1,2,3" %i in ('gcc -dumpversion') do @echo %i)
+GCCVER2:= $(shell for /f "delims=. tokens=1,2,3" %i in ('gcc -dumpversion') do @echo %j)
+GCCVER3:= $(shell for /f "delims=. tokens=1,2,3" %i in ('gcc -dumpversion') do @echo %k)
+
+# If you are using GCC, 4.3 or later by default we add the -fwrapv option.
+# See https://rt.perl.org/Ticket/Display.html?id=121505
+#
+GCCWRAPV *= $(shell if "$(GCCVER1)"=="4" (if "$(GCCVER2)" geq "3" echo define) else if "$(GCCVER1)" geq "5" (echo define))
 
 .IF "$(GCCWRAPV)" == "define"
 BUILDOPT        += -fwrapv
@@ -632,7 +675,7 @@ DEFINES             = -DWIN32 -D_CONSOLE -DNO_STRICT
 LOCDEFS                = -DPERLDLL -DPERL_CORE
 CXX_FLAG       = -TP -EHsc
 
-.IF "$(CCTYPE)" == "MSVC140" || "$(CCTYPE)" == "MSVC141"
+.IF "$(CCTYPE)" == "MSVC140" || "$(CCTYPE)" == "MSVC141" || "$(CCTYPE)" == "MSVC142"
 LIBC           = ucrt.lib
 .ELSE
 LIBC           = msvcrt.lib
@@ -645,7 +688,7 @@ LINK_DBG    = -debug
 OPTIMIZE       = -Od -MD -Zi
 LINK_DBG       = -debug
 .ELIF  "$(CFG)" == "DebugFull"
-.IF "$(CCTYPE)" == "MSVC140" || "$(CCTYPE)" == "MSVC141"
+.IF "$(CCTYPE)" == "MSVC140" || "$(CCTYPE)" == "MSVC141" || "$(CCTYPE)" == "MSVC142"
 LIBC           = ucrtd.lib
 .ELSE
 LIBC           = msvcrtd.lib
@@ -683,10 +726,19 @@ DEFINES           += -D_CRT_SECURE_NO_DEPRECATE -D_CRT_NONSTDC_NO_DEPRECATE
 .ENDIF
 
 # Likewise for deprecated Winsock APIs in VC++ 14.0 onwards for now.
-.IF "$(CCTYPE)" == "MSVC140" || "$(CCTYPE)" == "MSVC141"
+.IF "$(CCTYPE)" == "MSVC140" || "$(CCTYPE)" == "MSVC141" || "$(CCTYPE)" == "MSVC142"
 DEFINES                += -D_WINSOCK_DEPRECATED_NO_WARNINGS
 .ENDIF
 
+# The Windows Server 2003 SP1 SDK compiler only defines _configthreadlocale() if
+# _MT is defined, i.e. when using /MT (the LIBCMT.lib version of the CRT), which
+# the perl build doesn't use. We therefore specify NO_THREAD_SAFE_LOCALE so that
+# perl.h doesn't set USE_THREAD_SAFE_LOCALE, which it otherwise would do since
+# _MSC_VER is 1400 for this compiler (as per MSVC80).
+.IF "$(CCTYPE)" == "SDK2003SP1"
+DEFINES                += -DNO_THREAD_SAFE_LOCALE
+.ENDIF
+
 # In VS 2005 (VC++ 8.0) Microsoft changes time_t from 32-bit to
 # 64-bit, even in 32-bit mode.  It also provides the _USE_32BIT_TIME_T
 # preprocessor option to revert back to the old functionality for
@@ -706,7 +758,7 @@ LIBBASEFILES        = oldnames.lib kernel32.lib user32.lib gdi32.lib winspool.lib \
        netapi32.lib uuid.lib ws2_32.lib mpr.lib winmm.lib version.lib \
        odbc32.lib odbccp32.lib comctl32.lib
 
-.IF "$(CCTYPE)" == "MSVC140" || "$(CCTYPE)" == "MSVC141"
+.IF "$(CCTYPE)" == "MSVC140" || "$(CCTYPE)" == "MSVC141" || "$(CCTYPE)" == "MSVC142"
 .IF "$(CFG)" == "DebugFull"
 LIBBASEFILES   += msvcrtd.lib vcruntimed.lib
 .ELSE
@@ -722,11 +774,11 @@ LIBBASEFILES      += msvcrt.lib vcruntime.lib
 LIBBASEFILES   += libircmt.lib libmmd.lib
 .ENDIF
 
-# The 64 bit Windows Server 2003 SP1 SDK compilers link against MSVCRT.dll, which
+# The Windows Server 2003 SP1 SDK compiler links against MSVCRT.dll, which
 # doesn't include the buffer overrun verification code used by the /GS switch.
 # Since the code links against libraries that are compiled with /GS, this
 # "security cookie verification" code must be included via bufferoverflow.lib.
-.IF "$(WIN64)" == "define" && "$(CCTYPE)" == "SDK2003SP1"
+.IF "$(CCTYPE)" == "SDK2003SP1"
 LIBBASEFILES    += bufferoverflowU.lib
 .ENDIF
 
@@ -767,7 +819,7 @@ RSC_FLAGS   = -DINCLUDE_MANIFEST
 # LINK_FLAGS else subsystem is only needed for EXE building, not XS DLL building
 # Console vs GUI makes no difference for DLLs, so use default for cleaner
 # building cmd lines
-.IF "$(CCTYPE)" == "MSVC120" || "$(CCTYPE)" == "MSVC140"
+.IF "$(CCTYPE)" == "MSVC120" || "$(CCTYPE)" == "MSVC140" || "$(CCTYPE)" == "MSVC141" || "$(CCTYPE)" == "MSVC142"
 .IF "$(WIN64)" == "define"
 LINK_FLAGS     += -subsystem:console,"5.02"
 .ELSE
@@ -912,8 +964,8 @@ UTILS               =                       \
 
 CFGSH_TMPL     = config.gc
 CFGH_TMPL      = config_H.gc
-PERLIMPLIB     = $(COREDIR)\libperl527$(a)
-PERLSTATICLIB  = ..\libperl527s$(a)
+PERLIMPLIB     = $(COREDIR)\libperl531$(a)
+PERLSTATICLIB  = ..\libperl531s$(a)
 INT64          = long long
 
 .ELSE
@@ -926,10 +978,11 @@ INT64             = __int64
 
 # makedef.pl must be updated if this changes, and this should normally
 # only change when there is an incompatible revision of the public API.
-PERLIMPLIB     *= $(COREDIR)\perl527$(a)
-PERLEXPLIB     *= $(COREDIR)\perl527.exp
-PERLSTATICLIB  *= ..\perl527s$(a)
-PERLDLL                = ..\perl527.dll
+PERLIMPLIB     *= $(COREDIR)\perl531$(a)
+PERLEXPLIB     *= $(COREDIR)\perl531.exp
+PERLSTATICLIB  *= ..\perl531s$(a)
+PERLDLL                = ..\perl531.dll
+PERLDLLBASE    = perl531.dll
 
 #EUMM on Win32 isn't ready for parallel make, so only allow this file to be parallel
 #$(MAKE) will contain the -P that this makefile was called with, which is bad for
@@ -1076,11 +1129,13 @@ SETARGV_OBJ     = setargv$(o)
 # some exclusions, unfortunately, until fixed:
 #  - MakeMaker isn't capable enough for SDBM_File (small bug)
 STATIC_EXT     = * !SDBM_File
+NORMALIZE_STATIC = Normalize_static
 .ELSE
 # specify static extensions here, for example:
 # (be sure to include Win32CORE to load Win32 on demand)
 #STATIC_EXT    = Win32CORE Cwd Compress/Raw/Zlib
 STATIC_EXT     = Win32CORE
+NORMALIZE_DYN  = Normalize_dyn
 .ENDIF
 
 DYNALOADER     = ..\DynaLoader$(o)
@@ -1130,6 +1185,30 @@ CFG_VARS =                                       \
 
 all : CHECKDMAKE rebasePE Extensions_nonxs $(PERLSTATIC)
 
+info :
+.IF "$(CCTYPE)" == "GCC"
+       @echo # CCTYPE=$(CCTYPE)&& \
+       echo # CC=$(CC)&& \
+       echo # GCCVER=$(GCCVER1).$(GCCVER2).$(GCCVER3)&& \
+       echo # GCCTARGET=$(GCCTARGET)&& \
+       echo # GCCCROSS=$(GCCCROSS)&& \
+       echo # WIN64=$(WIN64)&& \
+       echo # ARCHITECTURE=$(ARCHITECTURE)&& \
+       echo # ARCHNAME=$(ARCHNAME)&& \
+       echo # MAKE=$(PLMAKE)
+.ELSE
+       @echo # CCTYPE=$(CCTYPE)&& \
+       echo # WIN64=$(WIN64)&& \
+       echo # ARCHITECTURE=$(ARCHITECTURE)&& \
+       echo # ARCHNAME=$(ARCHNAME)&& \
+       echo # MAKE=$(PLMAKE)
+.ENDIF
+.IF "$(CCTYPE)" == ""
+       @echo Unable to detect gcc and/or architecture!
+       @exit 1
+.ENDIF
+
+
 ..\regcomp$(o) : ..\regnodes.h ..\regcharclass.h
 
 ..\regexec$(o) : ..\regnodes.h ..\regcharclass.h
@@ -1256,7 +1335,7 @@ $(MINIDIR)\.exists : $(CFGH_TMPL)
        echo #undef NVgf&& \
        echo #undef USE_LONG_DOUBLE&& \
        echo #undef USE_CPLUSPLUS)>> config.h
-.IF "$(CCTYPE)" == "MSVC140" || "$(CCTYPE)" == "MSVC141"
+.IF "$(CCTYPE)" == "MSVC140" || "$(CCTYPE)" == "MSVC141" || "$(CCTYPE)" == "MSVC142"
        @(echo #undef FILE_ptr&& \
        echo #undef FILE_cnt&& \
        echo #undef FILE_base&& \
@@ -1277,6 +1356,11 @@ $(MINIDIR)\.exists : $(CFGH_TMPL)
        echo #define Off_t_size ^4)>> config.h
 .ENDIF
 .IF "$(WIN64)"=="define"
+.IF "$(CCTYPE)" == "GCC"
+       @(echo #define LONG_DOUBLESIZE ^16)>> config.h
+.ELSE
+       @(echo #define LONG_DOUBLESIZE ^8)>> config.h
+.ENDIF
        @(echo #define PTRSIZE ^8&& \
        echo #define SSize_t $(INT64)&& \
        echo #define HAS_ATOLL&& \
@@ -1284,6 +1368,11 @@ $(MINIDIR)\.exists : $(CFGH_TMPL)
        echo #define HAS_STRTOULL&& \
        echo #define Size_t_size ^8)>> config.h
 .ELSE
+.IF "$(CCTYPE)" == "GCC"
+       @(echo #define LONG_DOUBLESIZE ^12)>> config.h
+.ELSE
+       @(echo #define LONG_DOUBLESIZE ^8)>> config.h
+.ENDIF
        @(echo #define PTRSIZE ^4&& \
        echo #define SSize_t int&& \
        echo #undef HAS_ATOLL&& \
@@ -1335,15 +1424,9 @@ $(MINIDIR)\.exists : $(CFGH_TMPL)
        echo #define PERL_PRIgldbl "Lg"&& \
        echo #define PERL_PRIeldbl "Le"&& \
        echo #define PERL_SCNfldbl "Lf"&& \
-       echo #define NVTYPE long double)>> config.h
-.IF "$(WIN64)"=="define"
-       @(echo #define NVSIZE ^16&& \
-       echo #define LONG_DOUBLESIZE ^16)>> config.h
-.ELSE
-       @(echo #define NVSIZE ^12&& \
-       echo #define LONG_DOUBLESIZE ^12)>> config.h
-.ENDIF
-       @(echo #define NV_OVERFLOWS_INTEGERS_AT 256.0*256.0*256.0*256.0*256.0*256.0*256.0*2.0*2.0*2.0*2.0*2.0*2.0*2.0*2.0&& \
+       echo #define NVTYPE long double&& \
+       echo #define NVSIZE LONG_DOUBLESIZE&& \
+       echo #define NV_OVERFLOWS_INTEGERS_AT 256.0*256.0*256.0*256.0*256.0*256.0*256.0*2.0*2.0*2.0*2.0*2.0*2.0*2.0*2.0&& \
        echo #define NVef "Le"&& \
        echo #define NVff "Lf"&& \
        echo #define NVgf "Lg"&& \
@@ -1362,7 +1445,6 @@ $(MINIDIR)\.exists : $(CFGH_TMPL)
        echo #undef PERL_SCNfldbl&& \
        echo #define NVTYPE double&& \
        echo #define NVSIZE ^8&& \
-       echo #define LONG_DOUBLESIZE ^8&& \
        echo #define NV_OVERFLOWS_INTEGERS_AT 256.0*256.0*256.0*256.0*256.0*256.0*2.0*2.0*2.0*2.0*2.0&& \
        echo #define NVef "e"&& \
        echo #define NVff "f"&& \
@@ -1377,7 +1459,7 @@ $(MINIDIR)\.exists : $(CFGH_TMPL)
        echo #endif)>> config.h
 .ENDIF
 #separate line since this is sentinal that this target is done
-       rem. > $(MINIDIR)\.exists
+       @rem. > $(MINIDIR)\.exists
 
 $(MINICORE_OBJ) : $(CORE_NOCFG_H)
        $(CC) -c $(CFLAGS) $(MINIBUILDOPT) -DPERL_EXTERNAL_GLOB -DPERL_IS_MINIPERL $(OBJOUT_FLAG)$@ $(PDBOUT) ..\$(*B).c
@@ -1418,7 +1500,7 @@ perldll.def : $(HAVEMINIPERL) $(CONFIGPM) ..\embed.fnc ..\makedef.pl
 
 $(PERLEXPLIB) $(PERLIMPLIB) .UPDATEALL : perldll.def
 .IF "$(CCTYPE)" == "GCC"
-       $(IMPLIB) -k -d perldll.def -l $(PERLIMPLIB) -e $(PERLEXPLIB)
+       $(IMPLIB) -k -d perldll.def -D $(PERLDLLBASE) -l $(PERLIMPLIB) -e $(PERLEXPLIB)
 .ELSE #VC family
        lib -def:perldll.def -machine:$(ARCHITECTURE) /OUT:$(PERLIMPLIB)
 .ENDIF
@@ -1505,25 +1587,33 @@ $(PERLEXESTATIC): $(PERLSTATICLIB) $(CONFIGPM) $(PERLEXEST_OBJ) $(PERLEXE_RES)
 # DynaLoader.pm, so this will have to do
 
 #most of deps of this target are in DYNALOADER and therefore omitted here
-Extensions : $(PERLDEP) $(DYNALOADER) $(GLOBEXE) MakePPPort
+Extensions : $(PERLDEP) $(DYNALOADER) Extension_lib $(GLOBEXE) MakePPPort
        $(MINIPERL) -I..\lib ..\make_ext.pl "MAKE=$(PLMAKE)" --dir=$(CPANDIR) --dir=$(DISTDIR) --dir=$(EXTDIR) --dynamic !Unicode/Normalize
 
-Extensions_normalize : $(PERLDEP) $(DYNALOADER) $(GLOBEXE) $(UNIDATAFILES)
+Normalize_static : $(CONFIGPM) $(GLOBEXE) $(HAVE_COREDIR) $(UNIDATAFILES)
+       $(MINIPERL) -I..\lib ..\make_ext.pl "MAKE=$(PLMAKE)" --dir=$(CPANDIR) --dir=$(DISTDIR) --dir=$(EXTDIR) --static +Unicode/Normalize
+
+Normalize_dyn : $(PERLDEP) $(DYNALOADER) $(GLOBEXE) $(UNIDATAFILES)
        $(MINIPERL) -I..\lib ..\make_ext.pl "MAKE=$(PLMAKE)" --dir=$(CPANDIR) --dir=$(DISTDIR) --dir=$(EXTDIR) --dynamic +Unicode/Normalize
 
 Extensions_reonly : $(PERLDEP) $(DYNALOADER)
        $(MINIPERL) -I..\lib ..\make_ext.pl "MAKE=$(PLMAKE)" --dir=$(CPANDIR) --dir=$(DISTDIR) --dir=$(EXTDIR) --dynamic +re
 
-Extensions_static : ..\make_ext.pl list_static_libs.pl $(CONFIGPM) $(GLOBEXE) $(HAVE_COREDIR) MakePPPort
-       $(MINIPERL) -I..\lib ..\make_ext.pl "MAKE=$(PLMAKE)" --dir=$(CPANDIR) --dir=$(DISTDIR) --dir=$(EXTDIR) --static
+Exts_static_general : ..\make_ext.pl $(CONFIGPM) Extension_lib $(GLOBEXE) $(HAVE_COREDIR) MakePPPort
+       $(MINIPERL) -I..\lib ..\make_ext.pl "MAKE=$(PLMAKE)" --dir=$(CPANDIR) --dir=$(DISTDIR) --dir=$(EXTDIR) --static !Unicode/Normalize
+
+Extensions_static : list_static_libs.pl Exts_static_general $(NORMALIZE_STATIC)
        $(MINIPERL) -I..\lib list_static_libs.pl > Extensions_static
 
 Extensions_nonxs : ..\make_ext.pl ..\pod\perlfunc.pod $(CONFIGPM) $(GLOBEXE)
        $(MINIPERL) -I..\lib ..\make_ext.pl "MAKE=$(PLMAKE)" --dir=$(CPANDIR) --dir=$(DISTDIR) --dir=$(EXTDIR) --nonxs !libs
 
+Extension_lib : ..\make_ext.pl $(CONFIGPM)
+       $(MINIPERL) -I..\lib ..\make_ext.pl "MAKE=$(PLMAKE)" --dir=$(CPANDIR) --dir=$(DISTDIR) --dir=$(EXTDIR) lib
+
 #lib must be built, it can't be buildcustomize.pl-ed, and is required for XS building
 $(DYNALOADER) : ..\make_ext.pl $(CONFIGPM) $(HAVE_COREDIR)
-       $(MINIPERL) -I..\lib ..\make_ext.pl "MAKE=$(PLMAKE)" --dir=$(EXTDIR) --dir=$(DISTDIR) --dynaloader lib
+       $(MINIPERL) -I..\lib ..\make_ext.pl "MAKE=$(PLMAKE)" --dir=$(EXTDIR) --dir=$(DISTDIR) --dynaloader
 
 Extensions_clean :
        -if exist $(MINIPERL) $(MINIPERL) -I..\lib ..\make_ext.pl "MAKE=$(PLMAKE)" --dir=$(CPANDIR) --dir=$(DISTDIR) --dir=$(EXTDIR) --all --target=clean
@@ -1534,10 +1624,10 @@ Extensions_realclean :
 # all PE files need to be built by the time this target runs, PP files can still
 # be running in parallel like UNIDATAFILES, this target a placeholder for the
 # future
-.IF "$(BUILD_STATIC)"=="define"
-rebasePE : Extensions $(PERLDLL) Extensions_normalize $(PERLEXE) $(PERLEXESTATIC)
+.IF "$(PERLSTATIC)"=="static"
+rebasePE : Extensions $(PERLDLL) $(PERLEXE) $(PERLEXESTATIC)
 .ELSE
-rebasePE : Extensions $(PERLDLL) Extensions_normalize $(PERLEXE)
+rebasePE : Extensions $(PERLDLL) $(NORMALIZE_DYN) $(PERLEXE)
 .ENDIF
        $(NOOP)
 
@@ -1560,7 +1650,6 @@ utils: $(HAVEMINIPERL) ..\utils\Makefile
        copy ..\README.amiga    ..\pod\perlamiga.pod
        copy ..\README.android  ..\pod\perlandroid.pod
        copy ..\README.bs2000   ..\pod\perlbs2000.pod
-       copy ..\README.ce       ..\pod\perlce.pod
        copy ..\README.cn       ..\pod\perlcn.pod
        copy ..\README.cygwin   ..\pod\perlcygwin.pod
        copy ..\README.dos      ..\pod\perldos.pod
@@ -1589,12 +1678,12 @@ utils: $(HAVEMINIPERL) ..\utils\Makefile
        copy ..\README.tw       ..\pod\perltw.pod
        copy ..\README.vos      ..\pod\perlvos.pod
        copy ..\README.win32    ..\pod\perlwin32.pod
-       copy ..\pod\perldelta.pod ..\pod\perl5277delta.pod
+       copy ..\pod\perldelta.pod ..\pod\perl5315delta.pod
        $(MINIPERL) -I..\lib $(PL2BAT) $(UTILS)
        $(MINIPERL) -I..\lib ..\autodoc.pl ..
        $(MINIPERL) -I..\lib ..\pod\perlmodlib.PL -q ..
 
-..\pod\perltoc.pod: $(PERLEXE) $(PERLDLL) Extensions Extensions_nonxs Extensions_normalize utils
+..\pod\perltoc.pod: $(PERLEXE) $(PERLDLL) Extensions Extensions_nonxs $(NORMALIZE_DYN) utils
        $(PERLEXE) -f ..\pod\buildtoc -q
 
 # Note that the pod cleanup in this next section is parsed (and regenerated
@@ -1611,11 +1700,11 @@ distclean: realclean
        -del /f $(LIBDIR)\SDBM_File.pm $(LIBDIR)\Socket.pm $(LIBDIR)\POSIX.pm
        -del /f $(LIBDIR)\B.pm $(LIBDIR)\O.pm $(LIBDIR)\re.pm
        -del /f $(LIBDIR)\File\Glob.pm
-       -del /f $(LIBDIR)\Storable.pm
        -del /f $(LIBDIR)\Sys\Hostname.pm
        -del /f $(LIBDIR)\Time\HiRes.pm
        -del /f $(LIBDIR)\Unicode\Normalize.pm
        -del /f $(LIBDIR)\Math\BigInt\FastCalc.pm
+       -del /f $(LIBDIR)\Storable.pm
        -del /f $(LIBDIR)\Win32.pm
        -del /f $(LIBDIR)\Win32CORE.pm
        -del /f $(LIBDIR)\Win32API\File.pm
@@ -1687,8 +1776,8 @@ distclean: realclean
        -if exist $(LIBDIR)\Win32API rmdir /s /q $(LIBDIR)\Win32API
        -if exist $(LIBDIR)\XS rmdir /s /q $(LIBDIR)\XS
        -cd $(PODDIR) && del /f *.html *.bat roffitall \
-           perl5277delta.pod perlaix.pod perlamiga.pod perlandroid.pod \
-           perlapi.pod perlbs2000.pod perlce.pod perlcn.pod perlcygwin.pod \
+           perl5315delta.pod perlaix.pod perlamiga.pod perlandroid.pod \
+           perlapi.pod perlbs2000.pod perlcn.pod perlcygwin.pod \
            perldos.pod perlfreebsd.pod perlhaiku.pod perlhpux.pod \
            perlhurd.pod perlintern.pod perlirix.pod perljp.pod perlko.pod \
            perllinux.pod perlmacos.pod perlmacosx.pod perlmodlib.pod \