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