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