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