This is a live mirror of the Perl 5 development currently hosted at https://github.com/perl/perl5
Storable: various core fixups: $PERL,libpth,getcwd
[perl5.git] / win32 / makefile.mk
index 5be3e08..ea22cac 100644 (file)
@@ -6,7 +6,7 @@
 #      Windows SDK 64-bit compiler and tools
 #
 # This is set up to build a perl.exe that runs off a shared library
-# (perl525.dll).  Also makes individual DLLs for the XS extensions.
+# (perl527.dll).  Also makes individual DLLs for the XS extensions.
 #
 
 ##
@@ -44,7 +44,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.25.1
+#INST_VER      *= \5.27.9
 
 #
 # Comment this out if you DON'T want your perl installation to have
@@ -105,14 +105,28 @@ USE_LARGE_FILES   *= define
 # Uncomment this if you want to support the use of long doubles in GCC builds.
 # This option is not supported for MSVC builds.
 #
-#USE_LONG_DOUBLE *=define
+#USE_LONG_DOUBLE *= define
+
+#
+# Uncomment this if you want to build perl with __USE_MINGW_ANSI_STDIO defined.
+# (If you're building perl with USE_LONG_DOUBLE defined then
+# __USE_MINGW_ANSI_STDIO will be defined whether or not this is uncommented.)
+# This option is not supported for MSVC builds.
+#
+#USE_MINGW_ANSI_STDIO *= define
+
+#
+# Comment this out if you want the legacy default behavior of including '.' at
+# the end of @INC.
+#
+DEFAULT_INC_EXCLUDES_DOT *= define
 
 #
 # Uncomment this if you want to disable looking up values from
 # HKEY_CURRENT_USER\Software\Perl and HKEY_LOCAL_MACHINE\Software\Perl in
 # the Registry.
 #
-#USE_NO_REGISTRY *=define
+#USE_NO_REGISTRY *= define
 
 #
 # uncomment exactly one of the following
@@ -125,28 +139,22 @@ USE_LARGE_FILES   *= define
 #CCTYPE                *= MSVC70FREE
 # Windows Server 2003 SP1 Platform SDK (April 2005)
 #CCTYPE                = SDK2003SP1
-# Visual C++ 2005 (aka Visual C++ 8.0) (full version)
+# Visual C++ 2005 (aka Visual C++ 8.0) (full version or Express Edition)
 #CCTYPE                *= MSVC80
-# Visual C++ 2005 Express Edition (aka Visual C++ 8.0) (free version)
-#CCTYPE                *= MSVC80FREE
-# Visual C++ 2008 (aka Visual C++ 9.0) (full version)
+# Visual C++ 2008 (aka Visual C++ 9.0) (full version or Express Edition)
 #CCTYPE                *= MSVC90
-# Visual C++ 2008 Express Edition (aka Visual C++ 9.0) (free version)
-#CCTYPE                *= MSVC90FREE
-# Visual C++ 2010 (aka Visual C++ 10.0) (full version)
+# Visual C++ 2010 (aka Visual C++ 10.0) (full version or Express Edition)
 #CCTYPE                = MSVC100
-# Visual C++ 2010 Express Edition (aka Visual C++ 10.0) (free version)
-#CCTYPE                = MSVC100FREE
-# Visual C++ 2012 (aka Visual C++ 11.0) (full version)
+# Visual C++ 2012 (aka Visual C++ 11.0) (full version or Express Edition)
 #CCTYPE                = MSVC110
-# Visual C++ 2012 Express Edition (aka Visual C++ 11.0) (free version)
-#CCTYPE                = MSVC110FREE
-# Visual C++ 2013 (aka Visual C++ 12.0) (full version)
+# Visual C++ 2013 (aka Visual C++ 12.0) (full version or Express Edition)
 #CCTYPE                = MSVC120
-# Visual C++ 2013 Express Edition (aka Visual C++ 12.0) (free version)
-#CCTYPE                = MSVC120FREE
+# Visual C++ 2015 (aka Visual C++ 14.0) (full version or Express Edition)
+#CCTYPE                = MSVC140
+# Visual C++ 2017 (aka Visual C++ 14.1) (full version or Community Edition)
+#CCTYPE                = MSVC141
 # MinGW or mingw-w64 with gcc-3.4.5 or later
-CCTYPE         *= GCC
+#CCTYPE                = GCC
 
 #
 # If you are using GCC, 4.3 or later by default we add the -fwrapv option.
@@ -212,7 +220,7 @@ CCTYPE              *= GCC
 # 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 perl525s.lib will also be created.
+# variables below. A static library perl527s.lib will also be created.
 # Ordinary perl.exe is not affected by this option.
 #
 #BUILD_STATIC  *= define
@@ -227,17 +235,12 @@ CCTYPE            *= GCC
 #ALL_STATIC    *= define
 
 #
-# set the install locations of the compiler include/libraries
-# Running VCVARS32.BAT is *required* when using Visual C.
-# Some versions of Visual C don't define MSVCDIR in the environment,
-# so you may have to set CCHOME explicitly (spaces in the path name should
-# not be quoted)
+# set the install location of the compiler
+# Running VCVARS32.BAT, VCVARSALL.BAT or similar is *required* when using
+# Visual C++.
 #
-.IF "$(CCTYPE)" == "GCC"
-CCHOME         *= C:\MinGW
-.ELSE
-CCHOME         *= $(MSVCDIR)
-.ENDIF
+
+#CCHOME                *= C:\MinGW
 
 #
 # uncomment this if you are using x86_64-w64-mingw32 cross-compiler
@@ -247,20 +250,6 @@ CCHOME             *= $(MSVCDIR)
 #GCCCROSS      *= define
 
 #
-# Following sets $Config{incpath} and $Config{libpth}
-#
-
-.IF "$(GCCCROSS)" == "define"
-CCINCDIR *= $(CCHOME)\x86_64-w64-mingw32\include
-CCLIBDIR *= $(CCHOME)\x86_64-w64-mingw32\lib
-CCDLLDIR *= $(CCLIBDIR)
-.ELSE
-CCINCDIR *= $(CCHOME)\include
-CCLIBDIR *= $(CCHOME)\lib
-CCDLLDIR *= $(CCHOME)\bin
-.ENDIF
-
-#
 # Additional compiler flags can be specified here.
 #
 BUILDOPT       *= $(BUILDOPTEXTRA)
@@ -317,8 +306,10 @@ USE_IMP_SYS        *= undef
 USE_LARGE_FILES        *= undef
 USE_64_BIT_INT *= undef
 USE_LONG_DOUBLE        *= undef
+DEFAULT_INC_EXCLUDES_DOT *= undef
 USE_NO_REGISTRY        *= undef
 
+
 .IF "$(USE_IMP_SYS)" == "define"
 PERL_MALLOC    = undef
 .ENDIF
@@ -355,6 +346,36 @@ BUILDOPT   += -DPERL_IMPLICIT_SYS
 BUILDOPT       += -DWIN32_NO_REGISTRY
 .ENDIF
 
+#no explicit CCTYPE given, do auto detection
+.IF "$(CCTYPE)" == ""
+GCCTARGET      *= $(shell gcc -dumpmachine 2>NUL & exit /b 0)
+#do we have a GCC?
+.IF "$(GCCTARGET)" != ""
+CCTYPE         = GCC
+.ELSE
+#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
+.ENDIF
+.ENDIF
+
+# Versions of Visual C++ up to VC++ 7.1 define $(MSVCDir); versions since then
+# define $(VCINSTALLDIR) instead, but for VC++ 14.1 we need the subfolder given
+# by $(VCToolsInstallDir).
+.IF "$(CCHOME)" == ""
+.IF "$(CCTYPE)" == "GCC"
+CCHOME         *= C:\MinGW
+.ELIF "$(CCTYPE)" == "MSVC60" || \
+    "$(CCTYPE)" == "MSVC70" || "$(CCTYPE)" == "MSVC70FREE"
+CCHOME         *= $(MSVCDir)
+.ELIF "$(CCTYPE)" == "MSVC141"
+CCHOME         *= $(VCToolsInstallDir)
+.ELSE
+CCHOME         *= $(VCINSTALLDIR)
+.ENDIF
+.ENDIF
+
 PROCESSOR_ARCHITECTURE *= x86
 
 .IF "$(WIN64)" == "undef"
@@ -426,6 +447,40 @@ ARCHNAME   !:= $(ARCHNAME)-64int
 ARCHNAME       !:= $(ARCHNAME)-ld
 .ENDIF
 
+# Set the install location of the compiler headers/libraries.
+# These are saved into $Config{incpath} and $Config{libpth}.
+.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 "$(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"
+.IF "$(GCCCROSS)" == "define"
+CCDLLDIR *= $(CCLIBDIR)
+.ELSE
+CCDLLDIR *= $(CCHOME)\bin
+.ENDIF
+.ENDIF
+
 ARCHDIR                = ..\lib\$(ARCHNAME)
 COREDIR                = ..\lib\CORE
 AUTODIR                = ..\lib\auto
@@ -436,7 +491,6 @@ CPANDIR             = ..\cpan
 PODDIR         = ..\pod
 HTMLDIR                = .\html
 
-#
 INST_SCRIPT    = $(INST_TOP)$(INST_VER)\bin
 INST_BIN       = $(INST_SCRIPT)$(INST_ARCH)
 INST_LIB       = $(INST_TOP)$(INST_VER)\lib
@@ -464,7 +518,7 @@ LIB32               = $(ARCHPREFIX)ar rc
 IMPLIB         = $(ARCHPREFIX)dlltool
 RSC            = $(ARCHPREFIX)windres
 
-.IF "$(USE_LONG_DOUBLE)" == "define"
+.IF "$(USE_LONG_DOUBLE)" == "define" || "$(USE_MINGW_ANSI_STDIO)" == "define"
 BUILDOPT        += -D__USE_MINGW_ANSI_STDIO
 MINIBUILDOPT    += -D__USE_MINGW_ANSI_STDIO
 .ENDIF
@@ -585,7 +639,11 @@ DEFINES            = -DWIN32 -D_CONSOLE -DNO_STRICT
 LOCDEFS                = -DPERLDLL -DPERL_CORE
 CXX_FLAG       = -TP -EHsc
 
+.IF "$(CCTYPE)" == "MSVC140" || "$(CCTYPE)" == "MSVC141"
+LIBC           = ucrt.lib
+.ELSE
 LIBC           = msvcrt.lib
+.ENDIF
 
 .IF  "$(CFG)" == "Debug"
 OPTIMIZE       = -Od -MD -Zi -DDEBUGGING
@@ -594,7 +652,11 @@ LINK_DBG   = -debug
 OPTIMIZE       = -Od -MD -Zi
 LINK_DBG       = -debug
 .ELIF  "$(CFG)" == "DebugFull"
+.IF "$(CCTYPE)" == "MSVC140" || "$(CCTYPE)" == "MSVC141"
+LIBC           = ucrtd.lib
+.ELSE
 LIBC           = msvcrtd.lib
+.ENDIF
 OPTIMIZE       = -Od -MDd -Zi -D_DEBUG -DDEBUGGING
 LINK_DBG       = -debug
 .ELSE
@@ -627,6 +689,11 @@ OPTIMIZE   += -fp:precise
 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"
+DEFINES                += -D_WINSOCK_DEPRECATED_NO_WARNINGS
+.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
@@ -646,6 +713,14 @@ 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 "$(CFG)" == "DebugFull"
+LIBBASEFILES   += msvcrtd.lib vcruntimed.lib
+.ELSE
+LIBBASEFILES   += msvcrt.lib vcruntime.lib
+.ENDIF
+.ENDIF
+
 # Avoid __intel_new_proc_init link error for libircmt.
 # libmmd is /MD equivelent, other variants exist.
 # libmmd is Intel C's math addon funcs to MS CRT, contains long doubles, C99,
@@ -693,13 +768,13 @@ PRIV_LINK_FLAGS   += "/manifestdependency:type='Win32' name='Microsoft.Windows.Com
 RSC_FLAGS      = -DINCLUDE_MANIFEST
 .ENDIF
 
+# VS 2017 (VC++ 14.1) requires at minimum Windows 7 SP1 (with latest Windows Updates)
 
 # For XP support in >= VS 2013 (VC++ 12.0), subsystem is always in Config.pm
 # 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)" == "MSVC120FREE" \
-    || "$(CCTYPE)" == "MSVC140" || "$(CCTYPE)" == "MSVC140FREE"
+.IF "$(CCTYPE)" == "MSVC120" || "$(CCTYPE)" == "MSVC140"
 .IF "$(WIN64)" == "define"
 LINK_FLAGS     += -subsystem:console,"5.02"
 .ELSE
@@ -815,8 +890,6 @@ UTILS               =                       \
                ..\utils\splain         \
                ..\utils\perlbug        \
                ..\utils\pl2pm          \
-               ..\utils\c2ph           \
-               ..\utils\pstruct        \
                ..\utils\h2xs           \
                ..\utils\perldoc        \
                ..\utils\perlivp        \
@@ -846,8 +919,8 @@ UTILS               =                       \
 
 CFGSH_TMPL     = config.gc
 CFGH_TMPL      = config_H.gc
-PERLIMPLIB     = $(COREDIR)\libperl525$(a)
-PERLSTATICLIB  = ..\libperl525s$(a)
+PERLIMPLIB     = $(COREDIR)\libperl527$(a)
+PERLSTATICLIB  = ..\libperl527s$(a)
 INT64          = long long
 
 .ELSE
@@ -860,10 +933,10 @@ 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)\perl525$(a)
-PERLEXPLIB     *= $(COREDIR)\perl525.exp
-PERLSTATICLIB  *= ..\perl525s$(a)
-PERLDLL                = ..\perl525.dll
+PERLIMPLIB     *= $(COREDIR)\perl527$(a)
+PERLEXPLIB     *= $(COREDIR)\perl527.exp
+PERLSTATICLIB  *= ..\perl527s$(a)
+PERLDLL                = ..\perl527.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
@@ -985,9 +1058,8 @@ UUDMAP_H   = ..\uudmap.h
 BITCOUNT_H     = ..\bitcount.h
 MG_DATA_H      = ..\mg_data.h
 GENERATED_HEADERS = $(UUDMAP_H) $(BITCOUNT_H) $(MG_DATA_H)
-#a stub ppport.h must be generated so building XS modules, .c->.obj wise, will
-#work, so this target also represents creating the COREDIR and filling it
-HAVE_COREDIR   = $(COREDIR)\ppport.h
+
+HAVE_COREDIR   = .\.coreheaders
 
 MICROCORE_OBJ  = $(MICROCORE_SRC:db:+$(o))
 CORE_OBJ       = $(MICROCORE_OBJ) $(EXTRACORE_SRC:db:+$(o))
@@ -1053,6 +1125,7 @@ CFG_VARS  =                                       \
                uselongdouble=$(USE_LONG_DOUBLE)        ~       \
                uselargefiles=$(USE_LARGE_FILES)        ~       \
                usesitecustomize=$(USE_SITECUST)        ~       \
+               default_inc_excludes_dot=$(DEFAULT_INC_EXCLUDES_DOT)    ~       \
                LINK_FLAGS=$(LINK_FLAGS)        ~       \
                optimize=$(OPTIMIZE)    ~       \
                ARCHPREFIX=$(ARCHPREFIX)        ~       \
@@ -1190,6 +1263,17 @@ $(MINIDIR)\.exists : $(CFGH_TMPL)
        echo #undef NVgf&& \
        echo #undef USE_LONG_DOUBLE&& \
        echo #undef USE_CPLUSPLUS)>> config.h
+.IF "$(CCTYPE)" == "MSVC140" || "$(CCTYPE)" == "MSVC141"
+       @(echo #undef FILE_ptr&& \
+       echo #undef FILE_cnt&& \
+       echo #undef FILE_base&& \
+       echo #undef FILE_bufsiz&& \
+       echo #define FILE_ptr^(fp^) PERLIO_FILE_ptr^(fp^)&& \
+       echo #define FILE_cnt^(fp^) PERLIO_FILE_cnt^(fp^)&& \
+       echo #define FILE_base^(fp^) PERLIO_FILE_base^(fp^)&& \
+       echo #define FILE_bufsiz^(fp^) ^(PERLIO_FILE_cnt^(fp^) + PERLIO_FILE_ptr^(fp^) - PERLIO_FILE_base^(fp^)^)&& \
+       echo #define I_STDBOOL)>> config.h
+.ENDIF
 .IF "$(USE_LARGE_FILES)"=="define"
        @(echo #define Off_t $(INT64)&& \
        echo #define LSEEKSIZE ^8&& \
@@ -1387,10 +1471,11 @@ $(GENUUDMAP) $(GENERATED_HEADERS) .UPDATEALL : ..\mg_raw.h
 .ENDIF
        $(GENUUDMAP) $(GENERATED_HEADERS)
 
-#This generates a stub ppport.h & creates & fills /lib/CORE to allow for XS
-#building .c->.obj wise (linking is a different thing). This target is AKA
-#$(HAVE_COREDIR).
-$(COREDIR)\ppport.h : $(CORE_H)
+MakePPPort : $(HAVEMINIPERL) $(CONFIGPM)
+       $(MINIPERL) -I..\lib ..\mkppport
+
+# also known as $(HAVE_COREDIR)
+.\.coreheaders : $(CORE_H)
        $(XCOPY) *.h $(COREDIR)\*.* && $(RCOPY) include $(COREDIR)\*.* && $(XCOPY) ..\*.h $(COREDIR)\*.*
        rem. > $@
 
@@ -1427,7 +1512,7 @@ $(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)
+Extensions : $(PERLDEP) $(DYNALOADER) $(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)
@@ -1436,7 +1521,7 @@ Extensions_normalize : $(PERLDEP) $(DYNALOADER) $(GLOBEXE) $(UNIDATAFILES)
 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)
+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
        $(MINIPERL) -I..\lib list_static_libs.pl > Extensions_static
 
@@ -1457,12 +1542,18 @@ Extensions_realclean :
 # be running in parallel like UNIDATAFILES, this target a placeholder for the
 # future
 .IF "$(BUILD_STATIC)"=="define"
-rebasePE : Extensions $(PERLDLL) Extensions_normalize $(PERLEXE) $(PERLEXESTATIC)
+rebasePE : Extensions $(PERLDLL) Extensions_normalize $(PERLEXE) PostExt $(PERLEXESTATIC)
 .ELSE
-rebasePE : Extensions $(PERLDLL) Extensions_normalize $(PERLEXE)
+rebasePE : Extensions $(PERLDLL) Extensions_normalize $(PERLEXE) PostExt
 .ENDIF
        $(NOOP)
 
+PostExt: rebuild_storable
+
+rebuild_storable: $(PERLEXE)
+       $(PERLEXE) -I..\lib -I. ..\dist\Storable\stacksize --core
+       cd ..\dist\Storable && $(MAKE) PERL_CORE=1
+
 #-------------------------------------------------------------------------------
 
 
@@ -1511,7 +1602,7 @@ 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\perl5251delta.pod
+       copy ..\pod\perldelta.pod ..\pod\perl5279delta.pod
        $(MINIPERL) -I..\lib $(PL2BAT) $(UTILS)
        $(MINIPERL) -I..\lib ..\autodoc.pl ..
        $(MINIPERL) -I..\lib ..\pod\perlmodlib.PL -q ..
@@ -1597,6 +1688,7 @@ distclean: realclean
        -if exist $(LIBDIR)\TAP rmdir /s /q $(LIBDIR)\TAP
        -if exist $(LIBDIR)\Term rmdir /s /q $(LIBDIR)\Term
        -if exist $(LIBDIR)\Test rmdir /s /q $(LIBDIR)\Test
+       -if exist $(LIBDIR)\Test2 rmdir /s /q $(LIBDIR)\Test2
        -if exist $(LIBDIR)\Text rmdir /s /q $(LIBDIR)\Text
        -if exist $(LIBDIR)\Thread rmdir /s /q $(LIBDIR)\Thread
        -if exist $(LIBDIR)\threads rmdir /s /q $(LIBDIR)\threads
@@ -1608,7 +1700,7 @@ 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 \
-           perl5251delta.pod perlaix.pod perlamiga.pod perlandroid.pod \
+           perl5279delta.pod perlaix.pod perlamiga.pod perlandroid.pod \
            perlapi.pod perlbs2000.pod perlce.pod perlcn.pod perlcygwin.pod \
            perldos.pod perlfreebsd.pod perlhaiku.pod perlhpux.pod \
            perlhurd.pod perlintern.pod perlirix.pod perljp.pod perlko.pod \
@@ -1618,7 +1710,7 @@ distclean: realclean
            perlsolaris.pod perlsymbian.pod perlsynology.pod perltoc.pod \
            perltru64.pod perltw.pod perluniprops.pod perlvos.pod \
            perlwin32.pod
-       -cd ..\utils && del /f h2ph splain perlbug pl2pm c2ph pstruct h2xs \
+       -cd ..\utils && del /f h2ph splain perlbug pl2pm h2xs \
            perldoc perlivp libnetcfg enc2xs encguess piconv cpan *.bat \
            xsubpp pod2html instmodsh json_pp prove ptar ptardiff ptargrep shasum corelist zipdetails
        -del /f ..\config.sh perlmain.c dlutils.c config.h.new \
@@ -1643,7 +1735,6 @@ install : all installbare installhtml
 
 installbare : utils ..\pod\perltoc.pod
        $(PERLEXE) ..\installperl
-       attrib -r $(INST_COREDIR)\ppport.h && del $(INST_COREDIR)\ppport.h
        if exist $(WPERLEXE) $(XCOPY) $(WPERLEXE) $(INST_BIN)\*.*
        if exist $(PERLEXESTATIC) $(XCOPY) $(PERLEXESTATIC) $(INST_BIN)\*.*
        $(XCOPY) $(GLOBEXE) $(INST_BIN)\*.*
@@ -1734,6 +1825,7 @@ _clean :
        -@erase $(PERLDLL)
        -@erase $(CORE_OBJ)
        -@erase $(GENUUDMAP) $(GENUUDMAP_OBJ) $(GENERATED_HEADERS)
+       -@erase .coreheaders
        -if exist $(MINIDIR) rmdir /s /q $(MINIDIR)
        -if exist $(UNIDATADIR1) rmdir /s /q $(UNIDATADIR1)
        -if exist $(UNIDATADIR2) rmdir /s /q $(UNIDATADIR2)