This is a live mirror of the Perl 5 development currently hosted at https://github.com/perl/perl5
Deparse.pm: handle optimised-away keys() better
[perl5.git] / win32 / GNUmakefile
CommitLineData
342634f3 1#
b6e5775f
DD
2# Makefile to build perl on Windows using GMAKE.
3# Supported compilers:
4# Microsoft Visual C++ 6.0 or later
5# MinGW with gcc-3.4.5 or later
6# Windows SDK 64-bit compiler and tools
342634f3 7#
8# This is set up to build a perl.exe that runs off a shared library
6612e40e 9# (perl527.dll). Also makes individual DLLs for the XS extensions.
342634f3 10#
11# The easiest way to customize the build process is to use parameters like this:
12#
13# c:\dev\perlsrc\win32> gmake INST_TOP=c:\sw\perl CCHOME=c:\sw\mingw USE_64_BIT_INT=define
14
15
16##
17## Make sure you read README.win32 *before* you mess with anything here!
18##
19
20#
21# We set this to point to cmd.exe in case GNU Make finds sh.exe in the path.
22# Comment this line out if necessary
23#
24SHELL := cmd.exe
25
26# define whether you want to use native gcc compiler or cross-compiler
27# possible values: gcc
28# i686-w64-mingw32-gcc
29# x86_64-w64-mingw32-gcc
30GCCBIN := gcc
31
32ifeq ($(GCCBIN),x86_64-w64-mingw32-gcc)
33GCCCROSS := x86_64-w64-mingw32
34endif
35ifeq ($(GCCBIN),i686-w64-mingw32-gcc)
36GCCCROSS := i686-w64-mingw32
37endif
38
342634f3 39
342634f3 40##
41## Build configuration. Edit the values below to suit your needs.
42##
43
44#
45# Set these to wherever you want "gmake install" to put your
46# newly built perl.
47#
48INST_DRV := c:
49INST_TOP := $(INST_DRV)\perl
50
51#
b6e5775f
DD
52# Uncomment if you want to build a 32-bit Perl using a 32-bit compiler
53# on a 64-bit version of Windows.
54#
55#WIN64 := undef
56
57#
342634f3 58# Comment this out if you DON'T want your perl installation to be versioned.
59# This means that the new installation will overwrite any files from the
60# old installation at the same INST_TOP location. Leaving it enabled is
61# the safest route, as perl adds the extra version directory to all the
62# locations it installs files to. If you disable it, an alternative
63# versioned installation can be obtained by setting INST_TOP above to a
64# path that includes an arbitrary version string.
65#
93cd6fca 66#INST_VER := \5.27.7
342634f3 67
68#
69# Comment this out if you DON'T want your perl installation to have
70# architecture specific components. This means that architecture-
71# specific files will be installed along with the architecture-neutral
72# files. Leaving it enabled is safer and more flexible, in case you
73# want to build multiple flavors of perl and install them together in
74# the same location. Commenting it out gives you a simpler
75# installation that is easier to understand for beginners.
76#
77#INST_ARCH := \$(ARCHNAME)
78
79#
80# Uncomment this if you want perl to run
81# $Config{sitelibexp}\sitecustomize.pl
82# before anything else. This script can then be set up, for example,
83# to add additional entries to @INC.
84#
85#USE_SITECUST := define
86
87#
88# uncomment to enable multiple interpreters. This is needed for fork()
89# emulation and for thread support, and is auto-enabled by USE_IMP_SYS
90# and USE_ITHREADS below.
91#
92USE_MULTI := define
93
94#
95# Interpreter cloning/threads; now reasonably complete.
96# This should be enabled to get the fork() emulation. This needs (and
97# will auto-enable) USE_MULTI above.
98#
99USE_ITHREADS := define
100
101#
102# uncomment to enable the implicit "host" layer for all system calls
103# made by perl. This is also needed to get fork(). This needs (and
104# will auto-enable) USE_MULTI above.
105#
106USE_IMP_SYS := define
107
108#
109# Comment out next assign to disable perl's I/O subsystem and use compiler's
110# stdio for IO - depending on your compiler vendor and run time library you may
111# then get a number of fails from make test i.e. bugs - complain to them not us ;-).
112# You will also be unable to take full advantage of perl5.8's support for multiple
113# encodings and may see lower IO performance. You have been warned.
114#
115USE_PERLIO := define
116
117#
118# Comment this out if you don't want to enable large file support for
119# some reason. Should normally only be changed to maintain compatibility
120# with an older release of perl.
121#
122USE_LARGE_FILES := define
123
124#
125# Uncomment this if you're building a 32-bit perl and want 64-bit integers.
126# (If you're building a 64-bit perl then you will have 64-bit integers whether
127# or not this is uncommented.)
128# Note: This option is not supported in 32-bit MSVC60 builds.
129#
130#USE_64_BIT_INT := define
131
132#
b6e5775f
DD
133# Uncomment this if you want to support the use of long doubles in GCC builds.
134# This option is not supported for MSVC builds.
342634f3 135#
f019f33b
SH
136#USE_LONG_DOUBLE := define
137
138#
139# Uncomment this if you want to build perl with __USE_MINGW_ANSI_STDIO defined.
140# (If you're building perl with USE_LONG_DOUBLE defined then
141# __USE_MINGW_ANSI_STDIO will be defined whether or not this is uncommented.)
142# This option is not supported for MSVC builds.
143#
144#USE_MINGW_ANSI_STDIO := define
342634f3 145
146#
458ea8f7
SH
147# Comment this out if you want the legacy default behavior of including '.' at
148# the end of @INC.
149#
150DEFAULT_INC_EXCLUDES_DOT := define
151
152#
bf543eaf
DD
153# Uncomment this if you want to disable looking up values from
154# HKEY_CURRENT_USER\Software\Perl and HKEY_LOCAL_MACHINE\Software\Perl in
155# the Registry.
156#
157#USE_NO_REGISTRY := define
158
159#
b6e5775f
DD
160# uncomment exactly one of the following
161#
162# Visual C++ 6.0 (aka Visual C++ 98)
163#CCTYPE := MSVC60
164# Visual C++ .NET 2002/2003 (aka Visual C++ 7.0/7.1) (full version)
165#CCTYPE := MSVC70
166# Visual C++ Toolkit 2003 (aka Visual C++ 7.1) (free command-line tools)
167#CCTYPE := MSVC70FREE
168# Windows Server 2003 SP1 Platform SDK (April 2005)
169#CCTYPE := SDK2003SP1
3aa3d69a 170# Visual C++ 2005 (aka Visual C++ 8.0) (full version or Express Edition)
b6e5775f 171#CCTYPE := MSVC80
3aa3d69a 172# Visual C++ 2008 (aka Visual C++ 9.0) (full version or Express Edition)
b6e5775f 173#CCTYPE := MSVC90
3aa3d69a 174# Visual C++ 2010 (aka Visual C++ 10.0) (full version or Express Edition)
b6e5775f 175#CCTYPE := MSVC100
3aa3d69a 176# Visual C++ 2012 (aka Visual C++ 11.0) (full version or Express Edition)
b6e5775f 177#CCTYPE := MSVC110
3aa3d69a 178# Visual C++ 2013 (aka Visual C++ 12.0) (full version or Express Edition)
b6e5775f 179#CCTYPE := MSVC120
3aa3d69a 180# Visual C++ 2015 (aka Visual C++ 14.0) (full version or Express Edition)
1f664ef5 181#CCTYPE := MSVC140
3aa3d69a 182# Visual C++ 2017 (aka Visual C++ 14.1) (full version or Community Edition)
88b13658 183#CCTYPE := MSVC141
b6e5775f 184# MinGW or mingw-w64 with gcc-3.4.5 or later
ca30c090 185#CCTYPE := GCC
b6e5775f
DD
186
187#
188# If you are using Intel C++ Compiler uncomment this
189#
190#__ICC := define
191
192#
bf543eaf 193# uncomment next line if you want debug version of perl (big/slow)
342634f3 194# If not enabled, we automatically try to use maximum optimization
195# with all compilers that are known to have a working optimizer.
196#
197#CFG := Debug
198
199#
200# uncomment to enable linking with setargv.obj under the Visual C
201# compiler. Setting this options enables perl to expand wildcards in
202# arguments, but it may be harder to use alternate methods like
203# File::DosGlob that are more powerful. This option is supported only with
204# Visual C.
205#
206#USE_SETARGV := define
207
208#
209# set this if you wish to use perl's malloc
210# WARNING: Turning this on/off WILL break binary compatibility with extensions
211# you may have compiled with/without it. Be prepared to recompile all
212# extensions if you change the default. Currently, this cannot be enabled
213# if you ask for USE_IMP_SYS above.
214#
215#PERL_MALLOC := define
216
217#
218# set this to enable debugging mstats
219# This must be enabled to use the Devel::Peek::mstat() function. This cannot
220# be enabled without PERL_MALLOC as well.
221#
222#DEBUG_MSTATS := define
223
224#
225# set this to additionally provide a statically linked perl-static.exe.
226# Note that dynamic loading will not work with this perl, so you must
227# include required modules statically using the STATIC_EXT or ALL_STATIC
6612e40e 228# variables below. A static library perl527s.lib will also be created.
342634f3 229# Ordinary perl.exe is not affected by this option.
230#
231#BUILD_STATIC := define
232
233#
234# in addition to BUILD_STATIC the option ALL_STATIC makes *every*
235# extension get statically built
236# This will result in a very large perl executable, but the main purpose
237# is to have proper linking set so as to be able to create miscellaneous
238# executables with different built-in extensions
239#
240#ALL_STATIC := define
241
242#
88b13658
SH
243# set the install locations of the compiler
244# Running VCVARS32.BAT, VCVARSALL.BAT or similar is *required* when using
245# Visual C++.
342634f3 246#
f82c7fdb 247#CCHOME := C:\MinGW
342634f3 248
249#
250# Additional compiler flags can be specified here.
251#
252BUILDOPT := $(BUILDOPTEXTRA)
253
254#
255# This should normally be disabled. Enabling it will disable the File::Glob
256# implementation of CORE::glob.
257#
258#BUILDOPT += -DPERL_EXTERNAL_GLOB
259
260#
261# Perl needs to read scripts in text mode so that the DATA filehandle
262# works correctly with seek() and tell(), or around auto-flushes of
263# all filehandles (e.g. by system(), backticks, fork(), etc).
264#
265# The current version on the ByteLoader module on CPAN however only
266# works if scripts are read in binary mode. But before you disable text
267# mode script reading (and break some DATA filehandle functionality)
268# please check first if an updated ByteLoader isn't available on CPAN.
269#
270BUILDOPT += -DPERL_TEXTMODE_SCRIPTS
271
272#
273# specify semicolon-separated list of extra directories that modules will
274# look for libraries (spaces in path names need not be quoted)
275#
276EXTRALIBDIRS :=
277
278#
279# set this to your email address (perl will guess a value from
280# from your loginname and your hostname, which may not be right)
281#
282#EMAIL :=
283
284##
285## Build configuration ends.
286##
287
288##################### CHANGE THESE ONLY IF YOU MUST #####################
289
290PERL_MALLOC ?= undef
291DEBUG_MSTATS ?= undef
292
293USE_SITECUST ?= undef
294USE_MULTI ?= undef
295USE_ITHREADS ?= undef
296USE_IMP_SYS ?= undef
297USE_PERLIO ?= undef
298USE_LARGE_FILES ?= undef
299USE_64_BIT_INT ?= undef
300USE_LONG_DOUBLE ?= undef
458ea8f7 301DEFAULT_INC_EXCLUDES_DOT ?= undef
bf543eaf 302USE_NO_REGISTRY ?= undef
342634f3 303
304ifeq ($(USE_IMP_SYS),define)
305PERL_MALLOC = undef
306endif
307
308ifeq ($(PERL_MALLOC),undef)
309DEBUG_MSTATS = undef
310endif
311
312ifeq ($(DEBUG_MSTATS),define)
313BUILDOPT += -DPERL_DEBUGGING_MSTATS
314endif
315
316ifeq ("$(USE_IMP_SYS) $(USE_MULTI)","define undef")
317USE_MULTI = define
318endif
319
320ifeq ("$(USE_ITHREADS) $(USE_MULTI)","define undef")
321USE_MULTI = define
322endif
323
324ifeq ($(USE_SITECUST),define)
325BUILDOPT += -DUSE_SITECUSTOMIZE
326endif
327
328ifneq ($(USE_MULTI),undef)
329BUILDOPT += -DPERL_IMPLICIT_CONTEXT
330endif
331
332ifneq ($(USE_IMP_SYS),undef)
333BUILDOPT += -DPERL_IMPLICIT_SYS
334endif
335
bf543eaf
DD
336ifeq ($(USE_NO_REGISTRY),define)
337BUILDOPT += -DWIN32_NO_REGISTRY
338endif
339
745dedb9 340ifeq ($(CCTYPE),GCC)
ca30c090
DD
341GCCTARGET := $(shell $(GCCBIN) -dumpmachine)
342endif
343
344#no explicit CCTYPE given, do auto detection
345ifeq ($(CCTYPE),)
346GCCTARGET := $(shell $(GCCBIN) -dumpmachine 2>NUL)
347#do we have a GCC?
348ifneq ($(GCCTARGET),)
349CCTYPE := GCC
350else
351#use var to capture 1st line only, not 8th token of lines 2 & 3 in cl.exe output
352#rmving the cmd /c causes the var2b undef4echo but!4"set MSVCVER", cmd.exe bug?
353MSVCVER := $(shell (set MSVCVER=) & (for /f "tokens=8 delims=.^ " \
354 %%i in ('cl ^2^>^&1') do if not defined MSVCVER set /A "MSVCVER=%%i-6") \
355 & cmd /c echo %%MSVCVER%%)
356CCTYPE := MSVC$(MSVCVER)0
357endif
358endif
359
88b13658
SH
360# Versions of Visual C++ up to VC++ 7.1 define $(MSVCDir); versions since then
361# define $(VCINSTALLDIR) instead, but for VC++ 14.1 we need the subfolder given
362# by $(VCToolsInstallDir).
f82c7fdb
DD
363ifeq ($(CCHOME),)
364ifeq ($(CCTYPE),GCC)
365CCHOME := C:\MinGW
88b13658
SH
366else ifeq ($(CCTYPE),MSVC60)
367CCHOME := $(MSVCDir)
368else ifeq ($(CCTYPE),MSVC70)
369CCHOME := $(MSVCDir)
370else ifeq ($(CCTYPE),MSVC70FREE)
371CCHOME := $(MSVCDir)
372else ifeq ($(CCTYPE),MSVC141)
373CCHOME := $(VCToolsInstallDir)
f82c7fdb 374else
88b13658 375CCHOME := $(VCINSTALLDIR)
f82c7fdb
DD
376endif
377endif
378
ca30c090 379ifeq ($(CCTYPE),GCC)
745dedb9
DD
380ifeq ($(GCCTARGET),x86_64-w64-mingw32)
381WIN64 := define
ae146f54 382PROCESSOR_ARCHITECTURE := x64
745dedb9
DD
383endif
384ifeq ($(GCCTARGET),i686-w64-mingw32)
385WIN64 := undef
ae146f54 386PROCESSOR_ARCHITECTURE := x86
745dedb9
DD
387endif
388endif
389
b6e5775f
DD
390PROCESSOR_ARCHITECTURE ?= x86
391
392ifeq ($(WIN64),undef)
393PROCESSOR_ARCHITECTURE = x86
394endif
395
396ifeq ($(WIN64),)
397# When we are running from a 32bit cmd.exe on AMD64 then
398# PROCESSOR_ARCHITECTURE is set to x86 and PROCESSOR_ARCHITEW6432
399# is set to AMD64
400ifneq ($(PROCESSOR_ARCHITEW6432),)
401PROCESSOR_ARCHITECTURE = $(PROCESSOR_ARCHITEW6432)
402WIN64 = define
403else ifeq ($(PROCESSOR_ARCHITECTURE),AMD64)
404WIN64 = define
405else ifeq ($(PROCESSOR_ARCHITECTURE),IA64)
406WIN64 = define
407else
408WIN64 = undef
409endif
410endif
411
342634f3 412ifeq ($(WIN64),define)
413USE_64_BIT_INT = define
414endif
415
b6e5775f
DD
416# Treat 64-bit MSVC60 (doesn't really exist) as SDK2003SP1 because
417# both link against MSVCRT.dll (which is part of Windows itself) and
418# not against a compiler specific versioned runtime.
419ifeq ("$(WIN64) $(CCTYPE)","define MSVC60")
420CCTYPE = SDK2003SP1
421endif
422
423# Disable the 64-bit-int option for (32-bit) MSVC60 builds since that compiler
424# does not support it.
425ifeq ($(CCTYPE),MSVC60)
426USE_64_BIT_INT = undef
427endif
428
429# Disable the long double option for MSVC builds since that compiler
430# does not support it.
431ifneq ($(CCTYPE),GCC)
432USE_LONG_DOUBLE = undef
433endif
434
435ARCHITECTURE = $(PROCESSOR_ARCHITECTURE)
436ifeq ($(ARCHITECTURE),AMD64)
437ARCHITECTURE = x64
438endif
439ifeq ($(ARCHITECTURE),IA64)
440ARCHITECTURE = ia64
441endif
442
342634f3 443ifeq ($(USE_MULTI),define)
444ARCHNAME = MSWin32-$(ARCHITECTURE)-multi
445else
446ifeq ($(USE_PERLIO),define)
447ARCHNAME = MSWin32-$(ARCHITECTURE)-perlio
448else
449ARCHNAME = MSWin32-$(ARCHITECTURE)
450endif
451endif
452
453ifeq ($(USE_PERLIO),define)
454BUILDOPT += -DUSE_PERLIO
455endif
456
457ifeq ($(USE_ITHREADS),define)
458ARCHNAME := $(ARCHNAME)-thread
459endif
460
461ifneq ($(WIN64),define)
462ifeq ($(USE_64_BIT_INT),define)
463ARCHNAME := $(ARCHNAME)-64int
464endif
465endif
466
467ifeq ($(USE_LONG_DOUBLE),define)
468ARCHNAME := $(ARCHNAME)-ld
469endif
470
88b13658
SH
471# Set the install location of the compiler headers/libraries.
472# These are saved into $Config{incpath} and $Config{libpth}.
473ifneq ($(GCCCROSS),)
474CCINCDIR := $(CCHOME)\$(GCCCROSS)\include
475CCLIBDIR := $(CCHOME)\$(GCCCROSS)\lib
476ARCHPREFIX := $(GCCCROSS)-
477else
478CCINCDIR := $(CCHOME)\include
479ifeq ($(CCTYPE),MSVC141)
480ifeq ($(WIN64),define)
481CCLIBDIR := $(CCHOME)\lib\x64
482else
483CCLIBDIR := $(CCHOME)\lib\x86
484endif
485else
486CCLIBDIR := $(CCHOME)\lib
487endif
488ARCHPREFIX :=
489endif
490
491# Set DLL location for GCC compilers.
492ifeq ($(CCTYPE),GCC)
493ifneq ($(GCCCROSS),)
494CCDLLDIR := $(CCLIBDIR)
495else
496CCDLLDIR := $(CCHOME)\bin
497endif
498endif
499
342634f3 500ARCHDIR = ..\lib\$(ARCHNAME)
501COREDIR = ..\lib\CORE
502AUTODIR = ..\lib\auto
503LIBDIR = ..\lib
504EXTDIR = ..\ext
505DISTDIR = ..\dist
506CPANDIR = ..\cpan
507PODDIR = ..\pod
508HTMLDIR = .\html
509
342634f3 510INST_SCRIPT = $(INST_TOP)$(INST_VER)\bin
511INST_BIN = $(INST_SCRIPT)$(INST_ARCH)
512INST_LIB = $(INST_TOP)$(INST_VER)\lib
513INST_ARCHLIB = $(INST_LIB)$(INST_ARCH)
514INST_COREDIR = $(INST_ARCHLIB)\CORE
515INST_HTML = $(INST_TOP)$(INST_VER)\html
516
517#
518# Programs to compile, build .lib files and link
519#
520
521MINIBUILDOPT :=
522
b6e5775f
DD
523ifeq ($(CCTYPE),GCC)
524
342634f3 525CC = $(ARCHPREFIX)gcc
526LINK32 = $(ARCHPREFIX)g++
527LIB32 = $(ARCHPREFIX)ar rc
528IMPLIB = $(ARCHPREFIX)dlltool
529RSC = $(ARCHPREFIX)windres
530
531ifeq ($(USE_LONG_DOUBLE),define)
532BUILDOPT += -D__USE_MINGW_ANSI_STDIO
533MINIBUILDOPT += -D__USE_MINGW_ANSI_STDIO
f019f33b
SH
534else ifeq ($(USE_MINGW_ANSI_STDIO),define)
535BUILDOPT += -D__USE_MINGW_ANSI_STDIO
536MINIBUILDOPT += -D__USE_MINGW_ANSI_STDIO
342634f3 537endif
538
ca30c090
DD
539GCCVER1 := $(shell for /f "delims=. tokens=1,2,3" %%i in ('gcc -dumpversion') do echo %%i)
540GCCVER2 := $(shell for /f "delims=. tokens=1,2,3" %%i in ('gcc -dumpversion') do echo %%j)
541GCCVER3 := $(shell for /f "delims=. tokens=1,2,3" %%i in ('gcc -dumpversion') do echo %%k)
542
342634f3 543# If you are using GCC, 4.3 or later by default we add the -fwrapv option.
544# See https://rt.perl.org/Ticket/Display.html?id=121505
545#
546GCCWRAPV := $(shell if "$(GCCVER1)"=="4" (if "$(GCCVER2)" geq "3" echo define) else if "$(GCCVER1)" geq "5" (echo define))
547
548ifeq ($(GCCWRAPV),define)
549BUILDOPT += -fwrapv
550MINIBUILDOPT += -fwrapv
551endif
552
553i = .i
554o = .o
555a = .a
556
557#
558# Options
559#
560
bf543eaf 561INCLUDES = -I.\include -I. -I..
342634f3 562DEFINES = -DWIN32
563ifeq ($(WIN64),define)
564DEFINES += -DWIN64 -DCONSERVATIVE
565endif
566LOCDEFS = -DPERLDLL -DPERL_CORE
342634f3 567CXX_FLAG = -xc++
568LIBC =
bf543eaf
DD
569LIBFILES = $(LIBC) -lmoldname -lkernel32 -luser32 -lgdi32 -lwinspool \
570 -lcomdlg32 -ladvapi32 -lshell32 -lole32 -loleaut32 -lnetapi32 \
571 -luuid -lws2_32 -lmpr -lwinmm -lversion -lodbc32 -lodbccp32 -lcomctl32
342634f3 572
573ifeq ($(CFG),Debug)
574OPTIMIZE = -g -O2 -DDEBUGGING
575LINK_DBG = -g
576else
577OPTIMIZE = -s -O2
578LINK_DBG = -s
579endif
580
581EXTRACFLAGS =
582CFLAGS = $(EXTRACFLAGS) $(INCLUDES) $(DEFINES) $(LOCDEFS) $(OPTIMIZE)
583LINK_FLAGS = $(LINK_DBG) -L"$(INST_COREDIR)" -L"$(CCLIBDIR)"
584OBJOUT_FLAG = -o
585EXEOUT_FLAG = -o
586LIBOUT_FLAG =
bf543eaf 587PDBOUT =
342634f3 588
589BUILDOPT += -fno-strict-aliasing -mms-bitfields
16d5aac1 590MINIBUILDOPT += -fno-strict-aliasing
b6e5775f
DD
591
592TESTPREPGCC = test-prep-gcc
593
594else
595
596o = .obj
597
598# All but the free version of VC++ 7.1 can load DLLs on demand. Makes the test
599# suite run in about 10% less time.
600ifneq ($(CCTYPE),MSVC70FREE)
601# If no registry, advapi32 is only used for Perl_pp_getlogin/getlogin/GetUserNameA
602# which is rare to execute
603ifneq ($(USE_NO_REGISTRY),undef)
604DELAYLOAD = -DELAYLOAD:ws2_32.dll -DELAYLOAD:advapi32.dll delayimp.lib
605MINIDELAYLOAD =
606else
607DELAYLOAD = -DELAYLOAD:ws2_32.dll delayimp.lib
608#miniperl never does any registry lookups
609MINIDELAYLOAD = -DELAYLOAD:advapi32.dll
610endif
611endif
612
613# Visual C++ 2005 and 2008 (VC++ 8.0 and 9.0) create manifest files for EXEs and
614# DLLs. These either need copying everywhere with the binaries, or else need
615# embedding in them otherwise MSVCR80.dll or MSVCR90.dll won't be found. For
616# simplicity, embed them if they exist (and delete them afterwards so that they
617# don't get installed too).
618EMBED_EXE_MANI = if exist $@.manifest mt -nologo -manifest $@.manifest -outputresource:$@;1 && \
619 if exist $@.manifest del $@.manifest
620EMBED_DLL_MANI = if exist $@.manifest mt -nologo -manifest $@.manifest -outputresource:$@;2 && \
621 if exist $@.manifest del $@.manifest
622
623# Most relevant compiler-specific options fall into two groups:
624# either pre-MSVC80 or MSVC80 onwards, so define a macro for this.
625ifeq ($(CCTYPE),MSVC60)
626PREMSVC80 = define
627else ifeq ($(CCTYPE),MSVC70)
628PREMSVC80 = define
629else ifeq ($(CCTYPE),MSVC70FREE)
630PREMSVC80 = define
631else
632PREMSVC80 = undef
633endif
634
635ifneq ($(__ICC),define)
636CC = cl
637LINK32 = link
638else
639CC = icl
640LINK32 = xilink
641endif
642LIB32 = $(LINK32) -lib
643RSC = rc
644
645#
646# Options
647#
648
649INCLUDES = -I.\include -I. -I..
650#PCHFLAGS = -Fpc:\temp\vcmoduls.pch -YX
651DEFINES = -DWIN32 -D_CONSOLE -DNO_STRICT
652LOCDEFS = -DPERLDLL -DPERL_CORE
653CXX_FLAG = -TP -EHsc
654
1f664ef5
SH
655ifeq ($(CCTYPE),MSVC140)
656LIBC = ucrt.lib
88b13658
SH
657else ifeq ($(CCTYPE),MSVC141)
658LIBC = ucrt.lib
1f664ef5 659else
b6e5775f 660LIBC = msvcrt.lib
1f664ef5 661endif
b6e5775f
DD
662
663ifeq ($(CFG),Debug)
664OPTIMIZE = -Od -MD -Zi -DDEBUGGING
665LINK_DBG = -debug
666else ifeq ($(CFG),DebugSymbols)
667OPTIMIZE = -Od -MD -Zi
668LINK_DBG = -debug
669else ifeq ($(CFG),DebugFull)
1f664ef5
SH
670ifeq ($(CCTYPE),MSVC140)
671LIBC = ucrtd.lib
88b13658
SH
672else ifeq ($(CCTYPE),MSVC141)
673LIBC = ucrtd.lib
1f664ef5 674else
b6e5775f 675LIBC = msvcrtd.lib
1f664ef5 676endif
b6e5775f
DD
677OPTIMIZE = -Od -MDd -Zi -D_DEBUG -DDEBUGGING
678LINK_DBG = -debug
679else
680# -O1 yields smaller code, which turns out to be faster than -O2 on x86 and x64
681OPTIMIZE = -O1 -MD -Zi -DNDEBUG
682# we enable debug symbols in release builds also
683LINK_DBG = -debug -opt:ref,icf
684# you may want to enable this if you want COFF symbols in the executables
685# in addition to the PDB symbols. The default Dr. Watson that ships with
686# Windows can use the the former but not latter. The free WinDbg can be
687# installed to get better stack traces from just the PDB symbols, so we
688# avoid the bloat of COFF symbols by default.
689#LINK_DBG = $(LINK_DBG) -debugtype:both
690ifneq ($(CCTYPE),MSVC60)
691# enable Whole Program Optimizations (WPO) and Link Time Code Generation (LTCG)
692OPTIMIZE += -GL
693LINK_DBG += -ltcg
694LIB_FLAGS = -ltcg
695endif
696endif
697
698ifeq ($(WIN64),define)
699DEFINES += -DWIN64 -DCONSERVATIVE
700OPTIMIZE += -fp:precise
701endif
702
703# For now, silence warnings from VC++ 8.0 onwards about "unsafe" CRT functions
704# and POSIX CRT function names being deprecated.
705ifeq ($(PREMSVC80),undef)
706DEFINES += -D_CRT_SECURE_NO_DEPRECATE -D_CRT_NONSTDC_NO_DEPRECATE
707endif
708
3aa3d69a 709# Likewise for deprecated Winsock APIs in VC++ 14.0 onwards for now.
1f664ef5 710ifeq ($(CCTYPE),MSVC140)
88b13658 711DEFINES += -D_WINSOCK_DEPRECATED_NO_WARNINGS
88b13658
SH
712else ifeq ($(CCTYPE),MSVC141)
713DEFINES += -D_WINSOCK_DEPRECATED_NO_WARNINGS
1f664ef5
SH
714endif
715
b6e5775f
DD
716# In VS 2005 (VC++ 8.0) Microsoft changes time_t from 32-bit to
717# 64-bit, even in 32-bit mode. It also provides the _USE_32BIT_TIME_T
718# preprocessor option to revert back to the old functionality for
719# backward compatibility. We define this symbol here for older 32-bit
720# compilers only (which aren't using it at all) for the sole purpose
721# of getting it into $Config{ccflags}. That way if someone builds
722# Perl itself with e.g. VC6 but later installs an XS module using VC8
723# the time_t types will still be compatible.
724ifeq ($(WIN64),undef)
b5749b67 725ifeq ($(PREMSVC80),define)
b6e5775f
DD
726BUILDOPT += -D_USE_32BIT_TIME_T
727endif
728endif
729
730LIBBASEFILES = oldnames.lib kernel32.lib user32.lib gdi32.lib winspool.lib \
731 comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib \
732 netapi32.lib uuid.lib ws2_32.lib mpr.lib winmm.lib version.lib \
733 odbc32.lib odbccp32.lib comctl32.lib
734
1f664ef5
SH
735ifeq ($(CCTYPE),MSVC140)
736ifeq ($(CFG),DebugFull)
737LIBBASEFILES += msvcrtd.lib vcruntimed.lib
738else
739LIBBASEFILES += msvcrt.lib vcruntime.lib
740endif
88b13658
SH
741else ifeq ($(CCTYPE),MSVC141)
742ifeq ($(CFG),DebugFull)
743LIBBASEFILES += msvcrtd.lib vcruntimed.lib
744else
745LIBBASEFILES += msvcrt.lib vcruntime.lib
746endif
1f664ef5
SH
747endif
748
b6e5775f
DD
749# Avoid __intel_new_proc_init link error for libircmt.
750# libmmd is /MD equivelent, other variants exist.
751# libmmd is Intel C's math addon funcs to MS CRT, contains long doubles, C99,
752# and optimized C89 funcs
753ifeq ($(__ICC),define)
754LIBBASEFILES += libircmt.lib libmmd.lib
755endif
756
757# The 64 bit Windows Server 2003 SP1 SDK compilers link against MSVCRT.dll, which
758# doesn't include the buffer overrun verification code used by the /GS switch.
759# Since the code links against libraries that are compiled with /GS, this
760# "security cookie verification" code must be included via bufferoverflow.lib.
761ifeq ("$(WIN64) $(CCTYPE)","define SDK2003SP1")
762LIBBASEFILES += bufferoverflowU.lib
763endif
764
765LIBFILES = $(LIBBASEFILES) $(LIBC)
766
767EXTRACFLAGS = -nologo -GF -W3
768ifeq ($(__ICC),define)
769EXTRACFLAGS += -Qstd=c99
770endif
771ifeq ($(USE_CPLUSPLUS),define)
772EXTRACFLAGS += $(CXX_FLAG)
773endif
774CFLAGS = $(EXTRACFLAGS) $(INCLUDES) $(DEFINES) $(LOCDEFS) \
775 $(PCHFLAGS) $(OPTIMIZE)
776LINK_FLAGS = -nologo -nodefaultlib $(LINK_DBG) \
777 -libpath:"$(INST_COREDIR)" \
778 -machine:$(PROCESSOR_ARCHITECTURE)
779LIB_FLAGS += -nologo
780OBJOUT_FLAG = -Fo
781EXEOUT_FLAG = -Fe
782LIBOUT_FLAG = /out:
783PDBOUT = -Fd$(*).pdb
784TESTPREPGCC =
785
786endif
787
342634f3 788CFLAGS_O = $(CFLAGS) $(BUILDOPT)
789
b6e5775f 790ifeq ($(PREMSVC80),undef)
67c6176d 791PRIV_LINK_FLAGS += "/manifestdependency:type='Win32' name='Microsoft.Windows.Common-Controls' version='6.0.0.0' processorArchitecture='*' publicKeyToken='6595b64144ccf1df' language='*'"
b6e5775f
DD
792else
793RSC_FLAGS = -DINCLUDE_MANIFEST
794endif
795
88b13658 796# VS 2017 (VC++ 14.1) requires at minimum Windows 7 SP1 (with latest Windows Updates)
b6e5775f
DD
797
798# For XP support in >= VS 2013 (VC++ 12.0), subsystem is always in Config.pm
799# LINK_FLAGS else subsystem is only needed for EXE building, not XS DLL building
800# Console vs GUI makes no difference for DLLs, so use default for cleaner
801# building cmd lines
802
803ifeq ($(CCTYPE),MSVC120)
804ifeq ($(WIN64),define)
805LINK_FLAGS += -subsystem:console,"5.02"
806else
807LINK_FLAGS += -subsystem:console,"5.01"
808endif
809
b6e5775f
DD
810else ifeq ($(CCTYPE),MSVC140)
811ifeq ($(WIN64),define)
812LINK_FLAGS += -subsystem:console,"5.02"
813else
814LINK_FLAGS += -subsystem:console,"5.01"
815endif
816
b6e5775f
DD
817else ifneq ($(CCTYPE),GCC)
818PRIV_LINK_FLAGS += -subsystem:console
819endif
820
342634f3 821BLINK_FLAGS = $(PRIV_LINK_FLAGS) $(LINK_FLAGS)
822
823#################### do not edit below this line #######################
824############# NO USER-SERVICEABLE PARTS BEYOND THIS POINT ##############
825
bf543eaf
DD
826#prevent -j from reaching EUMM/make_ext.pl/"sub makes", Win32 EUMM not parallel
827#compatible yet
828unexport MAKEFLAGS
829
b6e5775f
DD
830a ?= .lib
831
832.SUFFIXES : .c .i $(o) .dll $(a) .exe .rc .res
833
342634f3 834%$(o): %.c
b6e5775f 835 $(CC) -c -I$(<D) $(CFLAGS_O) $(OBJOUT_FLAG)$@ $(PDBOUT) $<
342634f3 836
837%.i: %.c
838 $(CC) -c -I$(<D) $(CFLAGS_O) -E $< >$@
839
840%.c: %.y
841 $(NOOP)
842
843%.dll: %$(o)
844 $(LINK32) -o $@ $(BLINK_FLAGS) $< $(LIBFILES)
845 $(IMPLIB) --input-def $(*F).def --output-lib $(*F).a $@
846
847%.res: %.rc
b6e5775f 848ifeq ($(CCTYPE),GCC)
342634f3 849 $(RSC) --use-temp-file --include-dir=. --include-dir=.. -O COFF -D INCLUDE_MANIFEST -i $< -o $@
b6e5775f
DD
850else
851 $(RSC) -i.. -DINCLUDE_MANIFEST $<
852endif
342634f3 853
854#
855# various targets
bf543eaf
DD
856
857#do not put $(MINIPERL) as a dep/prereq in a rule, instead put $(HAVEMINIPERL)
858#$(MINIPERL) is not a buildable target, use "gmake mp" if you want to just build
859#miniperl alone
342634f3 860MINIPERL = ..\miniperl.exe
bf543eaf 861HAVEMINIPERL = ..\lib\buildcustomize.pl
342634f3 862MINIDIR = mini
863PERLEXE = ..\perl.exe
864WPERLEXE = ..\wperl.exe
865PERLEXESTATIC = ..\perl-static.exe
866STATICDIR = .\static.tmp
867GLOBEXE = ..\perlglob.exe
bf543eaf 868CONFIGPM = ..\lib\Config.pm
342634f3 869GENUUDMAP = ..\generate_uudmap.exe
870ifeq ($(BUILD_STATIC),define)
871PERLSTATIC = static
872else
873ifeq ($(ALL_STATIC),define)
874PERLSTATIC = static
875else
876PERLSTATIC =
877endif
878endif
879
880# Unicode data files generated by mktables
881UNIDATAFILES = ..\lib\unicore\Decomposition.pl ..\lib\unicore\TestProp.pl \
882 ..\lib\unicore\CombiningClass.pl ..\lib\unicore\Name.pl \
883 ..\lib\unicore\UCD.pl ..\lib\unicore\Name.pm \
884 ..\lib\unicore\Heavy.pl ..\lib\unicore\mktables.lst
885
886# Directories of Unicode data files generated by mktables
887UNIDATADIR1 = ..\lib\unicore\To
888UNIDATADIR2 = ..\lib\unicore\lib
889
890PERLEXE_MANIFEST= .\perlexe.manifest
891PERLEXE_ICO = .\perlexe.ico
892PERLEXE_RES = .\perlexe.res
893PERLDLL_RES =
894
895# Nominate a target which causes extensions to be re-built
896# This used to be $(PERLEXE), but at worst it is the .dll that they depend
897# on and really only the interface - i.e. the .def file used to export symbols
898# from the .dll
bf543eaf 899PERLDEP = $(PERLIMPLIB)
342634f3 900
901
902PL2BAT = bin\pl2bat.pl
903
904UTILS = \
905 ..\utils\h2ph \
906 ..\utils\splain \
907 ..\utils\perlbug \
908 ..\utils\pl2pm \
342634f3 909 ..\utils\h2xs \
910 ..\utils\perldoc \
911 ..\utils\perlivp \
912 ..\utils\libnetcfg \
913 ..\utils\enc2xs \
bf543eaf 914 ..\utils\encguess \
342634f3 915 ..\utils\piconv \
916 ..\utils\corelist \
917 ..\utils\cpan \
918 ..\utils\xsubpp \
919 ..\utils\pod2html \
920 ..\utils\prove \
921 ..\utils\ptar \
922 ..\utils\ptardiff \
923 ..\utils\ptargrep \
924 ..\utils\zipdetails \
925 ..\utils\shasum \
926 ..\utils\instmodsh \
927 ..\utils\json_pp \
928 bin\exetype.pl \
929 bin\runperl.pl \
930 bin\pl2bat.pl \
931 bin\perlglob.pl \
932 bin\search.pl
933
b6e5775f
DD
934ifeq ($(CCTYPE),GCC)
935
342634f3 936CFGSH_TMPL = config.gc
937CFGH_TMPL = config_H.gc
6612e40e
S
938PERLIMPLIB = $(COREDIR)\libperl527$(a)
939PERLIMPLIBBASE = libperl527$(a)
940PERLSTATICLIB = ..\libperl527s$(a)
342634f3 941INT64 = long long
942
b6e5775f
DD
943else
944
945CFGSH_TMPL = config.vc
946CFGH_TMPL = config_H.vc
947INT64 = __int64
948
949endif
950
342634f3 951# makedef.pl must be updated if this changes, and this should normally
952# only change when there is an incompatible revision of the public API.
6612e40e
S
953PERLIMPLIB ?= $(COREDIR)\perl527$(a)
954PERLIMPLIBBASE ?= perl527$(a)
955PERLEXPLIB ?= $(COREDIR)\perl527.exp
956PERLSTATICLIB ?= ..\perl527s$(a)
957PERLDLL = ..\perl527.dll
342634f3 958
bf543eaf
DD
959# don't let "gmake -n all" try to run "miniperl.exe make_ext.pl"
960PLMAKE = gmake
961
342634f3 962XCOPY = xcopy /f /r /i /d /y
963RCOPY = xcopy /f /r /i /e /d /y
964NOOP = @rem
965
bf543eaf
DD
966#first ones are arrange in compile time order for faster parallel building
967#see #123867 for details
342634f3 968MICROCORE_SRC = \
bf543eaf
DD
969 ..\toke.c \
970 ..\regcomp.c \
971 ..\regexec.c \
972 ..\op.c \
973 ..\sv.c \
974 ..\pp.c \
975 ..\pp_ctl.c \
976 ..\pp_sys.c \
977 ..\pp_pack.c \
978 ..\pp_hot.c \
979 ..\gv.c \
980 ..\perl.c \
981 ..\utf8.c \
982 ..\dump.c \
983 ..\hv.c \
342634f3 984 ..\av.c \
985 ..\caretx.c \
986 ..\deb.c \
987 ..\doio.c \
988 ..\doop.c \
a55c5245 989 ..\dquote.c \
342634f3 990 ..\globals.c \
16d5aac1 991 ..\mro_core.c \
342634f3 992 ..\locale.c \
993 ..\keywords.c \
994 ..\mathoms.c \
995 ..\mg.c \
996 ..\numeric.c \
342634f3 997 ..\pad.c \
342634f3 998 ..\perlapi.c \
999 ..\perly.c \
342634f3 1000 ..\pp_sort.c \
342634f3 1001 ..\reentr.c \
342634f3 1002 ..\run.c \
1003 ..\scope.c \
342634f3 1004 ..\taint.c \
f832b29a 1005 ..\time64.c \
342634f3 1006 ..\universal.c \
342634f3 1007 ..\util.c
1008
1009EXTRACORE_SRC += perllib.c
1010
1011ifeq ($(PERL_MALLOC),define)
1012EXTRACORE_SRC += ..\malloc.c
1013endif
1014
1015EXTRACORE_SRC += ..\perlio.c
1016
1017WIN32_SRC = \
1018 .\win32.c \
1019 .\win32sck.c \
1020 .\win32thread.c \
1021 .\fcrypt.c
1022
1023# We need this for miniperl build unless we override canned
1024# config.h #define building mini\*
1025#ifeq ($(USE_PERLIO)" == "define"
1026WIN32_SRC += .\win32io.c
1027#endif
1028
1029CORE_NOCFG_H = \
1030 ..\av.h \
1031 ..\cop.h \
1032 ..\cv.h \
1033 ..\dosish.h \
1034 ..\embed.h \
1035 ..\form.h \
1036 ..\gv.h \
1037 ..\handy.h \
1038 ..\hv.h \
1039 ..\hv_func.h \
1040 ..\iperlsys.h \
1041 ..\mg.h \
1042 ..\nostdio.h \
1043 ..\op.h \
1044 ..\opcode.h \
1045 ..\perl.h \
1046 ..\perlapi.h \
1047 ..\perlsdio.h \
1048 ..\perly.h \
1049 ..\pp.h \
1050 ..\proto.h \
1051 ..\regcomp.h \
1052 ..\regexp.h \
1053 ..\scope.h \
1054 ..\sv.h \
1055 ..\thread.h \
1056 ..\unixish.h \
1057 ..\utf8.h \
1058 ..\util.h \
1059 ..\warnings.h \
1060 ..\XSUB.h \
1061 ..\EXTERN.h \
1062 ..\perlvars.h \
1063 ..\intrpvar.h \
1064 .\include\dirent.h \
1065 .\include\netdb.h \
1066 .\include\sys\errno2.h \
1067 .\include\sys\socket.h \
1068 .\win32.h
1069
1070CORE_H = $(CORE_NOCFG_H) .\config.h ..\git_version.h
1071
1072UUDMAP_H = ..\uudmap.h
1073BITCOUNT_H = ..\bitcount.h
1074MG_DATA_H = ..\mg_data.h
1075GENERATED_HEADERS = $(UUDMAP_H) $(BITCOUNT_H) $(MG_DATA_H)
8657e86b
TC
1076
1077HAVE_COREDIR = .coreheaders
342634f3 1078
b6e5775f
DD
1079MICROCORE_OBJ = $(MICROCORE_SRC:.c=$(o))
1080CORE_OBJ = $(MICROCORE_OBJ) $(EXTRACORE_SRC:.c=$(o))
1081WIN32_OBJ = $(WIN32_SRC:.c=$(o))
342634f3 1082
1083MINICORE_OBJ = $(subst ..\,mini\,$(MICROCORE_OBJ)) \
1084 $(MINIDIR)\miniperlmain$(o) \
1085 $(MINIDIR)\perlio$(o)
1086MINIWIN32_OBJ = $(subst .\,mini\,$(WIN32_OBJ))
1087MINI_OBJ = $(MINICORE_OBJ) $(MINIWIN32_OBJ)
1088DLL_OBJ = $(DYNALOADER)
342634f3 1089
1090PERLDLL_OBJ = $(CORE_OBJ)
1091PERLEXE_OBJ = perlmain$(o)
1092PERLEXEST_OBJ = perlmainst$(o)
1093
1094PERLDLL_OBJ += $(WIN32_OBJ) $(DLL_OBJ)
1095
1096ifneq ($(USE_SETARGV),)
1097SETARGV_OBJ = setargv$(o)
1098endif
1099
1100ifeq ($(ALL_STATIC),define)
1101# some exclusions, unfortunately, until fixed:
1102# - MakeMaker isn't capable enough for SDBM_File (small bug)
1103STATIC_EXT = * !SDBM_File
1104else
1105# specify static extensions here, for example:
1106# (be sure to include Win32CORE to load Win32 on demand)
1107#STATIC_EXT = Win32CORE Cwd Compress/Raw/Zlib
1108STATIC_EXT = Win32CORE
1109endif
1110
1111DYNALOADER = ..\DynaLoader$(o)
1112
1113# vars must be separated by "\t+~\t+", since we're using the tempfile
1114# version of config_sh.pl (we were overflowing someone's buffer by
1115# trying to fit them all on the command line)
1116# -- BKS 10-17-1999
1117CFG_VARS = \
1118 "INST_TOP=$(INST_TOP)" \
1119 "INST_VER=$(INST_VER)" \
1120 "INST_ARCH=$(INST_ARCH)" \
1121 "archname=$(ARCHNAME)" \
1122 "cc=$(CC)" \
1123 "ld=$(LINK32)" \
b6e5775f 1124 "ccflags=$(subst ",\",$(EXTRACFLAGS) $(OPTIMIZE) $(DEFINES) $(BUILDOPT))" \
bf543eaf 1125 "usecplusplus=$(USE_CPLUSPLUS)" \
342634f3 1126 "cf_email=$(EMAIL)" \
1127 "d_mymalloc=$(PERL_MALLOC)" \
1128 "libs=$(LIBFILES)" \
b6e5775f
DD
1129 "incpath=$(subst ",\",$(CCINCDIR))" \
1130 "libperl=$(subst ",\",$(PERLIMPLIBBASE))" \
1131 "libpth=$(subst ",\",$(CCLIBDIR);$(EXTRALIBDIRS))" \
342634f3 1132 "libc=$(LIBC)" \
bf543eaf 1133 "make=$(PLMAKE)" \
342634f3 1134 "_o=$(o)" \
1135 "obj_ext=$(o)" \
1136 "_a=$(a)" \
1137 "lib_ext=$(a)" \
1138 "static_ext=$(STATIC_EXT)" \
1139 "usethreads=$(USE_ITHREADS)" \
1140 "useithreads=$(USE_ITHREADS)" \
1141 "usemultiplicity=$(USE_MULTI)" \
1142 "useperlio=$(USE_PERLIO)" \
1143 "use64bitint=$(USE_64_BIT_INT)" \
1144 "uselongdouble=$(USE_LONG_DOUBLE)" \
1145 "uselargefiles=$(USE_LARGE_FILES)" \
1146 "usesitecustomize=$(USE_SITECUST)" \
458ea8f7 1147 "default_inc_excludes_dot=$(DEFAULT_INC_EXCLUDES_DOT)" \
b6e5775f
DD
1148 "LINK_FLAGS=$(subst ",\",$(LINK_FLAGS))"\
1149 "optimize=$(subst ",\",$(OPTIMIZE))" \
342634f3 1150 "ARCHPREFIX=$(ARCHPREFIX)" \
1151 "WIN64=$(WIN64)"
1152
1153#
1154# Top targets
1155#
1156
1157.PHONY: all info
1158
bf543eaf 1159all : info rebasePE Extensions_nonxs $(PERLSTATIC)
342634f3 1160
1161info :
ca30c090
DD
1162 @echo # CCTYPE=$(CCTYPE)
1163ifeq ($(CCTYPE),GCC)
342634f3 1164 @echo # GCCBIN=$(GCCBIN)
1165 @echo # GCCVER=$(GCCVER1).$(GCCVER2).$(GCCVER3)
1166 @echo # GCCTARGET=$(GCCTARGET)
1167 @echo # GCCCROSS=$(GCCCROSS)
ca30c090 1168endif
342634f3 1169 @echo # WIN64=$(WIN64)
1170 @echo # ARCHITECTURE=$(ARCHITECTURE)
1171 @echo # ARCHNAME=$(ARCHNAME)
bf543eaf 1172 @echo # MAKE=$(PLMAKE)
ca30c090 1173ifeq ($(CCTYPE),)
342634f3 1174 @echo Unable to detect gcc and/or architecture!
1175 @exit 1
1176endif
1177
1178
342634f3 1179..\regcomp$(o) : ..\regnodes.h ..\regcharclass.h
1180
1181..\regexec$(o) : ..\regnodes.h ..\regcharclass.h
1182
bf543eaf 1183reonly : ..\regnodes.h .\config.h ..\git_version.h $(GLOBEXE) $(HAVEMINIPERL)\
342634f3 1184 $(CONFIGPM) $(UNIDATAFILES) $(PERLEXE) \
1185 Extensions_reonly
1186
1187static: $(PERLEXESTATIC)
1188
1189#----------------------------------------------------------------
1190
bf543eaf 1191$(GLOBEXE) : perlglob.c
b6e5775f 1192ifeq ($(CCTYPE),GCC)
bf543eaf 1193 $(LINK32) $(OPTIMIZE) $(BLINK_FLAGS) -mconsole -o $@ perlglob.c $(LIBFILES)
b6e5775f 1194else
8e925de9
DD
1195 $(CC) $(OPTIMIZE) $(PDBOUT) -Fe$@ perlglob.c -link $(BLINK_FLAGS) \
1196 setargv$(o) $(LIBFILES) && $(EMBED_EXE_MANI)
b6e5775f 1197endif
bf543eaf
DD
1198
1199..\git_version.h : $(HAVEMINIPERL) ..\make_patchnum.pl
1200 $(MINIPERL) -I..\lib ..\make_patchnum.pl
1201
1202# make sure that we recompile perl.c if the git version changes
1203..\perl$(o) : ..\git_version.h
1204
1205..\config.sh : $(CFGSH_TMPL) config_sh.PL FindExt.pm $(HAVEMINIPERL)
1206 $(MINIPERL) -I..\lib config_sh.PL $(CFG_VARS) $(CFGSH_TMPL) > ..\config.sh
1207
1208# This target is for when changes to the main config.sh happen.
1209# Edit config.gc, then make perl using GCC in a minimal configuration (i.e.
1210# with MULTI, ITHREADS, IMP_SYS, LARGE_FILES and PERLIO off), then make
1211# this target to regenerate config_H.gc.
1212regen_config_h:
1213 $(MINIPERL) -I..\lib config_sh.PL $(CFG_VARS) $(CFGSH_TMPL) > ..\config.sh
1214 $(MINIPERL) -I..\lib ..\configpm --chdir=..
1215 -del /f $(CFGH_TMPL)
1216 -$(MINIPERL) -I..\lib config_h.PL "ARCHPREFIX=$(ARCHPREFIX)"
1217 rename config.h $(CFGH_TMPL)
1218
1219$(CONFIGPM): ..\config.sh config_h.PL
1220 $(MINIPERL) -I..\lib ..\configpm --chdir=..
1221 -$(MINIPERL) -I..\lib config_h.PL "ARCHPREFIX=$(ARCHPREFIX)"
1222
1223.\config.h : $(CONFIGPM)
1224
1225# See the comment in Makefile.SH explaining this seemingly cranky ordering
1226..\lib\buildcustomize.pl : $(MINI_OBJ) ..\write_buildcustomize.pl
b6e5775f 1227ifeq ($(CCTYPE),GCC)
bf543eaf 1228 $(LINK32) -mconsole -o $(MINIPERL) $(BLINK_FLAGS) $(MINI_OBJ) $(LIBFILES)
b6e5775f
DD
1229else
1230 $(LINK32) -out:$(MINIPERL) $(BLINK_FLAGS) \
1231 $(DELAYLOAD) $(MINIDELAYLOAD) $(LIBFILES) $(MINI_OBJ)
1232 $(subst $@,$(MINIPERL),$(EMBED_EXE_MANI))
1233
1234endif
bf543eaf 1235 $(MINIPERL) -I..\lib -f ..\write_buildcustomize.pl ..
342634f3 1236
bf543eaf
DD
1237#convinence target, get a working miniperl
1238mp : $(CONFIGPM)
342634f3 1239
bf543eaf
DD
1240$(MINIDIR)\.exists : $(CFGH_TMPL)
1241 if not exist "$(MINIDIR)" mkdir "$(MINIDIR)"
342634f3 1242#
1243# Copy the template config.h and set configurables at the end of it
1244# as per the options chosen and compiler used.
1245# Note: This config.h is only used to build miniperl.exe anyway, but
1246# it's as well to have its options correct to be sure that it builds
1247# and so that it's "-V" options are correct for use by makedef.pl. The
1248# real config.h used to build perl.exe is generated from the top-level
1249# config_h.SH by config_h.PL (run by miniperl.exe).
1250#
bf543eaf
DD
1251# MINIDIR generates config.h so miniperl.exe is not rebuilt when the 2nd
1252# config.h is generated in CONFIGPM target, see also the comments for $(MINI_OBJ).
342634f3 1253 copy $(CFGH_TMPL) config.h
6f960640
DD
1254 @(echo.&& \
1255 echo #ifndef _config_h_footer_&& \
1256 echo #define _config_h_footer_&& \
1257 echo #undef Off_t&& \
1258 echo #undef LSEEKSIZE&& \
1259 echo #undef Off_t_size&& \
1260 echo #undef PTRSIZE&& \
1261 echo #undef SSize_t&& \
1262 echo #undef HAS_ATOLL&& \
1263 echo #undef HAS_STRTOLL&& \
1264 echo #undef HAS_STRTOULL&& \
1265 echo #undef Size_t_size&& \
1266 echo #undef IVTYPE&& \
1267 echo #undef UVTYPE&& \
1268 echo #undef IVSIZE&& \
1269 echo #undef UVSIZE&& \
1270 echo #undef NV_PRESERVES_UV&& \
1271 echo #undef NV_PRESERVES_UV_BITS&& \
1272 echo #undef IVdf&& \
1273 echo #undef UVuf&& \
1274 echo #undef UVof&& \
1275 echo #undef UVxf&& \
1276 echo #undef UVXf&& \
1277 echo #undef USE_64_BIT_INT&& \
1278 echo #undef Gconvert&& \
1279 echo #undef HAS_FREXPL&& \
1280 echo #undef HAS_ISNANL&& \
1281 echo #undef HAS_MODFL&& \
1282 echo #undef HAS_MODFL_PROTO&& \
1283 echo #undef HAS_SQRTL&& \
1284 echo #undef HAS_STRTOLD&& \
1285 echo #undef PERL_PRIfldbl&& \
1286 echo #undef PERL_PRIgldbl&& \
1287 echo #undef PERL_PRIeldbl&& \
1288 echo #undef PERL_SCNfldbl&& \
1289 echo #undef NVTYPE&& \
1290 echo #undef NVSIZE&& \
1291 echo #undef LONG_DOUBLESIZE&& \
1292 echo #undef NV_OVERFLOWS_INTEGERS_AT&& \
1293 echo #undef NVef&& \
1294 echo #undef NVff&& \
1295 echo #undef NVgf&& \
1296 echo #undef USE_LONG_DOUBLE)>> config.h
1f664ef5
SH
1297ifeq ($(CCTYPE),MSVC140)
1298 @(echo #undef FILE_ptr&& \
1299 echo #undef FILE_cnt&& \
1300 echo #undef FILE_base&& \
1301 echo #undef FILE_bufsiz&& \
88b13658
SH
1302 echo #define FILE_ptr^(fp^) PERLIO_FILE_ptr^(fp^)&& \
1303 echo #define FILE_cnt^(fp^) PERLIO_FILE_cnt^(fp^)&& \
1304 echo #define FILE_base^(fp^) PERLIO_FILE_base^(fp^)&& \
1305 echo #define FILE_bufsiz^(fp^) ^(PERLIO_FILE_cnt^(fp^) + PERLIO_FILE_ptr^(fp^) - PERLIO_FILE_base^(fp^)^)&& \
1f664ef5 1306 echo #define I_STDBOOL)>> config.h
88b13658
SH
1307else ifeq ($(CCTYPE),MSVC141)
1308 @(echo #undef FILE_ptr&& \
1309 echo #undef FILE_cnt&& \
1310 echo #undef FILE_base&& \
1311 echo #undef FILE_bufsiz&& \
1312 echo #define FILE_ptr^(fp^) PERLIO_FILE_ptr^(fp^)&& \
1313 echo #define FILE_cnt^(fp^) PERLIO_FILE_cnt^(fp^)&& \
1314 echo #define FILE_base^(fp^) PERLIO_FILE_base^(fp^)&& \
1315 echo #define FILE_bufsiz^(fp^) ^(PERLIO_FILE_cnt^(fp^) + PERLIO_FILE_ptr^(fp^) - PERLIO_FILE_base^(fp^)^)&& \
1f664ef5
SH
1316 echo #define I_STDBOOL)>> config.h
1317endif
342634f3 1318ifeq ($(USE_LARGE_FILES),define)
6f960640
DD
1319 @(echo #define Off_t $(INT64)&& \
1320 echo #define LSEEKSIZE ^8&& \
1321 echo #define Off_t_size ^8)>> config.h
342634f3 1322else
6f960640
DD
1323 @(echo #define Off_t long&& \
1324 echo #define LSEEKSIZE ^4&& \
1325 echo #define Off_t_size ^4)>> config.h
342634f3 1326endif
1327ifeq ($(WIN64),define)
6f960640
DD
1328 @(echo #define PTRSIZE ^8&& \
1329 echo #define SSize_t $(INT64)&& \
1330 echo #define HAS_ATOLL&& \
1331 echo #define HAS_STRTOLL&& \
1332 echo #define HAS_STRTOULL&& \
1333 echo #define Size_t_size ^8)>> config.h
342634f3 1334else
6f960640
DD
1335 @(echo #define PTRSIZE ^4&& \
1336 echo #define SSize_t int&& \
1337 echo #undef HAS_ATOLL&& \
1338 echo #undef HAS_STRTOLL&& \
1339 echo #undef HAS_STRTOULL&& \
1340 echo #define Size_t_size ^4)>> config.h
342634f3 1341endif
1342ifeq ($(USE_64_BIT_INT),define)
6f960640
DD
1343 @(echo #define IVTYPE $(INT64)&& \
1344 echo #define UVTYPE unsigned $(INT64)&& \
1345 echo #define IVSIZE ^8&& \
1346 echo #define UVSIZE ^8)>> config.h
342634f3 1347ifeq ($(USE_LONG_DOUBLE),define)
6f960640
DD
1348 @(echo #define NV_PRESERVES_UV&& \
1349 echo #define NV_PRESERVES_UV_BITS 64)>> config.h
342634f3 1350else
6f960640
DD
1351 @(echo #undef NV_PRESERVES_UV&& \
1352 echo #define NV_PRESERVES_UV_BITS 53)>> config.h
1353endif
1354 @(echo #define IVdf "I64d"&& \
1355 echo #define UVuf "I64u"&& \
1356 echo #define UVof "I64o"&& \
1357 echo #define UVxf "I64x"&& \
1358 echo #define UVXf "I64X"&& \
1359 echo #define USE_64_BIT_INT)>> config.h
342634f3 1360else
6f960640
DD
1361 @(echo #define IVTYPE long&& \
1362 echo #define UVTYPE unsigned long&& \
1363 echo #define IVSIZE ^4&& \
1364 echo #define UVSIZE ^4&& \
1365 echo #define NV_PRESERVES_UV&& \
1366 echo #define NV_PRESERVES_UV_BITS 32&& \
1367 echo #define IVdf "ld"&& \
1368 echo #define UVuf "lu"&& \
1369 echo #define UVof "lo"&& \
1370 echo #define UVxf "lx"&& \
1371 echo #define UVXf "lX"&& \
1372 echo #undef USE_64_BIT_INT)>> config.h
342634f3 1373endif
1374ifeq ($(USE_LONG_DOUBLE),define)
6f960640
DD
1375 @(echo #define Gconvert^(x,n,t,b^) sprintf^(^(b^),"%%.*""Lg",^(n^),^(x^)^)&& \
1376 echo #define HAS_FREXPL&& \
1377 echo #define HAS_ISNANL&& \
1378 echo #define HAS_MODFL&& \
1379 echo #define HAS_MODFL_PROTO&& \
1380 echo #define HAS_SQRTL&& \
1381 echo #define HAS_STRTOLD&& \
1382 echo #define PERL_PRIfldbl "Lf"&& \
1383 echo #define PERL_PRIgldbl "Lg"&& \
1384 echo #define PERL_PRIeldbl "Le"&& \
1385 echo #define PERL_SCNfldbl "Lf"&& \
1386 echo #define NVTYPE long double)>> config.h
342634f3 1387ifeq ($(WIN64),define)
6f960640
DD
1388 @(echo #define NVSIZE ^16&& \
1389 echo #define LONG_DOUBLESIZE ^16)>> config.h
342634f3 1390else
6f960640
DD
1391 @(echo #define NVSIZE ^12&& \
1392 echo #define LONG_DOUBLESIZE ^12)>> config.h
1393endif
1394 @(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&& \
1395 echo #define NVef "Le"&& \
1396 echo #define NVff "Lf"&& \
1397 echo #define NVgf "Lg"&& \
1398 echo #define USE_LONG_DOUBLE)>> config.h
342634f3 1399else
6f960640
DD
1400 @(echo #define Gconvert^(x,n,t,b^) sprintf^(^(b^),"%%.*g",^(n^),^(x^)^)&& \
1401 echo #undef HAS_FREXPL&& \
1402 echo #undef HAS_ISNANL&& \
1403 echo #undef HAS_MODFL&& \
1404 echo #undef HAS_MODFL_PROTO&& \
1405 echo #undef HAS_SQRTL&& \
1406 echo #undef HAS_STRTOLD&& \
1407 echo #undef PERL_PRIfldbl&& \
1408 echo #undef PERL_PRIgldbl&& \
1409 echo #undef PERL_PRIeldbl&& \
1410 echo #undef PERL_SCNfldbl&& \
1411 echo #define NVTYPE double&& \
1412 echo #define NVSIZE ^8&& \
1413 echo #define LONG_DOUBLESIZE ^8&& \
1414 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&& \
1415 echo #define NVef "e"&& \
1416 echo #define NVff "f"&& \
1417 echo #define NVgf "g"&& \
1418 echo #undef USE_LONG_DOUBLE)>> config.h
1419endif
1420ifeq ($(USE_CPLUSPLUS),define)
1421 @(echo #define USE_CPLUSPLUS&& \
1422 echo #endif)>> config.h
1423else
1424 @(echo #undef USE_CPLUSPLUS&& \
1425 echo #endif)>> config.h
1426endif
bf543eaf
DD
1427#separate line since this is sentinal that this target is done
1428 rem. > $(MINIDIR)\.exists
342634f3 1429
1430$(MINICORE_OBJ) : $(CORE_NOCFG_H)
bf543eaf 1431 $(CC) -c $(CFLAGS) $(MINIBUILDOPT) -DPERL_EXTERNAL_GLOB -DPERL_IS_MINIPERL $(OBJOUT_FLAG)$@ $(PDBOUT) ..\$(*F).c
342634f3 1432
1433$(MINIWIN32_OBJ) : $(CORE_NOCFG_H)
bf543eaf 1434 $(CC) -c $(CFLAGS) $(MINIBUILDOPT) -DPERL_IS_MINIPERL $(OBJOUT_FLAG)$@ $(PDBOUT) $(*F).c
342634f3 1435
1436# -DPERL_IMPLICIT_SYS needs C++ for perllib.c
1437# rules wrapped in .IFs break Win9X build (we end up with unbalanced []s unless
bf543eaf 1438# unless the .IF is true), so instead we use a .ELSE with the default.
342634f3 1439# This is the only file that depends on perlhost.h, vmem.h, and vdir.h
1440
bf543eaf 1441perllib$(o) : perllib.c perllibst.h .\perlhost.h .\vdir.h .\vmem.h
342634f3 1442ifeq ($(USE_IMP_SYS),define)
bf543eaf 1443 $(CC) -c -I. $(CFLAGS_O) $(CXX_FLAG) $(OBJOUT_FLAG)$@ $(PDBOUT) perllib.c
342634f3 1444else
bf543eaf 1445 $(CC) -c -I. $(CFLAGS_O) $(OBJOUT_FLAG)$@ $(PDBOUT) perllib.c
342634f3 1446endif
1447
1448# 1. we don't want to rebuild miniperl.exe when config.h changes
1449# 2. we don't want to rebuild miniperl.exe with non-default config.h
1450# 3. we can't have miniperl.exe depend on git_version.h, as miniperl creates it
bf543eaf 1451$(MINI_OBJ) : $(MINIDIR)\.exists $(CORE_NOCFG_H)
342634f3 1452
1453$(WIN32_OBJ) : $(CORE_H)
1454
1455$(CORE_OBJ) : $(CORE_H)
1456
1457$(DLL_OBJ) : $(CORE_H)
1458
bf543eaf
DD
1459
1460perllibst.h : $(HAVEMINIPERL) $(CONFIGPM) create_perllibst_h.pl
342634f3 1461 $(MINIPERL) -I..\lib create_perllibst_h.pl
bf543eaf
DD
1462
1463perldll.def : $(HAVEMINIPERL) $(CONFIGPM) ..\embed.fnc ..\makedef.pl
342634f3 1464 $(MINIPERL) -I..\lib -w ..\makedef.pl PLATFORM=win32 $(OPTIMIZE) $(DEFINES) \
b6e5775f 1465 $(BUILDOPT) CCTYPE=$(CCTYPE) TARG_DIR=..\ > perldll.def
342634f3 1466
bf543eaf
DD
1467$(PERLEXPLIB) : $(PERLIMPLIB)
1468
1469$(PERLIMPLIB) : perldll.def
b6e5775f 1470ifeq ($(CCTYPE),GCC)
bf543eaf 1471 $(IMPLIB) -k -d perldll.def -l $(PERLIMPLIB) -e $(PERLEXPLIB)
b6e5775f
DD
1472else
1473 lib -def:perldll.def -machine:$(ARCHITECTURE) /OUT:$(PERLIMPLIB)
1474endif
bf543eaf
DD
1475
1476$(PERLDLL): $(PERLEXPLIB) $(PERLDLL_OBJ) $(PERLDLL_RES) Extensions_static
b6e5775f 1477ifeq ($(CCTYPE),GCC)
342634f3 1478 $(LINK32) -mdll -o $@ $(BLINK_FLAGS) \
bf543eaf 1479 $(PERLDLL_OBJ) $(shell type Extensions_static) $(LIBFILES) $(PERLEXPLIB)
b6e5775f
DD
1480else
1481 $(LINK32) -dll -out:$@ $(BLINK_FLAGS) \
1482 @Extensions_static \
1483 -base:0x28000000 $(DELAYLOAD) $(LIBFILES) \
1484 $(PERLDLL_RES) $(PERLDLL_OBJ) $(PERLEXPLIB)
1485 $(EMBED_DLL_MANI)
1486endif
342634f3 1487
1488$(PERLSTATICLIB): $(PERLDLL_OBJ) Extensions_static
b6e5775f 1489ifeq ($(CCTYPE),GCC)
342634f3 1490 $(LIB32) $(LIB_FLAGS) $@ $(PERLDLL_OBJ)
1491 if exist $(STATICDIR) rmdir /s /q $(STATICDIR)
1492 for %%i in ($(shell type Extensions_static)) do \
1493 @mkdir $(STATICDIR) && cd $(STATICDIR) && \
1494 $(ARCHPREFIX)ar x ..\%%i && \
1495 $(ARCHPREFIX)ar q ..\$@ *$(o) && \
1496 cd .. && rmdir /s /q $(STATICDIR)
b6e5775f
DD
1497else
1498 $(LIB32) $(LIB_FLAGS) -out:$@ @Extensions_static \
1499 $(PERLDLL_OBJ)
1500endif
342634f3 1501 $(XCOPY) $(PERLSTATICLIB) $(COREDIR)
1502
1503$(PERLEXE_RES): perlexe.rc $(PERLEXE_MANIFEST) $(PERLEXE_ICO)
1504
1505$(MINIDIR)\globals$(o) : $(GENERATED_HEADERS)
1506
1507$(UUDMAP_H) $(MG_DATA_H) : $(BITCOUNT_H)
1508
1509$(BITCOUNT_H) : $(GENUUDMAP)
1510 $(GENUUDMAP) $(GENERATED_HEADERS)
1511
bf543eaf 1512$(GENUUDMAP) : ..\mg_raw.h
b6e5775f 1513ifeq ($(CCTYPE),GCC)
bf543eaf
DD
1514 $(LINK32) $(CFLAGS_O) -o..\generate_uudmap.exe ..\generate_uudmap.c \
1515 $(BLINK_FLAGS) $(LIBFILES)
b6e5775f 1516else
8e925de9 1517 $(CC) $(CFLAGS_O) $(PDBOUT) -Fe..\generate_uudmap.exe ..\generate_uudmap.c -link $(LIBFILES) $(BLINK_FLAGS)
b6e5775f
DD
1518 $(EMBED_EXE_MANI)
1519endif
342634f3 1520
8657e86b
TC
1521.PHONY: MakePPPort
1522
1523MakePPPort : $(HAVEMINIPERL) $(CONFIGPM)
1524 $(MINIPERL) -I..\lib ..\mkppport
1525
1526# also known as $(HAVE_COREDIR)
1527.coreheaders : $(CORE_H)
bf543eaf
DD
1528 $(XCOPY) *.h $(COREDIR)\\*.*
1529 $(RCOPY) include $(COREDIR)\\*.*
1530 $(XCOPY) ..\\*.h $(COREDIR)\\*.*
1531 rem. > $@
342634f3 1532
bf543eaf
DD
1533perlmain$(o) : runperl.c $(CONFIGPM)
1534 $(CC) $(subst -DPERLDLL,-UPERLDLL,$(CFLAGS_O)) $(OBJOUT_FLAG)$@ $(PDBOUT) -c runperl.c
342634f3 1535
bf543eaf
DD
1536perlmainst$(o) : runperl.c $(CONFIGPM)
1537 $(CC) $(CFLAGS_O) $(OBJOUT_FLAG)$@ $(PDBOUT) -c runperl.c
342634f3 1538
bf543eaf 1539$(PERLEXE): $(CONFIGPM) $(PERLEXE_OBJ) $(PERLEXE_RES) $(PERLIMPLIB)
b6e5775f 1540ifeq ($(CCTYPE),GCC)
342634f3 1541 $(LINK32) -mconsole -o $@ $(BLINK_FLAGS) \
1542 $(PERLEXE_OBJ) $(PERLEXE_RES) $(PERLIMPLIB) $(LIBFILES)
b6e5775f
DD
1543else
1544 $(LINK32) -out:$@ $(BLINK_FLAGS) \
1545 $(PERLEXE_OBJ) $(PERLEXE_RES) $(PERLIMPLIB) $(LIBFILES) $(SETARGV_OBJ)
1546 $(EMBED_EXE_MANI)
1547endif
342634f3 1548 copy $(PERLEXE) $(WPERLEXE)
1549 $(MINIPERL) -I..\lib bin\exetype.pl $(WPERLEXE) WINDOWS
1550
1551$(PERLEXESTATIC): $(PERLSTATICLIB) $(CONFIGPM) $(PERLEXEST_OBJ) $(PERLEXE_RES)
b6e5775f 1552ifeq ($(CCTYPE),GCC)
342634f3 1553 $(LINK32) -mconsole -o $@ $(BLINK_FLAGS) \
1554 $(PERLEXEST_OBJ) $(PERLEXE_RES) $(PERLSTATICLIB) $(LIBFILES)
b6e5775f
DD
1555else
1556 $(LINK32) -out:$@ $(BLINK_FLAGS) \
1557 $(PERLEXEST_OBJ) $(PERLEXE_RES) $(PERLSTATICLIB) $(LIBFILES) $(SETARGV_OBJ)
1558 $(EMBED_EXE_MANI)
1559endif
342634f3 1560
342634f3 1561#-------------------------------------------------------------------------------
1562# There's no direct way to mark a dependency on
1563# DynaLoader.pm, so this will have to do
342634f3 1564
bf543eaf 1565#most of deps of this target are in DYNALOADER and therefore omitted here
8657e86b 1566Extensions : $(PERLDEP) $(DYNALOADER) $(GLOBEXE) MakePPPort
bf543eaf
DD
1567 $(MINIPERL) -I..\lib ..\make_ext.pl "MAKE=$(PLMAKE)" --dir=$(CPANDIR) --dir=$(DISTDIR) --dir=$(EXTDIR) --dynamic !Unicode/Normalize
1568
1569Extensions_normalize : $(PERLDEP) $(DYNALOADER) $(GLOBEXE) $(UNIDATAFILES)
1570 $(MINIPERL) -I..\lib ..\make_ext.pl "MAKE=$(PLMAKE)" --dir=$(CPANDIR) --dir=$(DISTDIR) --dir=$(EXTDIR) --dynamic +Unicode/Normalize
1571
1572Extensions_reonly : $(PERLDEP) $(DYNALOADER)
1573 $(MINIPERL) -I..\lib ..\make_ext.pl "MAKE=$(PLMAKE)" --dir=$(CPANDIR) --dir=$(DISTDIR) --dir=$(EXTDIR) --dynamic +re
342634f3 1574
8657e86b 1575Extensions_static : ..\make_ext.pl list_static_libs.pl $(CONFIGPM) $(GLOBEXE) $(HAVE_COREDIR) MakePPPort
bf543eaf 1576 $(MINIPERL) -I..\lib ..\make_ext.pl "MAKE=$(PLMAKE)" --dir=$(CPANDIR) --dir=$(DISTDIR) --dir=$(EXTDIR) --static
342634f3 1577 $(MINIPERL) -I..\lib list_static_libs.pl > Extensions_static
1578
bf543eaf
DD
1579Extensions_nonxs : ..\make_ext.pl ..\pod\perlfunc.pod $(CONFIGPM) $(GLOBEXE)
1580 $(MINIPERL) -I..\lib ..\make_ext.pl "MAKE=$(PLMAKE)" --dir=$(CPANDIR) --dir=$(DISTDIR) --dir=$(EXTDIR) --nonxs !libs
342634f3 1581
bf543eaf
DD
1582#lib must be built, it can't be buildcustomize.pl-ed, and is required for XS building
1583$(DYNALOADER) : ..\make_ext.pl $(CONFIGPM) $(HAVE_COREDIR)
1584 $(MINIPERL) -I..\lib ..\make_ext.pl "MAKE=$(PLMAKE)" --dir=$(EXTDIR) --dir=$(DISTDIR) --dynaloader lib
342634f3 1585
1586Extensions_clean :
bf543eaf 1587 -if exist $(MINIPERL) $(MINIPERL) -I..\lib ..\make_ext.pl "MAKE=$(PLMAKE)" --dir=$(CPANDIR) --dir=$(DISTDIR) --dir=$(EXTDIR) --all --target=clean
342634f3 1588
1589Extensions_realclean :
bf543eaf
DD
1590 -if exist $(MINIPERL) $(MINIPERL) -I..\lib ..\make_ext.pl "MAKE=$(PLMAKE)" --dir=$(CPANDIR) --dir=$(DISTDIR) --dir=$(EXTDIR) --all --target=realclean
1591
1592# all PE files need to be built by the time this target runs, PP files can still
1593# be running in parallel like UNIDATAFILES, this target a placeholder for the
1594# future
1595ifeq ($(BUILD_STATIC),define)
1596rebasePE : Extensions $(PERLDLL) Extensions_normalize $(PERLEXE) $(PERLEXESTATIC)
1597else
1598rebasePE : Extensions $(PERLDLL) Extensions_normalize $(PERLEXE)
1599endif
1600 $(NOOP)
342634f3 1601
1602#-------------------------------------------------------------------------------
1603
bf543eaf 1604doc: $(PERLEXE) $(PERLDLL) ..\pod\perltoc.pod
342634f3 1605 $(PERLEXE) -I..\lib ..\installhtml --podroot=.. --htmldir=$(HTMLDIR) \
1606 --podpath=pod:lib:utils --htmlroot="file://$(subst :,|,$(INST_HTML))"\
1607 --recurse
1608
1609..\utils\Makefile: $(CONFIGPM) ..\utils\Makefile.PL
1610 $(MINIPERL) -I..\lib ..\utils\Makefile.PL ..
1611
1612# Note that this next section is parsed (and regenerated) by pod/buildtoc
1613# so please check that script before making structural changes here
bf543eaf
DD
1614utils: $(HAVEMINIPERL) ..\utils\Makefile
1615 cd ..\utils && $(PLMAKE) PERL=$(MINIPERL)
342634f3 1616 copy ..\README.aix ..\pod\perlaix.pod
1617 copy ..\README.amiga ..\pod\perlamiga.pod
1618 copy ..\README.android ..\pod\perlandroid.pod
1619 copy ..\README.bs2000 ..\pod\perlbs2000.pod
1620 copy ..\README.ce ..\pod\perlce.pod
1621 copy ..\README.cn ..\pod\perlcn.pod
1622 copy ..\README.cygwin ..\pod\perlcygwin.pod
1623 copy ..\README.dos ..\pod\perldos.pod
1624 copy ..\README.freebsd ..\pod\perlfreebsd.pod
1625 copy ..\README.haiku ..\pod\perlhaiku.pod
1626 copy ..\README.hpux ..\pod\perlhpux.pod
1627 copy ..\README.hurd ..\pod\perlhurd.pod
1628 copy ..\README.irix ..\pod\perlirix.pod
1629 copy ..\README.jp ..\pod\perljp.pod
1630 copy ..\README.ko ..\pod\perlko.pod
1631 copy ..\README.linux ..\pod\perllinux.pod
1632 copy ..\README.macos ..\pod\perlmacos.pod
1633 copy ..\README.macosx ..\pod\perlmacosx.pod
1634 copy ..\README.netware ..\pod\perlnetware.pod
1635 copy ..\README.openbsd ..\pod\perlopenbsd.pod
1636 copy ..\README.os2 ..\pod\perlos2.pod
1637 copy ..\README.os390 ..\pod\perlos390.pod
1638 copy ..\README.os400 ..\pod\perlos400.pod
1639 copy ..\README.plan9 ..\pod\perlplan9.pod
1640 copy ..\README.qnx ..\pod\perlqnx.pod
1641 copy ..\README.riscos ..\pod\perlriscos.pod
1642 copy ..\README.solaris ..\pod\perlsolaris.pod
1643 copy ..\README.symbian ..\pod\perlsymbian.pod
1644 copy ..\README.synology ..\pod\perlsynology.pod
1645 copy ..\README.tru64 ..\pod\perltru64.pod
1646 copy ..\README.tw ..\pod\perltw.pod
1647 copy ..\README.vos ..\pod\perlvos.pod
1648 copy ..\README.win32 ..\pod\perlwin32.pod
25219f3f 1649 copy ..\pod\perldelta.pod ..\pod\perl5277delta.pod
bf543eaf 1650 $(MINIPERL) -I..\lib $(PL2BAT) $(UTILS)
342634f3 1651 $(MINIPERL) -I..\lib ..\autodoc.pl ..
1652 $(MINIPERL) -I..\lib ..\pod\perlmodlib.PL -q ..
1653
bf543eaf 1654..\pod\perltoc.pod: $(PERLEXE) $(PERLDLL) Extensions Extensions_nonxs Extensions_normalize utils
342634f3 1655 $(PERLEXE) -f ..\pod\buildtoc -q
1656
1657# Note that the pod cleanup in this next section is parsed (and regenerated
1658# by pod/buildtoc so please check that script before making changes here
1659
1660distclean: realclean
1661 -del /f $(MINIPERL) $(PERLEXE) $(PERLDLL) $(GLOBEXE) \
1662 $(PERLIMPLIB) ..\miniperl$(a) $(PERLEXESTATIC) $(PERLSTATICLIB)
1663 -del /f $(LIBDIR)\Encode.pm $(LIBDIR)\encoding.pm $(LIBDIR)\Errno.pm
1664 -del /f $(LIBDIR)\Config.pod $(LIBDIR)\POSIX.pod $(LIBDIR)\threads.pm
1665 -del /f $(LIBDIR)\.exists $(LIBDIR)\attributes.pm $(LIBDIR)\DynaLoader.pm
1666 -del /f $(LIBDIR)\Fcntl.pm $(LIBDIR)\IO.pm $(LIBDIR)\Opcode.pm
1667 -del /f $(LIBDIR)\ops.pm $(LIBDIR)\Safe.pm
1668 -del /f $(LIBDIR)\SDBM_File.pm $(LIBDIR)\Socket.pm $(LIBDIR)\POSIX.pm
1669 -del /f $(LIBDIR)\B.pm $(LIBDIR)\O.pm $(LIBDIR)\re.pm
1670 -del /f $(LIBDIR)\File\Glob.pm
1671 -del /f $(LIBDIR)\Storable.pm
1672 -del /f $(LIBDIR)\Sys\Hostname.pm
1673 -del /f $(LIBDIR)\Time\HiRes.pm
1674 -del /f $(LIBDIR)\Unicode\Normalize.pm
1675 -del /f $(LIBDIR)\Math\BigInt\FastCalc.pm
1676 -del /f $(LIBDIR)\Win32.pm
1677 -del /f $(LIBDIR)\Win32CORE.pm
1678 -del /f $(LIBDIR)\Win32API\File.pm
1679 -del /f $(LIBDIR)\Win32API\File\cFile.pc
1680 -del /f $(LIBDIR)\buildcustomize.pl
1681 -del /f $(DISTDIR)\XSLoader\XSLoader.pm
1682 -del /f *.def *.map
1683 -if exist $(LIBDIR)\App rmdir /s /q $(LIBDIR)\App
1684 -if exist $(LIBDIR)\Archive rmdir /s /q $(LIBDIR)\Archive
1685 -if exist $(LIBDIR)\Attribute rmdir /s /q $(LIBDIR)\Attribute
1686 -if exist $(LIBDIR)\autodie rmdir /s /q $(LIBDIR)\autodie
1687 -if exist $(LIBDIR)\Carp rmdir /s /q $(LIBDIR)\Carp
1688 -if exist $(LIBDIR)\Compress rmdir /s /q $(LIBDIR)\Compress
1689 -if exist $(LIBDIR)\Config\Perl rmdir /s /q $(LIBDIR)\Config\Perl
1690 -if exist $(LIBDIR)\CPAN rmdir /s /q $(LIBDIR)\CPAN
1691 -if exist $(LIBDIR)\Data rmdir /s /q $(LIBDIR)\Data
1692 -if exist $(LIBDIR)\Devel rmdir /s /q $(LIBDIR)\Devel
1693 -if exist $(LIBDIR)\Digest rmdir /s /q $(LIBDIR)\Digest
1694 -if exist $(LIBDIR)\Encode rmdir /s /q $(LIBDIR)\Encode
1695 -if exist $(LIBDIR)\encoding rmdir /s /q $(LIBDIR)\encoding
1696 -if exist $(LIBDIR)\Exporter rmdir /s /q $(LIBDIR)\Exporter
1697 -if exist $(LIBDIR)\ExtUtils\CBuilder rmdir /s /q $(LIBDIR)\ExtUtils\CBuilder
1698 -if exist $(LIBDIR)\ExtUtils\Command rmdir /s /q $(LIBDIR)\ExtUtils\Command
1699 -if exist $(LIBDIR)\ExtUtils\Constant rmdir /s /q $(LIBDIR)\ExtUtils\Constant
1700 -if exist $(LIBDIR)\ExtUtils\Liblist rmdir /s /q $(LIBDIR)\ExtUtils\Liblist
1701 -if exist $(LIBDIR)\ExtUtils\MakeMaker rmdir /s /q $(LIBDIR)\ExtUtils\MakeMaker
1702 -if exist $(LIBDIR)\ExtUtils\ParseXS rmdir /s /q $(LIBDIR)\ExtUtils\ParseXS
1703 -if exist $(LIBDIR)\ExtUtils\Typemaps rmdir /s /q $(LIBDIR)\ExtUtils\Typemaps
1704 -if exist $(LIBDIR)\File\Spec rmdir /s /q $(LIBDIR)\File\Spec
1705 -if exist $(LIBDIR)\Filter rmdir /s /q $(LIBDIR)\Filter
1706 -if exist $(LIBDIR)\Hash rmdir /s /q $(LIBDIR)\Hash
1707 -if exist $(LIBDIR)\HTTP rmdir /s /q $(LIBDIR)\HTTP
1708 -if exist $(LIBDIR)\I18N rmdir /s /q $(LIBDIR)\I18N
df61f5a9 1709 -if exist $(LIBDIR)\inc rmdir /s /q $(LIBDIR)\inc
342634f3 1710 -if exist $(LIBDIR)\IO rmdir /s /q $(LIBDIR)\IO
1711 -if exist $(LIBDIR)\IPC rmdir /s /q $(LIBDIR)\IPC
1712 -if exist $(LIBDIR)\JSON rmdir /s /q $(LIBDIR)\JSON
1713 -if exist $(LIBDIR)\List rmdir /s /q $(LIBDIR)\List
1714 -if exist $(LIBDIR)\Locale rmdir /s /q $(LIBDIR)\Locale
1715 -if exist $(LIBDIR)\Math rmdir /s /q $(LIBDIR)\Math
1716 -if exist $(LIBDIR)\Memoize rmdir /s /q $(LIBDIR)\Memoize
1717 -if exist $(LIBDIR)\MIME rmdir /s /q $(LIBDIR)\MIME
1718 -if exist $(LIBDIR)\Module rmdir /s /q $(LIBDIR)\Module
1719 -if exist $(LIBDIR)\Net\FTP rmdir /s /q $(LIBDIR)\Net\FTP
1720 -if exist $(LIBDIR)\Params rmdir /s /q $(LIBDIR)\Params
1721 -if exist $(LIBDIR)\Parse rmdir /s /q $(LIBDIR)\Parse
1722 -if exist $(LIBDIR)\Perl rmdir /s /q $(LIBDIR)\Perl
1723 -if exist $(LIBDIR)\PerlIO rmdir /s /q $(LIBDIR)\PerlIO
1724 -if exist $(LIBDIR)\Pod\Perldoc rmdir /s /q $(LIBDIR)\Pod\Perldoc
1725 -if exist $(LIBDIR)\Pod\Simple rmdir /s /q $(LIBDIR)\Pod\Simple
1726 -if exist $(LIBDIR)\Pod\Text rmdir /s /q $(LIBDIR)\Pod\Text
1727 -if exist $(LIBDIR)\Scalar rmdir /s /q $(LIBDIR)\Scalar
1728 -if exist $(LIBDIR)\Search rmdir /s /q $(LIBDIR)\Search
1729 -if exist $(LIBDIR)\Sub rmdir /s /q $(LIBDIR)\Sub
1730 -if exist $(LIBDIR)\Sys rmdir /s /q $(LIBDIR)\Sys
1731 -if exist $(LIBDIR)\TAP rmdir /s /q $(LIBDIR)\TAP
1732 -if exist $(LIBDIR)\Term rmdir /s /q $(LIBDIR)\Term
1733 -if exist $(LIBDIR)\Test rmdir /s /q $(LIBDIR)\Test
ec35cd4c 1734 -if exist $(LIBDIR)\Test2 rmdir /s /q $(LIBDIR)\Test
342634f3 1735 -if exist $(LIBDIR)\Text rmdir /s /q $(LIBDIR)\Text
1736 -if exist $(LIBDIR)\Thread rmdir /s /q $(LIBDIR)\Thread
1737 -if exist $(LIBDIR)\threads rmdir /s /q $(LIBDIR)\threads
1738 -if exist $(LIBDIR)\Tie\Hash rmdir /s /q $(LIBDIR)\Tie\Hash
1739 -if exist $(LIBDIR)\Unicode\Collate rmdir /s /q $(LIBDIR)\Unicode\Collate
1740 -if exist $(LIBDIR)\Unicode\Collate\Locale rmdir /s /q $(LIBDIR)\Unicode\Collate\Locale
1741 -if exist $(LIBDIR)\version rmdir /s /q $(LIBDIR)\version
1742 -if exist $(LIBDIR)\VMS rmdir /s /q $(LIBDIR)\VMS
1743 -if exist $(LIBDIR)\Win32API rmdir /s /q $(LIBDIR)\Win32API
1744 -if exist $(LIBDIR)\XS rmdir /s /q $(LIBDIR)\XS
1745 -cd $(PODDIR) && del /f *.html *.bat roffitall \
25219f3f 1746 perl5277delta.pod perlaix.pod perlamiga.pod perlandroid.pod \
342634f3 1747 perlapi.pod perlbs2000.pod perlce.pod perlcn.pod perlcygwin.pod \
1748 perldos.pod perlfreebsd.pod perlhaiku.pod perlhpux.pod \
1749 perlhurd.pod perlintern.pod perlirix.pod perljp.pod perlko.pod \
1750 perllinux.pod perlmacos.pod perlmacosx.pod perlmodlib.pod \
1751 perlnetware.pod perlopenbsd.pod perlos2.pod perlos390.pod \
1752 perlos400.pod perlplan9.pod perlqnx.pod perlriscos.pod \
1753 perlsolaris.pod perlsymbian.pod perlsynology.pod perltoc.pod \
1754 perltru64.pod perltw.pod perluniprops.pod perlvos.pod \
1755 perlwin32.pod
2560602c 1756 -cd ..\utils && del /f h2ph splain perlbug pl2pm h2xs \
bf543eaf 1757 perldoc perlivp libnetcfg enc2xs encguess piconv cpan *.bat \
342634f3 1758 xsubpp pod2html instmodsh json_pp prove ptar ptardiff ptargrep shasum corelist zipdetails
1759 -del /f ..\config.sh perlmain.c dlutils.c config.h.new \
1760 perlmainst.c
1761 -del /f $(CONFIGPM)
1762 -del /f ..\lib\Config_git.pl
1763 -del /f "bin\*.bat"
1764 -del /f perllibst.h
1765 -del /f $(PERLEXE_RES) perl.base
1766 -cd .. && del /s *$(a) *.map *.pdb *.ilk *.bs *$(o) .exists pm_to_blib ppport.h
1767 -cd $(EXTDIR) && del /s *.def Makefile Makefile.old
1768 -cd $(DISTDIR) && del /s *.def Makefile Makefile.old
1769 -cd $(CPANDIR) && del /s *.def Makefile Makefile.old
1770 -del /s ..\utils\Makefile
1771 -if exist $(AUTODIR) rmdir /s /q $(AUTODIR)
1772 -if exist $(COREDIR) rmdir /s /q $(COREDIR)
1773 -if exist pod2htmd.tmp del pod2htmd.tmp
1774 -if exist $(HTMLDIR) rmdir /s /q $(HTMLDIR)
1775 -del /f ..\t\test_state
1776
1777install : all installbare installhtml
1778
1779installbare : utils ..\pod\perltoc.pod
1780 $(PERLEXE) ..\installperl
1781 if exist $(WPERLEXE) $(XCOPY) $(WPERLEXE) $(INST_BIN)\$(NULL)
1782 if exist $(PERLEXESTATIC) $(XCOPY) $(PERLEXESTATIC) $(INST_BIN)\$(NULL)
1783 $(XCOPY) $(GLOBEXE) $(INST_BIN)\$(NULL)
1784 if exist ..\perl*.pdb $(XCOPY) ..\perl*.pdb $(INST_BIN)\$(NULL)
1785 $(XCOPY) "bin\*.bat" $(INST_SCRIPT)\$(NULL)
1786
1787installhtml : doc
1788 $(RCOPY) $(HTMLDIR)\*.* $(INST_HTML)\$(NULL)
1789
1790inst_lib : $(CONFIGPM)
1791 $(RCOPY) ..\lib $(INST_LIB)\$(NULL)
1792
bf543eaf
DD
1793$(UNIDATAFILES) : ..\pod\perluniprops.pod
1794
1795..\pod\perluniprops.pod: ..\lib\unicore\mktables $(CONFIGPM)
1796 $(MINIPERL) -I..\lib ..\lib\unicore\mktables -C ..\lib\unicore -P ..\pod -maketest -makelist -p
342634f3 1797
bf543eaf 1798minitest : $(HAVEMINIPERL) $(GLOBEXE) $(CONFIGPM) $(UNIDATAFILES) utils
342634f3 1799 $(XCOPY) $(MINIPERL) ..\t\$(NULL)
1800 if exist ..\t\perl.exe del /f ..\t\perl.exe
1801 rename ..\t\miniperl.exe perl.exe
1802 $(XCOPY) $(GLOBEXE) ..\t\$(NULL)
1803 attrib -r "..\t\*.*"
1804 cd ..\t && \
1805 $(MINIPERL) -I..\lib harness base/*.t comp/*.t cmd/*.t io/*.t opbasic/*.t op/*.t pragma/*.t
1806
b6e5775f 1807test-prep : all utils ..\pod\perltoc.pod $(TESTPREPGCC)
342634f3 1808 $(XCOPY) $(PERLEXE) ..\t\$(NULL)
1809 $(XCOPY) $(PERLDLL) ..\t\$(NULL)
1810 $(XCOPY) $(GLOBEXE) ..\t\$(NULL)
1811# If building with gcc versions 4.x.x or greater, then
1812# the GCC helper DLL will also need copied to the test directory.
1813# The name of the dll can change, depending upon which vendor has supplied
1814# your compiler, and upon the values of "x".
1815# libstdc++-6.dll is copied if it exists as it, too, may then be needed.
1816# Without this copying, the op/taint.t test script will fail.
b6e5775f
DD
1817
1818ifeq ($(CCTYPE),GCC)
1819
1820test-prep-gcc :
342634f3 1821 if exist $(CCDLLDIR)\libgcc_s_seh-1.dll $(XCOPY) $(CCDLLDIR)\libgcc_s_seh-1.dll ..\t\$(NULL)
1822 if exist $(CCDLLDIR)\libgcc_s_sjlj-1.dll $(XCOPY) $(CCDLLDIR)\libgcc_s_sjlj-1.dll ..\t\$(NULL)
1823 if exist $(CCDLLDIR)\libgcc_s_dw2-1.dll $(XCOPY) $(CCDLLDIR)\libgcc_s_dw2-1.dll ..\t\$(NULL)
1824 if exist $(CCDLLDIR)\libstdc++-6.dll $(XCOPY) $(CCDLLDIR)\libstdc++-6.dll ..\t\$(NULL)
1825 if exist $(CCDLLDIR)\libwinpthread-1.dll $(XCOPY) $(CCDLLDIR)\libwinpthread-1.dll ..\t\$(NULL)
1826
b6e5775f
DD
1827endif
1828
342634f3 1829test : test-prep
1830 set PERL_STATIC_EXT=$(STATIC_EXT) && \
b6e5775f 1831 cd ..\t && perl.exe harness $(TEST_SWITCHES) $(TEST_FILES)
342634f3 1832
1833test_porting : test-prep
1834 set PERL_STATIC_EXT=$(STATIC_EXT) && \
b6e5775f 1835 cd ..\t && perl.exe harness $(TEST_SWITCHES) porting\*.t ..\lib\diagnostics.t
342634f3 1836
1837test-reonly : reonly utils
1838 $(XCOPY) $(PERLEXE) ..\t\$(NULL)
1839 $(XCOPY) $(PERLDLL) ..\t\$(NULL)
1840 $(XCOPY) $(GLOBEXE) ..\t\$(NULL)
bf543eaf 1841 cd ..\t && perl.exe harness $(OPT) -re \bpat\\/ $(EXTRA)
342634f3 1842
1843regen :
bf543eaf 1844 cd .. && regen.pl
342634f3 1845
1846test-notty : test-prep
1847 set PERL_STATIC_EXT=$(STATIC_EXT) && \
1848 set PERL_SKIP_TTY_TEST=1 && \
bf543eaf 1849 cd ..\t && perl.exe harness $(TEST_SWITCHES) $(TEST_FILES)
342634f3 1850
1851_test :
1852 $(XCOPY) $(PERLEXE) ..\t\$(NULL)
1853 $(XCOPY) $(PERLDLL) ..\t\$(NULL)
1854 $(XCOPY) $(GLOBEXE) ..\t\$(NULL)
1855 set PERL_STATIC_EXT=$(STATIC_EXT) && \
bf543eaf 1856 cd ..\t && perl.exe harness $(TEST_SWITCHES) $(TEST_FILES)
342634f3 1857
1858_clean :
1859 -@erase miniperlmain$(o)
1860 -@erase $(MINIPERL)
1861 -@erase perlglob$(o)
1862 -@erase perlmain$(o)
1863 -@erase perlmainst$(o)
342634f3 1864 -@erase /f config.h
1865 -@erase /f ..\git_version.h
1866 -@erase $(GLOBEXE)
1867 -@erase $(PERLEXE)
1868 -@erase $(WPERLEXE)
1869 -@erase $(PERLEXESTATIC)
1870 -@erase $(PERLSTATICLIB)
1871 -@erase $(PERLDLL)
1872 -@erase $(CORE_OBJ)
1873 -@erase $(GENUUDMAP) $(GENUUDMAP_OBJ) $(GENERATED_HEADERS)
8657e86b 1874 -@erase .coreheaders
342634f3 1875 -if exist $(MINIDIR) rmdir /s /q $(MINIDIR)
1876 -if exist $(UNIDATADIR1) rmdir /s /q $(UNIDATADIR1)
1877 -if exist $(UNIDATADIR2) rmdir /s /q $(UNIDATADIR2)
1878 -@erase $(UNIDATAFILES)
1879 -@erase $(WIN32_OBJ)
1880 -@erase $(DLL_OBJ)
1881 -@erase ..\*$(o) ..\*$(a) ..\*.exp *$(o) *$(a) *.exp *.res
1882 -@erase ..\t\*.exe ..\t\*.dll ..\t\*.bat
1883 -@erase *.ilk
bf543eaf 1884 -@erase *.pdb ..\*.pdb
342634f3 1885 -@erase Extensions_static
1886
1887clean : Extensions_clean _clean
1888
1889realclean : Extensions_realclean _clean
1890
1891# Handy way to run perlbug -ok without having to install and run the
1892# installed perlbug. We don't re-run the tests here - we trust the user.
1893# Please *don't* use this unless all tests pass.
1894# If you want to report test failures, use "gmake nok" instead.
bf543eaf
DD
1895ok: utils $(PERLEXE) $(PERLDLL) Extensions_nonxs Extensions
1896 $(PERLEXE) ..\utils\perlbug -ok -s "(UNINSTALLED)"
1897
1898okfile: utils $(PERLEXE) $(PERLDLL) Extensions_nonxs Extensions
1899 $(PERLEXE) ..\utils\perlbug -ok -s "(UNINSTALLED)" -F perl.ok
342634f3 1900
bf543eaf
DD
1901nok: utils $(PERLEXE) $(PERLDLL) Extensions_nonxs Extensions
1902 $(PERLEXE) ..\utils\perlbug -nok -s "(UNINSTALLED)"
342634f3 1903
bf543eaf
DD
1904nokfile: utils $(PERLEXE) $(PERLDLL) Extensions_nonxs Extensions
1905 $(PERLEXE) ..\utils\perlbug -nok -s "(UNINSTALLED)" -F perl.nok
342634f3 1906