#
# Makefile to build perl on Windows using GMAKE.
# Supported compilers:
-# Microsoft Visual C++ 6.0 or later
+# Microsoft Visual C++ 7.0 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
-# (perl529.dll). Also makes individual DLLs for the XS extensions.
+# (perl533.dll). Also makes individual DLLs for the XS extensions.
#
# The easiest way to customize the build process is to use parameters like this:
#
# versioned installation can be obtained by setting INST_TOP above to a
# path that includes an arbitrary version string.
#
-#INST_VER := \5.29.6
+#INST_VER := \5.33.5
#
# Comment this out if you DON'T want your perl installation to have
USE_PERLIO := define
#
-# Comment this out if you don't want to enable large file support for
-# some reason. Should normally only be changed to maintain compatibility
-# with an older release of perl.
-#
-USE_LARGE_FILES := define
-
-#
# Uncomment this if you're building a 32-bit perl and want 64-bit integers.
# (If you're building a 64-bit perl then you will have 64-bit integers whether
# or not this is uncommented.)
-# Note: This option is not supported in 32-bit MSVC60 builds.
#
#USE_64_BIT_INT := define
#
# uncomment exactly one of the following
#
-# Visual C++ 6.0 (aka Visual C++ 98)
-#CCTYPE := MSVC60
# Visual C++ .NET 2002/2003 (aka Visual C++ 7.0/7.1) (full version)
#CCTYPE := MSVC70
# Visual C++ Toolkit 2003 (aka Visual C++ 7.1) (free command-line tools)
#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
# 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 perl529s.lib will also be created.
+# variables below. A static library perl533s.lib will also be created.
# Ordinary perl.exe is not affected by this option.
#
#BUILD_STATIC := define
#
# set this to your email address (perl will guess a value from
-# from your loginname and your hostname, which may not be right)
+# your loginname and your hostname, which may not be right)
#
#EMAIL :=
ifeq ($(CCHOME),)
ifeq ($(CCTYPE),GCC)
CCHOME := C:\MinGW
-else ifeq ($(CCTYPE),MSVC60)
-CCHOME := $(MSVCDir)
else ifeq ($(CCTYPE),MSVC70)
CCHOME := $(MSVCDir)
else ifeq ($(CCTYPE),MSVC70FREE)
CCHOME := $(MSVCDir)
else ifeq ($(CCTYPE),MSVC141)
CCHOME := $(VCToolsInstallDir)
+else ifeq ($(CCTYPE),MSVC142)
+CCHOME := $(VCToolsInstallDir)
else
CCHOME := $(VCINSTALLDIR)
endif
USE_64_BIT_INT = define
endif
-# Treat 64-bit MSVC60 (doesn't really exist) as SDK2003SP1 because
-# both link against MSVCRT.dll (which is part of Windows itself) and
-# not against a compiler specific versioned runtime.
-ifeq ("$(WIN64) $(CCTYPE)","define MSVC60")
-CCTYPE = SDK2003SP1
-endif
-
-# Disable the 64-bit-int option for (32-bit) MSVC60 builds since that compiler
-# does not support it.
-ifeq ($(CCTYPE),MSVC60)
-USE_64_BIT_INT = undef
-endif
-
# Disable the long double option for MSVC builds since that compiler
# does not support it.
ifneq ($(CCTYPE),GCC)
else
CCLIBDIR := $(CCHOME)\lib\x86
endif
+else ifeq ($(CCTYPE),MSVC142)
+ifeq ($(WIN64),define)
+CCLIBDIR := $(CCHOME)\lib\x64
+else
+CCLIBDIR := $(CCHOME)\lib\x86
+endif
else
ifeq ($(WIN64),define)
CCLIBDIR := $(CCHOME)\lib\amd64
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
+# See https://github.com/Perl/perl5/issues/13690
#
GCCWRAPV := $(shell if "$(GCCVER1)"=="4" (if "$(GCCVER2)" geq "3" echo define) else if "$(GCCVER1)" geq "5" (echo define))
INCLUDES = -I.\include -I. -I..
DEFINES = -DWIN32
ifeq ($(WIN64),define)
-DEFINES += -DWIN64 -DCONSERVATIVE
+DEFINES += -DWIN64
endif
LOCDEFS = -DPERLDLL -DPERL_CORE
CXX_FLAG = -xc++
-luuid -lws2_32 -lmpr -lwinmm -lversion -lodbc32 -lodbccp32 -lcomctl32
ifeq ($(CFG),Debug)
-OPTIMIZE = -g -O2 -DDEBUGGING
+OPTIMIZE = -g -O2
LINK_DBG = -g
+DEFINES += -DDEBUGGING
else
OPTIMIZE = -s -O2
LINK_DBG = -s
if exist $@.manifest del $@.manifest
EMBED_DLL_MANI = if exist $@.manifest mt -nologo -manifest $@.manifest -outputresource:$@;2 && \
if exist $@.manifest del $@.manifest
+# This one is for perl.exe which already has an embedded manifest, so we want to
+# append to it, not replace it.
+APPEND_EXE_MANI = if exist $@.manifest mt -nologo -manifest $@.manifest -updateresource:$@;1 && \
+ if exist $@.manifest del $@.manifest
# Most relevant compiler-specific options fall into two groups:
# either pre-MSVC80 or MSVC80 onwards, so define a macro for this.
-ifeq ($(CCTYPE),MSVC60)
-PREMSVC80 = define
-else ifeq ($(CCTYPE),MSVC70)
+ifeq ($(CCTYPE),MSVC70)
PREMSVC80 = define
else ifeq ($(CCTYPE),MSVC70FREE)
PREMSVC80 = define
DEFINES = -DWIN32 -D_CONSOLE -DNO_STRICT
LOCDEFS = -DPERLDLL -DPERL_CORE
CXX_FLAG = -TP -EHsc
+EXTRACFLAGS = -nologo -GF -W3
ifeq ($(CCTYPE),MSVC140)
LIBC = ucrt.lib
else ifeq ($(CCTYPE),MSVC141)
LIBC = ucrt.lib
+else ifeq ($(CCTYPE),MSVC142)
+LIBC = ucrt.lib
else
LIBC = msvcrt.lib
endif
ifeq ($(CFG),Debug)
-OPTIMIZE = -Od -MD -Zi -DDEBUGGING
+OPTIMIZE = -Od -Zi
LINK_DBG = -debug
+DEFINES += -DDEBUGGING
+EXTRACFLAGS += -MD
else ifeq ($(CFG),DebugSymbols)
-OPTIMIZE = -Od -MD -Zi
+OPTIMIZE = -Od -Zi
LINK_DBG = -debug
+EXTRACFLAGS += -MD
else ifeq ($(CFG),DebugFull)
ifeq ($(CCTYPE),MSVC140)
LIBC = ucrtd.lib
else ifeq ($(CCTYPE),MSVC141)
LIBC = ucrtd.lib
+else ifeq ($(CCTYPE),MSVC142)
+LIBC = ucrtd.lib
else
LIBC = msvcrtd.lib
endif
-OPTIMIZE = -Od -MDd -Zi -D_DEBUG -DDEBUGGING
+OPTIMIZE = -Od -Zi
LINK_DBG = -debug
+DEFINES += -D_DEBUG -DDEBUGGING
+EXTRACFLAGS += -MDd
+
else
+# Enable Whole Program Optimizations (WPO) and Link Time Code Generation (LTCG).
# -O1 yields smaller code, which turns out to be faster than -O2 on x86 and x64
-OPTIMIZE = -O1 -MD -Zi -DNDEBUG
+OPTIMIZE = -O1 -Zi -GL
# we enable debug symbols in release builds also
-LINK_DBG = -debug -opt:ref,icf
+LINK_DBG = -debug -opt:ref,icf -ltcg
# you may want to enable this if you want COFF symbols in the executables
# in addition to the PDB symbols. The default Dr. Watson that ships with
-# Windows can use the the former but not latter. The free WinDbg can be
+# Windows can use the former but not latter. The free WinDbg can be
# installed to get better stack traces from just the PDB symbols, so we
# avoid the bloat of COFF symbols by default.
-#LINK_DBG = $(LINK_DBG) -debugtype:both
-ifneq ($(CCTYPE),MSVC60)
-# enable Whole Program Optimizations (WPO) and Link Time Code Generation (LTCG)
-OPTIMIZE += -GL
-LINK_DBG += -ltcg
+#LINK_DBG += -debugtype:both
LIB_FLAGS = -ltcg
-endif
+EXTRACFLAGS += -MD
endif
ifeq ($(WIN64),define)
-DEFINES += -DWIN64 -DCONSERVATIVE
+DEFINES += -DWIN64
OPTIMIZE += -fp:precise
endif
DEFINES += -D_WINSOCK_DEPRECATED_NO_WARNINGS
else ifeq ($(CCTYPE),MSVC141)
DEFINES += -D_WINSOCK_DEPRECATED_NO_WARNINGS
+else ifeq ($(CCTYPE),MSVC142)
+DEFINES += -D_WINSOCK_DEPRECATED_NO_WARNINGS
endif
# The Windows Server 2003 SP1 SDK compiler only defines _configthreadlocale() if
# backward compatibility. We define this symbol here for older 32-bit
# compilers only (which aren't using it at all) for the sole purpose
# of getting it into $Config{ccflags}. That way if someone builds
-# Perl itself with e.g. VC6 but later installs an XS module using VC8
+# Perl itself with e.g. VC7 but later installs an XS module using VC8
# the time_t types will still be compatible.
ifeq ($(WIN64),undef)
ifeq ($(PREMSVC80),define)
else
LIBBASEFILES += msvcrt.lib vcruntime.lib
endif
+else ifeq ($(CCTYPE),MSVC142)
+ifeq ($(CFG),DebugFull)
+LIBBASEFILES += msvcrtd.lib vcruntimed.lib
+else
+LIBBASEFILES += msvcrt.lib vcruntime.lib
+endif
endif
# Avoid __intel_new_proc_init link error for libircmt.
LIBFILES = $(LIBBASEFILES) $(LIBC)
-EXTRACFLAGS = -nologo -GF -W3
ifeq ($(__ICC),define)
EXTRACFLAGS += -Qstd=c99
endif
CFLAGS_O = $(CFLAGS) $(BUILDOPT)
-ifeq ($(PREMSVC80),undef)
-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
+RSC_FLAGS =
# VS 2017 (VC++ 14.1) requires at minimum Windows 7 SP1 (with latest Windows Updates)
LINK_FLAGS += -subsystem:console,"5.01"
endif
+else ifeq ($(CCTYPE),MSVC141)
+ifeq ($(WIN64),define)
+LINK_FLAGS += -subsystem:console,"5.02"
+else
+LINK_FLAGS += -subsystem:console,"5.01"
+endif
+
+else ifeq ($(CCTYPE),MSVC142)
+ifeq ($(WIN64),define)
+LINK_FLAGS += -subsystem:console,"5.02"
+else
+LINK_FLAGS += -subsystem:console,"5.01"
+endif
+
else ifneq ($(CCTYPE),GCC)
PRIV_LINK_FLAGS += -subsystem:console
endif
UNIDATAFILES = ..\lib\unicore\Decomposition.pl ..\lib\unicore\TestProp.pl \
..\lib\unicore\CombiningClass.pl ..\lib\unicore\Name.pl \
..\lib\unicore\UCD.pl ..\lib\unicore\Name.pm \
- ..\lib\unicore\Heavy.pl ..\lib\unicore\mktables.lst
+ ..\lib\unicore\mktables.lst
# Directories of Unicode data files generated by mktables
UNIDATADIR1 = ..\lib\unicore\To
CFGSH_TMPL = config.gc
CFGH_TMPL = config_H.gc
-PERLIMPLIB = $(COREDIR)\libperl529$(a)
-PERLIMPLIBBASE = libperl529$(a)
-PERLSTATICLIB = ..\libperl529s$(a)
+PERLIMPLIB = $(COREDIR)\libperl533$(a)
+PERLIMPLIBBASE = libperl533$(a)
+PERLSTATICLIB = ..\libperl533s$(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 ?= $(COREDIR)\perl529$(a)
-PERLIMPLIBBASE ?= perl529$(a)
-PERLEXPLIB ?= $(COREDIR)\perl529.exp
-PERLSTATICLIB ?= ..\perl529s$(a)
-PERLDLL = ..\perl529.dll
-PERLDLLBASE = perl529.dll
+PERLIMPLIB ?= $(COREDIR)\perl533$(a)
+PERLIMPLIBBASE ?= perl533$(a)
+PERLEXPLIB ?= $(COREDIR)\perl533.exp
+PERLSTATICLIB ?= ..\perl533s$(a)
+PERLDLL = ..\perl533.dll
+PERLDLLBASE = perl533.dll
# don't let "gmake -n all" try to run "miniperl.exe make_ext.pl"
PLMAKE = gmake
..\mg.c \
..\numeric.c \
..\pad.c \
- ..\perlapi.c \
..\perly.c \
..\pp_sort.c \
..\reentr.c \
"archname=$(ARCHNAME)" \
"cc=$(CC)" \
"ld=$(LINK32)" \
- "ccflags=$(subst ",\",$(EXTRACFLAGS) $(OPTIMIZE) $(DEFINES) $(BUILDOPT))" \
+ "ccflags=$(subst ",\",$(EXTRACFLAGS) $(DEFINES) $(BUILDOPT))" \
"usecplusplus=$(USE_CPLUSPLUS)" \
"cf_email=$(EMAIL)" \
"d_mymalloc=$(PERL_MALLOC)" \
"useperlio=$(USE_PERLIO)" \
"use64bitint=$(USE_64_BIT_INT)" \
"uselongdouble=$(USE_LONG_DOUBLE)" \
- "uselargefiles=$(USE_LARGE_FILES)" \
"usesitecustomize=$(USE_SITECUST)" \
"default_inc_excludes_dot=$(DEFAULT_INC_EXCLUDES_DOT)" \
"LINK_FLAGS=$(subst ",\",$(LINK_FLAGS))"\
$(GLOBEXE) : perlglob.c
ifeq ($(CCTYPE),GCC)
- $(LINK32) $(OPTIMIZE) $(BLINK_FLAGS) -mconsole -o $@ perlglob.c $(LIBFILES)
+ $(LINK32) $(EXTRACFLAGS) $(OPTIMIZE) $(BLINK_FLAGS) -mconsole -o $@ perlglob.c $(LIBFILES)
else
- $(CC) $(OPTIMIZE) $(PDBOUT) -Fe$@ perlglob.c -link $(BLINK_FLAGS) \
+ $(CC) $(EXTRACFLAGS) $(OPTIMIZE) $(PDBOUT) -Fe$@ perlglob.c -link $(BLINK_FLAGS) \
setargv$(o) $(LIBFILES) && $(EMBED_EXE_MANI)
endif
@(echo.&& \
echo #ifndef _config_h_footer_&& \
echo #define _config_h_footer_&& \
- echo #undef Off_t&& \
- echo #undef LSEEKSIZE&& \
- echo #undef Off_t_size&& \
echo #undef PTRSIZE&& \
echo #undef SSize_t&& \
echo #undef HAS_ATOLL&& \
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
-ifeq ($(USE_LARGE_FILES),define)
- @(echo #define Off_t $(INT64)&& \
- echo #define LSEEKSIZE ^8&& \
- echo #define Off_t_size ^8)>> config.h
-else
- @(echo #define Off_t long&& \
- echo #define LSEEKSIZE ^4&& \
- echo #define Off_t_size ^4)>> config.h
+else ifeq ($(CCTYPE),MSVC142)
+ @(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
ifeq ($(WIN64),define)
ifeq ($(CCTYPE),GCC)
$(CC) -c $(CFLAGS) $(MINIBUILDOPT) -DPERL_IS_MINIPERL $(OBJOUT_FLAG)$@ $(PDBOUT) $(*F).c
# -DPERL_IMPLICIT_SYS needs C++ for perllib.c
-# rules wrapped in .IFs break Win9X build (we end up with unbalanced []s unless
+# rules wrapped in .IFs break Win9X build (we end up with unbalanced []s
# unless the .IF is true), so instead we use a .ELSE with the default.
# This is the only file that depends on perlhost.h, vmem.h, and vdir.h
else
$(LINK32) -dll -out:$@ $(BLINK_FLAGS) \
@Extensions_static \
- -base:0x28000000 $(DELAYLOAD) $(LIBFILES) \
+ $(DELAYLOAD) $(LIBFILES) \
$(PERLDLL_RES) $(PERLDLL_OBJ) $(PERLEXPLIB)
$(EMBED_DLL_MANI)
endif
else
$(LINK32) -out:$@ $(BLINK_FLAGS) \
$(PERLEXE_OBJ) $(PERLEXE_RES) $(PERLIMPLIB) $(LIBFILES) $(SETARGV_OBJ)
- $(EMBED_EXE_MANI)
+ $(APPEND_EXE_MANI)
endif
copy $(PERLEXE) $(WPERLEXE)
$(MINIPERL) -I..\lib bin\exetype.pl $(WPERLEXE) WINDOWS
else
$(LINK32) -out:$@ $(BLINK_FLAGS) \
$(PERLEXEST_OBJ) $(PERLEXE_RES) $(PERLSTATICLIB) $(LIBFILES) $(SETARGV_OBJ)
- $(EMBED_EXE_MANI)
+ $(APPEND_EXE_MANI)
endif
#-------------------------------------------------------------------------------
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
copy ..\README.qnx ..\pod\perlqnx.pod
copy ..\README.riscos ..\pod\perlriscos.pod
copy ..\README.solaris ..\pod\perlsolaris.pod
- copy ..\README.symbian ..\pod\perlsymbian.pod
copy ..\README.synology ..\pod\perlsynology.pod
copy ..\README.tru64 ..\pod\perltru64.pod
copy ..\README.tw ..\pod\perltw.pod
copy ..\README.vos ..\pod\perlvos.pod
copy ..\README.win32 ..\pod\perlwin32.pod
- copy ..\pod\perldelta.pod ..\pod\perl5296delta.pod
+ copy ..\pod\perldelta.pod ..\pod\perl5335delta.pod
$(MINIPERL) -I..\lib $(PL2BAT) $(UTILS)
$(MINIPERL) -I..\lib ..\autodoc.pl ..
$(MINIPERL) -I..\lib ..\pod\perlmodlib.PL -q ..
-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 \
- perl5296delta.pod perlaix.pod perlamiga.pod perlandroid.pod \
- perlapi.pod perlbs2000.pod perlce.pod perlcn.pod perlcygwin.pod \
+ perl5335delta.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 \
perlnetware.pod perlopenbsd.pod perlos2.pod perlos390.pod \
perlos400.pod perlplan9.pod perlqnx.pod perlriscos.pod \
- perlsolaris.pod perlsymbian.pod perlsynology.pod perltoc.pod \
- perltru64.pod perltw.pod perluniprops.pod perlvos.pod \
- perlwin32.pod
+ perlsolaris.pod perlsynology.pod perltoc.pod perltru64.pod \
+ perltw.pod perluniprops.pod perlvos.pod perlwin32.pod
-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