This is a live mirror of the Perl 5 development currently hosted at https://github.com/perl/perl5
Bump Data::Dumper version
[perl5.git] / win32 / Makefile
CommitLineData
9e42cd94 1#
b6c85593 2# Makefile to build perl on Windows using Microsoft NMAKE.
9e42cd94 3# Supported compilers:
7adf2470 4# Microsoft Visual C++ 7.0 or later
02e200fc 5# Windows SDK 64-bit compiler and tools
9e42cd94
GS
6#
7# This is set up to build a perl.exe that runs off a shared library
f69f4f3b 8# (perl533.dll). Also makes individual DLLs for the XS extensions.
9e42cd94
GS
9#
10
11##
12## Make sure you read README.win32 *before* you mess with anything here!
13##
14
15##
16## Build configuration. Edit the values below to suit your needs.
17##
18
19#
20# Set these to wherever you want "nmake install" to put your
21# newly built perl.
22#
23INST_DRV = c:
24INST_TOP = $(INST_DRV)\perl
25
26#
b86e806e
JD
27# Uncomment if you want to build a 32-bit Perl using a 32-bit compiler
28# on a 64-bit version of Windows.
890b5089 29#
b86e806e
JD
30#WIN64 = undef
31
32#
9e42cd94
GS
33# Comment this out if you DON'T want your perl installation to be versioned.
34# This means that the new installation will overwrite any files from the
35# old installation at the same INST_TOP location. Leaving it enabled is
36# the safest route, as perl adds the extra version directory to all the
37# locations it installs files to. If you disable it, an alternative
38# versioned installation can be obtained by setting INST_TOP above to a
39# path that includes an arbitrary version string.
40#
3e7831cb 41#INST_VER = \5.33.8
9e42cd94
GS
42
43#
44# Comment this out if you DON'T want your perl installation to have
45# architecture specific components. This means that architecture-
46# specific files will be installed along with the architecture-neutral
47# files. Leaving it enabled is safer and more flexible, in case you
48# want to build multiple flavors of perl and install them together in
49# the same location. Commenting it out gives you a simpler
50# installation that is easier to understand for beginners.
51#
bdb4cb88 52#INST_ARCH = \$(ARCHNAME)
9e42cd94
GS
53
54#
7ada00a0
SH
55# Uncomment this if you want perl to run
56# $Config{sitelibexp}\sitecustomize.pl
57# before anything else. This script can then be set up, for example,
58# to add additional entries to @INC.
59#
60#USE_SITECUST = define
61
62#
4fef8ef3
SH
63# uncomment to enable multiple interpreters. This is needed for fork()
64# emulation and for thread support, and is auto-enabled by USE_IMP_SYS
65# and USE_ITHREADS below.
9e42cd94 66#
bdb4cb88 67USE_MULTI = define
9e42cd94
GS
68
69#
4fef8ef3
SH
70# Interpreter cloning/threads; now reasonably complete.
71# This should be enabled to get the fork() emulation. This needs (and
72# will auto-enable) USE_MULTI above.
9e42cd94 73#
bdb4cb88 74USE_ITHREADS = define
9e42cd94
GS
75
76#
77# uncomment to enable the implicit "host" layer for all system calls
4fef8ef3
SH
78# made by perl. This is also needed to get fork(). This needs (and
79# will auto-enable) USE_MULTI above.
9e42cd94 80#
bdb4cb88 81USE_IMP_SYS = define
9e42cd94
GS
82
83#
1f64ae15
SH
84# Uncomment this if you're building a 32-bit perl and want 64-bit integers.
85# (If you're building a 64-bit perl then you will have 64-bit integers whether
86# or not this is uncommented.)
890b5089 87#
1f64ae15
SH
88#USE_64_BIT_INT = define
89
90#
458ea8f7
SH
91# Comment this out if you want the legacy default behavior of including '.' at
92# the end of @INC.
93#
94DEFAULT_INC_EXCLUDES_DOT = define
95
96#
6937817d
DD
97# Uncomment this if you want to disable looking up values from
98# HKEY_CURRENT_USER\Software\Perl and HKEY_LOCAL_MACHINE\Software\Perl in
99# the Registry.
100#
101#USE_NO_REGISTRY = define
102
103#
da2c7419 104# uncomment exactly one of the following
9e42cd94 105#
b2e53f8c 106# Visual C++ .NET 2002/2003 (aka Visual C++ 7.0/7.1) (full version)
5398666e 107#CCTYPE = MSVC70
b2e53f8c 108# Visual C++ Toolkit 2003 (aka Visual C++ 7.1) (free command-line tools)
da2c7419 109#CCTYPE = MSVC70FREE
b969270a 110# Windows Server 2003 SP1 Platform SDK (April 2005) (64-bit compiler and tools)
02e200fc 111#CCTYPE = SDK2003SP1
3aa3d69a 112# Visual C++ 2005 (aka Visual C++ 8.0) (full version or Express Edition)
73c9ebc7 113#CCTYPE = MSVC80
3aa3d69a 114# Visual C++ 2008 (aka Visual C++ 9.0) (full version or Express Edition)
4a3cf07b 115#CCTYPE = MSVC90
3aa3d69a 116# Visual C++ 2010 (aka Visual C++ 10.0) (full version or Express Edition)
2a46176f 117#CCTYPE = MSVC100
3aa3d69a 118# Visual C++ 2012 (aka Visual C++ 11.0) (full version or Express Edition)
5398666e 119#CCTYPE = MSVC110
3aa3d69a 120# Visual C++ 2013 (aka Visual C++ 12.0) (full version or Express Edition)
3e7c2d43 121#CCTYPE = MSVC120
3aa3d69a 122# Visual C++ 2015 (aka Visual C++ 14.0) (full version or Express Edition)
1f664ef5 123#CCTYPE = MSVC140
3aa3d69a 124# Visual C++ 2017 (aka Visual C++ 14.1) (full version or Community Edition)
58998b2a 125#CCTYPE = MSVC141
2a0cb97d
SH
126# Visual C++ 2019 (aka Visual C++ 14.2) (full version or Community Edition)
127#CCTYPE = MSVC142
9e42cd94
GS
128
129#
a48cc4c4
DD
130# If you are using Intel C++ Compiler uncomment this
131#
132#__ICC = define
133
134#
f9bbfafd
SH
135# Uncomment this if you want to build everything in C++ mode
136#
137#USE_CPLUSPLUS = define
138
139#
31c916d2 140# uncomment next line if you want debug version of perl (big/slow)
f7d585d3
GS
141# If not enabled, we automatically try to use maximum optimization
142# with all compilers that are known to have a working optimizer.
9e42cd94 143#
31c916d2
SH
144# You can also set CFG = DebugSymbols for a slightly smaller/faster
145# debug build without the special debugging code in perl which is
146# enabled via -DDEBUGGING;
147#
148# or you can set CFG = DebugFull for an even fuller (bigger/slower)
149# debug build using the debug version of the CRT, and enabling VC++
150# debug features such as extra assertions and invalid parameter warnings
151# in perl and CRT code via -D_DEBUG. (Note that the invalid parameter
152# handler does get triggered from time to time in this configuration,
153# which causes warnings to be printed on STDERR, which in turn causes a
154# few tests to fail.)
155#
9e42cd94
GS
156#CFG = Debug
157
158#
9e42cd94
GS
159# uncomment to enable linking with setargv.obj under the Visual C
160# compiler. Setting this options enables perl to expand wildcards in
161# arguments, but it may be harder to use alternate methods like
162# File::DosGlob that are more powerful. This option is supported only with
163# Visual C.
164#
165#USE_SETARGV = define
166
167#
9e42cd94
GS
168# set this if you wish to use perl's malloc
169# WARNING: Turning this on/off WILL break binary compatibility with extensions
170# you may have compiled with/without it. Be prepared to recompile all
171# extensions if you change the default. Currently, this cannot be enabled
172# if you ask for USE_IMP_SYS above.
173#
174#PERL_MALLOC = define
175
176#
06c896bb
SH
177# set this to enable debugging mstats
178# This must be enabled to use the Devel::Peek::mstat() function. This cannot
179# be enabled without PERL_MALLOC as well.
180#
bdb4cb88 181#DEBUG_MSTATS = define
06c896bb
SH
182
183#
4e036e4b
VK
184# set this to additionally provide a statically linked perl-static.exe.
185# Note that dynamic loading will not work with this perl, so you must
a1f2e719 186# include required modules statically using the STATIC_EXT or ALL_STATIC
f69f4f3b 187# variables below. A static library perl533s.lib will also be created.
4e036e4b
VK
188# Ordinary perl.exe is not affected by this option.
189#
190#BUILD_STATIC = define
191
192#
a1f2e719 193# in addition to BUILD_STATIC the option ALL_STATIC makes *every*
d6444ca0 194# extension get statically built.
a1f2e719
VK
195# This will result in a very large perl executable, but the main purpose
196# is to have proper linking set so as to be able to create miscellaneous
d6444ca0 197# executables with different built-in extensions.
a1f2e719
VK
198#
199#ALL_STATIC = define
200
201#
74102a88
SH
202# set the install location of the compiler
203# Running VCVARS32.BAT, VCVARSALL.BAT or similar is *required* when using
204# Visual C++.
205# Versions of Visual C++ up to VC++ 7.1 define $(MSVCDir); versions since then
2a0cb97d 206# define $(VCINSTALLDIR) instead, but from VC++ 14.1 we need the subfolder given
74102a88 207# by $(VCToolsInstallDir).
06c896bb 208#
7adf2470 209!IF "$(CCTYPE)" == "MSVC70" || "$(CCTYPE)" == "MSVC70FREE"
9e42cd94 210CCHOME = $(MSVCDIR)
a719c52d 211!ELSEIF "$(CCTYPE)" == "MSVC141" || "$(CCTYPE)" == "MSVC142"
74102a88 212CCHOME = $(VCTOOLSINSTALLDIR)
a719c52d 213!ELSE
74102a88 214CCHOME = $(VCINSTALLDIR)
74102a88 215!ENDIF
9e42cd94
GS
216
217#
218# Additional compiler flags can be specified here.
219#
2e30e1e1 220BUILDOPT = $(BUILDOPTEXTRA)
9e42cd94 221
7ada00a0 222#
9e42cd94
GS
223# This should normally be disabled. Enabling it will disable the File::Glob
224# implementation of CORE::glob.
225#
226#BUILDOPT = $(BUILDOPT) -DPERL_EXTERNAL_GLOB
227
228#
270ca148
JD
229# Perl needs to read scripts in text mode so that the DATA filehandle
230# works correctly with seek() and tell(), or around auto-flushes of
231# all filehandles (e.g. by system(), backticks, fork(), etc).
bdb4cb88 232#
270ca148
JD
233# The current version on the ByteLoader module on CPAN however only
234# works if scripts are read in binary mode. But before you disable text
235# mode script reading (and break some DATA filehandle functionality)
236# please check first if an updated ByteLoader isn't available on CPAN.
237#
238BUILDOPT = $(BUILDOPT) -DPERL_TEXTMODE_SCRIPTS
9e42cd94
GS
239
240#
241# specify semicolon-separated list of extra directories that modules will
242# look for libraries (spaces in path names need not be quoted)
243#
244EXTRALIBDIRS =
245
246#
247# set this to your email address (perl will guess a value from
a3815e44 248# your loginname and your hostname, which may not be right)
9e42cd94
GS
249#
250#EMAIL =
251
252##
253## Build configuration ends.
254##
255
256##################### CHANGE THESE ONLY IF YOU MUST #####################
257
646e33b6
SH
258!IF "$(USE_IMP_SYS)" == "define"
259PERL_MALLOC = undef
260DEBUG_MSTATS = undef
261!ENDIF
262
9e42cd94
GS
263!IF "$(PERL_MALLOC)" == ""
264PERL_MALLOC = undef
646e33b6 265DEBUG_MSTATS = undef
06c896bb
SH
266!ENDIF
267
268!IF "$(DEBUG_MSTATS)" == ""
646e33b6 269DEBUG_MSTATS = undef
06c896bb
SH
270!ENDIF
271
272!IF "$(DEBUG_MSTATS)" == "define"
646e33b6 273BUILDOPT = $(BUILDOPT) -DPERL_DEBUGGING_MSTATS
9e42cd94
GS
274!ENDIF
275
7ada00a0
SH
276!IF "$(USE_SITECUST)" == ""
277USE_SITECUST = undef
278!ENDIF
279
9e42cd94
GS
280!IF "$(USE_MULTI)" == ""
281USE_MULTI = undef
282!ENDIF
283
284!IF "$(USE_ITHREADS)" == ""
285USE_ITHREADS = undef
286!ENDIF
287
288!IF "$(USE_IMP_SYS)" == ""
289USE_IMP_SYS = undef
290!ENDIF
291
1f64ae15
SH
292!IF "$(USE_64_BIT_INT)" == ""
293USE_64_BIT_INT = undef
294!ENDIF
295
458ea8f7
SH
296!IF "$(DEFAULT_INC_EXCLUDES_DOT)" == ""
297DEFAULT_INC_EXCLUDES_DOT = undef
298!ENDIF
299
6937817d
DD
300!IF "$(USE_NO_REGISTRY)" == ""
301USE_NO_REGISTRY = undef
302!ENDIF
303
3db8f154 304!IF "$(USE_IMP_SYS)$(USE_MULTI)" == "defineundef"
9e42cd94
GS
305USE_MULTI = define
306!ENDIF
307
308!IF "$(USE_ITHREADS)$(USE_MULTI)" == "defineundef"
309USE_MULTI = define
9e42cd94
GS
310!ENDIF
311
7ada00a0
SH
312!IF "$(USE_SITECUST)" == "define"
313BUILDOPT = $(BUILDOPT) -DUSE_SITECUSTOMIZE
314!ENDIF
315
3db8f154 316!IF "$(USE_MULTI)" != "undef"
9e42cd94
GS
317BUILDOPT = $(BUILDOPT) -DPERL_IMPLICIT_CONTEXT
318!ENDIF
319
320!IF "$(USE_IMP_SYS)" != "undef"
321BUILDOPT = $(BUILDOPT) -DPERL_IMPLICIT_SYS
322!ENDIF
323
6937817d
DD
324!IF "$(USE_NO_REGISTRY)" != "undef"
325BUILDOPT = $(BUILDOPT) -DWIN32_NO_REGISTRY
326!ENDIF
327
9e42cd94
GS
328!IF "$(PROCESSOR_ARCHITECTURE)" == ""
329PROCESSOR_ARCHITECTURE = x86
330!ENDIF
331
c623ac67 332!IF "$(WIN64)" == ""
bf2a35e5
JD
333# When we are running from a 32bit cmd.exe on AMD64 then
334# PROCESSOR_ARCHITECTURE is set to x86 and PROCESSOR_ARCHITEW6432
335# is set to AMD64
a719c52d 336! IF "$(PROCESSOR_ARCHITEW6432)" != ""
c623ac67
GS
337PROCESSOR_ARCHITECTURE = $(PROCESSOR_ARCHITEW6432)
338WIN64 = define
a719c52d 339! ELSEIF "$(PROCESSOR_ARCHITECTURE)" == "AMD64" || "$(PROCESSOR_ARCHITECTURE)" == "IA64"
c623ac67 340WIN64 = define
a719c52d 341! ELSE
c623ac67 342WIN64 = undef
a719c52d 343! ENDIF
c623ac67
GS
344!ENDIF
345
1f64ae15
SH
346!IF "$(WIN64)" == "define"
347USE_64_BIT_INT = define
348!ENDIF
349
5398666e
SH
350# Most relevant compiler-specific options fall into two groups:
351# either pre-MSVC80 or MSVC80 onwards, so define a macro for this.
7adf2470 352!IF "$(CCTYPE)" == "MSVC70" || "$(CCTYPE)" == "MSVC70FREE"
5398666e
SH
353PREMSVC80 = define
354!ELSE
355PREMSVC80 = undef
356!ENDIF
357
bf2a35e5
JD
358ARCHITECTURE = $(PROCESSOR_ARCHITECTURE)
359!IF "$(ARCHITECTURE)" == "AMD64"
360ARCHITECTURE = x64
a719c52d 361!ELSEIF "$(ARCHITECTURE)" == "IA64"
bf2a35e5 362ARCHITECTURE = ia64
9453ddcd
SH
363!ENDIF
364
9e42cd94 365!IF "$(USE_MULTI)" == "define"
bf2a35e5 366ARCHNAME = MSWin32-$(ARCHITECTURE)-multi
9e42cd94 367!ELSE
bf2a35e5 368ARCHNAME = MSWin32-$(ARCHITECTURE)-perlio
9e42cd94
GS
369!ENDIF
370
371!IF "$(USE_ITHREADS)" == "define"
372ARCHNAME = $(ARCHNAME)-thread
373!ENDIF
374
a719c52d 375!IF "$(WIN64)" != "define" && "$(USE_64_BIT_INT)" == "define"
1f64ae15
SH
376ARCHNAME = $(ARCHNAME)-64int
377!ENDIF
1f64ae15 378
b2e53f8c 379# All but the free version of VC++ 7.1 can load DLLs on demand. Makes the test
5398666e
SH
380# suite run in about 10% less time.
381!IF "$(CCTYPE)" != "MSVC70FREE"
6937817d
DD
382# If no registry, advapi32 is only used for Perl_pp_getlogin/getlogin/GetUserNameA
383# which is rare to execute
a719c52d 384! IF "$(USE_NO_REGISTRY)" != "undef"
6937817d
DD
385DELAYLOAD = -DELAYLOAD:ws2_32.dll -DELAYLOAD:advapi32.dll delayimp.lib
386MINIDELAYLOAD =
a719c52d 387! ELSE
d1a8253e 388DELAYLOAD = -DELAYLOAD:ws2_32.dll delayimp.lib
6937817d
DD
389#miniperl never does any registry lookups
390MINIDELAYLOAD = -DELAYLOAD:advapi32.dll
a719c52d 391! ENDIF
9e42cd94
GS
392!ENDIF
393
b2e53f8c 394# Visual C++ 2005 and 2008 (VC++ 8.0 and 9.0) create manifest files for EXEs and
4a3cf07b 395# DLLs. These either need copying everywhere with the binaries, or else need
3ddd48aa
SH
396# embedding in them otherwise MSVCR80.dll or MSVCR90.dll won't be found. For
397# simplicity, embed them if they exist (and delete them afterwards so that they
398# don't get installed too).
4adc95e6
SH
399EMBED_EXE_MANI = if exist $@.manifest mt -nologo -manifest $@.manifest -outputresource:$@;1 && \
400 if exist $@.manifest del $@.manifest
401EMBED_DLL_MANI = if exist $@.manifest mt -nologo -manifest $@.manifest -outputresource:$@;2 && \
402 if exist $@.manifest del $@.manifest
e84e5a4c
TK
403# This one is for perl.exe which already has an embedded manifest, so we want to
404# append to it, not replace it.
405APPEND_EXE_MANI = if exist $@.manifest mt -nologo -manifest $@.manifest -updateresource:$@;1 && \
406 if exist $@.manifest del $@.manifest
407
c8e599d3 408
74102a88
SH
409# Set the install location of the compiler headers/libraries.
410# These are saved into $Config{incpath} and $Config{libpth}.
411CCINCDIR = $(CCHOME)\include
2a0cb97d 412!IF "$(CCTYPE)" == "MSVC141" || "$(CCTYPE)" == "MSVC142"
74102a88
SH
413! IF "$(WIN64)" == "define"
414CCLIBDIR = $(CCHOME)\lib\x64
415! ELSE
416CCLIBDIR = $(CCHOME)\lib\x86
417! ENDIF
418!ELSE
6f669bf5
SH
419! IF "$(WIN64)" == "define"
420CCLIBDIR = $(CCHOME)\lib\amd64
421! ELSE
74102a88 422CCLIBDIR = $(CCHOME)\lib
6f669bf5 423! ENDIF
74102a88
SH
424!ENDIF
425
9e42cd94
GS
426ARCHDIR = ..\lib\$(ARCHNAME)
427COREDIR = ..\lib\CORE
428AUTODIR = ..\lib\auto
429LIBDIR = ..\lib
430EXTDIR = ..\ext
a193a2db 431DISTDIR = ..\dist
b212a3c6 432CPANDIR = ..\cpan
9e42cd94 433PODDIR = ..\pod
b4a41557 434HTMLDIR = .\html
9e42cd94 435
9e42cd94
GS
436INST_SCRIPT = $(INST_TOP)$(INST_VER)\bin
437INST_BIN = $(INST_SCRIPT)$(INST_ARCH)
438INST_LIB = $(INST_TOP)$(INST_VER)\lib
439INST_ARCHLIB = $(INST_LIB)$(INST_ARCH)
440INST_COREDIR = $(INST_ARCHLIB)\CORE
9e42cd94
GS
441INST_HTML = $(INST_TOP)$(INST_VER)\html
442
443#
444# Programs to compile, build .lib files and link
445#
446
6da38c10
SH
447# Poison the recipe if no CCTYPE is set, and delete mini\.exists so everything
448# is rebuilt next time to avoid reusing a mini config.h written with no sane CC
449# version set
404ca99e
DD
450!IF "$(CCTYPE)" == ""
451CC = @echo CCTYPE makefile variable not set && del mini\.exists && exit 1 &&
6da38c10 452LINK32 = @echo CCTYPE makefile variable not set && del mini\.exists && exit 1 &&
a719c52d 453!ELSEIF "$(__ICC)" != "define"
9e42cd94
GS
454CC = cl
455LINK32 = link
a48cc4c4
DD
456!ELSE
457CC = icl
458LINK32 = xilink
459!ENDIF
9e42cd94
GS
460LIB32 = $(LINK32) -lib
461RSC = rc
462
463#
464# Options
465#
466
467INCLUDES = -I$(COREDIR) -I.\include -I. -I..
468#PCHFLAGS = -Fpc:\temp\vcmoduls.pch -YX
9cef8306 469DEFINES = -DWIN32 -D_CONSOLE -DNO_STRICT
9e42cd94 470LOCDEFS = -DPERLDLL -DPERL_CORE
a7d225ec 471CXX_FLAG = -TP -EHsc
4be1bfd7 472EXTRACFLAGS = -nologo -GF -W3
9e42cd94 473
2a0cb97d 474!IF "$(CCTYPE)" == "MSVC140" || "$(CCTYPE)" == "MSVC141" || "$(CCTYPE)" == "MSVC142"
1f664ef5
SH
475LIBC = ucrt.lib
476!ELSE
31c916d2 477LIBC = msvcrt.lib
1f664ef5 478!ENDIF
9e42cd94 479
9e42cd94 480!IF "$(CFG)" == "Debug"
4be1bfd7 481OPTIMIZE = -Od -Zi
c623ac67 482LINK_DBG = -debug
4be1bfd7
TK
483DEFINES = $(DEFINES) -DDEBUGGING
484EXTRACFLAGS = $(EXTRACFLAGS) -MD
a719c52d 485!ELSEIF "$(CFG)" == "DebugSymbols"
4be1bfd7 486OPTIMIZE = -Od -Zi
31c916d2 487LINK_DBG = -debug
4be1bfd7 488EXTRACFLAGS = $(EXTRACFLAGS) -MD
a719c52d
TK
489!ELSEIF "$(CFG)" == "DebugFull"
490! IF "$(CCTYPE)" == "MSVC140" || "$(CCTYPE)" == "MSVC141" || "$(CCTYPE)" == "MSVC142"
1f664ef5 491LIBC = ucrtd.lib
a719c52d 492! ELSE
31c916d2 493LIBC = msvcrtd.lib
a719c52d 494! ENDIF
4be1bfd7 495OPTIMIZE = -Od -Zi
31c916d2 496LINK_DBG = -debug
4be1bfd7
TK
497DEFINES = $(DEFINES) -D_DEBUG -DDEBUGGING
498EXTRACFLAGS = $(EXTRACFLAGS) -MDd
31c916d2 499!ELSE
7adf2470 500# Enable Whole Program Optimizations (WPO) and Link Time Code Generation (LTCG).
00a13560 501# -O1 yields smaller code, which turns out to be faster than -O2 on x86 and x64
4be1bfd7 502OPTIMIZE = -O1 -Zi -GL
ec25c072 503# we enable debug symbols in release builds also
7adf2470 504LINK_DBG = -debug -opt:ref,icf -ltcg
ec25c072
SH
505# you may want to enable this if you want COFF symbols in the executables
506# in addition to the PDB symbols. The default Dr. Watson that ships with
a3815e44 507# Windows can use the former but not latter. The free WinDbg can be
ec25c072
SH
508# installed to get better stack traces from just the PDB symbols, so we
509# avoid the bloat of COFF symbols by default.
510#LINK_DBG = $(LINK_DBG) -debugtype:both
a9e3f359 511LIB_FLAGS = -ltcg
4be1bfd7 512EXTRACFLAGS = $(EXTRACFLAGS) -MD
9e42cd94
GS
513!ENDIF
514
c623ac67 515!IF "$(WIN64)" == "define"
17d44595 516DEFINES = $(DEFINES) -DWIN64
f33a21d8 517OPTIMIZE = $(OPTIMIZE) -fp:precise
da2c7419
SH
518!ENDIF
519
b2e53f8c 520# For now, silence warnings from VC++ 8.0 onwards about "unsafe" CRT functions
4a3cf07b 521# and POSIX CRT function names being deprecated.
5398666e 522!IF "$(PREMSVC80)" == "undef"
26a6faa8 523DEFINES = $(DEFINES) -D_CRT_SECURE_NO_DEPRECATE -D_CRT_NONSTDC_NO_DEPRECATE
c5b31784
SH
524!ENDIF
525
3aa3d69a 526# Likewise for deprecated Winsock APIs in VC++ 14.0 onwards for now.
2a0cb97d 527!IF "$(CCTYPE)" == "MSVC140" || "$(CCTYPE)" == "MSVC141" || "$(CCTYPE)" == "MSVC142"
1f664ef5
SH
528DEFINES = $(DEFINES) -D_WINSOCK_DEPRECATED_NO_WARNINGS
529!ENDIF
530
b79cd7df
SH
531# The Windows Server 2003 SP1 SDK compiler only defines _configthreadlocale() if
532# _MT is defined, i.e. when using /MT (the LIBCMT.lib version of the CRT), which
533# the perl build doesn't use. We therefore specify NO_THREAD_SAFE_LOCALE so that
534# perl.h doesn't set USE_THREAD_SAFE_LOCALE, which it otherwise would do since
535# _MSC_VER is 1400 for this compiler (as per MSVC80).
536!IF "$(CCTYPE)" == "SDK2003SP1"
537DEFINES = $(DEFINES) -DNO_THREAD_SAFE_LOCALE
538!ENDIF
539
45f6403b
JD
540# In VS 2005 (VC++ 8.0) Microsoft changes time_t from 32-bit to
541# 64-bit, even in 32-bit mode. It also provides the _USE_32BIT_TIME_T
542# preprocessor option to revert back to the old functionality for
543# backward compatibility. We define this symbol here for older 32-bit
544# compilers only (which aren't using it at all) for the sole purpose
545# of getting it into $Config{ccflags}. That way if someone builds
7adf2470 546# Perl itself with e.g. VC7 but later installs an XS module using VC8
45f6403b 547# the time_t types will still be compatible.
a719c52d 548!IF "$(WIN64)" == "undef" && "$(PREMSVC80)" == "define"
45f6403b 549BUILDOPT = $(BUILDOPT) -D_USE_32BIT_TIME_T
45f6403b
JD
550!ENDIF
551
9cef8306 552LIBBASEFILES = \
9e42cd94
GS
553 oldnames.lib kernel32.lib user32.lib gdi32.lib winspool.lib \
554 comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib \
036c1c1e 555 netapi32.lib uuid.lib ws2_32.lib mpr.lib winmm.lib \
4ebea3c6 556 version.lib odbc32.lib odbccp32.lib comctl32.lib
c623ac67 557
2a0cb97d 558!IF "$(CCTYPE)" == "MSVC140" || "$(CCTYPE)" == "MSVC141" || "$(CCTYPE)" == "MSVC142"
1f664ef5
SH
559! IF "$(CFG)" == "DebugFull"
560LIBBASEFILES = $(LIBBASEFILES) msvcrtd.lib vcruntimed.lib
561! ELSE
562LIBBASEFILES = $(LIBBASEFILES) msvcrt.lib vcruntime.lib
563! ENDIF
564!ENDIF
565
a48cc4c4
DD
566# Avoid __intel_new_proc_init link error for libircmt.
567# libmmd is /MD equivelent, other variants exist.
568# libmmd is Intel C's math addon funcs to MS CRT, contains long doubles, C99,
569# and optimized C89 funcs
570!IF "$(__ICC)" == "define"
571LIBBASEFILES = $(LIBBASEFILES) libircmt.lib libmmd.lib
572!ENDIF
573
b969270a 574# The Windows Server 2003 SP1 SDK compiler links against MSVCRT.dll, which
02e200fc 575# doesn't include the buffer overrun verification code used by the /GS switch.
9453ddcd 576# Since the code links against libraries that are compiled with /GS, this
02e200fc 577# "security cookie verification" code must be included via bufferoverflow.lib.
b969270a 578!IF "$(CCTYPE)" == "SDK2003SP1"
9453ddcd 579LIBBASEFILES = $(LIBBASEFILES) bufferoverflowU.lib
c623ac67 580!ENDIF
9e42cd94 581
9e42cd94
GS
582LIBFILES = $(LIBBASEFILES) $(LIBC)
583
312159d9
DD
584!IF "$(__ICC)" == "define"
585EXTRACFLAGS = $(EXTRACFLAGS) -Qstd=c99
586!ENDIF
f9bbfafd
SH
587!IF "$(USE_CPLUSPLUS)" == "define"
588EXTRACFLAGS = $(EXTRACFLAGS) $(CXX_FLAG)
589!ENDIF
bb275e72 590CFLAGS = $(EXTRACFLAGS) $(INCLUDES) $(DEFINES) $(LOCDEFS) \
9e42cd94
GS
591 $(PCHFLAGS) $(OPTIMIZE)
592LINK_FLAGS = -nologo -nodefaultlib $(LINK_DBG) \
593 -libpath:"$(INST_COREDIR)" \
594 -machine:$(PROCESSOR_ARCHITECTURE)
a9e3f359 595LIB_FLAGS = $(LIB_FLAGS) -nologo
9e42cd94
GS
596OBJOUT_FLAG = -Fo
597EXEOUT_FLAG = -Fe
598
599CFLAGS_O = $(CFLAGS) $(BUILDOPT)
600
e84e5a4c 601RSC_FLAGS =
4ebea3c6 602
58998b2a
SH
603# VS 2017 (VC++ 14.1) requires at minimum Windows 7 SP1 (with latest Windows Updates)
604
b2e53f8c
SH
605# For XP support in >= VS 2013 (VC++ 12.0), subsystem is always in Config.pm
606# LINK_FLAGS else subsystem is only needed for EXE building, not XS DLL building
269713a1
DD
607# Console vs GUI makes no difference for DLLs, so use default for cleaner
608# building cmd lines
2a0cb97d 609!IF "$(CCTYPE)" == "MSVC120" || "$(CCTYPE)" == "MSVC140" || "$(CCTYPE)" == "MSVC141" || "$(CCTYPE)" == "MSVC142"
269713a1
DD
610! IF "$(WIN64)" == "define"
611LINK_FLAGS = $(LINK_FLAGS) -subsystem:console,"5.02"
612! ELSE
613LINK_FLAGS = $(LINK_FLAGS) -subsystem:console,"5.01"
614! ENDIF
269713a1
DD
615
616!ELSE
67c6176d 617PRIV_LINK_FLAGS = $(PRIV_LINK_FLAGS) -subsystem:console
269713a1
DD
618!ENDIF
619
620BLINK_FLAGS = $(PRIV_LINK_FLAGS) $(LINK_FLAGS)
4ebea3c6 621
9e42cd94
GS
622#################### do not edit below this line #######################
623############# NO USER-SERVICEABLE PARTS BEYOND THIS POINT ##############
624
625o = .obj
626
627#
628# Rules
629#
630
9c958f05 631#clear the list, we dont support .cxx .bas .cbl .for .pas .f .f90
f4eedc6b
DD
632# .asm .cpp are not currently used but they are included for completeness
633.SUFFIXES :
634.SUFFIXES : .c $(o) .cpp .asm .dll .lib .exe .rc .res
9e42cd94
GS
635
636.c$(o):
637 $(CC) -c -I$(<D) $(CFLAGS_O) $(OBJOUT_FLAG)$@ $<
638
61b311ca
DD
639.c.i:
640 $(CC) -c -I$(<D) $(CFLAGS_O) -P $(OBJOUT_FLAG)$@ $<
641
9e42cd94
GS
642.y.c:
643 $(NOOP)
644
645$(o).dll:
269713a1
DD
646 $(LINK32) -dll -implib:$(*B).lib -def:$(*B).def \
647 -out:$@ $(BLINK_FLAGS) $(LIBFILES) $< $(LIBPERL)
c8e599d3 648 $(EMBED_DLL_MANI)
9e42cd94
GS
649
650.rc.res:
4ebea3c6 651 $(RSC) -i.. $(RSC_FLAGS) $<
9e42cd94
GS
652
653#
654# various targets
655
656# makedef.pl must be updated if this changes, and this should normally
657# only change when there is an incompatible revision of the public API.
f69f4f3b
S
658PERLIMPLIB = ..\perl533.lib
659PERLSTATICLIB = ..\perl533s.lib
660PERLDLL = ..\perl533.dll
9e42cd94
GS
661
662MINIPERL = ..\miniperl.exe
663MINIDIR = .\mini
664PERLEXE = ..\perl.exe
665WPERLEXE = ..\wperl.exe
4e036e4b 666PERLEXESTATIC = ..\perl-static.exe
9e42cd94 667GLOBEXE = ..\perlglob.exe
04bae4fb 668CONFIGPM = ..\lib\Config.pm ..\lib\Config_heavy.pl
202d1001 669GENUUDMAP = ..\generate_uudmap.exe
eb4420e6 670!IF "$(BUILD_STATIC)" == "define" || "$(ALL_STATIC)" == "define"
4e036e4b
VK
671PERLSTATIC = static
672!ELSE
673PERLSTATIC =
674!ENDIF
5b04aee6 675
ca12659b 676# Unicode data files generated by mktables
36ff7f95
SH
677FIRSTUNIFILE = ..\lib\unicore\Decomposition.pl
678UNIDATAFILES = ..\lib\unicore\Decomposition.pl \
7ebf06b3 679 ..\lib\unicore\CombiningClass.pl ..\lib\unicore\Name.pl \
1a234f2b
KW
680 ..\lib\unicore\Heavy.pl ..\lib\unicore\mktables.lst \
681 ..\lib\unicore\UCD.pl ..\lib\unicore\Name.pm \
3e344d15 682 ..\lib\unicore\TestProp.pl
ca12659b
NC
683
684# Directories of Unicode data files generated by mktables
27a8011f
SH
685UNIDATADIR1 = ..\lib\unicore\To
686UNIDATADIR2 = ..\lib\unicore\lib
ca12659b 687
4ebea3c6 688PERLEXE_MANIFEST= .\perlexe.manifest
3890b58f
RGS
689PERLEXE_ICO = .\perlexe.ico
690PERLEXE_RES = .\perlexe.res
691PERLDLL_RES =
692
9e42cd94
GS
693# Nominate a target which causes extensions to be re-built
694# This used to be $(PERLEXE), but at worst it is the .dll that they depend
695# on and really only the interface - i.e. the .def file used to export symbols
696# from the .dll
697PERLDEP = perldll.def
698
699PL2BAT = bin\pl2bat.pl
700GLOBBAT = bin\perlglob.bat
701
702UTILS = \
703 ..\utils\h2ph \
704 ..\utils\splain \
9e42cd94
GS
705 ..\utils\perlbug \
706 ..\utils\pl2pm \
9e42cd94
GS
707 ..\utils\h2xs \
708 ..\utils\perldoc \
9e42cd94
GS
709 ..\utils\perlivp \
710 ..\utils\libnetcfg \
827a599d 711 ..\utils\enc2xs \
59658819 712 ..\utils\encguess \
827a599d 713 ..\utils\piconv \
18a1cebe 714 ..\utils\corelist \
83cd6e83 715 ..\utils\cpan \
ea0e987d 716 ..\utils\xsubpp \
4b618757 717 ..\utils\prove \
291d3373 718 ..\utils\ptar \
b8669316 719 ..\utils\ptardiff \
deabda19 720 ..\utils\ptargrep \
08ad9465 721 ..\utils\zipdetails \
3ddf9550 722 ..\utils\shasum \
ea0e987d 723 ..\utils\instmodsh \
84f04405 724 ..\utils\json_pp \
d658129c 725 ..\utils\pod2html \
d3d73539 726 ..\utils\streamzip \
9e42cd94
GS
727 bin\exetype.pl \
728 bin\runperl.pl \
729 bin\pl2bat.pl \
730 bin\perlglob.pl \
731 bin\search.pl
732
733MAKE = nmake -nologo
734MAKE_BARE = nmake
735
736CFGSH_TMPL = config.vc
737CFGH_TMPL = config_H.vc
19d5c34a 738INT64 = __int64
9e42cd94 739
b6ed7314
YO
740XCOPY = xcopy /f /r /i /d /y
741RCOPY = xcopy /f /r /i /e /d /y
65980d94 742NOOP = @rem
9e42cd94
GS
743NULL =
744
745DEL = del
746
9e42cd94
GS
747MICROCORE_SRC = \
748 ..\av.c \
0f8f167c 749 ..\caretx.c \
9e42cd94
GS
750 ..\deb.c \
751 ..\doio.c \
752 ..\doop.c \
a55c5245 753 ..\dquote.c \
9e42cd94
GS
754 ..\dump.c \
755 ..\globals.c \
756 ..\gv.c \
8b371338 757 ..\mro_core.c \
9e42cd94
GS
758 ..\hv.c \
759 ..\locale.c \
26ea9e12 760 ..\keywords.c \
a0d89a74 761 ..\mathoms.c \
9e42cd94
GS
762 ..\mg.c \
763 ..\numeric.c \
764 ..\op.c \
295f0f84 765 ..\pad.c \
9e42cd94 766 ..\perl.c \
9e42cd94
GS
767 ..\perly.c \
768 ..\pp.c \
769 ..\pp_ctl.c \
770 ..\pp_hot.c \
771 ..\pp_pack.c \
772 ..\pp_sort.c \
773 ..\pp_sys.c \
10bc17b6 774 ..\reentr.c \
9e42cd94
GS
775 ..\regcomp.c \
776 ..\regexec.c \
777 ..\run.c \
778 ..\scope.c \
779 ..\sv.c \
780 ..\taint.c \
f832b29a 781 ..\time64.c \
9e42cd94
GS
782 ..\toke.c \
783 ..\universal.c \
784 ..\utf8.c \
48462a74 785 ..\util.c
9e42cd94
GS
786
787EXTRACORE_SRC = $(EXTRACORE_SRC) perllib.c
788
789!IF "$(PERL_MALLOC)" == "define"
790EXTRACORE_SRC = $(EXTRACORE_SRC) ..\malloc.c
791!ENDIF
792
793EXTRACORE_SRC = $(EXTRACORE_SRC) ..\perlio.c
794
795WIN32_SRC = \
796 .\win32.c \
8c847e66 797 .\win32io.c \
9e42cd94 798 .\win32sck.c \
9cef8306
JD
799 .\win32thread.c \
800 .\fcrypt.c
9e42cd94 801
9e42cd94
GS
802CORE_NOCFG_H = \
803 ..\av.h \
804 ..\cop.h \
805 ..\cv.h \
806 ..\dosish.h \
807 ..\embed.h \
808 ..\form.h \
809 ..\gv.h \
810 ..\handy.h \
811 ..\hv.h \
4d3a042d 812 ..\hv_func.h \
9e42cd94
GS
813 ..\iperlsys.h \
814 ..\mg.h \
815 ..\nostdio.h \
816 ..\op.h \
817 ..\opcode.h \
818 ..\perl.h \
819 ..\perlapi.h \
820 ..\perlsdio.h \
9e42cd94
GS
821 ..\perly.h \
822 ..\pp.h \
823 ..\proto.h \
cdb0f547 824 ..\regcomp.h \
9e42cd94
GS
825 ..\regexp.h \
826 ..\scope.h \
827 ..\sv.h \
828 ..\thread.h \
829 ..\unixish.h \
830 ..\utf8.h \
831 ..\util.h \
832 ..\warnings.h \
833 ..\XSUB.h \
834 ..\EXTERN.h \
835 ..\perlvars.h \
836 ..\intrpvar.h \
9e42cd94
GS
837 .\include\dirent.h \
838 .\include\netdb.h \
c44e86c9 839 .\include\sys\errno2.h \
9e42cd94
GS
840 .\include\sys\socket.h \
841 .\win32.h
842
a148edb6 843CORE_H = $(CORE_NOCFG_H) .\config.h ..\git_version.h
9e42cd94 844
202d1001 845UUDMAP_H = ..\uudmap.h
efa50c51 846BITCOUNT_H = ..\bitcount.h
6f83ef0e 847MG_DATA_H = ..\mg_data.h
9387abf8 848GENERATED_HEADERS = $(UUDMAP_H) $(BITCOUNT_H) $(MG_DATA_H)
202d1001 849
9e42cd94
GS
850MICROCORE_OBJ = $(MICROCORE_SRC:.c=.obj)
851CORE_OBJ = $(MICROCORE_OBJ) $(EXTRACORE_SRC:.c=.obj)
852WIN32_OBJ = $(WIN32_SRC:.c=.obj)
853MINICORE_OBJ = $(MICROCORE_OBJ:..\=.\mini\) \
854 $(MINIDIR)\miniperlmain$(o) \
855 $(MINIDIR)\perlio$(o)
856MINIWIN32_OBJ = $(WIN32_OBJ:.\=.\mini\)
857MINI_OBJ = $(MINICORE_OBJ) $(MINIWIN32_OBJ)
281da5ea 858DLL_OBJ = $(DYNALOADER)
202d1001 859GENUUDMAP_OBJ = $(GENUUDMAP:.exe=.obj)
9e42cd94
GS
860
861PERLDLL_OBJ = $(CORE_OBJ)
862PERLEXE_OBJ = perlmain$(o)
4e036e4b 863PERLEXEST_OBJ = perlmainst$(o)
9e42cd94
GS
864
865PERLDLL_OBJ = $(PERLDLL_OBJ) $(WIN32_OBJ) $(DLL_OBJ)
9e42cd94
GS
866
867!IF "$(USE_SETARGV)" != ""
868SETARGV_OBJ = setargv$(o)
869!ENDIF
870
a1f2e719
VK
871!IF "$(ALL_STATIC)" == "define"
872# some exclusions, unfortunately, until fixed:
903f2d70 873# - MakeMaker isn't capable enough for SDBM_File (small bug)
13cedc2a 874STATIC_EXT = * !SDBM_File
a1f2e719
VK
875!ELSE
876# specify static extensions here, for example:
7a278470
SH
877# (be sure to include Win32CORE to load Win32 on demand)
878#STATIC_EXT = Win32CORE Cwd Compress/Raw/Zlib
78ff2d7b 879STATIC_EXT = Win32CORE
a1f2e719 880!ENDIF
595589fa 881
281da5ea 882DYNALOADER = ..\DynaLoader$(o)
9e42cd94 883
9e42cd94 884CFG_VARS = \
9e42cd94
GS
885 "INST_TOP=$(INST_TOP)" \
886 "INST_VER=$(INST_VER)" \
887 "INST_ARCH=$(INST_ARCH)" \
888 "archname=$(ARCHNAME)" \
889 "cc=$(CC)" \
890 "ld=$(LINK32)" \
4be1bfd7 891 "ccflags=$(EXTRACFLAGS) $(DEFINES) $(BUILDOPT)" \
f9bbfafd 892 "usecplusplus=$(USE_CPLUSPLUS)" \
9e42cd94 893 "cf_email=$(EMAIL)" \
9e42cd94
GS
894 "d_mymalloc=$(PERL_MALLOC)" \
895 "libs=$(LIBFILES)" \
896 "incpath=$(CCINCDIR:"=\")" \
897 "libperl=$(PERLIMPLIB:..\=)" \
898 "libpth=$(CCLIBDIR:"=\");$(EXTRALIBDIRS:"=\")" \
899 "libc=$(LIBC)" \
900 "make=$(MAKE_BARE)" \
d2b25974 901 "static_ext=$(STATIC_EXT)" \
7e0017d3 902 "usethreads=$(USE_ITHREADS)" \
9e42cd94 903 "useithreads=$(USE_ITHREADS)" \
9e42cd94 904 "usemultiplicity=$(USE_MULTI)" \
1f64ae15 905 "use64bitint=$(USE_64_BIT_INT)" \
c674478b 906 "uselongdouble=undef" \
7ada00a0 907 "usesitecustomize=$(USE_SITECUST)" \
458ea8f7 908 "default_inc_excludes_dot=$(DEFAULT_INC_EXCLUDES_DOT)" \
9e42cd94 909 "LINK_FLAGS=$(LINK_FLAGS:"=\")" \
1f64ae15
SH
910 "optimize=$(OPTIMIZE:"=\")" \
911 "WIN64=$(WIN64)"
9e42cd94
GS
912
913#
914# Top targets
915#
916
19d5c34a 917all : ..\git_version.h $(GLOBEXE) $(CONFIGPM) \
2a0bbd31 918 $(UNIDATAFILES) MakePPPort $(PERLEXE) Extensions_nonxs Extensions \
fda9c55c 919 $(PERLSTATIC)
9e42cd94
GS
920 @echo Everything is up to date. '$(MAKE_BARE) test' to run test suite.
921
c900f745 922regnodes : ..\regnodes.h
5d458dd8 923
5b04aee6 924..\regcomp$(o) : ..\regnodes.h ..\regcharclass.h
e64b1bd1
YO
925
926..\regexec$(o) : ..\regnodes.h ..\regcharclass.h
927
7b4d95f7 928reonly : regnodes .\config.h ..\git_version.h $(GLOBEXE) $(CONFIGPM) \
e5a8a0fb 929 $(UNIDATAFILES) $(PERLEXE) Extensions_reonly
a24cc0c0
YO
930 @echo Perl and 're' are up to date.
931
4e036e4b
VK
932static: $(PERLEXESTATIC)
933
9e42cd94
GS
934#------------------------------------------------------------
935
936$(GLOBEXE) : perlglob$(o)
269713a1 937 $(LINK32) $(BLINK_FLAGS) $(LIBFILES) -out:$@ \
9e42cd94 938 perlglob$(o) setargv$(o)
c8e599d3 939 $(EMBED_EXE_MANI)
9e42cd94
GS
940
941perlglob$(o) : perlglob.c
942
04bf47ee 943..\git_version.h : $(MINIPERL) ..\make_patchnum.pl
d801a0eb 944 cd .. && miniperl -Ilib make_patchnum.pl && cd win32
a148edb6 945
931482b7
NC
946# make sure that we recompile perl.c if the git version changes
947..\perl$(o) : ..\git_version.h
a148edb6 948
771d08d0
SH
949..\config.sh : $(CFGSH_TMPL) config_sh.PL FindExt.pm $(MINIPERL)
950 $(MINIPERL) -I..\lib config_sh.PL $(CFG_VARS) $(CFGSH_TMPL) > ..\config.sh
9e42cd94 951
1f64ae15
SH
952# This target is for when changes to the main config.sh happen.
953# Edit config.vc, then make perl in a minimal configuration (i.e. with MULTI,
8c847e66 954# ITHREADS, IMP_SYS and LARGE_FILES off), then make this target
76febb1c 955# to regenerate config_H.vc.
9e42cd94 956regen_config_h:
d9f9953f 957 $(MINIPERL) -I..\lib config_sh.PL --prebuilt $(CFG_VARS) $(CFGSH_TMPL) > ..\config.sh
4e73d6a4 958 $(MINIPERL) -I..\lib ..\configpm --chdir=..
9e42cd94 959 -del /f $(CFGH_TMPL)
f6b3c354 960 -$(MINIPERL) -I..\lib config_h.PL
9e42cd94
GS
961 rename config.h $(CFGH_TMPL)
962
680b2c5e 963$(CONFIGPM) : $(MINIPERL) ..\config.sh config_h.PL ..\git_version.h
4e73d6a4 964 $(MINIPERL) -I..\lib ..\configpm --chdir=..
9e42cd94
GS
965 $(XCOPY) ..\*.h $(COREDIR)\*.*
966 $(XCOPY) *.h $(COREDIR)\*.*
9e42cd94 967 $(RCOPY) include $(COREDIR)\*.*
f6b3c354 968 -$(MINIPERL) -I..\lib config_h.PL
9e42cd94
GS
969 if errorlevel 1 $(MAKE) /$(MAKEFLAGS) $(CONFIGPM)
970
19d5c34a
DD
971.\config.h : $(CONFIGPM)
972
cb251201 973# See the comment in Makefile.SH explaining this seemingly cranky ordering
19d5c34a 974$(MINIPERL) : ..\lib\buildcustomize.pl
5e4c4c91 975
19d5c34a 976..\lib\buildcustomize.pl : $(MINI_OBJ) ..\write_buildcustomize.pl
269713a1 977 $(LINK32) -out:$(MINIPERL) @<<
6937817d 978 $(BLINK_FLAGS) $(DELAYLOAD) $(MINIDELAYLOAD) $(LIBFILES) $(MINI_OBJ)
9e42cd94 979<<
02bfb73b 980 $(EMBED_EXE_MANI:..\lib\buildcustomize.pl=..\miniperl.exe)
b78ac715 981 $(MINIPERL) -I..\lib -f ..\write_buildcustomize.pl ..
9e42cd94 982
19d5c34a 983$(MINIDIR)\.exists : $(CFGH_TMPL)
9e42cd94 984 if not exist "$(MINIDIR)" mkdir "$(MINIDIR)"
19d5c34a
DD
985#
986# Copy the template config.h and set configurables at the end of it
987# as per the options chosen and compiler used.
988# Note: This config.h is only used to build miniperl.exe anyway, but
989# it's as well to have its options correct to be sure that it builds
990# and so that it's "-V" options are correct for use by makedef.pl. The
991# real config.h used to build perl.exe is generated from the top-level
992# config_h.SH by config_h.PL (run by miniperl.exe).
993#
994 copy $(CFGH_TMPL) config.h
995 @(echo.&& \
996 echo #ifndef _config_h_footer_&& \
997 echo #define _config_h_footer_&& \
19d5c34a
DD
998 echo #undef PTRSIZE&& \
999 echo #undef SSize_t&& \
1000 echo #undef HAS_ATOLL&& \
1001 echo #undef HAS_STRTOLL&& \
1002 echo #undef HAS_STRTOULL&& \
1003 echo #undef Size_t_size&& \
1004 echo #undef IVTYPE&& \
1005 echo #undef UVTYPE&& \
1006 echo #undef IVSIZE&& \
1007 echo #undef UVSIZE&& \
1008 echo #undef NV_PRESERVES_UV&& \
1009 echo #undef NV_PRESERVES_UV_BITS&& \
1010 echo #undef IVdf&& \
1011 echo #undef UVuf&& \
1012 echo #undef UVof&& \
1013 echo #undef UVxf&& \
1014 echo #undef UVXf&& \
1015 echo #undef USE_64_BIT_INT&& \
1016 echo #undef USE_LONG_DOUBLE&& \
1017 echo #undef USE_CPLUSPLUS)>> config.h
2a0cb97d 1018!IF "$(CCTYPE)" == "MSVC140" || "$(CCTYPE)" == "MSVC141" || "$(CCTYPE)" == "MSVC142"
19d5c34a
DD
1019 @(echo #undef FILE_ptr&& \
1020 echo #undef FILE_cnt&& \
1021 echo #undef FILE_base&& \
1022 echo #undef FILE_bufsiz&& \
1023 echo #define FILE_ptr^(fp^) PERLIO_FILE_ptr^(fp^)&& \
1024 echo #define FILE_cnt^(fp^) PERLIO_FILE_cnt^(fp^)&& \
1025 echo #define FILE_base^(fp^) PERLIO_FILE_base^(fp^)&& \
1026 echo #define FILE_bufsiz^(fp^) ^(PERLIO_FILE_cnt^(fp^) + PERLIO_FILE_ptr^(fp^) - PERLIO_FILE_base^(fp^)^)&& \
1027 echo #define I_STDBOOL)>> config.h
1028!ENDIF
19d5c34a
DD
1029!IF "$(WIN64)"=="define"
1030 @(echo #define PTRSIZE ^8&& \
1031 echo #define SSize_t $(INT64)&& \
1032 echo #define HAS_ATOLL&& \
1033 echo #define HAS_STRTOLL&& \
1034 echo #define HAS_STRTOULL&& \
1035 echo #define Size_t_size ^8)>> config.h
1036!ELSE
1037 @(echo #define PTRSIZE ^4&& \
1038 echo #define SSize_t int&& \
1039 echo #undef HAS_ATOLL&& \
1040 echo #undef HAS_STRTOLL&& \
1041 echo #undef HAS_STRTOULL&& \
1042 echo #define Size_t_size ^4)>> config.h
1043!ENDIF
1044!IF "$(USE_64_BIT_INT)"=="define"
1045 @(echo #define IVTYPE $(INT64)&& \
1046 echo #define UVTYPE unsigned $(INT64)&& \
1047 echo #define IVSIZE ^8&& \
1048 echo #define UVSIZE ^8&& \
1049 echo #undef NV_PRESERVES_UV&& \
1050 echo #define NV_PRESERVES_UV_BITS 53&& \
1051 echo #define IVdf "I64d"&& \
1052 echo #define UVuf "I64u"&& \
1053 echo #define UVof "I64o"&& \
1054 echo #define UVxf "I64x"&& \
1055 echo #define UVXf "I64X"&& \
1056 echo #define USE_64_BIT_INT)>> config.h
1057!ELSE
1058 @(echo #define IVTYPE long&& \
1059 echo #define UVTYPE unsigned long&& \
1060 echo #define IVSIZE ^4&& \
1061 echo #define UVSIZE ^4&& \
1062 echo #define NV_PRESERVES_UV&& \
1063 echo #define NV_PRESERVES_UV_BITS 32&& \
1064 echo #define IVdf "ld"&& \
1065 echo #define UVuf "lu"&& \
1066 echo #define UVof "lo"&& \
1067 echo #define UVxf "lx"&& \
1068 echo #define UVXf "lX"&& \
1069 echo #undef USE_64_BIT_INT)>> config.h
1070!ENDIF
1071!IF "$(USE_CPLUSPLUS)"=="define"
1072 @(echo #define USE_CPLUSPLUS&& \
1073 echo #endif)>> config.h
1074!ELSE
1075 @(echo #undef USE_CPLUSPLUS&& \
1076 echo #endif)>> config.h
1077!ENDIF
1078#separate line since this is sentinal that this target is done
1079 @rem. > $(MINIDIR)\.exists
9e42cd94
GS
1080
1081$(MINICORE_OBJ) : $(CORE_NOCFG_H)
8c4561fb 1082 $(CC) -c $(CFLAGS) -DPERL_EXTERNAL_GLOB -DPERL_IS_MINIPERL $(OBJOUT_FLAG)$@ ..\$(*F).c
9e42cd94
GS
1083
1084$(MINIWIN32_OBJ) : $(CORE_NOCFG_H)
a19baa61 1085 $(CC) -c $(CFLAGS) -DPERL_IS_MINIPERL $(OBJOUT_FLAG)$@ $(*F).c
9e42cd94
GS
1086
1087# -DPERL_IMPLICIT_SYS needs C++ for perllib.c
1088# This is the only file that depends on perlhost.h, vmem.h, and vdir.h
1089!IF "$(USE_IMP_SYS)" == "define"
1090perllib$(o) : perllib.c .\perlhost.h .\vdir.h .\vmem.h
1091 $(CC) -c -I. $(CFLAGS_O) $(CXX_FLAG) $(OBJOUT_FLAG)$@ perllib.c
1092!ENDIF
1093
1094# 1. we don't want to rebuild miniperl.exe when config.h changes
1095# 2. we don't want to rebuild miniperl.exe with non-default config.h
931482b7 1096# 3. we can't have miniperl.exe depend on git_version.h, as miniperl creates it
19d5c34a 1097$(MINI_OBJ) : $(MINIDIR)\.exists $(CORE_NOCFG_H)
9e42cd94
GS
1098
1099$(WIN32_OBJ) : $(CORE_H)
1100$(CORE_OBJ) : $(CORE_H)
1101$(DLL_OBJ) : $(CORE_H)
9e42cd94 1102
680b2c5e 1103perldll.def : $(MINIPERL) $(CONFIGPM) ..\embed.fnc ..\makedef.pl create_perllibst_h.pl ..\git_version.h
c6d234b8 1104 $(MINIPERL) -I..\lib create_perllibst_h.pl
c1effa61 1105 $(MINIPERL) -I..\lib -w ..\makedef.pl PLATFORM=win32 $(OPTIMIZE) $(DEFINES) $(BUILDOPT) \
080c3729 1106 CCTYPE=$(CCTYPE) TARG_DIR=..\ > perldll.def
9e42cd94 1107
595589fa 1108$(PERLDLL): perldll.def $(PERLDLL_OBJ) $(PERLDLL_RES) Extensions_static
fb953ad4 1109 $(LINK32) -dll -def:perldll.def -out:$@ @Extensions_static @<<
6368ab83 1110 $(BLINK_FLAGS) $(DELAYLOAD) $(LIBFILES) $(PERLDLL_OBJ) $(PERLDLL_RES)
9e42cd94 1111<<
c8e599d3 1112 $(EMBED_DLL_MANI)
9e42cd94
GS
1113 $(XCOPY) $(PERLIMPLIB) $(COREDIR)
1114
4e036e4b
VK
1115$(PERLSTATICLIB): Extensions_static
1116 $(LIB32) $(LIB_FLAGS) -out:$@ @Extensions_static @<<
1117 $(PERLDLL_OBJ)
1118<<
1119 $(XCOPY) $(PERLSTATICLIB) $(COREDIR)
1120
4ebea3c6 1121$(PERLEXE_RES): perlexe.rc $(PERLEXE_MANIFEST) $(PERLEXE_ICO)
e84ac4e2 1122
9387abf8 1123$(MINIDIR)\globals$(o) : $(GENERATED_HEADERS)
9444d213 1124
6f83ef0e 1125$(UUDMAP_H) $(MG_DATA_H) : $(BITCOUNT_H)
6999193b
NC
1126
1127$(BITCOUNT_H) : $(GENUUDMAP)
9387abf8 1128 $(GENUUDMAP) $(GENERATED_HEADERS)
6f83ef0e
NC
1129
1130$(GENUUDMAP_OBJ) : ..\mg_raw.h
9444d213 1131
202d1001 1132$(GENUUDMAP) : $(GENUUDMAP_OBJ)
269713a1
DD
1133 $(LINK32) -out:$@ @<<
1134 $(BLINK_FLAGS) $(LIBFILES) $(GENUUDMAP_OBJ)
202d1001
SH
1135<<
1136 $(EMBED_EXE_MANI)
9444d213 1137
9e42cd94
GS
1138perlmain.c : runperl.c
1139 copy runperl.c perlmain.c
1140
1141perlmain$(o) : perlmain.c
88c9158a 1142 $(CC) $(CFLAGS_O:-DPERLDLL=-UPERLDLL) $(OBJOUT_FLAG)$@ -c perlmain.c
9e42cd94 1143
4e036e4b
VK
1144perlmainst.c : runperl.c
1145 copy runperl.c perlmainst.c
1146
1147perlmainst$(o) : perlmainst.c
88c9158a 1148 $(CC) $(CFLAGS_O) $(OBJOUT_FLAG)$@ -c perlmainst.c
4e036e4b 1149
931482b7 1150$(PERLEXE): $(PERLDLL) $(CONFIGPM) $(PERLEXE_OBJ) $(PERLEXE_RES)
269713a1 1151 $(LINK32) -out:$@ $(BLINK_FLAGS) \
aafd2430 1152 $(PERLEXE_OBJ) $(PERLEXE_RES) $(PERLIMPLIB) $(LIBFILES) $(SETARGV_OBJ)
e84e5a4c 1153 $(APPEND_EXE_MANI)
9e42cd94
GS
1154 copy $(PERLEXE) $(WPERLEXE)
1155 $(MINIPERL) -I..\lib bin\exetype.pl $(WPERLEXE) WINDOWS
9e42cd94 1156
931482b7 1157$(PERLEXESTATIC): $(PERLSTATICLIB) $(CONFIGPM) $(PERLEXEST_OBJ) $(PERLEXE_RES)
269713a1 1158 $(LINK32) -out:$@ $(BLINK_FLAGS) \
aafd2430 1159 $(PERLEXEST_OBJ) $(PERLEXE_RES) $(PERLSTATICLIB) $(LIBFILES) $(SETARGV_OBJ)
e84e5a4c 1160 $(APPEND_EXE_MANI)
4e036e4b 1161
d1a21686 1162MakePPPort: $(MINIPERL) $(CONFIGPM) Extensions_nonxs
f6b3c354 1163 $(MINIPERL) -I..\lib ..\mkppport
42e07562 1164
9dcb9602 1165#-------------------------------------------------------------------------------
281da5ea 1166# There's no direct way to mark a dependency on
6afd19bc 1167# DynaLoader.pm, so this will have to do
5e4c4c91 1168Extensions: ..\make_ext.pl ..\lib\buildcustomize.pl $(PERLDEP) $(CONFIGPM) $(DYNALOADER)
a5ca303d 1169 $(XCOPY) ..\*.h $(COREDIR)\*.*
a193a2db 1170 $(MINIPERL) -I..\lib ..\make_ext.pl "MAKE=$(MAKE)" --dir=$(CPANDIR) --dir=$(DISTDIR) --dir=$(EXTDIR) --dynamic
595589fa 1171
5e4c4c91 1172Extensions_reonly: ..\make_ext.pl ..\lib\buildcustomize.pl $(PERLDEP) $(CONFIGPM) $(DYNALOADER)
a5ca303d 1173 $(XCOPY) ..\*.h $(COREDIR)\*.*
a193a2db 1174 $(MINIPERL) -I..\lib ..\make_ext.pl "MAKE=$(MAKE)" --dir=$(CPANDIR) --dir=$(DISTDIR) --dir=$(EXTDIR) --dynamic +re
a24cc0c0 1175
183ebedc 1176Extensions_static : ..\make_ext.pl ..\lib\buildcustomize.pl list_static_libs.pl $(PERLDEP) $(CONFIGPM) Extensions_nonxs
a5ca303d 1177 $(XCOPY) ..\*.h $(COREDIR)\*.*
a193a2db 1178 $(MINIPERL) -I..\lib ..\make_ext.pl "MAKE=$(MAKE)" --dir=$(CPANDIR) --dir=$(DISTDIR) --dir=$(EXTDIR) --static
c6d234b8 1179 $(MINIPERL) -I..\lib list_static_libs.pl > Extensions_static
9e42cd94 1180
291c8c21 1181Extensions_nonxs: ..\make_ext.pl ..\lib\buildcustomize.pl $(PERLDEP) $(CONFIGPM) ..\pod\perlfunc.pod
a34ce875 1182 $(XCOPY) ..\*.h $(COREDIR)\*.*
a193a2db 1183 $(MINIPERL) -I..\lib ..\make_ext.pl "MAKE=$(MAKE)" --dir=$(CPANDIR) --dir=$(DISTDIR) --dir=$(EXTDIR) --nonxs
a34ce875 1184
5e4c4c91 1185$(DYNALOADER) : ..\make_ext.pl ..\lib\buildcustomize.pl $(PERLDEP) $(CONFIGPM) Extensions_nonxs
281da5ea
NC
1186 $(XCOPY) ..\*.h $(COREDIR)\*.*
1187 $(MINIPERL) -I..\lib ..\make_ext.pl "MAKE=$(MAKE)" --dir=$(EXTDIR) --dynaloader
1188
9e42cd94 1189Extensions_clean:
a193a2db 1190 -if exist $(MINIPERL) $(MINIPERL) -I..\lib ..\make_ext.pl "MAKE=$(MAKE)" --dir=$(CPANDIR) --dir=$(DISTDIR) --dir=$(EXTDIR) --all --target=clean
9e42cd94 1191
b4dc1df6 1192Extensions_realclean:
a193a2db 1193 -if exist $(MINIPERL) $(MINIPERL) -I..\lib ..\make_ext.pl "MAKE=$(MAKE)" --dir=$(CPANDIR) --dir=$(DISTDIR) --dir=$(EXTDIR) --all --target=realclean
b4dc1df6 1194
9dcb9602 1195#-------------------------------------------------------------------------------
9e42cd94 1196
0195b144 1197doc: $(PERLEXE) ..\pod\perltoc.pod
a4e8ab8a 1198 $(PERLEXE) ..\installhtml --podroot=.. --htmldir=$(HTMLDIR) \
f8dbed5a 1199 --podpath=pod:lib:utils --htmlroot="file://$(INST_HTML::=|)" \
9b1d99d7 1200 --recurse
9e42cd94 1201
0827416d
NC
1202..\utils\Makefile: $(CONFIGPM) ..\utils\Makefile.PL
1203 $(MINIPERL) -I..\lib ..\utils\Makefile.PL ..
1204
b0b6bf2b
AT
1205# Note that this next section is parsed (and regenerated) by pod/buildtoc
1206# so please check that script before making structural changes here
1207
e5a8a0fb 1208utils: $(PERLEXE) ..\utils\Makefile
9e42cd94
GS
1209 cd ..\utils
1210 $(MAKE) PERL=$(MINIPERL)
1211 cd ..\pod
b0b6bf2b
AT
1212 copy ..\README.aix ..\pod\perlaix.pod
1213 copy ..\README.amiga ..\pod\perlamiga.pod
6001596e 1214 copy ..\README.android ..\pod\perlandroid.pod
b0b6bf2b 1215 copy ..\README.bs2000 ..\pod\perlbs2000.pod
b0b6bf2b
AT
1216 copy ..\README.cn ..\pod\perlcn.pod
1217 copy ..\README.cygwin ..\pod\perlcygwin.pod
b0b6bf2b 1218 copy ..\README.dos ..\pod\perldos.pod
b0b6bf2b 1219 copy ..\README.freebsd ..\pod\perlfreebsd.pod
9f968a8d 1220 copy ..\README.haiku ..\pod\perlhaiku.pod
b0b6bf2b
AT
1221 copy ..\README.hpux ..\pod\perlhpux.pod
1222 copy ..\README.hurd ..\pod\perlhurd.pod
1223 copy ..\README.irix ..\pod\perlirix.pod
1224 copy ..\README.jp ..\pod\perljp.pod
1225 copy ..\README.ko ..\pod\perlko.pod
6477b319 1226 copy ..\README.linux ..\pod\perllinux.pod
b0b6bf2b
AT
1227 copy ..\README.macos ..\pod\perlmacos.pod
1228 copy ..\README.macosx ..\pod\perlmacosx.pod
b0b6bf2b 1229 copy ..\README.netware ..\pod\perlnetware.pod
b0846812 1230 copy ..\README.openbsd ..\pod\perlopenbsd.pod
b0b6bf2b
AT
1231 copy ..\README.os2 ..\pod\perlos2.pod
1232 copy ..\README.os390 ..\pod\perlos390.pod
1233 copy ..\README.os400 ..\pod\perlos400.pod
1234 copy ..\README.plan9 ..\pod\perlplan9.pod
1235 copy ..\README.qnx ..\pod\perlqnx.pod
2f08ed66 1236 copy ..\README.riscos ..\pod\perlriscos.pod
b0b6bf2b 1237 copy ..\README.solaris ..\pod\perlsolaris.pod
58534900 1238 copy ..\README.synology ..\pod\perlsynology.pod
b0b6bf2b
AT
1239 copy ..\README.tru64 ..\pod\perltru64.pod
1240 copy ..\README.tw ..\pod\perltw.pod
b0b6bf2b
AT
1241 copy ..\README.vos ..\pod\perlvos.pod
1242 copy ..\README.win32 ..\pod\perlwin32.pod
7c120837 1243 copy ..\pod\perldelta.pod ..\pod\perl5338delta.pod
9e42cd94
GS
1244 cd ..\win32
1245 $(PERLEXE) $(PL2BAT) $(UTILS)
f8d6280f 1246 $(MINIPERL) -I..\lib ..\autodoc.pl ..
f556af6c 1247 $(MINIPERL) -I..\lib ..\pod\perlmodlib.PL -q ..
0195b144
NC
1248
1249..\pod\perltoc.pod: $(PERLEXE) Extensions Extensions_nonxs
b78c1104 1250 $(PERLEXE) -f ..\pod\buildtoc -q
9e42cd94 1251
b0b6bf2b
AT
1252# Note that the pod cleanup in this next section is parsed (and regenerated
1253# by pod/buildtoc so please check that script before making changes here
1254
b4dc1df6 1255distclean: realclean
9e42cd94 1256 -del /f $(MINIPERL) $(PERLEXE) $(PERLDLL) $(GLOBEXE) \
7b4d95f7 1257 $(PERLIMPLIB) ..\miniperl.lib $(PERLEXESTATIC) $(PERLSTATICLIB)
ca67812f
SH
1258 -del /f $(LIBDIR)\Encode.pm $(LIBDIR)\encoding.pm $(LIBDIR)\Errno.pm
1259 -del /f $(LIBDIR)\Config.pod $(LIBDIR)\POSIX.pod $(LIBDIR)\threads.pm
48462a74 1260 -del /f $(LIBDIR)\.exists $(LIBDIR)\attributes.pm $(LIBDIR)\DynaLoader.pm
9e42cd94
GS
1261 -del /f $(LIBDIR)\Fcntl.pm $(LIBDIR)\IO.pm $(LIBDIR)\Opcode.pm
1262 -del /f $(LIBDIR)\ops.pm $(LIBDIR)\Safe.pm
1263 -del /f $(LIBDIR)\SDBM_File.pm $(LIBDIR)\Socket.pm $(LIBDIR)\POSIX.pm
1264 -del /f $(LIBDIR)\B.pm $(LIBDIR)\O.pm $(LIBDIR)\re.pm
9e42cd94
GS
1265 -del /f $(LIBDIR)\File\Glob.pm
1266 -del /f $(LIBDIR)\Storable.pm
ca67812f 1267 -del /f $(LIBDIR)\Sys\Hostname.pm
9e42cd94 1268 -del /f $(LIBDIR)\Time\HiRes.pm
9e42cd94 1269 -del /f $(LIBDIR)\Unicode\Normalize.pm
4e74047c 1270 -del /f $(LIBDIR)\Math\BigInt\FastCalc.pm
b4ad57f4 1271 -del /f $(LIBDIR)\Win32.pm
37ca3c28 1272 -del /f $(LIBDIR)\Win32CORE.pm
00701878
SH
1273 -del /f $(LIBDIR)\Win32API\File.pm
1274 -del /f $(LIBDIR)\Win32API\File\cFile.pc
5e4c4c91 1275 -del /f $(LIBDIR)\buildcustomize.pl
a85e0e8c 1276 -del /f $(DISTDIR)\XSLoader\XSLoader.pm
5daeb5b0 1277 -del /f *.def *.map
6e8fbcb5 1278 -if exist $(LIBDIR)\Amiga rmdir /s /q $(LIBDIR)\Amiga
1a6c65ed
SH
1279 -if exist $(LIBDIR)\App rmdir /s /q $(LIBDIR)\App
1280 -if exist $(LIBDIR)\Archive rmdir /s /q $(LIBDIR)\Archive
1281 -if exist $(LIBDIR)\Attribute rmdir /s /q $(LIBDIR)\Attribute
1282 -if exist $(LIBDIR)\autodie rmdir /s /q $(LIBDIR)\autodie
7afc9753 1283 -if exist $(LIBDIR)\Carp rmdir /s /q $(LIBDIR)\Carp
46ffdcf0 1284 -if exist $(LIBDIR)\Compress rmdir /s /q $(LIBDIR)\Compress
7afc9753
NC
1285 -if exist $(LIBDIR)\Config\Perl rmdir /s /q $(LIBDIR)\Config\Perl
1286 -if exist $(LIBDIR)\CPAN rmdir /s /q $(LIBDIR)\CPAN
9e42cd94 1287 -if exist $(LIBDIR)\Data rmdir /s /q $(LIBDIR)\Data
1a6c65ed
SH
1288 -if exist $(LIBDIR)\Devel rmdir /s /q $(LIBDIR)\Devel
1289 -if exist $(LIBDIR)\Digest rmdir /s /q $(LIBDIR)\Digest
ca67812f 1290 -if exist $(LIBDIR)\Encode rmdir /s /q $(LIBDIR)\Encode
1a6c65ed 1291 -if exist $(LIBDIR)\encoding rmdir /s /q $(LIBDIR)\encoding
7afc9753 1292 -if exist $(LIBDIR)\Exporter rmdir /s /q $(LIBDIR)\Exporter
1a6c65ed
SH
1293 -if exist $(LIBDIR)\ExtUtils\CBuilder rmdir /s /q $(LIBDIR)\ExtUtils\CBuilder
1294 -if exist $(LIBDIR)\ExtUtils\Command rmdir /s /q $(LIBDIR)\ExtUtils\Command
1295 -if exist $(LIBDIR)\ExtUtils\Constant rmdir /s /q $(LIBDIR)\ExtUtils\Constant
1296 -if exist $(LIBDIR)\ExtUtils\Liblist rmdir /s /q $(LIBDIR)\ExtUtils\Liblist
1297 -if exist $(LIBDIR)\ExtUtils\MakeMaker rmdir /s /q $(LIBDIR)\ExtUtils\MakeMaker
7afc9753
NC
1298 -if exist $(LIBDIR)\ExtUtils\ParseXS rmdir /s /q $(LIBDIR)\ExtUtils\ParseXS
1299 -if exist $(LIBDIR)\ExtUtils\Typemaps rmdir /s /q $(LIBDIR)\ExtUtils\Typemaps
1a6c65ed
SH
1300 -if exist $(LIBDIR)\File\Spec rmdir /s /q $(LIBDIR)\File\Spec
1301 -if exist $(LIBDIR)\Filter rmdir /s /q $(LIBDIR)\Filter
96c33d98 1302 -if exist $(LIBDIR)\Hash rmdir /s /q $(LIBDIR)\Hash
7afc9753
NC
1303 -if exist $(LIBDIR)\HTTP rmdir /s /q $(LIBDIR)\HTTP
1304 -if exist $(LIBDIR)\I18N rmdir /s /q $(LIBDIR)\I18N
df61f5a9 1305 -if exist $(LIBDIR)\inc rmdir /s /q $(LIBDIR)\inc
1a6c65ed
SH
1306 -if exist $(LIBDIR)\IO rmdir /s /q $(LIBDIR)\IO
1307 -if exist $(LIBDIR)\IPC rmdir /s /q $(LIBDIR)\IPC
7afc9753 1308 -if exist $(LIBDIR)\JSON rmdir /s /q $(LIBDIR)\JSON
69f57184 1309 -if exist $(LIBDIR)\List rmdir /s /q $(LIBDIR)\List
1a6c65ed 1310 -if exist $(LIBDIR)\Locale rmdir /s /q $(LIBDIR)\Locale
1a6c65ed
SH
1311 -if exist $(LIBDIR)\Math rmdir /s /q $(LIBDIR)\Math
1312 -if exist $(LIBDIR)\Memoize rmdir /s /q $(LIBDIR)\Memoize
69f57184 1313 -if exist $(LIBDIR)\MIME rmdir /s /q $(LIBDIR)\MIME
1a6c65ed 1314 -if exist $(LIBDIR)\Module rmdir /s /q $(LIBDIR)\Module
1a6c65ed 1315 -if exist $(LIBDIR)\Net\FTP rmdir /s /q $(LIBDIR)\Net\FTP
1a6c65ed
SH
1316 -if exist $(LIBDIR)\Params rmdir /s /q $(LIBDIR)\Params
1317 -if exist $(LIBDIR)\Parse rmdir /s /q $(LIBDIR)\Parse
7afc9753 1318 -if exist $(LIBDIR)\Perl rmdir /s /q $(LIBDIR)\Perl
1a6c65ed
SH
1319 -if exist $(LIBDIR)\PerlIO rmdir /s /q $(LIBDIR)\PerlIO
1320 -if exist $(LIBDIR)\Pod\Perldoc rmdir /s /q $(LIBDIR)\Pod\Perldoc
1321 -if exist $(LIBDIR)\Pod\Simple rmdir /s /q $(LIBDIR)\Pod\Simple
1322 -if exist $(LIBDIR)\Pod\Text rmdir /s /q $(LIBDIR)\Pod\Text
9e42cd94 1323 -if exist $(LIBDIR)\Scalar rmdir /s /q $(LIBDIR)\Scalar
7afc9753 1324 -if exist $(LIBDIR)\Search rmdir /s /q $(LIBDIR)\Search
d81c2d6a 1325 -if exist $(LIBDIR)\Sub rmdir /s /q $(LIBDIR)\Sub
6c4b87ea 1326 -if exist $(LIBDIR)\Sys rmdir /s /q $(LIBDIR)\Sys
1a6c65ed 1327 -if exist $(LIBDIR)\TAP rmdir /s /q $(LIBDIR)\TAP
7afc9753 1328 -if exist $(LIBDIR)\Term rmdir /s /q $(LIBDIR)\Term
1a6c65ed 1329 -if exist $(LIBDIR)\Test rmdir /s /q $(LIBDIR)\Test
b4514920 1330 -if exist $(LIBDIR)\Test2 rmdir /s /q $(LIBDIR)\Test2
7afc9753 1331 -if exist $(LIBDIR)\Text rmdir /s /q $(LIBDIR)\Text
1a6c65ed 1332 -if exist $(LIBDIR)\Thread rmdir /s /q $(LIBDIR)\Thread
6c4b87ea 1333 -if exist $(LIBDIR)\threads rmdir /s /q $(LIBDIR)\threads
8cf6f931 1334 -if exist $(LIBDIR)\Tie\Hash rmdir /s /q $(LIBDIR)\Tie\Hash
1a6c65ed 1335 -if exist $(LIBDIR)\Unicode\Collate rmdir /s /q $(LIBDIR)\Unicode\Collate
7afc9753 1336 -if exist $(LIBDIR)\Unicode\Collate\Locale rmdir /s /q $(LIBDIR)\Unicode\Collate\Locale
fb794281 1337 -if exist $(LIBDIR)\version rmdir /s /q $(LIBDIR)\version
7afc9753 1338 -if exist $(LIBDIR)\VMS rmdir /s /q $(LIBDIR)\VMS
00701878 1339 -if exist $(LIBDIR)\Win32API rmdir /s /q $(LIBDIR)\Win32API
7afc9753 1340 -if exist $(LIBDIR)\XS rmdir /s /q $(LIBDIR)\XS
60f0ee9d 1341 -cd $(PODDIR) && del /f *.html *.bat roffitall \
7c120837 1342 perl5338delta.pod perlaix.pod perlamiga.pod perlandroid.pod \
79c32fc2 1343 perlapi.pod perlbs2000.pod perlcn.pod perlcygwin.pod \
6001596e
BF
1344 perldos.pod perlfreebsd.pod perlhaiku.pod perlhpux.pod \
1345 perlhurd.pod perlintern.pod perlirix.pod perljp.pod perlko.pod \
1346 perllinux.pod perlmacos.pod perlmacosx.pod perlmodlib.pod \
1347 perlnetware.pod perlopenbsd.pod perlos2.pod perlos390.pod \
1348 perlos400.pod perlplan9.pod perlqnx.pod perlriscos.pod \
822c8b4d
DIM
1349 perlsolaris.pod perlsynology.pod perltoc.pod perltru64.pod \
1350 perltw.pod perluniprops.pod perlvos.pod perlwin32.pod
2560602c 1351 -cd ..\utils && del /f h2ph splain perlbug pl2pm h2xs \
d3d73539 1352 perldoc perlivp libnetcfg enc2xs encguess piconv cpan streamzip *.bat \
2ea3abd4 1353 xsubpp pod2html instmodsh json_pp prove ptar ptardiff ptargrep shasum corelist zipdetails
19ec6f53 1354 -del /f ..\config.sh perlmain.c dlutils.c config.h.new \
4e036e4b 1355 perlmainst.c
9e42cd94 1356 -del /f $(CONFIGPM)
a148edb6 1357 -del /f ..\lib\Config_git.pl
9e42cd94 1358 -del /f bin\*.bat
322fd642 1359 -del /f perllibst.h
4ebea3c6 1360 -del /f $(PERLEXE_RES) perl.base
85741d00 1361 -cd .. && del /s *.lib *.map *.pdb *.ilk *.bs *$(o) .exists pm_to_blib ppport.h
ca67812f 1362 -cd $(EXTDIR) && del /s *.def Makefile Makefile.old
a193a2db 1363 -cd $(DISTDIR) && del /s *.def Makefile Makefile.old
b212a3c6 1364 -cd $(CPANDIR) && del /s *.def Makefile Makefile.old
0827416d 1365 -del /s ..\utils\Makefile
9e42cd94 1366 -if exist $(AUTODIR) rmdir /s /q $(AUTODIR)
9e42cd94 1367 -if exist $(COREDIR) rmdir /s /q $(COREDIR)
b4a41557 1368 -if exist pod2htmd.tmp del pod2htmd.tmp
b4a41557 1369 -if exist $(HTMLDIR) rmdir /s /q $(HTMLDIR)
0279961e 1370 -del /f ..\t\test_state
9e42cd94
GS
1371
1372install : all installbare installhtml
1373
0195b144 1374installbare : utils ..\pod\perltoc.pod
9e42cd94
GS
1375 $(PERLEXE) ..\installperl
1376 if exist $(WPERLEXE) $(XCOPY) $(WPERLEXE) $(INST_BIN)\*.*
5548433c 1377 if exist $(PERLEXESTATIC) $(XCOPY) $(PERLEXESTATIC) $(INST_BIN)\*.*
9e42cd94 1378 $(XCOPY) $(GLOBEXE) $(INST_BIN)\*.*
ec25c072 1379 if exist ..\perl*.pdb $(XCOPY) ..\perl*.pdb $(INST_BIN)\*.*
9e42cd94
GS
1380 $(XCOPY) bin\*.bat $(INST_SCRIPT)\*.*
1381
1382installhtml : doc
b4a41557 1383 $(RCOPY) $(HTMLDIR)\*.* $(INST_HTML)\*.*
9e42cd94
GS
1384
1385inst_lib : $(CONFIGPM)
9e42cd94
GS
1386 $(RCOPY) ..\lib $(INST_LIB)\*.*
1387
58fa074c 1388$(UNIDATAFILES) ..\pod\perluniprops.pod : $(MINIPERL) $(CONFIGPM) ..\lib\unicore\mktables Extensions_nonxs
27a8011f 1389 cd ..\lib\unicore && \
a84da042 1390 ..\$(MINIPERL) -I.. mktables -P ..\..\pod -maketest -makelist -p -check $@ $(FIRSTUNIFILE)
ca12659b 1391
735ecbe9 1392minitest : .\config.h $(MINIPERL) ..\git_version.h $(GLOBEXE) $(CONFIGPM) $(UNIDATAFILES)
6c85d12e
SH
1393 $(XCOPY) $(MINIPERL) ..\t\$(NULL)
1394 if exist ..\t\perl.exe del /f ..\t\perl.exe
1395 rename ..\t\miniperl.exe perl.exe
9e42cd94 1396 $(XCOPY) $(GLOBEXE) ..\t\$(NULL)
a4e8ab8a 1397# Note this perl.exe is miniperl
49bf91e4 1398 cd ..\t && perl.exe TEST base/*.t comp/*.t cmd/*.t run/*.t io/*.t re/*.t opbasic/*.t op/*.t uni/*.t perf/*.t pragma/*.t
9e42cd94 1399
3bef022b 1400test-prep : all utils ../pod/perltoc.pod
9e42cd94
GS
1401 $(XCOPY) $(PERLEXE) ..\t\$(NULL)
1402 $(XCOPY) $(PERLDLL) ..\t\$(NULL)
1403 $(XCOPY) $(GLOBEXE) ..\t\$(NULL)
0b4dcbc1 1404 set PERL_STATIC_EXT=$(STATIC_EXT)
9e42cd94
GS
1405
1406test : test-prep
1407 cd ..\t
a4e8ab8a 1408 perl.exe harness $(TEST_SWITCHES) $(TEST_FILES)
9e42cd94
GS
1409 cd ..\win32
1410
247c55c0
CBW
1411test_porting : test-prep
1412 cd ..\t
a4e8ab8a 1413 perl.exe harness $(TEST_SWITCHES) porting\*.t ..\lib\diagnostics.t
247c55c0
CBW
1414 cd ..\win32
1415
6ae7e459
YO
1416test-reonly : reonly utils
1417 $(XCOPY) $(PERLEXE) ..\t\$(NULL)
1418 $(XCOPY) $(PERLDLL) ..\t\$(NULL)
1419 $(XCOPY) $(GLOBEXE) ..\t\$(NULL)
1420 cd ..\t
a4e8ab8a 1421 perl.exe harness $(OPT) -re \bre\\/ $(EXTRA)
6ae7e459 1422 cd ..\win32
7bcddc65 1423
c900f745 1424regen :
7bcddc65
YO
1425 cd ..
1426 regen.pl
1427 cd win32
1428
9e42cd94
GS
1429test-notty : test-prep
1430 set PERL_SKIP_TTY_TEST=1
1431 cd ..\t
a4e8ab8a 1432 perl.exe harness $(TEST_SWITCHES) $(TEST_FILES)
9e42cd94
GS
1433 cd ..\win32
1434
b4a93add
NK
1435_test :
1436 $(XCOPY) $(PERLEXE) ..\t\$(NULL)
1437 $(XCOPY) $(PERLDLL) ..\t\$(NULL)
1438 $(XCOPY) $(GLOBEXE) ..\t\$(NULL)
1439 cd ..\t
a4e8ab8a 1440 perl.exe harness $(TEST_SWITCHES) $(TEST_FILES)
b4a93add
NK
1441 cd ..\win32
1442
b4dc1df6 1443_clean :
9e42cd94
GS
1444 -@$(DEL) miniperlmain$(o)
1445 -@$(DEL) $(MINIPERL)
1446 -@$(DEL) perlglob$(o)
1447 -@$(DEL) perlmain$(o)
4e036e4b 1448 -@$(DEL) perlmainst$(o)
9e42cd94 1449 -@$(DEL) config.h
a148edb6 1450 -@$(DEL) ..\git_version.h
9e42cd94
GS
1451 -@$(DEL) $(GLOBEXE)
1452 -@$(DEL) $(PERLEXE)
1453 -@$(DEL) $(WPERLEXE)
4e036e4b
VK
1454 -@$(DEL) $(PERLEXESTATIC)
1455 -@$(DEL) $(PERLSTATICLIB)
9e42cd94
GS
1456 -@$(DEL) $(PERLDLL)
1457 -@$(DEL) $(CORE_OBJ)
9387abf8 1458 -@$(DEL) $(GENUUDMAP) $(GENUUDMAP_OBJ) $(GENERATED_HEADERS)
9e42cd94 1459 -if exist $(MINIDIR) rmdir /s /q $(MINIDIR)
27a8011f 1460 -if exist $(UNIDATADIR1) rmdir /s /q $(UNIDATADIR1)
27a8011f 1461 -if exist $(UNIDATADIR2) rmdir /s /q $(UNIDATADIR2)
ca12659b 1462 -@$(DEL) $(UNIDATAFILES)
27a8011f 1463 -@$(DEL) $(WIN32_OBJ)
9e42cd94 1464 -@$(DEL) $(DLL_OBJ)
9e42cd94
GS
1465 -@$(DEL) ..\*$(o) ..\*.lib ..\*.exp *$(o) *.lib *.exp *.res
1466 -@$(DEL) ..\t\*.exe ..\t\*.dll ..\t\*.bat
9e42cd94
GS
1467 -@$(DEL) *.ilk
1468 -@$(DEL) *.pdb
9e7cf449 1469 -@$(DEL) Extensions_static
9e42cd94 1470
6e2cec71 1471clean : Extensions_clean _clean
b4dc1df6 1472
85741d00 1473realclean : Extensions_realclean _clean
b4dc1df6 1474
9e42cd94
GS
1475# Handy way to run perlbug -ok without having to install and run the
1476# installed perlbug. We don't re-run the tests here - we trust the user.
1477# Please *don't* use this unless all tests pass.
1478# If you want to report test failures, use "nmake nok" instead.
1479ok: utils
a4e8ab8a 1480 $(PERLEXE) ..\utils\perlbug -ok -s "(UNINSTALLED)"
9e42cd94
GS
1481
1482okfile: utils
a4e8ab8a 1483 $(PERLEXE) ..\utils\perlbug -ok -s "(UNINSTALLED)" -F perl.ok
9e42cd94
GS
1484
1485nok: utils
a4e8ab8a 1486 $(PERLEXE) ..\utils\perlbug -nok -s "(UNINSTALLED)"
9e42cd94
GS
1487
1488nokfile: utils
a4e8ab8a 1489 $(PERLEXE) ..\utils\perlbug -nok -s "(UNINSTALLED)" -F perl.nok