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