# Windows SDK 64-bit compiler and tools
#
# This is set up to build a perl.exe that runs off a shared library
-# (perl523.dll). Also makes individual DLLs for the XS extensions.
+# (perl527.dll). Also makes individual DLLs for the XS extensions.
#
##
# versioned installation can be obtained by setting INST_TOP above to a
# path that includes an arbitrary version string.
#
-#INST_VER *= \5.23.6
+#INST_VER *= \5.27.9
#
# Comment this out if you DON'T want your perl installation to have
# 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
#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.
# 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 perl523s.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
#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
#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)
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
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"
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
PODDIR = ..\pod
HTMLDIR = .\html
-#
INST_SCRIPT = $(INST_TOP)$(INST_VER)\bin
INST_BIN = $(INST_SCRIPT)$(INST_ARCH)
INST_LIB = $(INST_TOP)$(INST_VER)\lib
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
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
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
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
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,
CFLAGS_O = $(CFLAGS) $(BUILDOPT)
.IF "$(PREMSVC80)" == "undef"
-LINK_FLAGS += "/manifestdependency:type='Win32' name='Microsoft.Windows.Common-Controls' version='6.0.0.0' processorArchitecture='*' publicKeyToken='6595b64144ccf1df' language='*'"
+PRIV_LINK_FLAGS += "/manifestdependency:type='Win32' name='Microsoft.Windows.Common-Controls' version='6.0.0.0' processorArchitecture='*' publicKeyToken='6595b64144ccf1df' language='*'"
.ELSE
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
LINK_FLAGS += -subsystem:console,"5.01"
.ENDIF
-PRIV_LINK_FLAGS =
.ELIF "$(CCTYPE)" != "GCC"
-PRIV_LINK_FLAGS = -subsystem:console
+PRIV_LINK_FLAGS += -subsystem:console
.ENDIF
BLINK_FLAGS = $(PRIV_LINK_FLAGS) $(LINK_FLAGS)
..\utils\splain \
..\utils\perlbug \
..\utils\pl2pm \
- ..\utils\c2ph \
- ..\utils\pstruct \
..\utils\h2xs \
..\utils\perldoc \
..\utils\perlivp \
..\utils\libnetcfg \
..\utils\enc2xs \
- ..\utils\encguess \
+ ..\utils\encguess \
..\utils\piconv \
..\utils\corelist \
..\utils\cpan \
CFGSH_TMPL = config.gc
CFGH_TMPL = config_H.gc
-PERLIMPLIB = ..\libperl523$(a)
-PERLSTATICLIB = ..\libperl523s$(a)
+PERLIMPLIB = $(COREDIR)\libperl527$(a)
+PERLSTATICLIB = ..\libperl527s$(a)
INT64 = long long
.ELSE
# 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 *= ..\perl523$(a)
-PERLEXPLIB *= ..\perl523.exp
-PERLSTATICLIB *= ..\perl523s$(a)
-PERLDLL = ..\perl523.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
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))
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) ~ \
# Top targets
#
-all : CHECKDMAKE rebasePE Extensions_nonxs $(PERLSTATIC)
+all : CHECKDMAKE rebasePE Extensions_nonxs $(PERLSTATIC)
..\regcomp$(o) : ..\regnodes.h ..\regcharclass.h
.IF "$(CCTYPE)" == "GCC"
$(LINK32) $(OPTIMIZE) $(BLINK_FLAGS) -mconsole -o $@ perlglob.c $(LIBFILES)
.ELSE
- $(CC) $(OPTIMIZE) -Fe$@ perlglob.c -link $(BLINK_FLAGS) setargv$(o) \
- $(LIBFILES) && $(EMBED_EXE_MANI)
+ $(CC) $(OPTIMIZE) $(PDBOUT) -Fe$@ perlglob.c -link $(BLINK_FLAGS) \
+ setargv$(o) $(LIBFILES) && $(EMBED_EXE_MANI)
.ENDIF
-
..\git_version.h : $(HAVEMINIPERL) ..\make_patchnum.pl
- cd .. && miniperl -Ilib make_patchnum.pl
+ $(MINIPERL) -I..\lib ..\make_patchnum.pl
# make sure that we recompile perl.c if the git version changes
..\perl$(o) : ..\git_version.h
-$(MINIPERL) -I..\lib config_h.PL "ARCHPREFIX=$(ARCHPREFIX)"
rename config.h $(CFGH_TMPL)
-$(CONFIGPM): ..\config.sh config_h.PL
+$(CONFIGPM) .\config.h .UPDATEALL: ..\config.sh config_h.PL
$(MINIPERL) -I..\lib ..\configpm --chdir=..
- $(XCOPY) config.h $(COREDIR)\*.*
-$(MINIPERL) -I..\lib config_h.PL "ARCHPREFIX=$(ARCHPREFIX)"
-.\config.h : $(CONFIGPM)
-
# See the comment in Makefile.SH explaining this seemingly cranky ordering
..\lib\buildcustomize.pl : $(MINI_OBJ) ..\write_buildcustomize.pl
.IF "$(CCTYPE)" == "GCC"
#
# MINIDIR generates config.h so miniperl.exe is not rebuilt when the 2nd
# config.h is generated in CONFIGPM target, see also the comments for $(MINI_OBJ).
- -if exist config.h del /f config.h
copy $(CFGH_TMPL) config.h
@(echo.&& \
echo #ifndef _config_h_footer_&& \
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&& \
$(MINIPERL) -I..\lib -w ..\makedef.pl PLATFORM=win32 $(OPTIMIZE) $(DEFINES) \
$(BUILDOPT) CCTYPE=$(CCTYPE) TARG_DIR=..\ > perldll.def
-$(PERLIMPLIB) : perldll.def
+$(PERLEXPLIB) $(PERLIMPLIB) .UPDATEALL : perldll.def
.IF "$(CCTYPE)" == "GCC"
- $(IMPLIB) -k -d perldll.def -l $(PERLIMPLIB)
+ $(IMPLIB) -k -d perldll.def -l $(PERLIMPLIB) -e $(PERLEXPLIB)
.ELSE #VC family
lib -def:perldll.def -machine:$(ARCHITECTURE) /OUT:$(PERLIMPLIB)
.ENDIF
- $(XCOPY) $(PERLIMPLIB) $(COREDIR)
-
-#PERLEXPLIB is built in PERLIMPLIB
-$(PERLEXPLIB): $(PERLIMPLIB)
$(PERLDLL): $(PERLEXPLIB) $(PERLDLL_OBJ) $(PERLDLL_RES) Extensions_static
.IF "$(CCTYPE)" == "GCC"
- $(LINK32) -mdll -o $@ -Wl,--base-file -Wl,perl.base $(BLINK_FLAGS) \
- $(mktmp $(LKPRE) $(PERLDLL_OBJ) \
- $(shell @type Extensions_static) \
- $(LIBFILES) $(LKPOST))
- $(IMPLIB) --output-lib $(PERLIMPLIB) \
- --dllname $(PERLDLL:b).dll \
- --def perldll.def \
- --base-file perl.base \
- --output-exp perl.exp
$(LINK32) -mdll -o $@ $(BLINK_FLAGS) \
- $(mktmp $(LKPRE) $(PERLDLL_OBJ) \
- $(shell @type Extensions_static) \
- $(LIBFILES) perl.exp $(LKPOST))
+ $(PERLDLL_OBJ) $(shell @type Extensions_static) $(LIBFILES) $(PERLEXPLIB)
.ELSE
$(LINK32) -dll -out:$@ $(BLINK_FLAGS) \
@Extensions_static \
$(LINK32) $(CFLAGS_O) -o..\generate_uudmap.exe ..\generate_uudmap.c \
$(BLINK_FLAGS) -x $(mktmp $(LKPRE) $(LIBFILES) $(LKPOST))
.ELSE
- $(CC) $(CFLAGS_O) -Fe..\generate_uudmap.exe ..\generate_uudmap.c @$(mktmp -link $(LIBFILES)) -link $(BLINK_FLAGS)
+ $(CC) $(CFLAGS_O) $(PDBOUT) -Fe..\generate_uudmap.exe ..\generate_uudmap.c @$(mktmp -link $(LIBFILES)) -link $(BLINK_FLAGS)
$(EMBED_EXE_MANI:s/$@/..\generate_uudmap.exe/)
.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 taget 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. > $@
-perlmain.c : runperl.c
- copy runperl.c perlmain.c
-
-perlmain$(o) : $(CONFIGPM) perlmain.c
- $(CC) $(CFLAGS_O:s,-DPERLDLL,-UPERLDLL,) $(OBJOUT_FLAG)$@ $(PDBOUT) -c perlmain.c
-
-perlmainst.c : runperl.c
- copy runperl.c perlmainst.c
+perlmain$(o) : runperl.c $(CONFIGPM)
+ $(CC) $(CFLAGS_O:s,-DPERLDLL,-UPERLDLL,) $(OBJOUT_FLAG)$@ $(PDBOUT) -c runperl.c
-perlmainst$(o) : $(CONFIGPM) perlmainst.c
- $(CC) $(CFLAGS_O) $(OBJOUT_FLAG)$@ $(PDBOUT) -c perlmainst.c
+perlmainst$(o) : runperl.c $(CONFIGPM)
+ $(CC) $(CFLAGS_O) $(OBJOUT_FLAG)$@ $(PDBOUT) -c runperl.c
$(PERLEXE): $(CONFIGPM) $(PERLEXE_OBJ) $(PERLEXE_RES) $(PERLIMPLIB)
.IF "$(CCTYPE)" == "GCC"
# 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)
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
# be running in parallel like UNIDATAFILES, this target a placeholder for the
# future
.IF "$(BUILD_STATIC)"=="define"
-rebasePE : Extensions $(PERLDLL) Extensions_normalize $(PERLEXE) $(GLOBEXE) $(PERLEXESTATIC)
+rebasePE : Extensions $(PERLDLL) Extensions_normalize $(PERLEXE) PostExt $(PERLEXESTATIC)
.ELSE
-rebasePE : Extensions $(PERLDLL) Extensions_normalize $(PERLEXE) $(GLOBEXE)
+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
+
#-------------------------------------------------------------------------------
copy ..\README.tw ..\pod\perltw.pod
copy ..\README.vos ..\pod\perlvos.pod
copy ..\README.win32 ..\pod\perlwin32.pod
- copy ..\pod\perldelta.pod ..\pod\perl5236delta.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 ..
-..\pod\perltoc.pod: $(PERLEXE) $(PERLDLL) Extensions Extensions_nonxs ..\pod\perluniprops.pod utils
+..\pod\perltoc.pod: $(PERLEXE) $(PERLDLL) Extensions Extensions_nonxs Extensions_normalize utils
$(PERLEXE) -f ..\pod\buildtoc -q
# Note that the pod cleanup in this next section is parsed (and regenerated
-if exist $(LIBDIR)\Hash rmdir /s /q $(LIBDIR)\Hash
-if exist $(LIBDIR)\HTTP rmdir /s /q $(LIBDIR)\HTTP
-if exist $(LIBDIR)\I18N rmdir /s /q $(LIBDIR)\I18N
+ -if exist $(LIBDIR)\inc rmdir /s /q $(LIBDIR)\inc
-if exist $(LIBDIR)\IO rmdir /s /q $(LIBDIR)\IO
-if exist $(LIBDIR)\IPC rmdir /s /q $(LIBDIR)\IPC
-if exist $(LIBDIR)\JSON rmdir /s /q $(LIBDIR)\JSON
-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
-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 \
- perl5236delta.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 \
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 \
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)\*.*
inst_lib : $(CONFIGPM)
$(RCOPY) ..\lib $(INST_LIB)\*.*
-$(UNIDATAFILES) ..\pod\perluniprops.pod .UPDATEALL : $(CONFIGPM) ..\lib\unicore\mktables
- cd ..\lib\unicore && \
- ..\$(MINIPERL) -I.. mktables -P ..\..\pod -maketest -makelist -p
+$(UNIDATAFILES) ..\pod\perluniprops.pod .UPDATEALL : ..\lib\unicore\mktables $(CONFIGPM)
+ $(MINIPERL) -I..\lib ..\lib\unicore\mktables -C ..\lib\unicore -P ..\pod -maketest -makelist -p
minitest : .\config.h $(HAVEMINIPERL) ..\git_version.h $(GLOBEXE) $(CONFIGPM) $(UNIDATAFILES) $(TESTPREPGCC)
$(XCOPY) $(MINIPERL) ..\t\$(NULL)
-@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)
-@erase *.pdb ..\*.pdb
-@erase Extensions_static
-
-
clean : Extensions_clean _clean
realclean : Extensions_realclean _clean
# installed perlbug. We don't re-run the tests here - we trust the user.
# Please *don't* use this unless all tests pass.
# If you want to report test failures, use "dmake nok" instead.
-ok: utils
+ok: utils $(PERLEXE) $(PERLDLL) Extensions_nonxs Extensions
$(PERLEXE) ..\utils\perlbug -ok -s "(UNINSTALLED)"
-okfile: utils
+okfile: utils $(PERLEXE) $(PERLDLL) Extensions_nonxs Extensions
$(PERLEXE) ..\utils\perlbug -ok -s "(UNINSTALLED)" -F perl.ok
-nok: utils
+nok: utils $(PERLEXE) $(PERLDLL) Extensions_nonxs Extensions
$(PERLEXE) ..\utils\perlbug -nok -s "(UNINSTALLED)"
-nokfile: utils
+nokfile: utils $(PERLEXE) $(PERLDLL) Extensions_nonxs Extensions
$(PERLEXE) ..\utils\perlbug -nok -s "(UNINSTALLED)" -F perl.nok
+