#
-# Makefile to build perl on Windows using GNU make + gcc + MinGW.
+# Makefile to build perl on Windows using GMAKE.
+# Supported compilers:
+# Microsoft Visual C++ 6.0 or later
+# MinGW with gcc-3.4.5 or later
+# Windows SDK 64-bit compiler and tools
#
# This is set up to build a perl.exe that runs off a shared library
-# (perl521.dll). Also makes individual DLLs for the XS extensions.
+# (perl525.dll). Also makes individual DLLs for the XS extensions.
#
# The easiest way to customize the build process is to use parameters like this:
#
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)
-ifeq ($(GCCTARGET),x86_64-w64-mingw32)
-WIN64 := define
-ARCHITECTURE := x64
-endif
-ifeq ($(GCCTARGET),i686-w64-mingw32)
-WIN64 := undef
-ARCHITECTURE := x86
-endif
-
##
## Build configuration. Edit the values below to suit your needs.
##
INST_TOP := $(INST_DRV)\perl
#
+# Uncomment if you want to build a 32-bit Perl using a 32-bit compiler
+# on a 64-bit version of Windows.
+#
+#WIN64 := undef
+
+#
# Comment this out if you DON'T want your perl installation to be versioned.
# This means that the new installation will overwrite any files from the
# old installation at the same INST_TOP location. Leaving it enabled is
# versioned installation can be obtained by setting INST_TOP above to a
# path that includes an arbitrary version string.
#
-#INST_VER := \5.21.7
+#INST_VER := \5.25.4
#
# Comment this out if you DON'T want your perl installation to have
#USE_64_BIT_INT := define
#
-# Uncomment this if you want to support the use of long doubles.
+# 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
#
-# uncomment next line if you want debug version of perl (big,slow)
+# 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
+
+#
+# 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 := MSVC70FREE
+# Windows Server 2003 SP1 Platform SDK (April 2005)
+#CCTYPE := SDK2003SP1
+# Visual C++ 2005 (aka Visual C++ 8.0) (full version)
+#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)
+#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)
+#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)
+#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)
+#CCTYPE := MSVC120
+# Visual C++ 2013 Express Edition (aka Visual C++ 12.0) (free version)
+#CCTYPE := MSVC120FREE
+# MinGW or mingw-w64 with gcc-3.4.5 or later
+CCTYPE := GCC
+
+#
+# If you are using Intel C++ Compiler uncomment this
+#
+#__ICC := define
+
+#
+# uncomment next line if you want debug version of perl (big/slow)
# If not enabled, we automatically try to use maximum optimization
# with all compilers that are known to have a working optimizer.
#
# 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 perl521s.lib will also be created.
+# variables below. A static library perl525s.lib will also be created.
# Ordinary perl.exe is not affected by this option.
#
#BUILD_STATIC := define
# so you may have to set CCHOME explicitly (spaces in the path name should
# not be quoted)
#
+ifeq ($(CCTYPE),GCC)
CCHOME := C:\MinGW
+else
+CCHOME := $(MSVCDIR)
+endif
#
# Following sets $Config{incpath} and $Config{libpth}
USE_LARGE_FILES ?= undef
USE_64_BIT_INT ?= undef
USE_LONG_DOUBLE ?= undef
+USE_NO_REGISTRY ?= undef
ifeq ($(USE_IMP_SYS),define)
PERL_MALLOC = undef
BUILDOPT += -DPERL_IMPLICIT_SYS
endif
+ifeq ($(USE_NO_REGISTRY),define)
+BUILDOPT += -DWIN32_NO_REGISTRY
+endif
+
+ifeq ($(CCTYPE),GCC)
+ifeq ($(GCCTARGET),x86_64-w64-mingw32)
+WIN64 := define
+PROCESSOR_ARCHITECTURE := x64
+endif
+ifeq ($(GCCTARGET),i686-w64-mingw32)
+WIN64 := undef
+PROCESSOR_ARCHITECTURE := x86
+endif
+endif
+
+PROCESSOR_ARCHITECTURE ?= x86
+
+ifeq ($(WIN64),undef)
+PROCESSOR_ARCHITECTURE = x86
+endif
+
+ifeq ($(WIN64),)
+# When we are running from a 32bit cmd.exe on AMD64 then
+# PROCESSOR_ARCHITECTURE is set to x86 and PROCESSOR_ARCHITEW6432
+# is set to AMD64
+ifneq ($(PROCESSOR_ARCHITEW6432),)
+PROCESSOR_ARCHITECTURE = $(PROCESSOR_ARCHITEW6432)
+WIN64 = define
+else ifeq ($(PROCESSOR_ARCHITECTURE),AMD64)
+WIN64 = define
+else ifeq ($(PROCESSOR_ARCHITECTURE),IA64)
+WIN64 = define
+else
+WIN64 = undef
+endif
+endif
+
ifeq ($(WIN64),define)
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)
+USE_LONG_DOUBLE = undef
+endif
+
+ARCHITECTURE = $(PROCESSOR_ARCHITECTURE)
+ifeq ($(ARCHITECTURE),AMD64)
+ARCHITECTURE = x64
+endif
+ifeq ($(ARCHITECTURE),IA64)
+ARCHITECTURE = ia64
+endif
+
ifeq ($(USE_MULTI),define)
ARCHNAME = MSWin32-$(ARCHITECTURE)-multi
else
MINIBUILDOPT :=
+ifeq ($(CCTYPE),GCC)
+
CC = $(ARCHPREFIX)gcc
LINK32 = $(ARCHPREFIX)g++
LIB32 = $(ARCHPREFIX)ar rc
# Options
#
-INCLUDES = -I.\include -I. -I.. -I$(COREDIR)
+INCLUDES = -I.\include -I. -I..
DEFINES = -DWIN32
ifeq ($(WIN64),define)
DEFINES += -DWIN64 -DCONSERVATIVE
endif
LOCDEFS = -DPERLDLL -DPERL_CORE
-SUBSYS = console
CXX_FLAG = -xc++
LIBC =
-LIBFILES = $(LIBC) \
- -lmoldname -lkernel32 -luser32 -lgdi32 \
- -lwinspool -lcomdlg32 -ladvapi32 -lshell32 -lole32 \
- -loleaut32 -lnetapi32 -luuid -lws2_32 -lmpr \
- -lwinmm -lversion -lodbc32 -lodbccp32 -lcomctl32
+LIBFILES = $(LIBC) -lmoldname -lkernel32 -luser32 -lgdi32 -lwinspool \
+ -lcomdlg32 -ladvapi32 -lshell32 -lole32 -loleaut32 -lnetapi32 \
+ -luuid -lws2_32 -lmpr -lwinmm -lversion -lodbc32 -lodbccp32 -lcomctl32
ifeq ($(CFG),Debug)
OPTIMIZE = -g -O2 -DDEBUGGING
OBJOUT_FLAG = -o
EXEOUT_FLAG = -o
LIBOUT_FLAG =
+PDBOUT =
BUILDOPT += -fno-strict-aliasing -mms-bitfields
+MINIBUILDOPT += -fno-strict-aliasing
+
+TESTPREPGCC = test-prep-gcc
+
+else
+
+o = .obj
+
+# All but the free version of VC++ 7.1 can load DLLs on demand. Makes the test
+# suite run in about 10% less time.
+ifneq ($(CCTYPE),MSVC70FREE)
+# If no registry, advapi32 is only used for Perl_pp_getlogin/getlogin/GetUserNameA
+# which is rare to execute
+ifneq ($(USE_NO_REGISTRY),undef)
+DELAYLOAD = -DELAYLOAD:ws2_32.dll -DELAYLOAD:advapi32.dll delayimp.lib
+MINIDELAYLOAD =
+else
+DELAYLOAD = -DELAYLOAD:ws2_32.dll delayimp.lib
+#miniperl never does any registry lookups
+MINIDELAYLOAD = -DELAYLOAD:advapi32.dll
+endif
+endif
+
+# Visual C++ 2005 and 2008 (VC++ 8.0 and 9.0) create manifest files for EXEs and
+# DLLs. These either need copying everywhere with the binaries, or else need
+# embedding in them otherwise MSVCR80.dll or MSVCR90.dll won't be found. For
+# simplicity, embed them if they exist (and delete them afterwards so that they
+# don't get installed too).
+EMBED_EXE_MANI = if exist $@.manifest mt -nologo -manifest $@.manifest -outputresource:$@;1 && \
+ if exist $@.manifest del $@.manifest
+EMBED_DLL_MANI = if exist $@.manifest mt -nologo -manifest $@.manifest -outputresource:$@;2 && \
+ 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)
+PREMSVC80 = define
+else ifeq ($(CCTYPE),MSVC70FREE)
+PREMSVC80 = define
+else
+PREMSVC80 = undef
+endif
+
+ifneq ($(__ICC),define)
+CC = cl
+LINK32 = link
+else
+CC = icl
+LINK32 = xilink
+endif
+LIB32 = $(LINK32) -lib
+RSC = rc
+
+#
+# Options
+#
+
+INCLUDES = -I.\include -I. -I..
+#PCHFLAGS = -Fpc:\temp\vcmoduls.pch -YX
+DEFINES = -DWIN32 -D_CONSOLE -DNO_STRICT
+LOCDEFS = -DPERLDLL -DPERL_CORE
+CXX_FLAG = -TP -EHsc
+
+LIBC = msvcrt.lib
+
+ifeq ($(CFG),Debug)
+OPTIMIZE = -Od -MD -Zi -DDEBUGGING
+LINK_DBG = -debug
+else ifeq ($(CFG),DebugSymbols)
+OPTIMIZE = -Od -MD -Zi
+LINK_DBG = -debug
+else ifeq ($(CFG),DebugFull)
+LIBC = msvcrtd.lib
+OPTIMIZE = -Od -MDd -Zi -D_DEBUG -DDEBUGGING
+LINK_DBG = -debug
+else
+# -O1 yields smaller code, which turns out to be faster than -O2 on x86 and x64
+OPTIMIZE = -O1 -MD -Zi -DNDEBUG
+# we enable debug symbols in release builds also
+LINK_DBG = -debug -opt:ref,icf
+# 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
+# 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
+LIB_FLAGS = -ltcg
+endif
+endif
+
+ifeq ($(WIN64),define)
+DEFINES += -DWIN64 -DCONSERVATIVE
+OPTIMIZE += -fp:precise
+endif
+
+# For now, silence warnings from VC++ 8.0 onwards about "unsafe" CRT functions
+# and POSIX CRT function names being deprecated.
+ifeq ($(PREMSVC80),undef)
+DEFINES += -D_CRT_SECURE_NO_DEPRECATE -D_CRT_NONSTDC_NO_DEPRECATE
+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
+# 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
+# the time_t types will still be compatible.
+ifeq ($(WIN64),undef)
+ifeq ((PREMSVC80),define)
+BUILDOPT += -D_USE_32BIT_TIME_T
+endif
+endif
+
+LIBBASEFILES = oldnames.lib kernel32.lib user32.lib gdi32.lib winspool.lib \
+ comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib \
+ netapi32.lib uuid.lib ws2_32.lib mpr.lib winmm.lib version.lib \
+ odbc32.lib odbccp32.lib comctl32.lib
+
+# 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,
+# and optimized C89 funcs
+ifeq ($(__ICC),define)
+LIBBASEFILES += libircmt.lib libmmd.lib
+endif
+
+# The 64 bit Windows Server 2003 SP1 SDK compilers link 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.
+ifeq ("$(WIN64) $(CCTYPE)","define SDK2003SP1")
+LIBBASEFILES += bufferoverflowU.lib
+endif
+
+LIBFILES = $(LIBBASEFILES) $(LIBC)
+
+EXTRACFLAGS = -nologo -GF -W3
+ifeq ($(__ICC),define)
+EXTRACFLAGS += -Qstd=c99
+endif
+ifeq ($(USE_CPLUSPLUS),define)
+EXTRACFLAGS += $(CXX_FLAG)
+endif
+CFLAGS = $(EXTRACFLAGS) $(INCLUDES) $(DEFINES) $(LOCDEFS) \
+ $(PCHFLAGS) $(OPTIMIZE)
+LINK_FLAGS = -nologo -nodefaultlib $(LINK_DBG) \
+ -libpath:"$(INST_COREDIR)" \
+ -machine:$(PROCESSOR_ARCHITECTURE)
+LIB_FLAGS += -nologo
+OBJOUT_FLAG = -Fo
+EXEOUT_FLAG = -Fe
+LIBOUT_FLAG = /out:
+PDBOUT = -Fd$(*).pdb
+TESTPREPGCC =
+
+endif
+
CFLAGS_O = $(CFLAGS) $(BUILDOPT)
-# used to allow local linking flags that are not propogated into Config.pm,
-# currently unused
-# -- BKS, 12-12-1999
-PRIV_LINK_FLAGS =
+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
+
+
+# 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
+
+ifeq ($(CCTYPE),MSVC120)
+ifeq ($(WIN64),define)
+LINK_FLAGS += -subsystem:console,"5.02"
+else
+LINK_FLAGS += -subsystem:console,"5.01"
+endif
+
+else ifeq ($(CCTYPE),MSVC120FREE)
+ifeq ($(WIN64),define)
+LINK_FLAGS += -subsystem:console,"5.02"
+else
+LINK_FLAGS += -subsystem:console,"5.01"
+endif
+
+else ifeq ($(CCTYPE),MSVC140)
+ifeq ($(WIN64),define)
+LINK_FLAGS += -subsystem:console,"5.02"
+else
+LINK_FLAGS += -subsystem:console,"5.01"
+endif
+
+else ifeq ($(CCTYPE),MSVC140FREE)
+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
+
BLINK_FLAGS = $(PRIV_LINK_FLAGS) $(LINK_FLAGS)
#################### do not edit below this line #######################
############# NO USER-SERVICEABLE PARTS BEYOND THIS POINT ##############
+#prevent -j from reaching EUMM/make_ext.pl/"sub makes", Win32 EUMM not parallel
+#compatible yet
+unexport MAKEFLAGS
+
+a ?= .lib
+
+.SUFFIXES : .c .i $(o) .dll $(a) .exe .rc .res
+
%$(o): %.c
- $(CC) -c -I$(<D) $(CFLAGS_O) $(OBJOUT_FLAG)$@ $<
+ $(CC) -c -I$(<D) $(CFLAGS_O) $(OBJOUT_FLAG)$@ $(PDBOUT) $<
%.i: %.c
$(CC) -c -I$(<D) $(CFLAGS_O) -E $< >$@
$(IMPLIB) --input-def $(*F).def --output-lib $(*F).a $@
%.res: %.rc
+ifeq ($(CCTYPE),GCC)
$(RSC) --use-temp-file --include-dir=. --include-dir=.. -O COFF -D INCLUDE_MANIFEST -i $< -o $@
+else
+ $(RSC) -i.. -DINCLUDE_MANIFEST $<
+endif
#
# various targets
+
+#do not put $(MINIPERL) as a dep/prereq in a rule, instead put $(HAVEMINIPERL)
+#$(MINIPERL) is not a buildable target, use "gmake mp" if you want to just build
+#miniperl alone
MINIPERL = ..\miniperl.exe
+HAVEMINIPERL = ..\lib\buildcustomize.pl
MINIDIR = mini
PERLEXE = ..\perl.exe
WPERLEXE = ..\wperl.exe
PERLEXESTATIC = ..\perl-static.exe
STATICDIR = .\static.tmp
GLOBEXE = ..\perlglob.exe
-CONFIGPM = ..\lib\Config.pm ..\lib\Config_heavy.pl
+CONFIGPM = ..\lib\Config.pm
GENUUDMAP = ..\generate_uudmap.exe
ifeq ($(BUILD_STATIC),define)
PERLSTATIC = static
# This used to be $(PERLEXE), but at worst it is the .dll that they depend
# on and really only the interface - i.e. the .def file used to export symbols
# from the .dll
-PERLDEP = perldll.def
+PERLDEP = $(PERLIMPLIB)
PL2BAT = bin\pl2bat.pl
..\utils\perlivp \
..\utils\libnetcfg \
..\utils\enc2xs \
+ ..\utils\encguess \
..\utils\piconv \
..\utils\corelist \
..\utils\cpan \
bin\perlglob.pl \
bin\search.pl
+ifeq ($(CCTYPE),GCC)
+
CFGSH_TMPL = config.gc
CFGH_TMPL = config_H.gc
-PERLIMPLIB = ..\libperl521$(a)
-PERLSTATICLIB = ..\libperl521s$(a)
+PERLIMPLIB = $(COREDIR)\libperl525$(a)
+PERLIMPLIBBASE = libperl525$(a)
+PERLSTATICLIB = ..\libperl525s$(a)
INT64 = long long
+else
+
+CFGSH_TMPL = config.vc
+CFGH_TMPL = config_H.vc
+INT64 = __int64
+
+endif
+
# makedef.pl must be updated if this changes, and this should normally
# only change when there is an incompatible revision of the public API.
-PERLDLL = ..\perl521.dll
+PERLIMPLIB ?= $(COREDIR)\perl525$(a)
+PERLIMPLIBBASE ?= perl525$(a)
+PERLEXPLIB ?= $(COREDIR)\perl525.exp
+PERLSTATICLIB ?= ..\perl525s$(a)
+PERLDLL = ..\perl525.dll
+
+# don't let "gmake -n all" try to run "miniperl.exe make_ext.pl"
+PLMAKE = gmake
XCOPY = xcopy /f /r /i /d /y
RCOPY = xcopy /f /r /i /e /d /y
NOOP = @rem
+#first ones are arrange in compile time order for faster parallel building
+#see #123867 for details
MICROCORE_SRC = \
+ ..\toke.c \
+ ..\regcomp.c \
+ ..\regexec.c \
+ ..\op.c \
+ ..\sv.c \
+ ..\pp.c \
+ ..\pp_ctl.c \
+ ..\pp_sys.c \
+ ..\pp_pack.c \
+ ..\pp_hot.c \
+ ..\gv.c \
+ ..\perl.c \
+ ..\utf8.c \
+ ..\dump.c \
+ ..\hv.c \
..\av.c \
..\caretx.c \
..\deb.c \
..\doio.c \
..\doop.c \
- ..\dump.c \
+ ..\dquote.c \
..\globals.c \
- ..\gv.c \
- ..\mro.c \
- ..\hv.c \
+ ..\mro_core.c \
..\locale.c \
..\keywords.c \
..\mathoms.c \
..\mg.c \
..\numeric.c \
- ..\op.c \
..\pad.c \
- ..\perl.c \
..\perlapi.c \
..\perly.c \
- ..\pp.c \
- ..\pp_ctl.c \
- ..\pp_hot.c \
- ..\pp_pack.c \
..\pp_sort.c \
- ..\pp_sys.c \
..\reentr.c \
- ..\regcomp.c \
- ..\regexec.c \
..\run.c \
..\scope.c \
- ..\sv.c \
..\taint.c \
- ..\toke.c \
+ ..\time64.c \
..\universal.c \
- ..\utf8.c \
..\util.c
EXTRACORE_SRC += perllib.c
MG_DATA_H = ..\mg_data.h
GENERATED_HEADERS = $(UUDMAP_H) $(BITCOUNT_H) $(MG_DATA_H)
-MICROCORE_OBJ = $(MICROCORE_SRC:.c=.o)
-CORE_OBJ = $(MICROCORE_OBJ) $(EXTRACORE_SRC:.c=.o)
-WIN32_OBJ = $(WIN32_SRC:.c=.o)
+HAVE_COREDIR = .coreheaders
+
+MICROCORE_OBJ = $(MICROCORE_SRC:.c=$(o))
+CORE_OBJ = $(MICROCORE_OBJ) $(EXTRACORE_SRC:.c=$(o))
+WIN32_OBJ = $(WIN32_SRC:.c=$(o))
MINICORE_OBJ = $(subst ..\,mini\,$(MICROCORE_OBJ)) \
$(MINIDIR)\miniperlmain$(o) \
MINIWIN32_OBJ = $(subst .\,mini\,$(WIN32_OBJ))
MINI_OBJ = $(MINICORE_OBJ) $(MINIWIN32_OBJ)
DLL_OBJ = $(DYNALOADER)
-GENUUDMAP_OBJ = $(GENUUDMAP:.exe=.o)
PERLDLL_OBJ = $(CORE_OBJ)
PERLEXE_OBJ = perlmain$(o)
"archname=$(ARCHNAME)" \
"cc=$(CC)" \
"ld=$(LINK32)" \
- "ccflags=$(EXTRACFLAGS) $(OPTIMIZE) $(DEFINES) $(BUILDOPT)" \
+ "ccflags=$(subst ",\",$(EXTRACFLAGS) $(OPTIMIZE) $(DEFINES) $(BUILDOPT))" \
+ "usecplusplus=$(USE_CPLUSPLUS)" \
"cf_email=$(EMAIL)" \
"d_mymalloc=$(PERL_MALLOC)" \
"libs=$(LIBFILES)" \
- "incpath=$(CCINCDIR)" \
- "libperl=$(subst ..\,,$(PERLIMPLIB))" \
- "libpth=$(CCLIBDIR);$(EXTRALIBDIRS)" \
+ "incpath=$(subst ",\",$(CCINCDIR))" \
+ "libperl=$(subst ",\",$(PERLIMPLIBBASE))" \
+ "libpth=$(subst ",\",$(CCLIBDIR);$(EXTRALIBDIRS))" \
"libc=$(LIBC)" \
- "make=$(MAKE)" \
+ "make=$(PLMAKE)" \
"_o=$(o)" \
"obj_ext=$(o)" \
"_a=$(a)" \
"uselongdouble=$(USE_LONG_DOUBLE)" \
"uselargefiles=$(USE_LARGE_FILES)" \
"usesitecustomize=$(USE_SITECUST)" \
- "LINK_FLAGS=$(LINK_FLAGS)" \
- "optimize=$(OPTIMIZE)" \
+ "LINK_FLAGS=$(subst ",\",$(LINK_FLAGS))"\
+ "optimize=$(subst ",\",$(OPTIMIZE))" \
"ARCHPREFIX=$(ARCHPREFIX)" \
"WIN64=$(WIN64)"
.PHONY: all info
-all : info .\config.h ..\git_version.h $(GLOBEXE) $(MINIPERL) \
- $(CONFIGPM) $(UNIDATAFILES) MakePPPort \
- $(PERLEXE) Extensions Extensions_nonxs $(PERLSTATIC)
+all : info rebasePE Extensions_nonxs $(PERLSTATIC)
info :
@echo # GCCBIN=$(GCCBIN)
@echo # WIN64=$(WIN64)
@echo # ARCHITECTURE=$(ARCHITECTURE)
@echo # ARCHNAME=$(ARCHNAME)
- @echo # MAKE=$(MAKE)
+ @echo # MAKE=$(PLMAKE)
ifeq ($(GCCTARGET),)
@echo Unable to detect gcc and/or architecture!
@exit 1
endif
-regnodes : ..\regnodes.h
-
..\regcomp$(o) : ..\regnodes.h ..\regcharclass.h
..\regexec$(o) : ..\regnodes.h ..\regcharclass.h
-reonly : regnodes .\config.h ..\git_version.h $(GLOBEXE) $(MINIPERL) \
+reonly : ..\regnodes.h .\config.h ..\git_version.h $(GLOBEXE) $(HAVEMINIPERL)\
$(CONFIGPM) $(UNIDATAFILES) $(PERLEXE) \
Extensions_reonly
#----------------------------------------------------------------
-$(GLOBEXE) : perlglob$(o)
- $(LINK32) $(BLINK_FLAGS) -mconsole -o $@ perlglob$(o) $(LIBFILES)
+$(GLOBEXE) : perlglob.c
+ifeq ($(CCTYPE),GCC)
+ $(LINK32) $(OPTIMIZE) $(BLINK_FLAGS) -mconsole -o $@ perlglob.c $(LIBFILES)
+else
+ $(CC) $(OPTIMIZE) $(PDBOUT) -Fe$@ perlglob.c -link $(BLINK_FLAGS) \
+ setargv$(o) $(LIBFILES) && $(EMBED_EXE_MANI)
+endif
+
+..\git_version.h : $(HAVEMINIPERL) ..\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
+
+..\config.sh : $(CFGSH_TMPL) config_sh.PL FindExt.pm $(HAVEMINIPERL)
+ $(MINIPERL) -I..\lib config_sh.PL $(CFG_VARS) $(CFGSH_TMPL) > ..\config.sh
+
+# This target is for when changes to the main config.sh happen.
+# Edit config.gc, then make perl using GCC in a minimal configuration (i.e.
+# with MULTI, ITHREADS, IMP_SYS, LARGE_FILES and PERLIO off), then make
+# this target to regenerate config_H.gc.
+regen_config_h:
+ $(MINIPERL) -I..\lib config_sh.PL $(CFG_VARS) $(CFGSH_TMPL) > ..\config.sh
+ $(MINIPERL) -I..\lib ..\configpm --chdir=..
+ -del /f $(CFGH_TMPL)
+ -$(MINIPERL) -I..\lib config_h.PL "ARCHPREFIX=$(ARCHPREFIX)"
+ rename config.h $(CFGH_TMPL)
+
+$(CONFIGPM): ..\config.sh config_h.PL
+ $(MINIPERL) -I..\lib ..\configpm --chdir=..
+ -$(MINIPERL) -I..\lib config_h.PL "ARCHPREFIX=$(ARCHPREFIX)"
-perlglob$(o) : perlglob.c
+.\config.h : $(CONFIGPM)
-config.w32 : $(CFGSH_TMPL)
- copy $(CFGSH_TMPL) config.w32
+# See the comment in Makefile.SH explaining this seemingly cranky ordering
+..\lib\buildcustomize.pl : $(MINI_OBJ) ..\write_buildcustomize.pl
+ifeq ($(CCTYPE),GCC)
+ $(LINK32) -mconsole -o $(MINIPERL) $(BLINK_FLAGS) $(MINI_OBJ) $(LIBFILES)
+else
+ $(LINK32) -out:$(MINIPERL) $(BLINK_FLAGS) \
+ $(DELAYLOAD) $(MINIDELAYLOAD) $(LIBFILES) $(MINI_OBJ)
+ $(subst $@,$(MINIPERL),$(EMBED_EXE_MANI))
+endif
+ $(MINIPERL) -I..\lib -f ..\write_buildcustomize.pl ..
+
+#convinence target, get a working miniperl
+mp : $(CONFIGPM)
+
+$(MINIDIR)\.exists : $(CFGH_TMPL)
+ if not exist "$(MINIDIR)" mkdir "$(MINIDIR)"
#
# Copy the template config.h and set configurables at the end of it
# as per the options chosen and compiler used.
# real config.h used to build perl.exe is generated from the top-level
# config_h.SH by config_h.PL (run by miniperl.exe).
#
-.\config.h : $(CFGH_TMPL) $(CORE_NOCFG_H)
- -del /f config.h
+# 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).
copy $(CFGH_TMPL) config.h
- @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 #undef HAS_STRTOLL>>$@
- @echo #undef HAS_STRTOULL>>$@
- @echo #undef Size_t_size>>$@
- @echo #undef IVTYPE>>$@
- @echo #undef UVTYPE>>$@
- @echo #undef IVSIZE>>$@
- @echo #undef UVSIZE>>$@
- @echo #undef NV_PRESERVES_UV>>$@
- @echo #undef NV_PRESERVES_UV_BITS>>$@
- @echo #undef IVdf>>$@
- @echo #undef UVuf>>$@
- @echo #undef UVof>>$@
- @echo #undef UVxf>>$@
- @echo #undef UVXf>>$@
- @echo #undef USE_64_BIT_INT>>$@
- @echo #undef Gconvert>>$@
- @echo #undef HAS_FREXPL>>$@
- @echo #undef HAS_ISNANL>>$@
- @echo #undef HAS_MODFL>>$@
- @echo #undef HAS_MODFL_PROTO>>$@
- @echo #undef HAS_SQRTL>>$@
- @echo #undef HAS_STRTOLD>>$@
- @echo #undef PERL_PRIfldbl>>$@
- @echo #undef PERL_PRIgldbl>>$@
- @echo #undef PERL_PRIeldbl>>$@
- @echo #undef PERL_SCNfldbl>>$@
- @echo #undef NVTYPE>>$@
- @echo #undef NVSIZE>>$@
- @echo #undef LONG_DOUBLESIZE>>$@
- @echo #undef NV_OVERFLOWS_INTEGERS_AT>>$@
- @echo #undef NVef>>$@
- @echo #undef NVff>>$@
- @echo #undef NVgf>>$@
- @echo #undef USE_LONG_DOUBLE>>$@
+ @(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 #undef HAS_STRTOLL&& \
+ echo #undef HAS_STRTOULL&& \
+ echo #undef Size_t_size&& \
+ echo #undef IVTYPE&& \
+ echo #undef UVTYPE&& \
+ echo #undef IVSIZE&& \
+ echo #undef UVSIZE&& \
+ echo #undef NV_PRESERVES_UV&& \
+ echo #undef NV_PRESERVES_UV_BITS&& \
+ echo #undef IVdf&& \
+ echo #undef UVuf&& \
+ echo #undef UVof&& \
+ echo #undef UVxf&& \
+ echo #undef UVXf&& \
+ echo #undef USE_64_BIT_INT&& \
+ echo #undef Gconvert&& \
+ echo #undef HAS_FREXPL&& \
+ echo #undef HAS_ISNANL&& \
+ echo #undef HAS_MODFL&& \
+ echo #undef HAS_MODFL_PROTO&& \
+ echo #undef HAS_SQRTL&& \
+ echo #undef HAS_STRTOLD&& \
+ echo #undef PERL_PRIfldbl&& \
+ echo #undef PERL_PRIgldbl&& \
+ echo #undef PERL_PRIeldbl&& \
+ echo #undef PERL_SCNfldbl&& \
+ echo #undef NVTYPE&& \
+ echo #undef NVSIZE&& \
+ echo #undef LONG_DOUBLESIZE&& \
+ echo #undef NV_OVERFLOWS_INTEGERS_AT&& \
+ echo #undef NVef&& \
+ echo #undef NVff&& \
+ echo #undef NVgf&& \
+ echo #undef USE_LONG_DOUBLE)>> config.h
ifeq ($(USE_LARGE_FILES),define)
- @echo #define Off_t $(INT64)>>$@
- @echo #define LSEEKSIZE ^8>>$@
- @echo #define Off_t_size ^8>>$@
+ @(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>>$@
+ @(echo #define Off_t long&& \
+ echo #define LSEEKSIZE ^4&& \
+ echo #define Off_t_size ^4)>> config.h
endif
ifeq ($(WIN64),define)
- @echo #define PTRSIZE ^8>>$@
- @echo #define SSize_t $(INT64)>>$@
- @echo #define HAS_ATOLL>>$@
- @echo #define HAS_STRTOLL>>$@
- @echo #define HAS_STRTOULL>>$@
- @echo #define Size_t_size ^8>>$@
+ @(echo #define PTRSIZE ^8&& \
+ echo #define SSize_t $(INT64)&& \
+ echo #define HAS_ATOLL&& \
+ echo #define HAS_STRTOLL&& \
+ echo #define HAS_STRTOULL&& \
+ echo #define Size_t_size ^8)>> config.h
else
- @echo #define PTRSIZE ^4>>$@
- @echo #define SSize_t int>>$@
- @echo #undef HAS_ATOLL>>$@
- @echo #undef HAS_STRTOLL>>$@
- @echo #undef HAS_STRTOULL>>$@
- @echo #define Size_t_size ^4>>$@
+ @(echo #define PTRSIZE ^4&& \
+ echo #define SSize_t int&& \
+ echo #undef HAS_ATOLL&& \
+ echo #undef HAS_STRTOLL&& \
+ echo #undef HAS_STRTOULL&& \
+ echo #define Size_t_size ^4)>> config.h
endif
ifeq ($(USE_64_BIT_INT),define)
- @echo #define IVTYPE $(INT64)>>$@
- @echo #define UVTYPE unsigned $(INT64)>>$@
- @echo #define IVSIZE ^8>>$@
- @echo #define UVSIZE ^8>>$@
+ @(echo #define IVTYPE $(INT64)&& \
+ echo #define UVTYPE unsigned $(INT64)&& \
+ echo #define IVSIZE ^8&& \
+ echo #define UVSIZE ^8)>> config.h
ifeq ($(USE_LONG_DOUBLE),define)
- @echo #define NV_PRESERVES_UV>>$@
- @echo #define NV_PRESERVES_UV_BITS 64>>$@
+ @(echo #define NV_PRESERVES_UV&& \
+ echo #define NV_PRESERVES_UV_BITS 64)>> config.h
else
- @echo #undef NV_PRESERVES_UV>>$@
- @echo #define NV_PRESERVES_UV_BITS 53>>$@
-endif
- @echo #define IVdf "I64d">>$@
- @echo #define UVuf "I64u">>$@
- @echo #define UVof "I64o">>$@
- @echo #define UVxf "I64x">>$@
- @echo #define UVXf "I64X">>$@
- @echo #define USE_64_BIT_INT>>$@
+ @(echo #undef NV_PRESERVES_UV&& \
+ echo #define NV_PRESERVES_UV_BITS 53)>> config.h
+endif
+ @(echo #define IVdf "I64d"&& \
+ echo #define UVuf "I64u"&& \
+ echo #define UVof "I64o"&& \
+ echo #define UVxf "I64x"&& \
+ echo #define UVXf "I64X"&& \
+ echo #define USE_64_BIT_INT)>> config.h
else
- @echo #define IVTYPE long>>$@
- @echo #define UVTYPE unsigned long>>$@
- @echo #define IVSIZE ^4>>$@
- @echo #define UVSIZE ^4>>$@
- @echo #define NV_PRESERVES_UV>>$@
- @echo #define NV_PRESERVES_UV_BITS 32>>$@
- @echo #define IVdf "ld">>$@
- @echo #define UVuf "lu">>$@
- @echo #define UVof "lo">>$@
- @echo #define UVxf "lx">>$@
- @echo #define UVXf "lX">>$@
- @echo #undef USE_64_BIT_INT>>$@
+ @(echo #define IVTYPE long&& \
+ echo #define UVTYPE unsigned long&& \
+ echo #define IVSIZE ^4&& \
+ echo #define UVSIZE ^4&& \
+ echo #define NV_PRESERVES_UV&& \
+ echo #define NV_PRESERVES_UV_BITS 32&& \
+ echo #define IVdf "ld"&& \
+ echo #define UVuf "lu"&& \
+ echo #define UVof "lo"&& \
+ echo #define UVxf "lx"&& \
+ echo #define UVXf "lX"&& \
+ echo #undef USE_64_BIT_INT)>> config.h
endif
ifeq ($(USE_LONG_DOUBLE),define)
- @echo #define Gconvert(x,n,t,b) sprintf((b),"%%.*""Lg",(n),(x))>>$@
- @echo #define HAS_FREXPL>>$@
- @echo #define HAS_ISNANL>>$@
- @echo #define HAS_MODFL>>$@
- @echo #define HAS_MODFL_PROTO>>$@
- @echo #define HAS_SQRTL>>$@
- @echo #define HAS_STRTOLD>>$@
- @echo #define PERL_PRIfldbl "Lf">>$@
- @echo #define PERL_PRIgldbl "Lg">>$@
- @echo #define PERL_PRIeldbl "Le">>$@
- @echo #define PERL_SCNfldbl "Lf">>$@
- @echo #define NVTYPE long double>>$@
+ @(echo #define Gconvert^(x,n,t,b^) sprintf^(^(b^),"%%.*""Lg",^(n^),^(x^)^)&& \
+ echo #define HAS_FREXPL&& \
+ echo #define HAS_ISNANL&& \
+ echo #define HAS_MODFL&& \
+ echo #define HAS_MODFL_PROTO&& \
+ echo #define HAS_SQRTL&& \
+ echo #define HAS_STRTOLD&& \
+ echo #define PERL_PRIfldbl "Lf"&& \
+ echo #define PERL_PRIgldbl "Lg"&& \
+ echo #define PERL_PRIeldbl "Le"&& \
+ echo #define PERL_SCNfldbl "Lf"&& \
+ echo #define NVTYPE long double)>> config.h
ifeq ($(WIN64),define)
- @echo #define NVSIZE ^16>>$@
- @echo #define LONG_DOUBLESIZE ^16>>$@
+ @(echo #define NVSIZE ^16&& \
+ echo #define LONG_DOUBLESIZE ^16)>> config.h
else
- @echo #define NVSIZE ^12>>$@
- @echo #define LONG_DOUBLESIZE ^12>>$@
-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 NVef "Le">>$@
- @echo #define NVff "Lf">>$@
- @echo #define NVgf "Lg">>$@
- @echo #define USE_LONG_DOUBLE>>$@
+ @(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 NVef "Le"&& \
+ echo #define NVff "Lf"&& \
+ echo #define NVgf "Lg"&& \
+ echo #define USE_LONG_DOUBLE)>> config.h
else
- @echo #define Gconvert(x,n,t,b) sprintf((b),"%%.*g",(n),(x))>>$@
- @echo #undef HAS_FREXPL>>$@
- @echo #undef HAS_ISNANL>>$@
- @echo #undef HAS_MODFL>>$@
- @echo #undef HAS_MODFL_PROTO>>$@
- @echo #undef HAS_SQRTL>>$@
- @echo #undef HAS_STRTOLD>>$@
- @echo #undef PERL_PRIfldbl>>$@
- @echo #undef PERL_PRIgldbl>>$@
- @echo #undef PERL_PRIeldbl>>$@
- @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">>$@
- @echo #define NVgf "g">>$@
- @echo #undef USE_LONG_DOUBLE>>$@
-endif
- @echo #endif>>$@
-
-..\git_version.h : $(MINIPERL) ..\make_patchnum.pl
- cd .. && miniperl -Ilib make_patchnum.pl
-
-# make sure that we recompile perl.c if the git version changes
-..\perl$(o) : ..\git_version.h
-
-..\config.sh : config.w32 $(MINIPERL) config_sh.PL FindExt.pm
- $(MINIPERL) -I..\lib config_sh.PL $(CFG_VARS) config.w32 > ..\config.sh
-
-# This target is for when changes to the main config.sh happen.
-# Edit config.gc, then make perl using GCC in a minimal configuration (i.e.
-# with MULTI, ITHREADS, IMP_SYS, LARGE_FILES and PERLIO off), then make
-# this target to regenerate config_H.gc.
-regen_config_h:
- $(MINIPERL) -I..\lib config_sh.PL $(CFG_VARS)) $(CFGSH_TMPL) > ..\config.sh
- $(MINIPERL) -I..\lib ..\configpm --chdir=..
- -del /f $(CFGH_TMPL)
- -$(MINIPERL) -I..\lib config_h.PL "ARCHPREFIX=$(ARCHPREFIX)"
- rename config.h $(CFGH_TMPL)
-
-$(CONFIGPM) : $(MINIPERL) ..\config.sh config_h.PL
- $(MINIPERL) -I..\lib ..\configpm --chdir=..
- if exist lib\* $(RCOPY) "lib\*.*" ..\lib\$(NULL)
- $(XCOPY) "..\*.h" $(COREDIR)\$(NULL)
- $(XCOPY) "*.h" $(COREDIR)\$(NULL)
- $(RCOPY) include $(COREDIR)\$(NULL)
- $(MINIPERL) -I..\lib config_h.PL "ARCHPREFIX=$(ARCHPREFIX)" \
- || $(MAKE) $(MAKEMACROS) $(CONFIGPM) $(MAKEFILE)
-
-# See the comment in Makefile.SH explaining this seemingly cranky ordering
-$(MINIPERL) : ..\lib\buildcustomize.pl
-
-..\lib\buildcustomize.pl : $(MINIDIR) $(MINI_OBJ) $(CRTIPMLIBS) ..\write_buildcustomize.pl
- $(LINK32) -mconsole -o $(MINIPERL) $(BLINK_FLAGS) $(MINI_OBJ) $(LIBFILES)
- $(MINIPERL) -I..\lib -f ..\write_buildcustomize.pl ..
-
-$(MINIDIR) :
- if not exist "$(MINIDIR)" mkdir "$(MINIDIR)"
+ @(echo #define Gconvert^(x,n,t,b^) sprintf^(^(b^),"%%.*g",^(n^),^(x^)^)&& \
+ echo #undef HAS_FREXPL&& \
+ echo #undef HAS_ISNANL&& \
+ echo #undef HAS_MODFL&& \
+ echo #undef HAS_MODFL_PROTO&& \
+ echo #undef HAS_SQRTL&& \
+ echo #undef HAS_STRTOLD&& \
+ echo #undef PERL_PRIfldbl&& \
+ echo #undef PERL_PRIgldbl&& \
+ echo #undef PERL_PRIeldbl&& \
+ 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"&& \
+ echo #define NVgf "g"&& \
+ echo #undef USE_LONG_DOUBLE)>> config.h
+endif
+ifeq ($(USE_CPLUSPLUS),define)
+ @(echo #define USE_CPLUSPLUS&& \
+ echo #endif)>> config.h
+else
+ @(echo #undef USE_CPLUSPLUS&& \
+ echo #endif)>> config.h
+endif
+#separate line since this is sentinal that this target is done
+ rem. > $(MINIDIR)\.exists
$(MINICORE_OBJ) : $(CORE_NOCFG_H)
- $(CC) -c $(CFLAGS) $(MINIBUILDOPT) -DPERL_EXTERNAL_GLOB -DPERL_IS_MINIPERL $(OBJOUT_FLAG)$@ ..\$(*F).c
+ $(CC) -c $(CFLAGS) $(MINIBUILDOPT) -DPERL_EXTERNAL_GLOB -DPERL_IS_MINIPERL $(OBJOUT_FLAG)$@ $(PDBOUT) ..\$(*F).c
$(MINIWIN32_OBJ) : $(CORE_NOCFG_H)
- $(CC) -c $(CFLAGS) $(MINIBUILDOPT) -DPERL_IS_MINIPERL $(OBJOUT_FLAG)$@ $(*F).c
+ $(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
-# unless the .IF is true), so instead we use a else with the default.
+# 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
-perllib$(o) : perllib.c .\perlhost.h .\vdir.h .\vmem.h
+perllib$(o) : perllib.c perllibst.h .\perlhost.h .\vdir.h .\vmem.h
ifeq ($(USE_IMP_SYS),define)
- $(CC) -c -I. $(CFLAGS_O) $(CXX_FLAG) $(OBJOUT_FLAG)$@ perllib.c
+ $(CC) -c -I. $(CFLAGS_O) $(CXX_FLAG) $(OBJOUT_FLAG)$@ $(PDBOUT) perllib.c
else
- $(CC) -c -I. $(CFLAGS_O) $(OBJOUT_FLAG)$@ perllib.c
+ $(CC) -c -I. $(CFLAGS_O) $(OBJOUT_FLAG)$@ $(PDBOUT) perllib.c
endif
# 1. we don't want to rebuild miniperl.exe when config.h changes
# 2. we don't want to rebuild miniperl.exe with non-default config.h
# 3. we can't have miniperl.exe depend on git_version.h, as miniperl creates it
-$(MINI_OBJ) : $(CORE_NOCFG_H)
+$(MINI_OBJ) : $(MINIDIR)\.exists $(CORE_NOCFG_H)
$(WIN32_OBJ) : $(CORE_H)
$(DLL_OBJ) : $(CORE_H)
-perldll.def : $(MINIPERL) $(CONFIGPM) ..\embed.fnc ..\makedef.pl create_perllibst_h.pl
+
+perllibst.h : $(HAVEMINIPERL) $(CONFIGPM) create_perllibst_h.pl
$(MINIPERL) -I..\lib create_perllibst_h.pl
+
+perldll.def : $(HAVEMINIPERL) $(CONFIGPM) ..\embed.fnc ..\makedef.pl
$(MINIPERL) -I..\lib -w ..\makedef.pl PLATFORM=win32 $(OPTIMIZE) $(DEFINES) \
- $(BUILDOPT) CCTYPE=GCC TARG_DIR=..\ > perldll.def
-
-$(PERLDLL): perldll.def $(PERLDLL_OBJ) $(PERLDLL_RES) Extensions_static
- $(LINK32) -mdll -o $@ -Wl,--base-file -Wl,perl.base $(BLINK_FLAGS) \
- $(PERLDLL_OBJ) $(shell type Extensions_static) $(LIBFILES)
- $(IMPLIB) --output-lib $(PERLIMPLIB) \
- --dllname $(PERLDLL) \
- --def perldll.def \
- --base-file perl.base \
- --output-exp perl.exp
+ $(BUILDOPT) CCTYPE=$(CCTYPE) TARG_DIR=..\ > perldll.def
+
+$(PERLEXPLIB) : $(PERLIMPLIB)
+
+$(PERLIMPLIB) : perldll.def
+ifeq ($(CCTYPE),GCC)
+ $(IMPLIB) -k -d perldll.def -l $(PERLIMPLIB) -e $(PERLEXPLIB)
+else
+ lib -def:perldll.def -machine:$(ARCHITECTURE) /OUT:$(PERLIMPLIB)
+endif
+
+$(PERLDLL): $(PERLEXPLIB) $(PERLDLL_OBJ) $(PERLDLL_RES) Extensions_static
+ifeq ($(CCTYPE),GCC)
$(LINK32) -mdll -o $@ $(BLINK_FLAGS) \
- $(PERLDLL_OBJ) $(shell type Extensions_static) $(LIBFILES) perl.exp
- $(XCOPY) $(PERLIMPLIB) $(COREDIR)
+ $(PERLDLL_OBJ) $(shell type Extensions_static) $(LIBFILES) $(PERLEXPLIB)
+else
+ $(LINK32) -dll -out:$@ $(BLINK_FLAGS) \
+ @Extensions_static \
+ -base:0x28000000 $(DELAYLOAD) $(LIBFILES) \
+ $(PERLDLL_RES) $(PERLDLL_OBJ) $(PERLEXPLIB)
+ $(EMBED_DLL_MANI)
+endif
$(PERLSTATICLIB): $(PERLDLL_OBJ) Extensions_static
+ifeq ($(CCTYPE),GCC)
$(LIB32) $(LIB_FLAGS) $@ $(PERLDLL_OBJ)
if exist $(STATICDIR) rmdir /s /q $(STATICDIR)
for %%i in ($(shell type Extensions_static)) do \
$(ARCHPREFIX)ar x ..\%%i && \
$(ARCHPREFIX)ar q ..\$@ *$(o) && \
cd .. && rmdir /s /q $(STATICDIR)
+else
+ $(LIB32) $(LIB_FLAGS) -out:$@ @Extensions_static \
+ $(PERLDLL_OBJ)
+endif
$(XCOPY) $(PERLSTATICLIB) $(COREDIR)
$(PERLEXE_RES): perlexe.rc $(PERLEXE_MANIFEST) $(PERLEXE_ICO)
$(BITCOUNT_H) : $(GENUUDMAP)
$(GENUUDMAP) $(GENERATED_HEADERS)
-$(GENUUDMAP_OBJ) : ..\mg_raw.h
+$(GENUUDMAP) : ..\mg_raw.h
+ifeq ($(CCTYPE),GCC)
+ $(LINK32) $(CFLAGS_O) -o..\generate_uudmap.exe ..\generate_uudmap.c \
+ $(BLINK_FLAGS) $(LIBFILES)
+else
+ $(CC) $(CFLAGS_O) $(PDBOUT) -Fe..\generate_uudmap.exe ..\generate_uudmap.c -link $(LIBFILES) $(BLINK_FLAGS)
+ $(EMBED_EXE_MANI)
+endif
-$(GENUUDMAP) : $(GENUUDMAP_OBJ)
- $(LINK32) -o $@ $(BLINK_FLAGS) $(GENUUDMAP_OBJ) $(LIBFILES)
+.PHONY: MakePPPort
-perlmain.c : runperl.c
- copy runperl.c perlmain.c
+MakePPPort : $(HAVEMINIPERL) $(CONFIGPM)
+ $(MINIPERL) -I..\lib ..\mkppport
-perlmain$(o) : perlmain.c
- $(CC) $(subst -DPERLDLL,-UPERLDLL,$(CFLAGS_O)) $(OBJOUT_FLAG)$@ -c perlmain.c
+# also known as $(HAVE_COREDIR)
+.coreheaders : $(CORE_H)
+ $(XCOPY) *.h $(COREDIR)\\*.*
+ $(RCOPY) include $(COREDIR)\\*.*
+ $(XCOPY) ..\\*.h $(COREDIR)\\*.*
+ rem. > $@
-perlmainst.c : runperl.c
- copy runperl.c perlmainst.c
+perlmain$(o) : runperl.c $(CONFIGPM)
+ $(CC) $(subst -DPERLDLL,-UPERLDLL,$(CFLAGS_O)) $(OBJOUT_FLAG)$@ $(PDBOUT) -c runperl.c
-perlmainst$(o) : perlmainst.c
- $(CC) $(CFLAGS_O) $(OBJOUT_FLAG)$@ -c perlmainst.c
+perlmainst$(o) : runperl.c $(CONFIGPM)
+ $(CC) $(CFLAGS_O) $(OBJOUT_FLAG)$@ $(PDBOUT) -c runperl.c
-$(PERLEXE): $(PERLDLL) $(CONFIGPM) $(PERLEXE_OBJ) $(PERLEXE_RES)
+$(PERLEXE): $(CONFIGPM) $(PERLEXE_OBJ) $(PERLEXE_RES) $(PERLIMPLIB)
+ifeq ($(CCTYPE),GCC)
$(LINK32) -mconsole -o $@ $(BLINK_FLAGS) \
$(PERLEXE_OBJ) $(PERLEXE_RES) $(PERLIMPLIB) $(LIBFILES)
+else
+ $(LINK32) -out:$@ $(BLINK_FLAGS) \
+ $(PERLEXE_OBJ) $(PERLEXE_RES) $(PERLIMPLIB) $(LIBFILES) $(SETARGV_OBJ)
+ $(EMBED_EXE_MANI)
+endif
copy $(PERLEXE) $(WPERLEXE)
$(MINIPERL) -I..\lib bin\exetype.pl $(WPERLEXE) WINDOWS
$(PERLEXESTATIC): $(PERLSTATICLIB) $(CONFIGPM) $(PERLEXEST_OBJ) $(PERLEXE_RES)
+ifeq ($(CCTYPE),GCC)
$(LINK32) -mconsole -o $@ $(BLINK_FLAGS) \
$(PERLEXEST_OBJ) $(PERLEXE_RES) $(PERLSTATICLIB) $(LIBFILES)
-
-MakePPPort: $(MINIPERL) $(CONFIGPM) Extensions_nonxs
- $(MINIPERL) -I..\lib ..\mkppport
+else
+ $(LINK32) -out:$@ $(BLINK_FLAGS) \
+ $(PERLEXEST_OBJ) $(PERLEXE_RES) $(PERLSTATICLIB) $(LIBFILES) $(SETARGV_OBJ)
+ $(EMBED_EXE_MANI)
+endif
#-------------------------------------------------------------------------------
# There's no direct way to mark a dependency on
# DynaLoader.pm, so this will have to do
-Extensions : ..\make_ext.pl ..\lib\buildcustomize.pl $(PERLDEP) $(CONFIGPM) $(DYNALOADER)
- $(XCOPY) "..\*.h" $(COREDIR)\$(NULL)
- $(MINIPERL) -I..\lib ..\make_ext.pl "MAKE=$(MAKE)" --dir=$(CPANDIR) --dir=$(DISTDIR) --dir=$(EXTDIR) --dynamic
-Extensions_reonly : ..\make_ext.pl ..\lib\buildcustomize.pl $(PERLDEP) $(CONFIGPM) $(DYNALOADER)
- $(XCOPY) "..\*.h" $(COREDIR)\$(NULL)
- $(MINIPERL) -I..\lib ..\make_ext.pl "MAKE=$(MAKE)" --dir=$(CPANDIR) --dir=$(DISTDIR) --dir=$(EXTDIR) --dynamic +re
+#most of deps of this target are in DYNALOADER and therefore omitted here
+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)
+ $(MINIPERL) -I..\lib ..\make_ext.pl "MAKE=$(PLMAKE)" --dir=$(CPANDIR) --dir=$(DISTDIR) --dir=$(EXTDIR) --dynamic +Unicode/Normalize
-Extensions_static : ..\make_ext.pl ..\lib\buildcustomize.pl list_static_libs.pl $(PERLDEP) $(CONFIGPM) Extensions_nonxs
- $(XCOPY) "..\*.h" $(COREDIR)\$(NULL)
- $(MINIPERL) -I..\lib ..\make_ext.pl "MAKE=$(MAKE)" --dir=$(CPANDIR) --dir=$(DISTDIR) --dir=$(EXTDIR) --static
+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
$(MINIPERL) -I..\lib list_static_libs.pl > Extensions_static
-Extensions_nonxs : ..\make_ext.pl ..\lib\buildcustomize.pl $(PERLDEP) $(CONFIGPM) ..\pod\perlfunc.pod
- $(XCOPY) "..\*.h" $(COREDIR)\$(NULL)
- $(MINIPERL) -I..\lib ..\make_ext.pl "MAKE=$(MAKE)" --dir=$(CPANDIR) --dir=$(DISTDIR) --dir=$(EXTDIR) --nonxs
+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
-$(DYNALOADER) : ..\make_ext.pl ..\lib\buildcustomize.pl $(PERLDEP) $(CONFIGPM) Extensions_nonxs
- $(XCOPY) "..\*.h" $(COREDIR)\$(NULL)
- $(MINIPERL) -I..\lib ..\make_ext.pl "MAKE=$(MAKE)" --dir=$(EXTDIR) --dynaloader
+#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
Extensions_clean :
- -if exist $(MINIPERL) $(MINIPERL) -I..\lib ..\make_ext.pl "MAKE=$(MAKE)" --dir=$(CPANDIR) --dir=$(DISTDIR) --dir=$(EXTDIR) --all --target=clean
+ -if exist $(MINIPERL) $(MINIPERL) -I..\lib ..\make_ext.pl "MAKE=$(PLMAKE)" --dir=$(CPANDIR) --dir=$(DISTDIR) --dir=$(EXTDIR) --all --target=clean
Extensions_realclean :
- -if exist $(MINIPERL) $(MINIPERL) -I..\lib ..\make_ext.pl "MAKE=$(MAKE)" --dir=$(CPANDIR) --dir=$(DISTDIR) --dir=$(EXTDIR) --all --target=realclean
+ -if exist $(MINIPERL) $(MINIPERL) -I..\lib ..\make_ext.pl "MAKE=$(PLMAKE)" --dir=$(CPANDIR) --dir=$(DISTDIR) --dir=$(EXTDIR) --all --target=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
+ifeq ($(BUILD_STATIC),define)
+rebasePE : Extensions $(PERLDLL) Extensions_normalize $(PERLEXE) $(PERLEXESTATIC)
+else
+rebasePE : Extensions $(PERLDLL) Extensions_normalize $(PERLEXE)
+endif
+ $(NOOP)
#-------------------------------------------------------------------------------
-doc: $(PERLEXE) ..\pod\perltoc.pod
+doc: $(PERLEXE) $(PERLDLL) ..\pod\perltoc.pod
$(PERLEXE) -I..\lib ..\installhtml --podroot=.. --htmldir=$(HTMLDIR) \
--podpath=pod:lib:utils --htmlroot="file://$(subst :,|,$(INST_HTML))"\
--recurse
# Note that this next section is parsed (and regenerated) by pod/buildtoc
# so please check that script before making structural changes here
-utils: $(PERLEXE) ..\utils\Makefile
- cd ..\utils && $(MAKE) PERL=$(MINIPERL)
+utils: $(HAVEMINIPERL) ..\utils\Makefile
+ cd ..\utils && $(PLMAKE) PERL=$(MINIPERL)
copy ..\README.aix ..\pod\perlaix.pod
copy ..\README.amiga ..\pod\perlamiga.pod
copy ..\README.android ..\pod\perlandroid.pod
copy ..\README.tw ..\pod\perltw.pod
copy ..\README.vos ..\pod\perlvos.pod
copy ..\README.win32 ..\pod\perlwin32.pod
- copy ..\pod\perldelta.pod ..\pod\perl5217delta.pod
- $(PERLEXE) $(PL2BAT) $(UTILS)
+ copy ..\pod\perldelta.pod ..\pod\perl5254delta.pod
+ $(MINIPERL) -I..\lib $(PL2BAT) $(UTILS)
$(MINIPERL) -I..\lib ..\autodoc.pl ..
$(MINIPERL) -I..\lib ..\pod\perlmodlib.PL -q ..
-..\pod\perltoc.pod: $(PERLEXE) Extensions Extensions_nonxs
+..\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)\Test
-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 \
- perl5217delta.pod perlaix.pod perlamiga.pod perlandroid.pod \
+ perl5254delta.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 \
perltru64.pod perltw.pod perluniprops.pod perlvos.pod \
perlwin32.pod
-cd ..\utils && del /f h2ph splain perlbug pl2pm c2ph pstruct h2xs \
- perldoc perlivp libnetcfg enc2xs piconv cpan *.bat \
+ 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 \
perlmainst.c
inst_lib : $(CONFIGPM)
$(RCOPY) ..\lib $(INST_LIB)\$(NULL)
-$(UNIDATAFILES) ..\pod\perluniprops.pod .UPDATEALL : $(MINIPERL) $(CONFIGPM) ..\lib\unicore\mktables Extensions_nonxs
- cd ..\lib\unicore && \
- ..\$(MINIPERL) -I.. -I..\..\dist\Cwd\lib -I..\..\dist\Cwd mktables -P ..\..\pod -maketest -makelist -p
+$(UNIDATAFILES) : ..\pod\perluniprops.pod
-minitest : $(MINIPERL) $(GLOBEXE) $(CONFIGPM) $(UNIDATAFILES) utils
+..\pod\perluniprops.pod: ..\lib\unicore\mktables $(CONFIGPM)
+ $(MINIPERL) -I..\lib ..\lib\unicore\mktables -C ..\lib\unicore -P ..\pod -maketest -makelist -p
+
+minitest : $(HAVEMINIPERL) $(GLOBEXE) $(CONFIGPM) $(UNIDATAFILES) utils
$(XCOPY) $(MINIPERL) ..\t\$(NULL)
if exist ..\t\perl.exe del /f ..\t\perl.exe
rename ..\t\miniperl.exe perl.exe
cd ..\t && \
$(MINIPERL) -I..\lib harness base/*.t comp/*.t cmd/*.t io/*.t opbasic/*.t op/*.t pragma/*.t
-test-prep : all utils ..\pod\perltoc.pod
+test-prep : all utils ..\pod\perltoc.pod $(TESTPREPGCC)
$(XCOPY) $(PERLEXE) ..\t\$(NULL)
$(XCOPY) $(PERLDLL) ..\t\$(NULL)
$(XCOPY) $(GLOBEXE) ..\t\$(NULL)
# your compiler, and upon the values of "x".
# libstdc++-6.dll is copied if it exists as it, too, may then be needed.
# Without this copying, the op/taint.t test script will fail.
+
+ifeq ($(CCTYPE),GCC)
+
+test-prep-gcc :
if exist $(CCDLLDIR)\libgcc_s_seh-1.dll $(XCOPY) $(CCDLLDIR)\libgcc_s_seh-1.dll ..\t\$(NULL)
if exist $(CCDLLDIR)\libgcc_s_sjlj-1.dll $(XCOPY) $(CCDLLDIR)\libgcc_s_sjlj-1.dll ..\t\$(NULL)
if exist $(CCDLLDIR)\libgcc_s_dw2-1.dll $(XCOPY) $(CCDLLDIR)\libgcc_s_dw2-1.dll ..\t\$(NULL)
if exist $(CCDLLDIR)\libstdc++-6.dll $(XCOPY) $(CCDLLDIR)\libstdc++-6.dll ..\t\$(NULL)
if exist $(CCDLLDIR)\libwinpthread-1.dll $(XCOPY) $(CCDLLDIR)\libwinpthread-1.dll ..\t\$(NULL)
+endif
+
test : test-prep
set PERL_STATIC_EXT=$(STATIC_EXT) && \
- cd ..\t && $(PERLEXE) -I..\lib harness $(TEST_SWITCHES) $(TEST_FILES)
+ cd ..\t && perl.exe harness $(TEST_SWITCHES) $(TEST_FILES)
test_porting : test-prep
set PERL_STATIC_EXT=$(STATIC_EXT) && \
- cd ..\t && $(PERLEXE) -I..\lib harness $(TEST_SWITCHES) porting\*.t ..\lib\diagnostics.t
+ cd ..\t && perl.exe harness $(TEST_SWITCHES) porting\*.t ..\lib\diagnostics.t
test-reonly : reonly utils
$(XCOPY) $(PERLEXE) ..\t\$(NULL)
$(XCOPY) $(PERLDLL) ..\t\$(NULL)
$(XCOPY) $(GLOBEXE) ..\t\$(NULL)
- cd ..\t && \
- $(PERLEXE) -I..\lib harness $(OPT) -re \bpat\\/ $(EXTRA) && \
- cd ..\win32
+ cd ..\t && perl.exe harness $(OPT) -re \bpat\\/ $(EXTRA)
regen :
- cd .. && regen.pl && cd win32
+ cd .. && regen.pl
test-notty : test-prep
set PERL_STATIC_EXT=$(STATIC_EXT) && \
set PERL_SKIP_TTY_TEST=1 && \
- cd ..\t && $(PERLEXE) -I.\lib harness $(TEST_SWITCHES) $(TEST_FILES)
+ cd ..\t && perl.exe harness $(TEST_SWITCHES) $(TEST_FILES)
_test :
$(XCOPY) $(PERLEXE) ..\t\$(NULL)
$(XCOPY) $(PERLDLL) ..\t\$(NULL)
$(XCOPY) $(GLOBEXE) ..\t\$(NULL)
set PERL_STATIC_EXT=$(STATIC_EXT) && \
- cd ..\t && $(PERLEXE) -I..\lib harness $(TEST_SWITCHES) $(TEST_FILES)
+ cd ..\t && perl.exe harness $(TEST_SWITCHES) $(TEST_FILES)
_clean :
-@erase miniperlmain$(o)
-@erase perlglob$(o)
-@erase perlmain$(o)
-@erase perlmainst$(o)
- -@erase config.w32
-@erase /f config.h
-@erase /f ..\git_version.h
-@erase $(GLOBEXE)
-@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 ..\*$(o) ..\*$(a) ..\*.exp *$(o) *$(a) *.exp *.res
-@erase ..\t\*.exe ..\t\*.dll ..\t\*.bat
-@erase *.ilk
- -@erase *.pdb
+ -@erase *.pdb ..\*.pdb
-@erase Extensions_static
clean : Extensions_clean _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 "gmake nok" instead.
-ok: utils
- $(PERLEXE) -I..\lib ..\utils\perlbug -ok -s "(UNINSTALLED)"
+ok: utils $(PERLEXE) $(PERLDLL) Extensions_nonxs Extensions
+ $(PERLEXE) ..\utils\perlbug -ok -s "(UNINSTALLED)"
+
+okfile: utils $(PERLEXE) $(PERLDLL) Extensions_nonxs Extensions
+ $(PERLEXE) ..\utils\perlbug -ok -s "(UNINSTALLED)" -F perl.ok
-okfile: utils
- $(PERLEXE) -I..\lib ..\utils\perlbug -ok -s "(UNINSTALLED)" -F perl.ok
+nok: utils $(PERLEXE) $(PERLDLL) Extensions_nonxs Extensions
+ $(PERLEXE) ..\utils\perlbug -nok -s "(UNINSTALLED)"
-nok: utils
- $(PERLEXE) -I..\lib ..\utils\perlbug -nok -s "(UNINSTALLED)"
+nokfile: utils $(PERLEXE) $(PERLDLL) Extensions_nonxs Extensions
+ $(PERLEXE) ..\utils\perlbug -nok -s "(UNINSTALLED)" -F perl.nok
-nokfile: utils
- $(PERLEXE) -I..\lib ..\utils\perlbug -nok -s "(UNINSTALLED)" -F perl.nok