2 # Makefile to build perl on Windows using GMAKE.
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
8 # This is set up to build a perl.exe that runs off a shared library
9 # (perl526.dll). Also makes individual DLLs for the XS extensions.
11 # The easiest way to customize the build process is to use parameters like this:
13 # c:\dev\perlsrc\win32> gmake INST_TOP=c:\sw\perl CCHOME=c:\sw\mingw USE_64_BIT_INT=define
17 ## Make sure you read README.win32 *before* you mess with anything here!
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
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
32 ifeq ($(GCCBIN),x86_64-w64-mingw32-gcc)
33 GCCCROSS := x86_64-w64-mingw32
35 ifeq ($(GCCBIN),i686-w64-mingw32-gcc)
36 GCCCROSS := i686-w64-mingw32
41 ## Build configuration. Edit the values below to suit your needs.
45 # Set these to wherever you want "gmake install" to put your
49 INST_TOP := $(INST_DRV)\perl
52 # Uncomment if you want to build a 32-bit Perl using a 32-bit compiler
53 # on a 64-bit version of Windows.
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.
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.
77 #INST_ARCH := \$(ARCHNAME)
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.
85 #USE_SITECUST := define
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.
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.
99 USE_ITHREADS := define
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.
106 USE_IMP_SYS := define
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.
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.
122 USE_LARGE_FILES := define
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.
130 #USE_64_BIT_INT := define
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.
136 #USE_LONG_DOUBLE :=define
139 # Comment this out if you want the legacy default behavior of including '.' at
142 DEFAULT_INC_EXCLUDES_DOT := define
145 # Uncomment this if you want to disable looking up values from
146 # HKEY_CURRENT_USER\Software\Perl and HKEY_LOCAL_MACHINE\Software\Perl in
149 #USE_NO_REGISTRY := define
152 # uncomment exactly one of the following
154 # Visual C++ 6.0 (aka Visual C++ 98)
156 # Visual C++ .NET 2002/2003 (aka Visual C++ 7.0/7.1) (full version)
158 # Visual C++ Toolkit 2003 (aka Visual C++ 7.1) (free command-line tools)
159 #CCTYPE := MSVC70FREE
160 # Windows Server 2003 SP1 Platform SDK (April 2005)
161 #CCTYPE := SDK2003SP1
162 # Visual C++ 2005 (aka Visual C++ 8.0) (full version)
164 # Visual C++ 2005 Express Edition (aka Visual C++ 8.0) (free version)
165 #CCTYPE := MSVC80FREE
166 # Visual C++ 2008 (aka Visual C++ 9.0) (full version)
168 # Visual C++ 2008 Express Edition (aka Visual C++ 9.0) (free version)
169 #CCTYPE := MSVC90FREE
170 # Visual C++ 2010 (aka Visual C++ 10.0) (full version)
172 # Visual C++ 2010 Express Edition (aka Visual C++ 10.0) (free version)
173 #CCTYPE := MSVC100FREE
174 # Visual C++ 2012 (aka Visual C++ 11.0) (full version)
176 # Visual C++ 2012 Express Edition (aka Visual C++ 11.0) (free version)
177 #CCTYPE := MSVC110FREE
178 # Visual C++ 2013 (aka Visual C++ 12.0) (full version)
180 # Visual C++ 2013 Express Edition (aka Visual C++ 12.0) (free version)
181 #CCTYPE := MSVC120FREE
182 # Visual C++ 2015 (aka Visual C++ 14.0) (full version)
184 # Visual C++ 2015 Express Edition (aka Visual C++ 14.0) (free version)
185 #CCTYPE := MSVC140FREE
186 # MinGW or mingw-w64 with gcc-3.4.5 or later
190 # If you are using Intel C++ Compiler uncomment this
195 # uncomment next line if you want debug version of perl (big/slow)
196 # If not enabled, we automatically try to use maximum optimization
197 # with all compilers that are known to have a working optimizer.
202 # uncomment to enable linking with setargv.obj under the Visual C
203 # compiler. Setting this options enables perl to expand wildcards in
204 # arguments, but it may be harder to use alternate methods like
205 # File::DosGlob that are more powerful. This option is supported only with
208 #USE_SETARGV := define
211 # set this if you wish to use perl's malloc
212 # WARNING: Turning this on/off WILL break binary compatibility with extensions
213 # you may have compiled with/without it. Be prepared to recompile all
214 # extensions if you change the default. Currently, this cannot be enabled
215 # if you ask for USE_IMP_SYS above.
217 #PERL_MALLOC := define
220 # set this to enable debugging mstats
221 # This must be enabled to use the Devel::Peek::mstat() function. This cannot
222 # be enabled without PERL_MALLOC as well.
224 #DEBUG_MSTATS := define
227 # set this to additionally provide a statically linked perl-static.exe.
228 # Note that dynamic loading will not work with this perl, so you must
229 # include required modules statically using the STATIC_EXT or ALL_STATIC
230 # variables below. A static library perl526s.lib will also be created.
231 # Ordinary perl.exe is not affected by this option.
233 #BUILD_STATIC := define
236 # in addition to BUILD_STATIC the option ALL_STATIC makes *every*
237 # extension get statically built
238 # This will result in a very large perl executable, but the main purpose
239 # is to have proper linking set so as to be able to create miscellaneous
240 # executables with different built-in extensions
242 #ALL_STATIC := define
245 # set the install locations of the compiler include/libraries
246 # Running VCVARS32.BAT is *required* when using Visual C.
247 # Some versions of Visual C don't define MSVCDIR in the environment,
248 # so you may have to set CCHOME explicitly (spaces in the path name should
254 # Additional compiler flags can be specified here.
256 BUILDOPT := $(BUILDOPTEXTRA)
259 # This should normally be disabled. Enabling it will disable the File::Glob
260 # implementation of CORE::glob.
262 #BUILDOPT += -DPERL_EXTERNAL_GLOB
265 # Perl needs to read scripts in text mode so that the DATA filehandle
266 # works correctly with seek() and tell(), or around auto-flushes of
267 # all filehandles (e.g. by system(), backticks, fork(), etc).
269 # The current version on the ByteLoader module on CPAN however only
270 # works if scripts are read in binary mode. But before you disable text
271 # mode script reading (and break some DATA filehandle functionality)
272 # please check first if an updated ByteLoader isn't available on CPAN.
274 BUILDOPT += -DPERL_TEXTMODE_SCRIPTS
277 # specify semicolon-separated list of extra directories that modules will
278 # look for libraries (spaces in path names need not be quoted)
283 # set this to your email address (perl will guess a value from
284 # from your loginname and your hostname, which may not be right)
289 ## Build configuration ends.
292 ##################### CHANGE THESE ONLY IF YOU MUST #####################
295 DEBUG_MSTATS ?= undef
297 USE_SITECUST ?= undef
299 USE_ITHREADS ?= undef
302 USE_LARGE_FILES ?= undef
303 USE_64_BIT_INT ?= undef
304 USE_LONG_DOUBLE ?= undef
305 DEFAULT_INC_EXCLUDES_DOT ?= undef
306 USE_NO_REGISTRY ?= undef
308 ifeq ($(USE_IMP_SYS),define)
312 ifeq ($(PERL_MALLOC),undef)
316 ifeq ($(DEBUG_MSTATS),define)
317 BUILDOPT += -DPERL_DEBUGGING_MSTATS
320 ifeq ("$(USE_IMP_SYS) $(USE_MULTI)","define undef")
324 ifeq ("$(USE_ITHREADS) $(USE_MULTI)","define undef")
328 ifeq ($(USE_SITECUST),define)
329 BUILDOPT += -DUSE_SITECUSTOMIZE
332 ifneq ($(USE_MULTI),undef)
333 BUILDOPT += -DPERL_IMPLICIT_CONTEXT
336 ifneq ($(USE_IMP_SYS),undef)
337 BUILDOPT += -DPERL_IMPLICIT_SYS
340 ifeq ($(USE_NO_REGISTRY),define)
341 BUILDOPT += -DWIN32_NO_REGISTRY
345 GCCTARGET := $(shell $(GCCBIN) -dumpmachine)
348 #no explicit CCTYPE given, do auto detection
350 GCCTARGET := $(shell $(GCCBIN) -dumpmachine 2>NUL)
352 ifneq ($(GCCTARGET),)
355 #use var to capture 1st line only, not 8th token of lines 2 & 3 in cl.exe output
356 #rmving the cmd /c causes the var2b undef4echo but!4"set MSVCVER", cmd.exe bug?
357 MSVCVER := $(shell (set MSVCVER=) & (for /f "tokens=8 delims=.^ " \
358 %%i in ('cl ^2^>^&1') do if not defined MSVCVER set /A "MSVCVER=%%i-6") \
359 & cmd /c echo %%MSVCVER%%)
360 CCTYPE := MSVC$(MSVCVER)0
373 # Following sets $Config{incpath} and $Config{libpth}
377 CCINCDIR := $(CCHOME)\$(GCCCROSS)\include
378 CCLIBDIR := $(CCHOME)\$(GCCCROSS)\lib
379 CCDLLDIR := $(CCLIBDIR)
380 ARCHPREFIX := $(GCCCROSS)-
382 CCINCDIR := $(CCHOME)\include
383 CCLIBDIR := $(CCHOME)\lib
384 CCDLLDIR := $(CCHOME)\bin
389 ifeq ($(GCCTARGET),x86_64-w64-mingw32)
391 PROCESSOR_ARCHITECTURE := x64
393 ifeq ($(GCCTARGET),i686-w64-mingw32)
395 PROCESSOR_ARCHITECTURE := x86
399 PROCESSOR_ARCHITECTURE ?= x86
401 ifeq ($(WIN64),undef)
402 PROCESSOR_ARCHITECTURE = x86
406 # When we are running from a 32bit cmd.exe on AMD64 then
407 # PROCESSOR_ARCHITECTURE is set to x86 and PROCESSOR_ARCHITEW6432
409 ifneq ($(PROCESSOR_ARCHITEW6432),)
410 PROCESSOR_ARCHITECTURE = $(PROCESSOR_ARCHITEW6432)
412 else ifeq ($(PROCESSOR_ARCHITECTURE),AMD64)
414 else ifeq ($(PROCESSOR_ARCHITECTURE),IA64)
421 ifeq ($(WIN64),define)
422 USE_64_BIT_INT = define
425 # Treat 64-bit MSVC60 (doesn't really exist) as SDK2003SP1 because
426 # both link against MSVCRT.dll (which is part of Windows itself) and
427 # not against a compiler specific versioned runtime.
428 ifeq ("$(WIN64) $(CCTYPE)","define MSVC60")
432 # Disable the 64-bit-int option for (32-bit) MSVC60 builds since that compiler
433 # does not support it.
434 ifeq ($(CCTYPE),MSVC60)
435 USE_64_BIT_INT = undef
438 # Disable the long double option for MSVC builds since that compiler
439 # does not support it.
440 ifneq ($(CCTYPE),GCC)
441 USE_LONG_DOUBLE = undef
444 ARCHITECTURE = $(PROCESSOR_ARCHITECTURE)
445 ifeq ($(ARCHITECTURE),AMD64)
448 ifeq ($(ARCHITECTURE),IA64)
452 ifeq ($(USE_MULTI),define)
453 ARCHNAME = MSWin32-$(ARCHITECTURE)-multi
455 ifeq ($(USE_PERLIO),define)
456 ARCHNAME = MSWin32-$(ARCHITECTURE)-perlio
458 ARCHNAME = MSWin32-$(ARCHITECTURE)
462 ifeq ($(USE_PERLIO),define)
463 BUILDOPT += -DUSE_PERLIO
466 ifeq ($(USE_ITHREADS),define)
467 ARCHNAME := $(ARCHNAME)-thread
470 ifneq ($(WIN64),define)
471 ifeq ($(USE_64_BIT_INT),define)
472 ARCHNAME := $(ARCHNAME)-64int
476 ifeq ($(USE_LONG_DOUBLE),define)
477 ARCHNAME := $(ARCHNAME)-ld
480 ARCHDIR = ..\lib\$(ARCHNAME)
481 COREDIR = ..\lib\CORE
482 AUTODIR = ..\lib\auto
491 INST_SCRIPT = $(INST_TOP)$(INST_VER)\bin
492 INST_BIN = $(INST_SCRIPT)$(INST_ARCH)
493 INST_LIB = $(INST_TOP)$(INST_VER)\lib
494 INST_ARCHLIB = $(INST_LIB)$(INST_ARCH)
495 INST_COREDIR = $(INST_ARCHLIB)\CORE
496 INST_HTML = $(INST_TOP)$(INST_VER)\html
499 # Programs to compile, build .lib files and link
506 CC = $(ARCHPREFIX)gcc
507 LINK32 = $(ARCHPREFIX)g++
508 LIB32 = $(ARCHPREFIX)ar rc
509 IMPLIB = $(ARCHPREFIX)dlltool
510 RSC = $(ARCHPREFIX)windres
512 ifeq ($(USE_LONG_DOUBLE),define)
513 BUILDOPT += -D__USE_MINGW_ANSI_STDIO
514 MINIBUILDOPT += -D__USE_MINGW_ANSI_STDIO
517 GCCVER1 := $(shell for /f "delims=. tokens=1,2,3" %%i in ('gcc -dumpversion') do echo %%i)
518 GCCVER2 := $(shell for /f "delims=. tokens=1,2,3" %%i in ('gcc -dumpversion') do echo %%j)
519 GCCVER3 := $(shell for /f "delims=. tokens=1,2,3" %%i in ('gcc -dumpversion') do echo %%k)
521 # If you are using GCC, 4.3 or later by default we add the -fwrapv option.
522 # See https://rt.perl.org/Ticket/Display.html?id=121505
524 GCCWRAPV := $(shell if "$(GCCVER1)"=="4" (if "$(GCCVER2)" geq "3" echo define) else if "$(GCCVER1)" geq "5" (echo define))
526 ifeq ($(GCCWRAPV),define)
528 MINIBUILDOPT += -fwrapv
539 INCLUDES = -I.\include -I. -I..
541 ifeq ($(WIN64),define)
542 DEFINES += -DWIN64 -DCONSERVATIVE
544 LOCDEFS = -DPERLDLL -DPERL_CORE
547 LIBFILES = $(LIBC) -lmoldname -lkernel32 -luser32 -lgdi32 -lwinspool \
548 -lcomdlg32 -ladvapi32 -lshell32 -lole32 -loleaut32 -lnetapi32 \
549 -luuid -lws2_32 -lmpr -lwinmm -lversion -lodbc32 -lodbccp32 -lcomctl32
552 OPTIMIZE = -g -O2 -DDEBUGGING
560 CFLAGS = $(EXTRACFLAGS) $(INCLUDES) $(DEFINES) $(LOCDEFS) $(OPTIMIZE)
561 LINK_FLAGS = $(LINK_DBG) -L"$(INST_COREDIR)" -L"$(CCLIBDIR)"
567 BUILDOPT += -fno-strict-aliasing -mms-bitfields
568 MINIBUILDOPT += -fno-strict-aliasing
570 TESTPREPGCC = test-prep-gcc
576 # All but the free version of VC++ 7.1 can load DLLs on demand. Makes the test
577 # suite run in about 10% less time.
578 ifneq ($(CCTYPE),MSVC70FREE)
579 # If no registry, advapi32 is only used for Perl_pp_getlogin/getlogin/GetUserNameA
580 # which is rare to execute
581 ifneq ($(USE_NO_REGISTRY),undef)
582 DELAYLOAD = -DELAYLOAD:ws2_32.dll -DELAYLOAD:advapi32.dll delayimp.lib
585 DELAYLOAD = -DELAYLOAD:ws2_32.dll delayimp.lib
586 #miniperl never does any registry lookups
587 MINIDELAYLOAD = -DELAYLOAD:advapi32.dll
591 # Visual C++ 2005 and 2008 (VC++ 8.0 and 9.0) create manifest files for EXEs and
592 # DLLs. These either need copying everywhere with the binaries, or else need
593 # embedding in them otherwise MSVCR80.dll or MSVCR90.dll won't be found. For
594 # simplicity, embed them if they exist (and delete them afterwards so that they
595 # don't get installed too).
596 EMBED_EXE_MANI = if exist $@.manifest mt -nologo -manifest $@.manifest -outputresource:$@;1 && \
597 if exist $@.manifest del $@.manifest
598 EMBED_DLL_MANI = if exist $@.manifest mt -nologo -manifest $@.manifest -outputresource:$@;2 && \
599 if exist $@.manifest del $@.manifest
601 # Most relevant compiler-specific options fall into two groups:
602 # either pre-MSVC80 or MSVC80 onwards, so define a macro for this.
603 ifeq ($(CCTYPE),MSVC60)
605 else ifeq ($(CCTYPE),MSVC70)
607 else ifeq ($(CCTYPE),MSVC70FREE)
613 ifneq ($(__ICC),define)
620 LIB32 = $(LINK32) -lib
627 INCLUDES = -I.\include -I. -I..
628 #PCHFLAGS = -Fpc:\temp\vcmoduls.pch -YX
629 DEFINES = -DWIN32 -D_CONSOLE -DNO_STRICT
630 LOCDEFS = -DPERLDLL -DPERL_CORE
633 ifeq ($(CCTYPE),MSVC140)
635 else ifeq ($(CCTYPE),MSVC140FREE)
642 OPTIMIZE = -Od -MD -Zi -DDEBUGGING
644 else ifeq ($(CFG),DebugSymbols)
645 OPTIMIZE = -Od -MD -Zi
647 else ifeq ($(CFG),DebugFull)
648 ifeq ($(CCTYPE),MSVC140)
650 else ifeq ($(CCTYPE),MSVC140FREE)
655 OPTIMIZE = -Od -MDd -Zi -D_DEBUG -DDEBUGGING
658 # -O1 yields smaller code, which turns out to be faster than -O2 on x86 and x64
659 OPTIMIZE = -O1 -MD -Zi -DNDEBUG
660 # we enable debug symbols in release builds also
661 LINK_DBG = -debug -opt:ref,icf
662 # you may want to enable this if you want COFF symbols in the executables
663 # in addition to the PDB symbols. The default Dr. Watson that ships with
664 # Windows can use the the former but not latter. The free WinDbg can be
665 # installed to get better stack traces from just the PDB symbols, so we
666 # avoid the bloat of COFF symbols by default.
667 #LINK_DBG = $(LINK_DBG) -debugtype:both
668 ifneq ($(CCTYPE),MSVC60)
669 # enable Whole Program Optimizations (WPO) and Link Time Code Generation (LTCG)
676 ifeq ($(WIN64),define)
677 DEFINES += -DWIN64 -DCONSERVATIVE
678 OPTIMIZE += -fp:precise
681 # For now, silence warnings from VC++ 8.0 onwards about "unsafe" CRT functions
682 # and POSIX CRT function names being deprecated.
683 ifeq ($(PREMSVC80),undef)
684 DEFINES += -D_CRT_SECURE_NO_DEPRECATE -D_CRT_NONSTDC_NO_DEPRECATE
687 # Likewise for deprecated Winsock APIs in VC++ 14.0 for now.
688 ifeq ($(CCTYPE),MSVC140)
689 DEFINES = $(DEFINES) -D_WINSOCK_DEPRECATED_NO_WARNINGS
690 else ifeq ($(CCTYPE),MSVC140FREE)
691 DEFINES = $(DEFINES) -D_WINSOCK_DEPRECATED_NO_WARNINGS
694 # In VS 2005 (VC++ 8.0) Microsoft changes time_t from 32-bit to
695 # 64-bit, even in 32-bit mode. It also provides the _USE_32BIT_TIME_T
696 # preprocessor option to revert back to the old functionality for
697 # backward compatibility. We define this symbol here for older 32-bit
698 # compilers only (which aren't using it at all) for the sole purpose
699 # of getting it into $Config{ccflags}. That way if someone builds
700 # Perl itself with e.g. VC6 but later installs an XS module using VC8
701 # the time_t types will still be compatible.
702 ifeq ($(WIN64),undef)
703 ifeq ((PREMSVC80),define)
704 BUILDOPT += -D_USE_32BIT_TIME_T
708 LIBBASEFILES = oldnames.lib kernel32.lib user32.lib gdi32.lib winspool.lib \
709 comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib \
710 netapi32.lib uuid.lib ws2_32.lib mpr.lib winmm.lib version.lib \
711 odbc32.lib odbccp32.lib comctl32.lib
713 ifeq ($(CCTYPE),MSVC140)
714 ifeq ($(CFG),DebugFull)
715 LIBBASEFILES += msvcrtd.lib vcruntimed.lib
717 LIBBASEFILES += msvcrt.lib vcruntime.lib
719 else ifeq ($(CCTYPE),MSVC140FREE)
720 ifeq ($(CFG),DebugFull)
721 LIBBASEFILES += msvcrtd.lib vcruntimed.lib
723 LIBBASEFILES += msvcrt.lib vcruntime.lib
727 # Avoid __intel_new_proc_init link error for libircmt.
728 # libmmd is /MD equivelent, other variants exist.
729 # libmmd is Intel C's math addon funcs to MS CRT, contains long doubles, C99,
730 # and optimized C89 funcs
731 ifeq ($(__ICC),define)
732 LIBBASEFILES += libircmt.lib libmmd.lib
735 # The 64 bit Windows Server 2003 SP1 SDK compilers link against MSVCRT.dll, which
736 # doesn't include the buffer overrun verification code used by the /GS switch.
737 # Since the code links against libraries that are compiled with /GS, this
738 # "security cookie verification" code must be included via bufferoverflow.lib.
739 ifeq ("$(WIN64) $(CCTYPE)","define SDK2003SP1")
740 LIBBASEFILES += bufferoverflowU.lib
743 LIBFILES = $(LIBBASEFILES) $(LIBC)
745 EXTRACFLAGS = -nologo -GF -W3
746 ifeq ($(__ICC),define)
747 EXTRACFLAGS += -Qstd=c99
749 ifeq ($(USE_CPLUSPLUS),define)
750 EXTRACFLAGS += $(CXX_FLAG)
752 CFLAGS = $(EXTRACFLAGS) $(INCLUDES) $(DEFINES) $(LOCDEFS) \
753 $(PCHFLAGS) $(OPTIMIZE)
754 LINK_FLAGS = -nologo -nodefaultlib $(LINK_DBG) \
755 -libpath:"$(INST_COREDIR)" \
756 -machine:$(PROCESSOR_ARCHITECTURE)
766 CFLAGS_O = $(CFLAGS) $(BUILDOPT)
768 ifeq ($(PREMSVC80),undef)
769 PRIV_LINK_FLAGS += "/manifestdependency:type='Win32' name='Microsoft.Windows.Common-Controls' version='6.0.0.0' processorArchitecture='*' publicKeyToken='6595b64144ccf1df' language='*'"
771 RSC_FLAGS = -DINCLUDE_MANIFEST
775 # For XP support in >= VS 2013 (VC++ 12.0), subsystem is always in Config.pm
776 # LINK_FLAGS else subsystem is only needed for EXE building, not XS DLL building
777 # Console vs GUI makes no difference for DLLs, so use default for cleaner
780 ifeq ($(CCTYPE),MSVC120)
781 ifeq ($(WIN64),define)
782 LINK_FLAGS += -subsystem:console,"5.02"
784 LINK_FLAGS += -subsystem:console,"5.01"
787 else ifeq ($(CCTYPE),MSVC120FREE)
788 ifeq ($(WIN64),define)
789 LINK_FLAGS += -subsystem:console,"5.02"
791 LINK_FLAGS += -subsystem:console,"5.01"
794 else ifeq ($(CCTYPE),MSVC140)
795 ifeq ($(WIN64),define)
796 LINK_FLAGS += -subsystem:console,"5.02"
798 LINK_FLAGS += -subsystem:console,"5.01"
801 else ifeq ($(CCTYPE),MSVC140FREE)
802 ifeq ($(WIN64),define)
803 LINK_FLAGS += -subsystem:console,"5.02"
805 LINK_FLAGS += -subsystem:console,"5.01"
808 else ifneq ($(CCTYPE),GCC)
809 PRIV_LINK_FLAGS += -subsystem:console
812 BLINK_FLAGS = $(PRIV_LINK_FLAGS) $(LINK_FLAGS)
814 #################### do not edit below this line #######################
815 ############# NO USER-SERVICEABLE PARTS BEYOND THIS POINT ##############
817 #prevent -j from reaching EUMM/make_ext.pl/"sub makes", Win32 EUMM not parallel
823 .SUFFIXES : .c .i $(o) .dll $(a) .exe .rc .res
826 $(CC) -c -I$(<D) $(CFLAGS_O) $(OBJOUT_FLAG)$@ $(PDBOUT) $<
829 $(CC) -c -I$(<D) $(CFLAGS_O) -E $< >$@
835 $(LINK32) -o $@ $(BLINK_FLAGS) $< $(LIBFILES)
836 $(IMPLIB) --input-def $(*F).def --output-lib $(*F).a $@
840 $(RSC) --use-temp-file --include-dir=. --include-dir=.. -O COFF -D INCLUDE_MANIFEST -i $< -o $@
842 $(RSC) -i.. -DINCLUDE_MANIFEST $<
848 #do not put $(MINIPERL) as a dep/prereq in a rule, instead put $(HAVEMINIPERL)
849 #$(MINIPERL) is not a buildable target, use "gmake mp" if you want to just build
851 MINIPERL = ..\miniperl.exe
852 HAVEMINIPERL = ..\lib\buildcustomize.pl
854 PERLEXE = ..\perl.exe
855 WPERLEXE = ..\wperl.exe
856 PERLEXESTATIC = ..\perl-static.exe
857 STATICDIR = .\static.tmp
858 GLOBEXE = ..\perlglob.exe
859 CONFIGPM = ..\lib\Config.pm
860 GENUUDMAP = ..\generate_uudmap.exe
861 ifeq ($(BUILD_STATIC),define)
864 ifeq ($(ALL_STATIC),define)
871 # Unicode data files generated by mktables
872 UNIDATAFILES = ..\lib\unicore\Decomposition.pl ..\lib\unicore\TestProp.pl \
873 ..\lib\unicore\CombiningClass.pl ..\lib\unicore\Name.pl \
874 ..\lib\unicore\UCD.pl ..\lib\unicore\Name.pm \
875 ..\lib\unicore\Heavy.pl ..\lib\unicore\mktables.lst
877 # Directories of Unicode data files generated by mktables
878 UNIDATADIR1 = ..\lib\unicore\To
879 UNIDATADIR2 = ..\lib\unicore\lib
881 PERLEXE_MANIFEST= .\perlexe.manifest
882 PERLEXE_ICO = .\perlexe.ico
883 PERLEXE_RES = .\perlexe.res
886 # Nominate a target which causes extensions to be re-built
887 # This used to be $(PERLEXE), but at worst it is the .dll that they depend
888 # on and really only the interface - i.e. the .def file used to export symbols
890 PERLDEP = $(PERLIMPLIB)
893 PL2BAT = bin\pl2bat.pl
915 ..\utils\zipdetails \
927 CFGSH_TMPL = config.gc
928 CFGH_TMPL = config_H.gc
929 PERLIMPLIB = $(COREDIR)\libperl526$(a)
930 PERLIMPLIBBASE = libperl526$(a)
931 PERLSTATICLIB = ..\libperl526s$(a)
936 CFGSH_TMPL = config.vc
937 CFGH_TMPL = config_H.vc
942 # makedef.pl must be updated if this changes, and this should normally
943 # only change when there is an incompatible revision of the public API.
944 PERLIMPLIB ?= $(COREDIR)\perl526$(a)
945 PERLIMPLIBBASE ?= perl526$(a)
946 PERLEXPLIB ?= $(COREDIR)\perl526.exp
947 PERLSTATICLIB ?= ..\perl526s$(a)
948 PERLDLL = ..\perl526.dll
950 # don't let "gmake -n all" try to run "miniperl.exe make_ext.pl"
953 XCOPY = xcopy /f /r /i /d /y
954 RCOPY = xcopy /f /r /i /e /d /y
957 #first ones are arrange in compile time order for faster parallel building
958 #see #123867 for details
1000 EXTRACORE_SRC += perllib.c
1002 ifeq ($(PERL_MALLOC),define)
1003 EXTRACORE_SRC += ..\malloc.c
1006 EXTRACORE_SRC += ..\perlio.c
1014 # We need this for miniperl build unless we override canned
1015 # config.h #define building mini\*
1016 #ifeq ($(USE_PERLIO)" == "define"
1017 WIN32_SRC += .\win32io.c
1055 .\include\dirent.h \
1057 .\include\sys\errno2.h \
1058 .\include\sys\socket.h \
1061 CORE_H = $(CORE_NOCFG_H) .\config.h ..\git_version.h
1063 UUDMAP_H = ..\uudmap.h
1064 BITCOUNT_H = ..\bitcount.h
1065 MG_DATA_H = ..\mg_data.h
1066 GENERATED_HEADERS = $(UUDMAP_H) $(BITCOUNT_H) $(MG_DATA_H)
1068 HAVE_COREDIR = .coreheaders
1070 MICROCORE_OBJ = $(MICROCORE_SRC:.c=$(o))
1071 CORE_OBJ = $(MICROCORE_OBJ) $(EXTRACORE_SRC:.c=$(o))
1072 WIN32_OBJ = $(WIN32_SRC:.c=$(o))
1074 MINICORE_OBJ = $(subst ..\,mini\,$(MICROCORE_OBJ)) \
1075 $(MINIDIR)\miniperlmain$(o) \
1076 $(MINIDIR)\perlio$(o)
1077 MINIWIN32_OBJ = $(subst .\,mini\,$(WIN32_OBJ))
1078 MINI_OBJ = $(MINICORE_OBJ) $(MINIWIN32_OBJ)
1079 DLL_OBJ = $(DYNALOADER)
1081 PERLDLL_OBJ = $(CORE_OBJ)
1082 PERLEXE_OBJ = perlmain$(o)
1083 PERLEXEST_OBJ = perlmainst$(o)
1085 PERLDLL_OBJ += $(WIN32_OBJ) $(DLL_OBJ)
1087 ifneq ($(USE_SETARGV),)
1088 SETARGV_OBJ = setargv$(o)
1091 ifeq ($(ALL_STATIC),define)
1092 # some exclusions, unfortunately, until fixed:
1093 # - MakeMaker isn't capable enough for SDBM_File (small bug)
1094 STATIC_EXT = * !SDBM_File
1096 # specify static extensions here, for example:
1097 # (be sure to include Win32CORE to load Win32 on demand)
1098 #STATIC_EXT = Win32CORE Cwd Compress/Raw/Zlib
1099 STATIC_EXT = Win32CORE
1102 DYNALOADER = ..\DynaLoader$(o)
1104 # vars must be separated by "\t+~\t+", since we're using the tempfile
1105 # version of config_sh.pl (we were overflowing someone's buffer by
1106 # trying to fit them all on the command line)
1109 "INST_TOP=$(INST_TOP)" \
1110 "INST_VER=$(INST_VER)" \
1111 "INST_ARCH=$(INST_ARCH)" \
1112 "archname=$(ARCHNAME)" \
1115 "ccflags=$(subst ",\",$(EXTRACFLAGS) $(OPTIMIZE) $(DEFINES) $(BUILDOPT))" \
1116 "usecplusplus=$(USE_CPLUSPLUS)" \
1117 "cf_email=$(EMAIL)" \
1118 "d_mymalloc=$(PERL_MALLOC)" \
1119 "libs=$(LIBFILES)" \
1120 "incpath=$(subst ",\",$(CCINCDIR))" \
1121 "libperl=$(subst ",\",$(PERLIMPLIBBASE))" \
1122 "libpth=$(subst ",\",$(CCLIBDIR);$(EXTRALIBDIRS))" \
1129 "static_ext=$(STATIC_EXT)" \
1130 "usethreads=$(USE_ITHREADS)" \
1131 "useithreads=$(USE_ITHREADS)" \
1132 "usemultiplicity=$(USE_MULTI)" \
1133 "useperlio=$(USE_PERLIO)" \
1134 "use64bitint=$(USE_64_BIT_INT)" \
1135 "uselongdouble=$(USE_LONG_DOUBLE)" \
1136 "uselargefiles=$(USE_LARGE_FILES)" \
1137 "usesitecustomize=$(USE_SITECUST)" \
1138 "default_inc_excludes_dot=$(DEFAULT_INC_EXCLUDES_DOT)" \
1139 "LINK_FLAGS=$(subst ",\",$(LINK_FLAGS))"\
1140 "optimize=$(subst ",\",$(OPTIMIZE))" \
1141 "ARCHPREFIX=$(ARCHPREFIX)" \
1150 all : info rebasePE Extensions_nonxs $(PERLSTATIC)
1153 @echo # CCTYPE=$(CCTYPE)
1154 ifeq ($(CCTYPE),GCC)
1155 @echo # GCCBIN=$(GCCBIN)
1156 @echo # GCCVER=$(GCCVER1).$(GCCVER2).$(GCCVER3)
1157 @echo # GCCTARGET=$(GCCTARGET)
1158 @echo # GCCCROSS=$(GCCCROSS)
1160 @echo # WIN64=$(WIN64)
1161 @echo # ARCHITECTURE=$(ARCHITECTURE)
1162 @echo # ARCHNAME=$(ARCHNAME)
1163 @echo # MAKE=$(PLMAKE)
1165 @echo Unable to detect gcc and/or architecture!
1170 ..\regcomp$(o) : ..\regnodes.h ..\regcharclass.h
1172 ..\regexec$(o) : ..\regnodes.h ..\regcharclass.h
1174 reonly : ..\regnodes.h .\config.h ..\git_version.h $(GLOBEXE) $(HAVEMINIPERL)\
1175 $(CONFIGPM) $(UNIDATAFILES) $(PERLEXE) \
1178 static: $(PERLEXESTATIC)
1180 #----------------------------------------------------------------
1182 $(GLOBEXE) : perlglob.c
1183 ifeq ($(CCTYPE),GCC)
1184 $(LINK32) $(OPTIMIZE) $(BLINK_FLAGS) -mconsole -o $@ perlglob.c $(LIBFILES)
1186 $(CC) $(OPTIMIZE) $(PDBOUT) -Fe$@ perlglob.c -link $(BLINK_FLAGS) \
1187 setargv$(o) $(LIBFILES) && $(EMBED_EXE_MANI)
1190 ..\git_version.h : $(HAVEMINIPERL) ..\make_patchnum.pl
1191 $(MINIPERL) -I..\lib ..\make_patchnum.pl
1193 # make sure that we recompile perl.c if the git version changes
1194 ..\perl$(o) : ..\git_version.h
1196 ..\config.sh : $(CFGSH_TMPL) config_sh.PL FindExt.pm $(HAVEMINIPERL)
1197 $(MINIPERL) -I..\lib config_sh.PL $(CFG_VARS) $(CFGSH_TMPL) > ..\config.sh
1199 # This target is for when changes to the main config.sh happen.
1200 # Edit config.gc, then make perl using GCC in a minimal configuration (i.e.
1201 # with MULTI, ITHREADS, IMP_SYS, LARGE_FILES and PERLIO off), then make
1202 # this target to regenerate config_H.gc.
1204 $(MINIPERL) -I..\lib config_sh.PL $(CFG_VARS) $(CFGSH_TMPL) > ..\config.sh
1205 $(MINIPERL) -I..\lib ..\configpm --chdir=..
1206 -del /f $(CFGH_TMPL)
1207 -$(MINIPERL) -I..\lib config_h.PL "ARCHPREFIX=$(ARCHPREFIX)"
1208 rename config.h $(CFGH_TMPL)
1210 $(CONFIGPM): ..\config.sh config_h.PL
1211 $(MINIPERL) -I..\lib ..\configpm --chdir=..
1212 -$(MINIPERL) -I..\lib config_h.PL "ARCHPREFIX=$(ARCHPREFIX)"
1214 .\config.h : $(CONFIGPM)
1216 # See the comment in Makefile.SH explaining this seemingly cranky ordering
1217 ..\lib\buildcustomize.pl : $(MINI_OBJ) ..\write_buildcustomize.pl
1218 ifeq ($(CCTYPE),GCC)
1219 $(LINK32) -mconsole -o $(MINIPERL) $(BLINK_FLAGS) $(MINI_OBJ) $(LIBFILES)
1221 $(LINK32) -out:$(MINIPERL) $(BLINK_FLAGS) \
1222 $(DELAYLOAD) $(MINIDELAYLOAD) $(LIBFILES) $(MINI_OBJ)
1223 $(subst $@,$(MINIPERL),$(EMBED_EXE_MANI))
1226 $(MINIPERL) -I..\lib -f ..\write_buildcustomize.pl ..
1228 #convinence target, get a working miniperl
1231 $(MINIDIR)\.exists : $(CFGH_TMPL)
1232 if not exist "$(MINIDIR)" mkdir "$(MINIDIR)"
1234 # Copy the template config.h and set configurables at the end of it
1235 # as per the options chosen and compiler used.
1236 # Note: This config.h is only used to build miniperl.exe anyway, but
1237 # it's as well to have its options correct to be sure that it builds
1238 # and so that it's "-V" options are correct for use by makedef.pl. The
1239 # real config.h used to build perl.exe is generated from the top-level
1240 # config_h.SH by config_h.PL (run by miniperl.exe).
1242 # MINIDIR generates config.h so miniperl.exe is not rebuilt when the 2nd
1243 # config.h is generated in CONFIGPM target, see also the comments for $(MINI_OBJ).
1244 copy $(CFGH_TMPL) config.h
1246 echo #ifndef _config_h_footer_&& \
1247 echo #define _config_h_footer_&& \
1248 echo #undef Off_t&& \
1249 echo #undef LSEEKSIZE&& \
1250 echo #undef Off_t_size&& \
1251 echo #undef PTRSIZE&& \
1252 echo #undef SSize_t&& \
1253 echo #undef HAS_ATOLL&& \
1254 echo #undef HAS_STRTOLL&& \
1255 echo #undef HAS_STRTOULL&& \
1256 echo #undef Size_t_size&& \
1257 echo #undef IVTYPE&& \
1258 echo #undef UVTYPE&& \
1259 echo #undef IVSIZE&& \
1260 echo #undef UVSIZE&& \
1261 echo #undef NV_PRESERVES_UV&& \
1262 echo #undef NV_PRESERVES_UV_BITS&& \
1263 echo #undef IVdf&& \
1264 echo #undef UVuf&& \
1265 echo #undef UVof&& \
1266 echo #undef UVxf&& \
1267 echo #undef UVXf&& \
1268 echo #undef USE_64_BIT_INT&& \
1269 echo #undef Gconvert&& \
1270 echo #undef HAS_FREXPL&& \
1271 echo #undef HAS_ISNANL&& \
1272 echo #undef HAS_MODFL&& \
1273 echo #undef HAS_MODFL_PROTO&& \
1274 echo #undef HAS_SQRTL&& \
1275 echo #undef HAS_STRTOLD&& \
1276 echo #undef PERL_PRIfldbl&& \
1277 echo #undef PERL_PRIgldbl&& \
1278 echo #undef PERL_PRIeldbl&& \
1279 echo #undef PERL_SCNfldbl&& \
1280 echo #undef NVTYPE&& \
1281 echo #undef NVSIZE&& \
1282 echo #undef LONG_DOUBLESIZE&& \
1283 echo #undef NV_OVERFLOWS_INTEGERS_AT&& \
1284 echo #undef NVef&& \
1285 echo #undef NVff&& \
1286 echo #undef NVgf&& \
1287 echo #undef USE_LONG_DOUBLE)>> config.h
1288 ifeq ($(CCTYPE),MSVC140)
1289 @(echo #undef FILE_ptr&& \
1290 echo #undef FILE_cnt&& \
1291 echo #undef FILE_base&& \
1292 echo #undef FILE_bufsiz&& \
1293 echo #define FILE_ptr(fp) PERLIO_FILE_ptr(fp)&& \
1294 echo #define FILE_cnt(fp) PERLIO_FILE_cnt(fp)&& \
1295 echo #define FILE_base(fp) PERLIO_FILE_base(fp)&& \
1296 echo #define FILE_bufsiz(fp) (PERLIO_FILE_cnt(fp) + PERLIO_FILE_ptr(fp) - PERLIO_FILE_base(fp))&& \
1297 echo #define I_STDBOOL)>> config.h
1298 else ifeq ($(CCTYPE),MSVC140FREE)
1299 @(echo #undef FILE_ptr&& \
1300 echo #undef FILE_cnt&& \
1301 echo #undef FILE_base&& \
1302 echo #undef FILE_bufsiz&& \
1303 echo #define FILE_ptr(fp) PERLIO_FILE_ptr(fp)&& \
1304 echo #define FILE_cnt(fp) PERLIO_FILE_cnt(fp)&& \
1305 echo #define FILE_base(fp) PERLIO_FILE_base(fp)&& \
1306 echo #define FILE_bufsiz(fp) (PERLIO_FILE_cnt(fp) + PERLIO_FILE_ptr(fp) - PERLIO_FILE_base(fp))&& \
1307 echo #define I_STDBOOL)>> config.h
1309 ifeq ($(USE_LARGE_FILES),define)
1310 @(echo #define Off_t $(INT64)&& \
1311 echo #define LSEEKSIZE ^8&& \
1312 echo #define Off_t_size ^8)>> config.h
1314 @(echo #define Off_t long&& \
1315 echo #define LSEEKSIZE ^4&& \
1316 echo #define Off_t_size ^4)>> config.h
1318 ifeq ($(WIN64),define)
1319 @(echo #define PTRSIZE ^8&& \
1320 echo #define SSize_t $(INT64)&& \
1321 echo #define HAS_ATOLL&& \
1322 echo #define HAS_STRTOLL&& \
1323 echo #define HAS_STRTOULL&& \
1324 echo #define Size_t_size ^8)>> config.h
1326 @(echo #define PTRSIZE ^4&& \
1327 echo #define SSize_t int&& \
1328 echo #undef HAS_ATOLL&& \
1329 echo #undef HAS_STRTOLL&& \
1330 echo #undef HAS_STRTOULL&& \
1331 echo #define Size_t_size ^4)>> config.h
1333 ifeq ($(USE_64_BIT_INT),define)
1334 @(echo #define IVTYPE $(INT64)&& \
1335 echo #define UVTYPE unsigned $(INT64)&& \
1336 echo #define IVSIZE ^8&& \
1337 echo #define UVSIZE ^8)>> config.h
1338 ifeq ($(USE_LONG_DOUBLE),define)
1339 @(echo #define NV_PRESERVES_UV&& \
1340 echo #define NV_PRESERVES_UV_BITS 64)>> config.h
1342 @(echo #undef NV_PRESERVES_UV&& \
1343 echo #define NV_PRESERVES_UV_BITS 53)>> config.h
1345 @(echo #define IVdf "I64d"&& \
1346 echo #define UVuf "I64u"&& \
1347 echo #define UVof "I64o"&& \
1348 echo #define UVxf "I64x"&& \
1349 echo #define UVXf "I64X"&& \
1350 echo #define USE_64_BIT_INT)>> config.h
1352 @(echo #define IVTYPE long&& \
1353 echo #define UVTYPE unsigned long&& \
1354 echo #define IVSIZE ^4&& \
1355 echo #define UVSIZE ^4&& \
1356 echo #define NV_PRESERVES_UV&& \
1357 echo #define NV_PRESERVES_UV_BITS 32&& \
1358 echo #define IVdf "ld"&& \
1359 echo #define UVuf "lu"&& \
1360 echo #define UVof "lo"&& \
1361 echo #define UVxf "lx"&& \
1362 echo #define UVXf "lX"&& \
1363 echo #undef USE_64_BIT_INT)>> config.h
1365 ifeq ($(USE_LONG_DOUBLE),define)
1366 @(echo #define Gconvert^(x,n,t,b^) sprintf^(^(b^),"%%.*""Lg",^(n^),^(x^)^)&& \
1367 echo #define HAS_FREXPL&& \
1368 echo #define HAS_ISNANL&& \
1369 echo #define HAS_MODFL&& \
1370 echo #define HAS_MODFL_PROTO&& \
1371 echo #define HAS_SQRTL&& \
1372 echo #define HAS_STRTOLD&& \
1373 echo #define PERL_PRIfldbl "Lf"&& \
1374 echo #define PERL_PRIgldbl "Lg"&& \
1375 echo #define PERL_PRIeldbl "Le"&& \
1376 echo #define PERL_SCNfldbl "Lf"&& \
1377 echo #define NVTYPE long double)>> config.h
1378 ifeq ($(WIN64),define)
1379 @(echo #define NVSIZE ^16&& \
1380 echo #define LONG_DOUBLESIZE ^16)>> config.h
1382 @(echo #define NVSIZE ^12&& \
1383 echo #define LONG_DOUBLESIZE ^12)>> config.h
1385 @(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&& \
1386 echo #define NVef "Le"&& \
1387 echo #define NVff "Lf"&& \
1388 echo #define NVgf "Lg"&& \
1389 echo #define USE_LONG_DOUBLE)>> config.h
1391 @(echo #define Gconvert^(x,n,t,b^) sprintf^(^(b^),"%%.*g",^(n^),^(x^)^)&& \
1392 echo #undef HAS_FREXPL&& \
1393 echo #undef HAS_ISNANL&& \
1394 echo #undef HAS_MODFL&& \
1395 echo #undef HAS_MODFL_PROTO&& \
1396 echo #undef HAS_SQRTL&& \
1397 echo #undef HAS_STRTOLD&& \
1398 echo #undef PERL_PRIfldbl&& \
1399 echo #undef PERL_PRIgldbl&& \
1400 echo #undef PERL_PRIeldbl&& \
1401 echo #undef PERL_SCNfldbl&& \
1402 echo #define NVTYPE double&& \
1403 echo #define NVSIZE ^8&& \
1404 echo #define LONG_DOUBLESIZE ^8&& \
1405 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&& \
1406 echo #define NVef "e"&& \
1407 echo #define NVff "f"&& \
1408 echo #define NVgf "g"&& \
1409 echo #undef USE_LONG_DOUBLE)>> config.h
1411 ifeq ($(USE_CPLUSPLUS),define)
1412 @(echo #define USE_CPLUSPLUS&& \
1413 echo #endif)>> config.h
1415 @(echo #undef USE_CPLUSPLUS&& \
1416 echo #endif)>> config.h
1418 #separate line since this is sentinal that this target is done
1419 rem. > $(MINIDIR)\.exists
1421 $(MINICORE_OBJ) : $(CORE_NOCFG_H)
1422 $(CC) -c $(CFLAGS) $(MINIBUILDOPT) -DPERL_EXTERNAL_GLOB -DPERL_IS_MINIPERL $(OBJOUT_FLAG)$@ $(PDBOUT) ..\$(*F).c
1424 $(MINIWIN32_OBJ) : $(CORE_NOCFG_H)
1425 $(CC) -c $(CFLAGS) $(MINIBUILDOPT) -DPERL_IS_MINIPERL $(OBJOUT_FLAG)$@ $(PDBOUT) $(*F).c
1427 # -DPERL_IMPLICIT_SYS needs C++ for perllib.c
1428 # rules wrapped in .IFs break Win9X build (we end up with unbalanced []s unless
1429 # unless the .IF is true), so instead we use a .ELSE with the default.
1430 # This is the only file that depends on perlhost.h, vmem.h, and vdir.h
1432 perllib$(o) : perllib.c perllibst.h .\perlhost.h .\vdir.h .\vmem.h
1433 ifeq ($(USE_IMP_SYS),define)
1434 $(CC) -c -I. $(CFLAGS_O) $(CXX_FLAG) $(OBJOUT_FLAG)$@ $(PDBOUT) perllib.c
1436 $(CC) -c -I. $(CFLAGS_O) $(OBJOUT_FLAG)$@ $(PDBOUT) perllib.c
1439 # 1. we don't want to rebuild miniperl.exe when config.h changes
1440 # 2. we don't want to rebuild miniperl.exe with non-default config.h
1441 # 3. we can't have miniperl.exe depend on git_version.h, as miniperl creates it
1442 $(MINI_OBJ) : $(MINIDIR)\.exists $(CORE_NOCFG_H)
1444 $(WIN32_OBJ) : $(CORE_H)
1446 $(CORE_OBJ) : $(CORE_H)
1448 $(DLL_OBJ) : $(CORE_H)
1451 perllibst.h : $(HAVEMINIPERL) $(CONFIGPM) create_perllibst_h.pl
1452 $(MINIPERL) -I..\lib create_perllibst_h.pl
1454 perldll.def : $(HAVEMINIPERL) $(CONFIGPM) ..\embed.fnc ..\makedef.pl
1455 $(MINIPERL) -I..\lib -w ..\makedef.pl PLATFORM=win32 $(OPTIMIZE) $(DEFINES) \
1456 $(BUILDOPT) CCTYPE=$(CCTYPE) TARG_DIR=..\ > perldll.def
1458 $(PERLEXPLIB) : $(PERLIMPLIB)
1460 $(PERLIMPLIB) : perldll.def
1461 ifeq ($(CCTYPE),GCC)
1462 $(IMPLIB) -k -d perldll.def -l $(PERLIMPLIB) -e $(PERLEXPLIB)
1464 lib -def:perldll.def -machine:$(ARCHITECTURE) /OUT:$(PERLIMPLIB)
1467 $(PERLDLL): $(PERLEXPLIB) $(PERLDLL_OBJ) $(PERLDLL_RES) Extensions_static
1468 ifeq ($(CCTYPE),GCC)
1469 $(LINK32) -mdll -o $@ $(BLINK_FLAGS) \
1470 $(PERLDLL_OBJ) $(shell type Extensions_static) $(LIBFILES) $(PERLEXPLIB)
1472 $(LINK32) -dll -out:$@ $(BLINK_FLAGS) \
1473 @Extensions_static \
1474 -base:0x28000000 $(DELAYLOAD) $(LIBFILES) \
1475 $(PERLDLL_RES) $(PERLDLL_OBJ) $(PERLEXPLIB)
1479 $(PERLSTATICLIB): $(PERLDLL_OBJ) Extensions_static
1480 ifeq ($(CCTYPE),GCC)
1481 $(LIB32) $(LIB_FLAGS) $@ $(PERLDLL_OBJ)
1482 if exist $(STATICDIR) rmdir /s /q $(STATICDIR)
1483 for %%i in ($(shell type Extensions_static)) do \
1484 @mkdir $(STATICDIR) && cd $(STATICDIR) && \
1485 $(ARCHPREFIX)ar x ..\%%i && \
1486 $(ARCHPREFIX)ar q ..\$@ *$(o) && \
1487 cd .. && rmdir /s /q $(STATICDIR)
1489 $(LIB32) $(LIB_FLAGS) -out:$@ @Extensions_static \
1492 $(XCOPY) $(PERLSTATICLIB) $(COREDIR)
1494 $(PERLEXE_RES): perlexe.rc $(PERLEXE_MANIFEST) $(PERLEXE_ICO)
1496 $(MINIDIR)\globals$(o) : $(GENERATED_HEADERS)
1498 $(UUDMAP_H) $(MG_DATA_H) : $(BITCOUNT_H)
1500 $(BITCOUNT_H) : $(GENUUDMAP)
1501 $(GENUUDMAP) $(GENERATED_HEADERS)
1503 $(GENUUDMAP) : ..\mg_raw.h
1504 ifeq ($(CCTYPE),GCC)
1505 $(LINK32) $(CFLAGS_O) -o..\generate_uudmap.exe ..\generate_uudmap.c \
1506 $(BLINK_FLAGS) $(LIBFILES)
1508 $(CC) $(CFLAGS_O) $(PDBOUT) -Fe..\generate_uudmap.exe ..\generate_uudmap.c -link $(LIBFILES) $(BLINK_FLAGS)
1514 MakePPPort : $(HAVEMINIPERL) $(CONFIGPM)
1515 $(MINIPERL) -I..\lib ..\mkppport
1517 # also known as $(HAVE_COREDIR)
1518 .coreheaders : $(CORE_H)
1519 $(XCOPY) *.h $(COREDIR)\\*.*
1520 $(RCOPY) include $(COREDIR)\\*.*
1521 $(XCOPY) ..\\*.h $(COREDIR)\\*.*
1524 perlmain$(o) : runperl.c $(CONFIGPM)
1525 $(CC) $(subst -DPERLDLL,-UPERLDLL,$(CFLAGS_O)) $(OBJOUT_FLAG)$@ $(PDBOUT) -c runperl.c
1527 perlmainst$(o) : runperl.c $(CONFIGPM)
1528 $(CC) $(CFLAGS_O) $(OBJOUT_FLAG)$@ $(PDBOUT) -c runperl.c
1530 $(PERLEXE): $(CONFIGPM) $(PERLEXE_OBJ) $(PERLEXE_RES) $(PERLIMPLIB)
1531 ifeq ($(CCTYPE),GCC)
1532 $(LINK32) -mconsole -o $@ $(BLINK_FLAGS) \
1533 $(PERLEXE_OBJ) $(PERLEXE_RES) $(PERLIMPLIB) $(LIBFILES)
1535 $(LINK32) -out:$@ $(BLINK_FLAGS) \
1536 $(PERLEXE_OBJ) $(PERLEXE_RES) $(PERLIMPLIB) $(LIBFILES) $(SETARGV_OBJ)
1539 copy $(PERLEXE) $(WPERLEXE)
1540 $(MINIPERL) -I..\lib bin\exetype.pl $(WPERLEXE) WINDOWS
1542 $(PERLEXESTATIC): $(PERLSTATICLIB) $(CONFIGPM) $(PERLEXEST_OBJ) $(PERLEXE_RES)
1543 ifeq ($(CCTYPE),GCC)
1544 $(LINK32) -mconsole -o $@ $(BLINK_FLAGS) \
1545 $(PERLEXEST_OBJ) $(PERLEXE_RES) $(PERLSTATICLIB) $(LIBFILES)
1547 $(LINK32) -out:$@ $(BLINK_FLAGS) \
1548 $(PERLEXEST_OBJ) $(PERLEXE_RES) $(PERLSTATICLIB) $(LIBFILES) $(SETARGV_OBJ)
1552 #-------------------------------------------------------------------------------
1553 # There's no direct way to mark a dependency on
1554 # DynaLoader.pm, so this will have to do
1556 #most of deps of this target are in DYNALOADER and therefore omitted here
1557 Extensions : $(PERLDEP) $(DYNALOADER) $(GLOBEXE) MakePPPort
1558 $(MINIPERL) -I..\lib ..\make_ext.pl "MAKE=$(PLMAKE)" --dir=$(CPANDIR) --dir=$(DISTDIR) --dir=$(EXTDIR) --dynamic !Unicode/Normalize
1560 Extensions_normalize : $(PERLDEP) $(DYNALOADER) $(GLOBEXE) $(UNIDATAFILES)
1561 $(MINIPERL) -I..\lib ..\make_ext.pl "MAKE=$(PLMAKE)" --dir=$(CPANDIR) --dir=$(DISTDIR) --dir=$(EXTDIR) --dynamic +Unicode/Normalize
1563 Extensions_reonly : $(PERLDEP) $(DYNALOADER)
1564 $(MINIPERL) -I..\lib ..\make_ext.pl "MAKE=$(PLMAKE)" --dir=$(CPANDIR) --dir=$(DISTDIR) --dir=$(EXTDIR) --dynamic +re
1566 Extensions_static : ..\make_ext.pl list_static_libs.pl $(CONFIGPM) $(GLOBEXE) $(HAVE_COREDIR) MakePPPort
1567 $(MINIPERL) -I..\lib ..\make_ext.pl "MAKE=$(PLMAKE)" --dir=$(CPANDIR) --dir=$(DISTDIR) --dir=$(EXTDIR) --static
1568 $(MINIPERL) -I..\lib list_static_libs.pl > Extensions_static
1570 Extensions_nonxs : ..\make_ext.pl ..\pod\perlfunc.pod $(CONFIGPM) $(GLOBEXE)
1571 $(MINIPERL) -I..\lib ..\make_ext.pl "MAKE=$(PLMAKE)" --dir=$(CPANDIR) --dir=$(DISTDIR) --dir=$(EXTDIR) --nonxs !libs
1573 #lib must be built, it can't be buildcustomize.pl-ed, and is required for XS building
1574 $(DYNALOADER) : ..\make_ext.pl $(CONFIGPM) $(HAVE_COREDIR)
1575 $(MINIPERL) -I..\lib ..\make_ext.pl "MAKE=$(PLMAKE)" --dir=$(EXTDIR) --dir=$(DISTDIR) --dynaloader lib
1578 -if exist $(MINIPERL) $(MINIPERL) -I..\lib ..\make_ext.pl "MAKE=$(PLMAKE)" --dir=$(CPANDIR) --dir=$(DISTDIR) --dir=$(EXTDIR) --all --target=clean
1580 Extensions_realclean :
1581 -if exist $(MINIPERL) $(MINIPERL) -I..\lib ..\make_ext.pl "MAKE=$(PLMAKE)" --dir=$(CPANDIR) --dir=$(DISTDIR) --dir=$(EXTDIR) --all --target=realclean
1583 # all PE files need to be built by the time this target runs, PP files can still
1584 # be running in parallel like UNIDATAFILES, this target a placeholder for the
1586 ifeq ($(BUILD_STATIC),define)
1587 rebasePE : Extensions $(PERLDLL) Extensions_normalize $(PERLEXE) $(PERLEXESTATIC)
1589 rebasePE : Extensions $(PERLDLL) Extensions_normalize $(PERLEXE)
1593 #-------------------------------------------------------------------------------
1595 doc: $(PERLEXE) $(PERLDLL) ..\pod\perltoc.pod
1596 $(PERLEXE) -I..\lib ..\installhtml --podroot=.. --htmldir=$(HTMLDIR) \
1597 --podpath=pod:lib:utils --htmlroot="file://$(subst :,|,$(INST_HTML))"\
1600 ..\utils\Makefile: $(CONFIGPM) ..\utils\Makefile.PL
1601 $(MINIPERL) -I..\lib ..\utils\Makefile.PL ..
1603 # Note that this next section is parsed (and regenerated) by pod/buildtoc
1604 # so please check that script before making structural changes here
1605 utils: $(HAVEMINIPERL) ..\utils\Makefile
1606 cd ..\utils && $(PLMAKE) PERL=$(MINIPERL)
1607 copy ..\README.aix ..\pod\perlaix.pod
1608 copy ..\README.amiga ..\pod\perlamiga.pod
1609 copy ..\README.android ..\pod\perlandroid.pod
1610 copy ..\README.bs2000 ..\pod\perlbs2000.pod
1611 copy ..\README.ce ..\pod\perlce.pod
1612 copy ..\README.cn ..\pod\perlcn.pod
1613 copy ..\README.cygwin ..\pod\perlcygwin.pod
1614 copy ..\README.dos ..\pod\perldos.pod
1615 copy ..\README.freebsd ..\pod\perlfreebsd.pod
1616 copy ..\README.haiku ..\pod\perlhaiku.pod
1617 copy ..\README.hpux ..\pod\perlhpux.pod
1618 copy ..\README.hurd ..\pod\perlhurd.pod
1619 copy ..\README.irix ..\pod\perlirix.pod
1620 copy ..\README.jp ..\pod\perljp.pod
1621 copy ..\README.ko ..\pod\perlko.pod
1622 copy ..\README.linux ..\pod\perllinux.pod
1623 copy ..\README.macos ..\pod\perlmacos.pod
1624 copy ..\README.macosx ..\pod\perlmacosx.pod
1625 copy ..\README.netware ..\pod\perlnetware.pod
1626 copy ..\README.openbsd ..\pod\perlopenbsd.pod
1627 copy ..\README.os2 ..\pod\perlos2.pod
1628 copy ..\README.os390 ..\pod\perlos390.pod
1629 copy ..\README.os400 ..\pod\perlos400.pod
1630 copy ..\README.plan9 ..\pod\perlplan9.pod
1631 copy ..\README.qnx ..\pod\perlqnx.pod
1632 copy ..\README.riscos ..\pod\perlriscos.pod
1633 copy ..\README.solaris ..\pod\perlsolaris.pod
1634 copy ..\README.symbian ..\pod\perlsymbian.pod
1635 copy ..\README.synology ..\pod\perlsynology.pod
1636 copy ..\README.tru64 ..\pod\perltru64.pod
1637 copy ..\README.tw ..\pod\perltw.pod
1638 copy ..\README.vos ..\pod\perlvos.pod
1639 copy ..\README.win32 ..\pod\perlwin32.pod
1640 copy ..\pod\perldelta.pod ..\pod\perl5270delta.pod
1641 $(MINIPERL) -I..\lib $(PL2BAT) $(UTILS)
1642 $(MINIPERL) -I..\lib ..\autodoc.pl ..
1643 $(MINIPERL) -I..\lib ..\pod\perlmodlib.PL -q ..
1645 ..\pod\perltoc.pod: $(PERLEXE) $(PERLDLL) Extensions Extensions_nonxs Extensions_normalize utils
1646 $(PERLEXE) -f ..\pod\buildtoc -q
1648 # Note that the pod cleanup in this next section is parsed (and regenerated
1649 # by pod/buildtoc so please check that script before making changes here
1651 distclean: realclean
1652 -del /f $(MINIPERL) $(PERLEXE) $(PERLDLL) $(GLOBEXE) \
1653 $(PERLIMPLIB) ..\miniperl$(a) $(PERLEXESTATIC) $(PERLSTATICLIB)
1654 -del /f $(LIBDIR)\Encode.pm $(LIBDIR)\encoding.pm $(LIBDIR)\Errno.pm
1655 -del /f $(LIBDIR)\Config.pod $(LIBDIR)\POSIX.pod $(LIBDIR)\threads.pm
1656 -del /f $(LIBDIR)\.exists $(LIBDIR)\attributes.pm $(LIBDIR)\DynaLoader.pm
1657 -del /f $(LIBDIR)\Fcntl.pm $(LIBDIR)\IO.pm $(LIBDIR)\Opcode.pm
1658 -del /f $(LIBDIR)\ops.pm $(LIBDIR)\Safe.pm
1659 -del /f $(LIBDIR)\SDBM_File.pm $(LIBDIR)\Socket.pm $(LIBDIR)\POSIX.pm
1660 -del /f $(LIBDIR)\B.pm $(LIBDIR)\O.pm $(LIBDIR)\re.pm
1661 -del /f $(LIBDIR)\File\Glob.pm
1662 -del /f $(LIBDIR)\Storable.pm
1663 -del /f $(LIBDIR)\Sys\Hostname.pm
1664 -del /f $(LIBDIR)\Time\HiRes.pm
1665 -del /f $(LIBDIR)\Unicode\Normalize.pm
1666 -del /f $(LIBDIR)\Math\BigInt\FastCalc.pm
1667 -del /f $(LIBDIR)\Win32.pm
1668 -del /f $(LIBDIR)\Win32CORE.pm
1669 -del /f $(LIBDIR)\Win32API\File.pm
1670 -del /f $(LIBDIR)\Win32API\File\cFile.pc
1671 -del /f $(LIBDIR)\buildcustomize.pl
1672 -del /f $(DISTDIR)\XSLoader\XSLoader.pm
1674 -if exist $(LIBDIR)\App rmdir /s /q $(LIBDIR)\App
1675 -if exist $(LIBDIR)\Archive rmdir /s /q $(LIBDIR)\Archive
1676 -if exist $(LIBDIR)\Attribute rmdir /s /q $(LIBDIR)\Attribute
1677 -if exist $(LIBDIR)\autodie rmdir /s /q $(LIBDIR)\autodie
1678 -if exist $(LIBDIR)\Carp rmdir /s /q $(LIBDIR)\Carp
1679 -if exist $(LIBDIR)\Compress rmdir /s /q $(LIBDIR)\Compress
1680 -if exist $(LIBDIR)\Config\Perl rmdir /s /q $(LIBDIR)\Config\Perl
1681 -if exist $(LIBDIR)\CPAN rmdir /s /q $(LIBDIR)\CPAN
1682 -if exist $(LIBDIR)\Data rmdir /s /q $(LIBDIR)\Data
1683 -if exist $(LIBDIR)\Devel rmdir /s /q $(LIBDIR)\Devel
1684 -if exist $(LIBDIR)\Digest rmdir /s /q $(LIBDIR)\Digest
1685 -if exist $(LIBDIR)\Encode rmdir /s /q $(LIBDIR)\Encode
1686 -if exist $(LIBDIR)\encoding rmdir /s /q $(LIBDIR)\encoding
1687 -if exist $(LIBDIR)\Exporter rmdir /s /q $(LIBDIR)\Exporter
1688 -if exist $(LIBDIR)\ExtUtils\CBuilder rmdir /s /q $(LIBDIR)\ExtUtils\CBuilder
1689 -if exist $(LIBDIR)\ExtUtils\Command rmdir /s /q $(LIBDIR)\ExtUtils\Command
1690 -if exist $(LIBDIR)\ExtUtils\Constant rmdir /s /q $(LIBDIR)\ExtUtils\Constant
1691 -if exist $(LIBDIR)\ExtUtils\Liblist rmdir /s /q $(LIBDIR)\ExtUtils\Liblist
1692 -if exist $(LIBDIR)\ExtUtils\MakeMaker rmdir /s /q $(LIBDIR)\ExtUtils\MakeMaker
1693 -if exist $(LIBDIR)\ExtUtils\ParseXS rmdir /s /q $(LIBDIR)\ExtUtils\ParseXS
1694 -if exist $(LIBDIR)\ExtUtils\Typemaps rmdir /s /q $(LIBDIR)\ExtUtils\Typemaps
1695 -if exist $(LIBDIR)\File\Spec rmdir /s /q $(LIBDIR)\File\Spec
1696 -if exist $(LIBDIR)\Filter rmdir /s /q $(LIBDIR)\Filter
1697 -if exist $(LIBDIR)\Hash rmdir /s /q $(LIBDIR)\Hash
1698 -if exist $(LIBDIR)\HTTP rmdir /s /q $(LIBDIR)\HTTP
1699 -if exist $(LIBDIR)\I18N rmdir /s /q $(LIBDIR)\I18N
1700 -if exist $(LIBDIR)\inc rmdir /s /q $(LIBDIR)\inc
1701 -if exist $(LIBDIR)\IO rmdir /s /q $(LIBDIR)\IO
1702 -if exist $(LIBDIR)\IPC rmdir /s /q $(LIBDIR)\IPC
1703 -if exist $(LIBDIR)\JSON rmdir /s /q $(LIBDIR)\JSON
1704 -if exist $(LIBDIR)\List rmdir /s /q $(LIBDIR)\List
1705 -if exist $(LIBDIR)\Locale rmdir /s /q $(LIBDIR)\Locale
1706 -if exist $(LIBDIR)\Math rmdir /s /q $(LIBDIR)\Math
1707 -if exist $(LIBDIR)\Memoize rmdir /s /q $(LIBDIR)\Memoize
1708 -if exist $(LIBDIR)\MIME rmdir /s /q $(LIBDIR)\MIME
1709 -if exist $(LIBDIR)\Module rmdir /s /q $(LIBDIR)\Module
1710 -if exist $(LIBDIR)\Net\FTP rmdir /s /q $(LIBDIR)\Net\FTP
1711 -if exist $(LIBDIR)\Params rmdir /s /q $(LIBDIR)\Params
1712 -if exist $(LIBDIR)\Parse rmdir /s /q $(LIBDIR)\Parse
1713 -if exist $(LIBDIR)\Perl rmdir /s /q $(LIBDIR)\Perl
1714 -if exist $(LIBDIR)\PerlIO rmdir /s /q $(LIBDIR)\PerlIO
1715 -if exist $(LIBDIR)\Pod\Perldoc rmdir /s /q $(LIBDIR)\Pod\Perldoc
1716 -if exist $(LIBDIR)\Pod\Simple rmdir /s /q $(LIBDIR)\Pod\Simple
1717 -if exist $(LIBDIR)\Pod\Text rmdir /s /q $(LIBDIR)\Pod\Text
1718 -if exist $(LIBDIR)\Scalar rmdir /s /q $(LIBDIR)\Scalar
1719 -if exist $(LIBDIR)\Search rmdir /s /q $(LIBDIR)\Search
1720 -if exist $(LIBDIR)\Sub rmdir /s /q $(LIBDIR)\Sub
1721 -if exist $(LIBDIR)\Sys rmdir /s /q $(LIBDIR)\Sys
1722 -if exist $(LIBDIR)\TAP rmdir /s /q $(LIBDIR)\TAP
1723 -if exist $(LIBDIR)\Term rmdir /s /q $(LIBDIR)\Term
1724 -if exist $(LIBDIR)\Test rmdir /s /q $(LIBDIR)\Test
1725 -if exist $(LIBDIR)\Test2 rmdir /s /q $(LIBDIR)\Test
1726 -if exist $(LIBDIR)\Text rmdir /s /q $(LIBDIR)\Text
1727 -if exist $(LIBDIR)\Thread rmdir /s /q $(LIBDIR)\Thread
1728 -if exist $(LIBDIR)\threads rmdir /s /q $(LIBDIR)\threads
1729 -if exist $(LIBDIR)\Tie\Hash rmdir /s /q $(LIBDIR)\Tie\Hash
1730 -if exist $(LIBDIR)\Unicode\Collate rmdir /s /q $(LIBDIR)\Unicode\Collate
1731 -if exist $(LIBDIR)\Unicode\Collate\Locale rmdir /s /q $(LIBDIR)\Unicode\Collate\Locale
1732 -if exist $(LIBDIR)\version rmdir /s /q $(LIBDIR)\version
1733 -if exist $(LIBDIR)\VMS rmdir /s /q $(LIBDIR)\VMS
1734 -if exist $(LIBDIR)\Win32API rmdir /s /q $(LIBDIR)\Win32API
1735 -if exist $(LIBDIR)\XS rmdir /s /q $(LIBDIR)\XS
1736 -cd $(PODDIR) && del /f *.html *.bat roffitall \
1737 perl5270delta.pod perlaix.pod perlamiga.pod perlandroid.pod \
1738 perlapi.pod perlbs2000.pod perlce.pod perlcn.pod perlcygwin.pod \
1739 perldos.pod perlfreebsd.pod perlhaiku.pod perlhpux.pod \
1740 perlhurd.pod perlintern.pod perlirix.pod perljp.pod perlko.pod \
1741 perllinux.pod perlmacos.pod perlmacosx.pod perlmodlib.pod \
1742 perlnetware.pod perlopenbsd.pod perlos2.pod perlos390.pod \
1743 perlos400.pod perlplan9.pod perlqnx.pod perlriscos.pod \
1744 perlsolaris.pod perlsymbian.pod perlsynology.pod perltoc.pod \
1745 perltru64.pod perltw.pod perluniprops.pod perlvos.pod \
1747 -cd ..\utils && del /f h2ph splain perlbug pl2pm h2xs \
1748 perldoc perlivp libnetcfg enc2xs encguess piconv cpan *.bat \
1749 xsubpp pod2html instmodsh json_pp prove ptar ptardiff ptargrep shasum corelist zipdetails
1750 -del /f ..\config.sh perlmain.c dlutils.c config.h.new \
1753 -del /f ..\lib\Config_git.pl
1756 -del /f $(PERLEXE_RES) perl.base
1757 -cd .. && del /s *$(a) *.map *.pdb *.ilk *.bs *$(o) .exists pm_to_blib ppport.h
1758 -cd $(EXTDIR) && del /s *.def Makefile Makefile.old
1759 -cd $(DISTDIR) && del /s *.def Makefile Makefile.old
1760 -cd $(CPANDIR) && del /s *.def Makefile Makefile.old
1761 -del /s ..\utils\Makefile
1762 -if exist $(AUTODIR) rmdir /s /q $(AUTODIR)
1763 -if exist $(COREDIR) rmdir /s /q $(COREDIR)
1764 -if exist pod2htmd.tmp del pod2htmd.tmp
1765 -if exist $(HTMLDIR) rmdir /s /q $(HTMLDIR)
1766 -del /f ..\t\test_state
1768 install : all installbare installhtml
1770 installbare : utils ..\pod\perltoc.pod
1771 $(PERLEXE) ..\installperl
1772 if exist $(WPERLEXE) $(XCOPY) $(WPERLEXE) $(INST_BIN)\$(NULL)
1773 if exist $(PERLEXESTATIC) $(XCOPY) $(PERLEXESTATIC) $(INST_BIN)\$(NULL)
1774 $(XCOPY) $(GLOBEXE) $(INST_BIN)\$(NULL)
1775 if exist ..\perl*.pdb $(XCOPY) ..\perl*.pdb $(INST_BIN)\$(NULL)
1776 $(XCOPY) "bin\*.bat" $(INST_SCRIPT)\$(NULL)
1779 $(RCOPY) $(HTMLDIR)\*.* $(INST_HTML)\$(NULL)
1781 inst_lib : $(CONFIGPM)
1782 $(RCOPY) ..\lib $(INST_LIB)\$(NULL)
1784 $(UNIDATAFILES) : ..\pod\perluniprops.pod
1786 ..\pod\perluniprops.pod: ..\lib\unicore\mktables $(CONFIGPM)
1787 $(MINIPERL) -I..\lib ..\lib\unicore\mktables -C ..\lib\unicore -P ..\pod -maketest -makelist -p
1789 minitest : $(HAVEMINIPERL) $(GLOBEXE) $(CONFIGPM) $(UNIDATAFILES) utils
1790 $(XCOPY) $(MINIPERL) ..\t\$(NULL)
1791 if exist ..\t\perl.exe del /f ..\t\perl.exe
1792 rename ..\t\miniperl.exe perl.exe
1793 $(XCOPY) $(GLOBEXE) ..\t\$(NULL)
1794 attrib -r "..\t\*.*"
1796 $(MINIPERL) -I..\lib harness base/*.t comp/*.t cmd/*.t io/*.t opbasic/*.t op/*.t pragma/*.t
1798 test-prep : all utils ..\pod\perltoc.pod $(TESTPREPGCC)
1799 $(XCOPY) $(PERLEXE) ..\t\$(NULL)
1800 $(XCOPY) $(PERLDLL) ..\t\$(NULL)
1801 $(XCOPY) $(GLOBEXE) ..\t\$(NULL)
1802 # If building with gcc versions 4.x.x or greater, then
1803 # the GCC helper DLL will also need copied to the test directory.
1804 # The name of the dll can change, depending upon which vendor has supplied
1805 # your compiler, and upon the values of "x".
1806 # libstdc++-6.dll is copied if it exists as it, too, may then be needed.
1807 # Without this copying, the op/taint.t test script will fail.
1809 ifeq ($(CCTYPE),GCC)
1812 if exist $(CCDLLDIR)\libgcc_s_seh-1.dll $(XCOPY) $(CCDLLDIR)\libgcc_s_seh-1.dll ..\t\$(NULL)
1813 if exist $(CCDLLDIR)\libgcc_s_sjlj-1.dll $(XCOPY) $(CCDLLDIR)\libgcc_s_sjlj-1.dll ..\t\$(NULL)
1814 if exist $(CCDLLDIR)\libgcc_s_dw2-1.dll $(XCOPY) $(CCDLLDIR)\libgcc_s_dw2-1.dll ..\t\$(NULL)
1815 if exist $(CCDLLDIR)\libstdc++-6.dll $(XCOPY) $(CCDLLDIR)\libstdc++-6.dll ..\t\$(NULL)
1816 if exist $(CCDLLDIR)\libwinpthread-1.dll $(XCOPY) $(CCDLLDIR)\libwinpthread-1.dll ..\t\$(NULL)
1821 set PERL_STATIC_EXT=$(STATIC_EXT) && \
1822 cd ..\t && perl.exe harness $(TEST_SWITCHES) $(TEST_FILES)
1824 test_porting : test-prep
1825 set PERL_STATIC_EXT=$(STATIC_EXT) && \
1826 cd ..\t && perl.exe harness $(TEST_SWITCHES) porting\*.t ..\lib\diagnostics.t
1828 test-reonly : reonly utils
1829 $(XCOPY) $(PERLEXE) ..\t\$(NULL)
1830 $(XCOPY) $(PERLDLL) ..\t\$(NULL)
1831 $(XCOPY) $(GLOBEXE) ..\t\$(NULL)
1832 cd ..\t && perl.exe harness $(OPT) -re \bpat\\/ $(EXTRA)
1837 test-notty : test-prep
1838 set PERL_STATIC_EXT=$(STATIC_EXT) && \
1839 set PERL_SKIP_TTY_TEST=1 && \
1840 cd ..\t && perl.exe harness $(TEST_SWITCHES) $(TEST_FILES)
1843 $(XCOPY) $(PERLEXE) ..\t\$(NULL)
1844 $(XCOPY) $(PERLDLL) ..\t\$(NULL)
1845 $(XCOPY) $(GLOBEXE) ..\t\$(NULL)
1846 set PERL_STATIC_EXT=$(STATIC_EXT) && \
1847 cd ..\t && perl.exe harness $(TEST_SWITCHES) $(TEST_FILES)
1850 -@erase miniperlmain$(o)
1852 -@erase perlglob$(o)
1853 -@erase perlmain$(o)
1854 -@erase perlmainst$(o)
1856 -@erase /f ..\git_version.h
1860 -@erase $(PERLEXESTATIC)
1861 -@erase $(PERLSTATICLIB)
1864 -@erase $(GENUUDMAP) $(GENUUDMAP_OBJ) $(GENERATED_HEADERS)
1865 -@erase .coreheaders
1866 -if exist $(MINIDIR) rmdir /s /q $(MINIDIR)
1867 -if exist $(UNIDATADIR1) rmdir /s /q $(UNIDATADIR1)
1868 -if exist $(UNIDATADIR2) rmdir /s /q $(UNIDATADIR2)
1869 -@erase $(UNIDATAFILES)
1870 -@erase $(WIN32_OBJ)
1872 -@erase ..\*$(o) ..\*$(a) ..\*.exp *$(o) *$(a) *.exp *.res
1873 -@erase ..\t\*.exe ..\t\*.dll ..\t\*.bat
1875 -@erase *.pdb ..\*.pdb
1876 -@erase Extensions_static
1878 clean : Extensions_clean _clean
1880 realclean : Extensions_realclean _clean
1882 # Handy way to run perlbug -ok without having to install and run the
1883 # installed perlbug. We don't re-run the tests here - we trust the user.
1884 # Please *don't* use this unless all tests pass.
1885 # If you want to report test failures, use "gmake nok" instead.
1886 ok: utils $(PERLEXE) $(PERLDLL) Extensions_nonxs Extensions
1887 $(PERLEXE) ..\utils\perlbug -ok -s "(UNINSTALLED)"
1889 okfile: utils $(PERLEXE) $(PERLDLL) Extensions_nonxs Extensions
1890 $(PERLEXE) ..\utils\perlbug -ok -s "(UNINSTALLED)" -F perl.ok
1892 nok: utils $(PERLEXE) $(PERLDLL) Extensions_nonxs Extensions
1893 $(PERLEXE) ..\utils\perlbug -nok -s "(UNINSTALLED)"
1895 nokfile: utils $(PERLEXE) $(PERLDLL) Extensions_nonxs Extensions
1896 $(PERLEXE) ..\utils\perlbug -nok -s "(UNINSTALLED)" -F perl.nok