This is a live mirror of the Perl 5 development currently hosted at https://github.com/perl/perl5
Add ext/re/re.pm to the @INC set for miniperl by lib/buildcustomize.pl
[perl5.git] / win32 / Makefile
1 #
2 # Makefile to build perl on Windows using Microsoft NMAKE.
3 # Supported compilers:
4 #       Microsoft Visual C++ 6.0 or later
5 #       Windows SDK 64-bit compiler and tools
6 #
7 # This is set up to build a perl.exe that runs off a shared library
8 # (perl513.dll).  Also makes individual DLLs for the XS extensions.
9 #
10
11 ##
12 ## Make sure you read README.win32 *before* you mess with anything here!
13 ##
14
15 ##
16 ## Build configuration.  Edit the values below to suit your needs.
17 ##
18
19 #
20 # Set these to wherever you want "nmake install" to put your
21 # newly built perl.
22 #
23 INST_DRV        = c:
24 INST_TOP        = $(INST_DRV)\perl
25
26 #
27 # Uncomment if you want to build a 32-bit Perl using a 32-bit compiler
28 # on a 64-bit version of Windows.
29 #WIN64          = undef
30
31 #
32 # Comment this out if you DON'T want your perl installation to be versioned.
33 # This means that the new installation will overwrite any files from the
34 # old installation at the same INST_TOP location.  Leaving it enabled is
35 # the safest route, as perl adds the extra version directory to all the
36 # locations it installs files to.  If you disable it, an alternative
37 # versioned installation can be obtained by setting INST_TOP above to a
38 # path that includes an arbitrary version string.
39 #
40 #INST_VER       = \5.13.9
41
42 #
43 # Comment this out if you DON'T want your perl installation to have
44 # architecture specific components.  This means that architecture-
45 # specific files will be installed along with the architecture-neutral
46 # files.  Leaving it enabled is safer and more flexible, in case you
47 # want to build multiple flavors of perl and install them together in
48 # the same location.  Commenting it out gives you a simpler
49 # installation that is easier to understand for beginners.
50 #
51 #INST_ARCH      = \$(ARCHNAME)
52
53 #
54 # Uncomment this if you want perl to run
55 #       $Config{sitelibexp}\sitecustomize.pl
56 # before anything else.  This script can then be set up, for example,
57 # to add additional entries to @INC.
58 #
59 #USE_SITECUST   = define
60
61 #
62 # uncomment to enable multiple interpreters.  This is need for fork()
63 # emulation and for thread support.
64 #
65 USE_MULTI       = define
66
67 #
68 # Beginnings of interpreter cloning/threads; now reasonably complete.
69 # This should be enabled to get the fork() emulation.  This needs
70 # USE_MULTI as well.
71 #
72 USE_ITHREADS    = define
73
74 #
75 # uncomment to enable the implicit "host" layer for all system calls
76 # made by perl.  This needs USE_MULTI above.  This is also needed to
77 # get fork().
78 #
79 USE_IMP_SYS     = define
80
81 #
82 # Comment out next assign to disable perl's I/O subsystem and use compiler's 
83 # stdio for IO - depending on your compiler vendor and run time library you may 
84 # then get a number of fails from make test i.e. bugs - complain to them not us ;-). 
85 # You will also be unable to take full advantage of perl5.8's support for multiple 
86 # encodings and may see lower IO performance. You have been warned.
87 USE_PERLIO      = define
88
89 #
90 # Comment this out if you don't want to enable large file support for
91 # some reason.  Should normally only be changed to maintain compatibility
92 # with an older release of perl.
93 USE_LARGE_FILES = define
94
95 #
96 # uncomment exactly one of the following
97 #
98 # Visual C++ 6.x (aka Visual C++ 98)
99 CCTYPE          = MSVC60
100 # Visual C++ Toolkit 2003 (aka Visual C++ 7.x) (free command-line tools)
101 #CCTYPE         = MSVC70FREE
102 # Visual C++ .NET 2003 (aka Visual C++ 7.x) (full version)
103 #CCTYPE         = MSVC70
104 # Windows Server 2003 SP1 Platform SDK (April 2005)
105 #CCTYPE         = SDK2003SP1
106 # Visual C++ 2005 Express Edition (aka Visual C++ 8.x) (free version)
107 #CCTYPE         = MSVC80FREE
108 # Visual C++ 2005 (aka Visual C++ 8.x) (full version)
109 #CCTYPE         = MSVC80
110 # Visual C++ 2008 Express Edition (aka Visual C++ 9.x) (free version)
111 #CCTYPE         = MSVC90FREE
112 # Visual C++ 2008 (aka Visual C++ 9.x) (full version)
113 #CCTYPE         = MSVC90
114 # Visual C++ 2010 Express Edition (aka Visual C++ 10.x) (free version)
115 #CCTYPE         = MSVC100FREE
116 # Visual C++ 2010 (aka Visual C++ 10.x) (full version)
117 #CCTYPE         = MSVC100
118
119 #
120 # uncomment next line if you want debug version of perl (big,slow)
121 # If not enabled, we automatically try to use maximum optimization
122 # with all compilers that are known to have a working optimizer.
123 #
124 #CFG            = Debug
125
126 #
127 # uncomment to enable linking with setargv.obj under the Visual C
128 # compiler. Setting this options enables perl to expand wildcards in
129 # arguments, but it may be harder to use alternate methods like
130 # File::DosGlob that are more powerful.  This option is supported only with
131 # Visual C.
132 #
133 #USE_SETARGV    = define
134
135 #
136 # set this if you wish to use perl's malloc
137 # WARNING: Turning this on/off WILL break binary compatibility with extensions
138 # you may have compiled with/without it.  Be prepared to recompile all
139 # extensions if you change the default.  Currently, this cannot be enabled
140 # if you ask for USE_IMP_SYS above.
141 #
142 #PERL_MALLOC    = define
143
144 #
145 # set this to enable debugging mstats
146 # This must be enabled to use the Devel::Peek::mstat() function.  This cannot
147 # be enabled without PERL_MALLOC as well.
148 #
149 #DEBUG_MSTATS   = define
150
151 #
152 # set this to additionally provide a statically linked perl-static.exe.
153 # Note that dynamic loading will not work with this perl, so you must
154 # include required modules statically using the STATIC_EXT or ALL_STATIC
155 # variables below. A static library perl513s.lib will also be created.
156 # Ordinary perl.exe is not affected by this option.
157 #
158 #BUILD_STATIC   = define
159
160 #
161 # in addition to BUILD_STATIC the option ALL_STATIC makes *every*
162 # extension get statically built
163 # This will result in a very large perl executable, but the main purpose
164 # is to have proper linking set so as to be able to create miscellaneous
165 # executables with different built-in extensions
166 #
167 #ALL_STATIC     = define
168
169 #
170 #
171 # set the install locations of the compiler include/libraries
172 # Running VCVARS32.BAT is *required* when using Visual C.
173 # Some versions of Visual C don't define MSVCDIR in the environment,
174 # so you may have to set CCHOME explicitly (spaces in the path name should
175 # not be quoted)
176 #
177 CCHOME          = $(MSVCDIR)
178 CCINCDIR        = $(CCHOME)\include
179 CCLIBDIR        = $(CCHOME)\lib
180
181 #
182 # Additional compiler flags can be specified here.
183 #
184 BUILDOPT        = $(BUILDOPTEXTRA)
185
186 #
187 # This should normally be disabled.  Enabling it will disable the File::Glob
188 # implementation of CORE::glob.
189 #
190 #BUILDOPT       = $(BUILDOPT) -DPERL_EXTERNAL_GLOB
191
192 #
193 # This should normally be disabled.  Enabling it causes perl to read scripts
194 # in text mode (which is the 5.005 behavior) and will break ByteLoader.
195 #
196 #BUILDOPT       = $(BUILDOPT) -DPERL_TEXTMODE_SCRIPTS
197
198 #
199 # specify semicolon-separated list of extra directories that modules will
200 # look for libraries (spaces in path names need not be quoted)
201 #
202 EXTRALIBDIRS    =
203
204 #
205 # set this to your email address (perl will guess a value from
206 # from your loginname and your hostname, which may not be right)
207 #
208 #EMAIL          =
209
210 ##
211 ## Build configuration ends.
212 ##
213
214 ##################### CHANGE THESE ONLY IF YOU MUST #####################
215
216 !IF "$(USE_IMP_SYS)" == "define"
217 PERL_MALLOC     = undef
218 DEBUG_MSTATS    = undef
219 !ENDIF
220
221 !IF "$(PERL_MALLOC)" == ""
222 PERL_MALLOC     = undef
223 DEBUG_MSTATS    = undef
224 !ENDIF
225
226 !IF "$(DEBUG_MSTATS)" == ""
227 DEBUG_MSTATS    = undef
228 !ENDIF
229
230 !IF "$(DEBUG_MSTATS)" == "define"
231 BUILDOPT        = $(BUILDOPT) -DPERL_DEBUGGING_MSTATS
232 !ENDIF
233
234 !IF "$(USE_SITECUST)" == ""
235 USE_SITECUST    = undef
236 !ENDIF
237
238 !IF "$(USE_MULTI)" == ""
239 USE_MULTI       = undef
240 !ENDIF
241
242 !IF "$(USE_ITHREADS)" == ""
243 USE_ITHREADS    = undef
244 !ENDIF
245
246 !IF "$(USE_IMP_SYS)" == ""
247 USE_IMP_SYS     = undef
248 !ENDIF
249
250 !IF "$(USE_PERLIO)" == ""
251 USE_PERLIO      = undef
252 !ENDIF
253
254 !IF "$(USE_LARGE_FILES)" == ""
255 USE_LARGE_FILES = undef
256 !ENDIF
257
258 !IF "$(USE_IMP_SYS)$(USE_MULTI)" == "defineundef"
259 USE_MULTI       = define
260 !ENDIF
261
262 !IF "$(USE_ITHREADS)$(USE_MULTI)" == "defineundef"
263 USE_MULTI       = define
264 !ENDIF
265
266 !IF "$(USE_SITECUST)" == "define"
267 BUILDOPT        = $(BUILDOPT) -DUSE_SITECUSTOMIZE
268 !ENDIF
269
270 !IF "$(USE_MULTI)" != "undef"
271 BUILDOPT        = $(BUILDOPT) -DPERL_IMPLICIT_CONTEXT
272 !ENDIF
273
274 !IF "$(USE_IMP_SYS)" != "undef"
275 BUILDOPT        = $(BUILDOPT) -DPERL_IMPLICIT_SYS
276 !ENDIF
277
278 !IF "$(PROCESSOR_ARCHITECTURE)" == ""
279 PROCESSOR_ARCHITECTURE  = x86
280 !ENDIF
281
282 !IF "$(WIN64)" == ""
283 # When we are running from a 32bit cmd.exe on AMD64 then
284 # PROCESSOR_ARCHITECTURE is set to x86 and PROCESSOR_ARCHITEW6432
285 # is set to AMD64
286 !IF "$(PROCESSOR_ARCHITEW6432)" != ""
287 PROCESSOR_ARCHITECTURE  = $(PROCESSOR_ARCHITEW6432)
288 WIN64                   = define
289 !ELSE
290 !IF "$(PROCESSOR_ARCHITECTURE)" == "AMD64" || "$(PROCESSOR_ARCHITECTURE)" == "IA64"
291 WIN64                   = define
292 !ELSE
293 WIN64                   = undef
294 !ENDIF
295 !ENDIF
296 !ENDIF
297
298 # Treat 64-bit MSVC60 (doesn't really exist) as SDK2003SP1 because
299 # both link against MSVCRT.dll (which is part of Windows itself) and
300 # not against a compiler specific versioned runtime.
301 !IF "$(WIN64)" == "define" && "$(CCTYPE)" == "MSVC60"
302 CCTYPE          = SDK2003SP1
303 !ENDIF
304
305 ARCHITECTURE = $(PROCESSOR_ARCHITECTURE)
306 !IF "$(ARCHITECTURE)" == "AMD64"
307 ARCHITECTURE    = x64
308 !ENDIF
309 !IF "$(ARCHITECTURE)" == "IA64"
310 ARCHITECTURE    = ia64
311 !ENDIF
312
313 !IF "$(USE_MULTI)" == "define"
314 ARCHNAME        = MSWin32-$(ARCHITECTURE)-multi
315 !ELSE
316 !IF "$(USE_PERLIO)" == "define"
317 ARCHNAME        = MSWin32-$(ARCHITECTURE)-perlio
318 !ELSE
319 ARCHNAME        = MSWin32-$(ARCHITECTURE)
320 !ENDIF
321 !ENDIF
322
323 !IF "$(USE_PERLIO)" == "define"
324 BUILDOPT        = $(BUILDOPT) -DUSE_PERLIO
325 !ENDIF
326
327 !IF "$(USE_ITHREADS)" == "define"
328 ARCHNAME        = $(ARCHNAME)-thread
329 !ENDIF
330
331 # Visual C++ 98, .NET 2003, 2005/2008/2010 specific.
332 # VC++ 6/7/8/9/10.x can load DLLs on demand.  Makes the test suite run
333 # in about 10% less time.  (The free version of 7.x can't do this, but the free
334 # versions of 8/9/10.x can.)
335 !IF "$(CCTYPE)" == "MSVC60" || "$(CCTYPE)" == "MSVC70"     || \
336     "$(CCTYPE)" == "MSVC80" || "$(CCTYPE)" == "MSVC80FREE" || \
337     "$(CCTYPE)" == "MSVC90" || "$(CCTYPE)" == "MSVC90FREE" || \
338     "$(CCTYPE)" == "MSVC100" || "$(CCTYPE)" == "MSVC100FREE"
339 DELAYLOAD       = -DELAYLOAD:ws2_32.dll delayimp.lib
340 !ENDIF
341
342 # Visual C++ 2005 and 2008 (VC++ 8.x and 9.x) create manifest files for EXEs and
343 # DLLs. These either need copying everywhere with the binaries, or else need
344 # embedding in them otherwise MSVCR80.dll or MSVCR90.dll won't be found. For
345 # simplicity, embed them if they exist (and delete them afterwards so that they
346 # don't get installed too).
347 EMBED_EXE_MANI  = if exist $@.manifest mt -nologo -manifest $@.manifest -outputresource:$@;1 && \
348                   if exist $@.manifest del $@.manifest
349 EMBED_DLL_MANI  = if exist $@.manifest mt -nologo -manifest $@.manifest -outputresource:$@;2 && \
350                   if exist $@.manifest del $@.manifest
351
352 ARCHDIR         = ..\lib\$(ARCHNAME)
353 COREDIR         = ..\lib\CORE
354 AUTODIR         = ..\lib\auto
355 LIBDIR          = ..\lib
356 EXTDIR          = ..\ext
357 DISTDIR         = ..\dist
358 CPANDIR         = ..\cpan
359 PODDIR          = ..\pod
360 EXTUTILSDIR     = $(LIBDIR)\ExtUtils
361 HTMLDIR         = .\html
362
363 #
364 INST_SCRIPT     = $(INST_TOP)$(INST_VER)\bin
365 INST_BIN        = $(INST_SCRIPT)$(INST_ARCH)
366 INST_LIB        = $(INST_TOP)$(INST_VER)\lib
367 INST_ARCHLIB    = $(INST_LIB)$(INST_ARCH)
368 INST_COREDIR    = $(INST_ARCHLIB)\CORE
369 INST_HTML       = $(INST_TOP)$(INST_VER)\html
370
371 #
372 # Programs to compile, build .lib files and link
373 #
374
375 CC              = cl
376 LINK32          = link
377 LIB32           = $(LINK32) -lib
378 RSC             = rc
379
380 #
381 # Options
382 #
383
384 INCLUDES        = -I$(COREDIR) -I.\include -I. -I..
385 #PCHFLAGS       = -Fpc:\temp\vcmoduls.pch -YX
386 DEFINES         = -DWIN32 -D_CONSOLE -DNO_STRICT
387 LOCDEFS         = -DPERLDLL -DPERL_CORE
388 SUBSYS          = console
389 CXX_FLAG        = -TP -EHsc
390
391 LIBC    = msvcrt.lib
392
393 !IF  "$(CFG)" == "Debug"
394 OPTIMIZE        = -Od -MD -Zi -DDEBUGGING
395 LINK_DBG        = -debug
396 !ELSE
397 OPTIMIZE        = -MD -Zi -DNDEBUG
398 # we enable debug symbols in release builds also
399 LINK_DBG        = -debug -opt:ref,icf
400 # you may want to enable this if you want COFF symbols in the executables
401 # in addition to the PDB symbols.  The default Dr. Watson that ships with
402 # Windows can use the the former but not latter.  The free WinDbg can be
403 # installed to get better stack traces from just the PDB symbols, so we
404 # avoid the bloat of COFF symbols by default.
405 #LINK_DBG       = $(LINK_DBG) -debugtype:both
406 !  IF "$(WIN64)" == "define"
407 # enable Whole Program Optimizations (WPO) and Link Time Code Generation (LTCG)
408 OPTIMIZE        = $(OPTIMIZE) -Ox -GL
409 LINK_DBG        = $(LINK_DBG) -ltcg
410 !  ELSE
411 # -O1 yields smaller code, which turns out to be faster than -O2 on x86
412 OPTIMIZE        = $(OPTIMIZE) -O1
413 #OPTIMIZE       = $(OPTIMIZE) -O2
414 !  ENDIF
415 !ENDIF
416
417 !IF "$(WIN64)" == "define"
418 DEFINES         = $(DEFINES) -DWIN64 -DCONSERVATIVE
419 OPTIMIZE        = $(OPTIMIZE) -fp:precise
420 !ENDIF
421
422 # For now, silence VC++ 8/9/10.x's warnings about "unsafe" CRT functions
423 # and POSIX CRT function names being deprecated.
424 !IF "$(CCTYPE)" == "MSVC80" || "$(CCTYPE)" == "MSVC80FREE" || \
425     "$(CCTYPE)" == "MSVC90" || "$(CCTYPE)" == "MSVC90FREE" || \
426     "$(CCTYPE)" == "MSVC100" || "$(CCTYPE)" == "MSVC100FREE"
427 DEFINES         = $(DEFINES) -D_CRT_SECURE_NO_DEPRECATE -D_CRT_NONSTDC_NO_DEPRECATE
428 !ENDIF
429
430 # In VS 2005 (VC++ 8.0) Microsoft changes time_t from 32-bit to
431 # 64-bit, even in 32-bit mode.  It also provides the _USE_32BIT_TIME_T
432 # preprocessor option to revert back to the old functionality for
433 # backward compatibility.  We define this symbol here for older 32-bit
434 # compilers only (which aren't using it at all) for the sole purpose
435 # of getting it into $Config{ccflags}.  That way if someone builds
436 # Perl itself with e.g. VC6 but later installs an XS module using VC8
437 # the time_t types will still be compatible.
438 !IF "$(WIN64)" == "undef"
439 !  IF "$(CCTYPE)" == "MSVC60" || \
440       "$(CCTYPE)" == "MSVC70" || "$(CCTYPE)" == "MSVC70FREE"
441 BUILDOPT        = $(BUILDOPT) -D_USE_32BIT_TIME_T
442 !  ENDIF
443 !ENDIF
444
445 LIBBASEFILES    = \
446                 oldnames.lib kernel32.lib user32.lib gdi32.lib winspool.lib \
447                 comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib \
448                 netapi32.lib uuid.lib ws2_32.lib mpr.lib winmm.lib \
449                 version.lib odbc32.lib odbccp32.lib comctl32.lib
450
451 # The 64 bit Windows Server 2003 SP1 SDK compilers link against MSVCRT.dll, which
452 # doesn't include the buffer overrun verification code used by the /GS switch.
453 # Since the code links against libraries that are compiled with /GS, this
454 # "security cookie verification" code must be included via bufferoverflow.lib.
455 !IF "$(WIN64)" == "define" && "$(CCTYPE)" == "SDK2003SP1"
456 LIBBASEFILES    = $(LIBBASEFILES) bufferoverflowU.lib
457 !ENDIF
458
459 LIBFILES        = $(LIBBASEFILES) $(LIBC)
460
461 #EXTRACFLAGS    = -nologo -GF -W4 -wd4127 -wd4706
462 EXTRACFLAGS     = -nologo -GF -W3
463 CFLAGS          = $(EXTRACFLAGS) $(INCLUDES) $(DEFINES) $(LOCDEFS) \
464                 $(PCHFLAGS) $(OPTIMIZE)
465 LINK_FLAGS      = -nologo -nodefaultlib $(LINK_DBG) \
466                 -libpath:"$(INST_COREDIR)" \
467                 -machine:$(PROCESSOR_ARCHITECTURE)
468 LIB_FLAGS       = -nologo
469 OBJOUT_FLAG     = -Fo
470 EXEOUT_FLAG     = -Fe
471
472 CFLAGS_O        = $(CFLAGS) $(BUILDOPT)
473
474 !IF "$(CCTYPE)" == "MSVC80" || "$(CCTYPE)" == "MSVC80FREE" || \
475     "$(CCTYPE)" == "MSVC90" || "$(CCTYPE)" == "MSVC90FREE" || \
476     "$(CCTYPE)" == "MSVC100" || "$(CCTYPE)" == "MSVC100FREE"
477 LINK_FLAGS      = $(LINK_FLAGS) "/manifestdependency:type='Win32' name='Microsoft.Windows.Common-Controls' version='6.0.0.0' processorArchitecture='*' publicKeyToken='6595b64144ccf1df' language='*'"
478 !ELSE
479 RSC_FLAGS       = -DINCLUDE_MANIFEST
480 !ENDIF
481
482
483 #################### do not edit below this line #######################
484 ############# NO USER-SERVICEABLE PARTS BEYOND THIS POINT ##############
485
486 o = .obj
487
488 #
489 # Rules
490 #
491
492 .SUFFIXES : .c $(o) .dll .lib .exe .rc .res
493
494 .c$(o):
495         $(CC) -c -I$(<D) $(CFLAGS_O) $(OBJOUT_FLAG)$@ $<
496
497 .y.c:
498         $(NOOP)
499
500 $(o).dll:
501         $(LINK32) -dll -subsystem:windows -implib:$(*B).lib -def:$(*B).def \
502             -out:$@ $(LINK_FLAGS) $(LIBFILES) $< $(LIBPERL)
503         $(EMBED_DLL_MANI)
504
505 .rc.res:
506         $(RSC) -i.. $(RSC_FLAGS) $<
507
508 #
509 # various targets
510
511 # makedef.pl must be updated if this changes, and this should normally
512 # only change when there is an incompatible revision of the public API.
513 PERLIMPLIB      = ..\perl513.lib
514 PERLSTATICLIB   = ..\perl513s.lib
515 PERLDLL         = ..\perl513.dll
516
517 MINIPERL        = ..\miniperl.exe
518 MINIDIR         = .\mini
519 PERLEXE         = ..\perl.exe
520 WPERLEXE        = ..\wperl.exe
521 PERLEXESTATIC   = ..\perl-static.exe
522 GLOBEXE         = ..\perlglob.exe
523 CONFIGPM        = ..\lib\Config.pm ..\lib\Config_heavy.pl
524 MINIMOD         = ..\lib\ExtUtils\Miniperl.pm
525 X2P             = ..\x2p\a2p.exe
526 GENUUDMAP       = ..\generate_uudmap.exe
527 !IF "$(BUILD_STATIC)" == "define"
528 PERLSTATIC      = static
529 !ELSE
530 PERLSTATIC      = 
531 !ENDIF
532
533 # Unicode data files generated by mktables
534 FIRSTUNIFILE     = ..\lib\unicore\Decomposition.pl
535 UNIDATAFILES     = ..\lib\unicore\Decomposition.pl \
536                    ..\lib\unicore\CombiningClass.pl ..\lib\unicore\Name.pl \
537                    ..\lib\unicore\Heavy.pl ..\lib\unicore\mktables.lst \
538                    ..\lib\unicore\TestProp.pl
539
540 # Directories of Unicode data files generated by mktables
541 UNIDATADIR1     = ..\lib\unicore\To
542 UNIDATADIR2     = ..\lib\unicore\lib
543
544 PERLEXE_MANIFEST= .\perlexe.manifest
545 PERLEXE_ICO     = .\perlexe.ico
546 PERLEXE_RES     = .\perlexe.res
547 PERLDLL_RES     =
548
549 # Nominate a target which causes extensions to be re-built
550 # This used to be $(PERLEXE), but at worst it is the .dll that they depend
551 # on and really only the interface - i.e. the .def file used to export symbols
552 # from the .dll
553 PERLDEP         = perldll.def
554
555 PL2BAT          = bin\pl2bat.pl
556 GLOBBAT         = bin\perlglob.bat
557
558 UTILS           =                       \
559                 ..\utils\h2ph           \
560                 ..\utils\splain         \
561                 ..\utils\dprofpp        \
562                 ..\utils\perlbug        \
563                 ..\utils\pl2pm          \
564                 ..\utils\c2ph           \
565                 ..\utils\pstruct        \
566                 ..\utils\h2xs           \
567                 ..\utils\perldoc        \
568                 ..\utils\perlivp        \
569                 ..\utils\libnetcfg      \
570                 ..\utils\enc2xs         \
571                 ..\utils\piconv         \
572                 ..\utils\config_data    \
573                 ..\utils\corelist       \
574                 ..\utils\cpan           \
575                 ..\utils\xsubpp         \
576                 ..\utils\prove          \
577                 ..\utils\ptar           \
578                 ..\utils\ptardiff       \
579                 ..\utils\ptargrep       \
580                 ..\utils\cpanp-run-perl \
581                 ..\utils\cpanp  \
582                 ..\utils\cpan2dist      \
583                 ..\utils\shasum         \
584                 ..\utils\instmodsh      \
585                 ..\x2p\find2perl        \
586                 ..\x2p\psed             \
587                 ..\x2p\s2p              \
588                 bin\exetype.pl          \
589                 bin\runperl.pl          \
590                 bin\pl2bat.pl           \
591                 bin\perlglob.pl         \
592                 bin\search.pl
593
594 MAKE            = nmake -nologo
595 MAKE_BARE       = nmake
596
597 !IF "$(WIN64)" == "define"
598 CFGSH_TMPL      = config.vc64
599 CFGH_TMPL       = config_H.vc64
600 !ELSE
601 CFGSH_TMPL      = config.vc
602 CFGH_TMPL       = config_H.vc
603 !ENDIF
604
605 XCOPY           = xcopy /f /r /i /d /y
606 RCOPY           = xcopy /f /r /i /e /d /y
607 NOOP            = @rem
608 NULL            =
609
610 DEL             = del
611
612 MICROCORE_SRC   =               \
613                 ..\av.c         \
614                 ..\deb.c        \
615                 ..\doio.c       \
616                 ..\doop.c       \
617                 ..\dump.c       \
618                 ..\globals.c    \
619                 ..\gv.c         \
620                 ..\mro.c        \
621                 ..\hv.c         \
622                 ..\locale.c     \
623                 ..\keywords.c   \
624                 ..\mathoms.c    \
625                 ..\mg.c         \
626                 ..\numeric.c    \
627                 ..\op.c         \
628                 ..\pad.c        \
629                 ..\perl.c       \
630                 ..\perlapi.c    \
631                 ..\perly.c      \
632                 ..\pp.c         \
633                 ..\pp_ctl.c     \
634                 ..\pp_hot.c     \
635                 ..\pp_pack.c    \
636                 ..\pp_sort.c    \
637                 ..\pp_sys.c     \
638                 ..\reentr.c     \
639                 ..\regcomp.c    \
640                 ..\regexec.c    \
641                 ..\run.c        \
642                 ..\scope.c      \
643                 ..\sv.c         \
644                 ..\taint.c      \
645                 ..\toke.c       \
646                 ..\universal.c  \
647                 ..\utf8.c       \
648                 ..\util.c
649
650 EXTRACORE_SRC   = $(EXTRACORE_SRC) perllib.c
651
652 !IF "$(PERL_MALLOC)" == "define"
653 EXTRACORE_SRC   = $(EXTRACORE_SRC) ..\malloc.c
654 !ENDIF
655
656 EXTRACORE_SRC   = $(EXTRACORE_SRC) ..\perlio.c
657
658 WIN32_SRC       =               \
659                 .\win32.c       \
660                 .\win32sck.c    \
661                 .\win32thread.c \
662                 .\fcrypt.c
663
664 # We need this for miniperl build unless we override canned 
665 # config.h #define building mini\*
666 #!IF "$(USE_PERLIO)" == "define"
667 WIN32_SRC       = $(WIN32_SRC) .\win32io.c
668 #!ENDIF
669
670
671 X2P_SRC         =               \
672                 ..\x2p\a2p.c    \
673                 ..\x2p\hash.c   \
674                 ..\x2p\str.c    \
675                 ..\x2p\util.c   \
676                 ..\x2p\walk.c
677
678 CORE_NOCFG_H    =               \
679                 ..\av.h         \
680                 ..\cop.h        \
681                 ..\cv.h         \
682                 ..\dosish.h     \
683                 ..\embed.h      \
684                 ..\form.h       \
685                 ..\gv.h         \
686                 ..\handy.h      \
687                 ..\hv.h         \
688                 ..\iperlsys.h   \
689                 ..\mg.h         \
690                 ..\nostdio.h    \
691                 ..\op.h         \
692                 ..\opcode.h     \
693                 ..\perl.h       \
694                 ..\perlapi.h    \
695                 ..\perlsdio.h   \
696                 ..\perlsfio.h   \
697                 ..\perly.h      \
698                 ..\pp.h         \
699                 ..\proto.h      \
700                 ..\regcomp.h    \
701                 ..\regexp.h     \
702                 ..\scope.h      \
703                 ..\sv.h         \
704                 ..\thread.h     \
705                 ..\unixish.h    \
706                 ..\utf8.h       \
707                 ..\util.h       \
708                 ..\warnings.h   \
709                 ..\XSUB.h       \
710                 ..\EXTERN.h     \
711                 ..\perlvars.h   \
712                 ..\intrpvar.h   \
713                 .\include\dirent.h      \
714                 .\include\netdb.h       \
715                 .\include\sys\socket.h  \
716                 .\win32.h
717
718 CORE_H          = $(CORE_NOCFG_H) .\config.h ..\git_version.h
719
720 UUDMAP_H        = ..\uudmap.h
721 BITCOUNT_H      = ..\bitcount.h
722
723 MICROCORE_OBJ   = $(MICROCORE_SRC:.c=.obj)
724 CORE_OBJ        = $(MICROCORE_OBJ) $(EXTRACORE_SRC:.c=.obj)
725 WIN32_OBJ       = $(WIN32_SRC:.c=.obj)
726 MINICORE_OBJ    = $(MICROCORE_OBJ:..\=.\mini\)  \
727                   $(MINIDIR)\miniperlmain$(o)   \
728                   $(MINIDIR)\perlio$(o)
729 MINIWIN32_OBJ   = $(WIN32_OBJ:.\=.\mini\)
730 MINI_OBJ        = $(MINICORE_OBJ) $(MINIWIN32_OBJ)
731 DLL_OBJ         = $(DYNALOADER)
732 X2P_OBJ         = $(X2P_SRC:.c=.obj)
733 GENUUDMAP_OBJ   = $(GENUUDMAP:.exe=.obj)
734
735 PERLDLL_OBJ     = $(CORE_OBJ)
736 PERLEXE_OBJ     = perlmain$(o)
737 PERLEXEST_OBJ   = perlmainst$(o)
738
739 PERLDLL_OBJ     = $(PERLDLL_OBJ) $(WIN32_OBJ) $(DLL_OBJ)
740
741 !IF "$(USE_SETARGV)" != ""
742 SETARGV_OBJ     = setargv$(o)
743 !ENDIF
744
745 !IF "$(ALL_STATIC)" == "define"
746 # some exclusions, unfortunately, until fixed:
747 #  - Win32 extension contains overlapped symbols with win32.c (BUG!)
748 #  - MakeMaker isn't capable enough for SDBM_File (smaller bug)
749 #  - Encode (encoding search algorithm relies on shared library?)
750 STATIC_EXT      = * !Win32 !SDBM_File !Encode
751 !ELSE
752 # specify static extensions here, for example:
753 #STATIC_EXT     = Cwd Compress/Raw/Zlib
754 STATIC_EXT      = Win32CORE
755 !ENDIF
756
757 DYNALOADER      = ..\DynaLoader$(o)
758
759 CFG_VARS        =                                       \
760                 "INST_DRV=$(INST_DRV)"                  \
761                 "INST_TOP=$(INST_TOP)"                  \
762                 "INST_VER=$(INST_VER)"                  \
763                 "INST_ARCH=$(INST_ARCH)"                \
764                 "archname=$(ARCHNAME)"                  \
765                 "cc=$(CC)"                              \
766                 "ld=$(LINK32)"                          \
767                 "ccflags=$(EXTRACFLAGS) $(OPTIMIZE:"=\") $(DEFINES) $(BUILDOPT)"        \
768                 "cf_email=$(EMAIL)"                     \
769                 "d_mymalloc=$(PERL_MALLOC)"             \
770                 "libs=$(LIBFILES)"                      \
771                 "incpath=$(CCINCDIR:"=\")"              \
772                 "libperl=$(PERLIMPLIB:..\=)"            \
773                 "libpth=$(CCLIBDIR:"=\");$(EXTRALIBDIRS:"=\")"  \
774                 "libc=$(LIBC)"                          \
775                 "make=$(MAKE_BARE)"                             \
776                 "static_ext=$(STATIC_EXT)"              \
777                 "usethreads=$(USE_ITHREADS)"            \
778                 "useithreads=$(USE_ITHREADS)"           \
779                 "usemultiplicity=$(USE_MULTI)"          \
780                 "useperlio=$(USE_PERLIO)"               \
781                 "uselargefiles=$(USE_LARGE_FILES)"      \
782                 "usesitecustomize=$(USE_SITECUST)"      \
783                 "LINK_FLAGS=$(LINK_FLAGS:"=\")"         \
784                 "optimize=$(OPTIMIZE:"=\")"
785
786 ICWD = -I..\dist\Cwd -I..\dist\Cwd\lib
787
788 #
789 # Top targets
790 #
791
792 all : .\config.h ..\git_version.h $(GLOBEXE) $(MINIMOD) $(CONFIGPM) \
793         $(UNIDATAFILES) MakePPPort $(PERLEXE) $(X2P) Extensions_nonxs Extensions $(PERLSTATIC)
794         @echo   Everything is up to date. '$(MAKE_BARE) test' to run test suite.
795
796 regnodes : ..\regnodes.h
797
798 ..\regcomp$(o) : ..\regnodes.h ..\regcharclass.h
799
800 ..\regexec$(o) : ..\regnodes.h ..\regcharclass.h
801
802 reonly : regnodes .\config.h ..\git_version.h $(GLOBEXE) $(MINIMOD) $(CONFIGPM) \
803         $(UNIDATAFILES) $(PERLEXE) $(X2P) Extensions_reonly
804         @echo   Perl and 're' are up to date.
805
806 static: $(PERLEXESTATIC)
807
808 #------------------------------------------------------------
809
810 $(GLOBEXE) : perlglob$(o)
811         $(LINK32) $(LINK_FLAGS) $(LIBFILES) -out:$@ -subsystem:$(SUBSYS) \
812             perlglob$(o) setargv$(o)
813         $(EMBED_EXE_MANI)
814
815 perlglob$(o)  : perlglob.c
816
817 config.w32 : $(CFGSH_TMPL)
818         copy $(CFGSH_TMPL) config.w32
819
820 .\config.h : $(CFGH_TMPL)
821         -del /f config.h
822         copy $(CFGH_TMPL) config.h
823
824 ..\git_version.h : $(MINIPERL) ..\make_patchnum.pl
825         cd ..
826         miniperl -Ilib make_patchnum.pl
827         cd win32
828
829 # make sure that we recompile perl.c if the git version changes
830 ..\perl$(o) : ..\git_version.h
831
832 ..\config.sh : config.w32 $(MINIPERL) config_sh.PL FindExt.pm
833         $(MINIPERL) -I..\lib config_sh.PL $(CFG_VARS) config.w32 > ..\config.sh
834
835 # this target is for when changes to the main config.sh happen.
836 # edit config.vc, then make perl in a minimal configuration (i.e. with MULTI,
837 # ITHREADS, IMP_SYS, LARGE_FILES, PERLIO and CRYPT off), then make this target
838 # to regenerate config_H.vc.
839 # repeat for config.vc64 and config_H.vc64 if you have a suitable build
840 # environment, otherwise hand-edit them to maintain the same differences with
841 # config.vc and config_H.vc as before.
842 # unfortunately, some further manual editing is also then required to restore all
843 # the special __GNUC__ handling that is otherwise lost.
844 regen_config_h:
845         $(MINIPERL) -I..\lib config_sh.PL $(CFG_VARS) $(CFGSH_TMPL) > ..\config.sh
846         $(MINIPERL) -I..\lib ..\configpm --chdir=..
847         -del /f $(CFGH_TMPL)
848         -$(MINIPERL) -I..\lib $(ICWD) config_h.PL "INST_VER=$(INST_VER)"
849         rename config.h $(CFGH_TMPL)
850
851 $(CONFIGPM) : $(MINIPERL) ..\config.sh config_h.PL ..\minimod.pl
852         $(MINIPERL) -I..\lib ..\configpm --chdir=..
853         if exist lib\* $(RCOPY) lib\*.* ..\lib\$(NULL)
854         $(XCOPY) ..\*.h $(COREDIR)\*.*
855         $(XCOPY) *.h $(COREDIR)\*.*
856         $(RCOPY) include $(COREDIR)\*.*
857         -$(MINIPERL) -I..\lib $(ICWD) config_h.PL "INST_VER=$(INST_VER)"
858         if errorlevel 1 $(MAKE) /$(MAKEFLAGS) $(CONFIGPM)
859
860 ..\lib\buildcustomize.pl: $(MINIPERL) ..\write_buildcustomize.pl
861         $(MINIPERL) -I..\lib ..\write_buildcustomize.pl .. >..\lib\buildcustomize.pl
862
863 $(MINIPERL) : $(MINIDIR) $(MINI_OBJ)
864         $(LINK32) -subsystem:console -out:$@ @<<
865         $(LINK_FLAGS) $(LIBFILES) $(MINI_OBJ)
866 <<
867         $(EMBED_EXE_MANI)
868
869 $(MINIDIR) :
870         if not exist "$(MINIDIR)" mkdir "$(MINIDIR)"
871
872 $(MINICORE_OBJ) : $(CORE_NOCFG_H)
873         $(CC) -c $(CFLAGS) -DPERL_EXTERNAL_GLOB -DPERL_IS_MINIPERL $(OBJOUT_FLAG)$@ ..\$(*F).c
874
875 $(MINIWIN32_OBJ) : $(CORE_NOCFG_H)
876         $(CC) -c $(CFLAGS) $(OBJOUT_FLAG)$@ $(*F).c
877
878 # -DPERL_IMPLICIT_SYS needs C++ for perllib.c
879 # This is the only file that depends on perlhost.h, vmem.h, and vdir.h
880 !IF "$(USE_IMP_SYS)" == "define"
881 perllib$(o)     : perllib.c .\perlhost.h .\vdir.h .\vmem.h
882         $(CC) -c -I. $(CFLAGS_O) $(CXX_FLAG) $(OBJOUT_FLAG)$@ perllib.c
883 !ENDIF
884
885 # 1. we don't want to rebuild miniperl.exe when config.h changes
886 # 2. we don't want to rebuild miniperl.exe with non-default config.h
887 # 3. we can't have miniperl.exe depend on git_version.h, as miniperl creates it
888 $(MINI_OBJ)     : $(CORE_NOCFG_H)
889
890 $(WIN32_OBJ)    : $(CORE_H)
891 $(CORE_OBJ)     : $(CORE_H)
892 $(DLL_OBJ)      : $(CORE_H)
893 $(X2P_OBJ)      : $(CORE_H)
894
895 perldll.def : $(MINIPERL) $(CONFIGPM) ..\global.sym ..\makedef.pl create_perllibst_h.pl
896         $(MINIPERL) -I..\lib create_perllibst_h.pl
897         $(MINIPERL) -I..\lib -w ..\makedef.pl PLATFORM=win32 $(OPTIMIZE) $(DEFINES) $(BUILDOPT) \
898             CCTYPE=$(CCTYPE) > perldll.def
899
900 $(PERLDLL): perldll.def $(PERLDLL_OBJ) $(PERLDLL_RES) Extensions_static
901         $(LINK32) -dll -def:perldll.def -base:0x28000000 -out:$@ @Extensions_static @<<
902                 $(LINK_FLAGS) $(DELAYLOAD) $(LIBFILES) $(PERLDLL_OBJ) $(PERLDLL_RES)
903 <<
904         $(EMBED_DLL_MANI)
905         $(XCOPY) $(PERLIMPLIB) $(COREDIR)
906
907 $(PERLSTATICLIB): Extensions_static
908         $(LIB32) $(LIB_FLAGS) -out:$@ @Extensions_static @<<
909                 $(PERLDLL_OBJ)
910 <<
911         $(XCOPY) $(PERLSTATICLIB) $(COREDIR)
912
913 $(PERLEXE_RES): perlexe.rc $(PERLEXE_MANIFEST) $(PERLEXE_ICO)
914
915 $(MINIMOD) : $(MINIPERL) ..\minimod.pl
916         cd ..
917         miniperl minimod.pl > lib\ExtUtils\Miniperl.pm
918         cd win32
919
920 ..\x2p\a2p$(o) : ..\x2p\a2p.c
921         $(CC) -I..\x2p $(CFLAGS) $(OBJOUT_FLAG)$@ -c ..\x2p\a2p.c
922
923 ..\x2p\hash$(o) : ..\x2p\hash.c
924         $(CC) -I..\x2p  $(CFLAGS) $(OBJOUT_FLAG)$@ -c ..\x2p\hash.c
925
926 ..\x2p\str$(o) : ..\x2p\str.c
927         $(CC) -I..\x2p  $(CFLAGS) $(OBJOUT_FLAG)$@ -c ..\x2p\str.c
928
929 ..\x2p\util$(o) : ..\x2p\util.c
930         $(CC) -I..\x2p  $(CFLAGS) $(OBJOUT_FLAG)$@ -c ..\x2p\util.c
931
932 ..\x2p\walk$(o) : ..\x2p\walk.c
933         $(CC) -I..\x2p  $(CFLAGS) $(OBJOUT_FLAG)$@ -c ..\x2p\walk.c
934
935 $(X2P) : $(MINIPERL) $(X2P_OBJ) Extensions
936         $(MINIPERL) -I..\lib ..\x2p\find2perl.PL
937         $(MINIPERL) -I..\lib ..\x2p\s2p.PL
938         $(LINK32) -subsystem:console -out:$@ @<<
939                 $(LINK_FLAGS) $(LIBFILES) $(X2P_OBJ)
940 <<
941         $(EMBED_EXE_MANI)
942
943 $(MINIDIR)\globals$(o) : $(UUDMAP_H) $(BITCOUNT_H)
944
945 $(UUDMAP_H) : $(BITCOUNT_H)
946
947 $(BITCOUNT_H) : $(GENUUDMAP)
948         $(GENUUDMAP) $(UUDMAP_H) $(BITCOUNT_H)
949
950 $(GENUUDMAP) : $(GENUUDMAP_OBJ)
951         $(LINK32) -subsystem:console -out:$@ @<<
952                 $(LINK_FLAGS) $(LIBFILES) $(GENUUDMAP_OBJ)
953 <<
954         $(EMBED_EXE_MANI)
955
956 perlmain.c : runperl.c
957         copy runperl.c perlmain.c
958
959 perlmain$(o) : perlmain.c
960         $(CC) $(CFLAGS_O:-DPERLDLL=-UPERLDLL) $(OBJOUT_FLAG)$@ -c perlmain.c
961
962 perlmainst.c : runperl.c
963         copy runperl.c perlmainst.c
964
965 perlmainst$(o) : perlmainst.c
966         $(CC) $(CFLAGS_O) $(OBJOUT_FLAG)$@ -c perlmainst.c
967
968 $(PERLEXE): $(PERLDLL) $(CONFIGPM) $(PERLEXE_OBJ) $(PERLEXE_RES)
969         $(LINK32) -subsystem:console -out:$@ $(LINK_FLAGS) \
970             $(LIBFILES) $(PERLEXE_OBJ) $(SETARGV_OBJ) $(PERLIMPLIB) $(PERLEXE_RES)
971         $(EMBED_EXE_MANI)
972         copy $(PERLEXE) $(WPERLEXE)
973         $(MINIPERL) -I..\lib bin\exetype.pl $(WPERLEXE) WINDOWS
974
975 $(PERLEXESTATIC): $(PERLSTATICLIB) $(CONFIGPM) $(PERLEXEST_OBJ) $(PERLEXE_RES)
976         $(LINK32) -subsystem:console -out:$@ $(LINK_FLAGS) \
977             @Extensions_static $(PERLSTATICLIB) /PDB:NONE \
978             $(LIBFILES) $(PERLEXEST_OBJ) $(SETARGV_OBJ) $(PERLEXE_RES)
979         $(EMBED_EXE_MANI)
980
981 MakePPPort: $(MINIPERL) $(CONFIGPM) Extensions_nonxs
982         $(MINIPERL) -I..\lib $(ICWD) ..\mkppport
983
984 #-------------------------------------------------------------------------------
985 # There's no direct way to mark a dependency on
986 # DynaLoader.pm, so this will have to do
987 Extensions: ..\make_ext.pl ..\lib\buildcustomize.pl $(PERLDEP) $(CONFIGPM) $(DYNALOADER)
988         $(XCOPY) ..\*.h $(COREDIR)\*.*
989         $(MINIPERL) -I..\lib ..\make_ext.pl "MAKE=$(MAKE)" --dir=$(CPANDIR) --dir=$(DISTDIR) --dir=$(EXTDIR) --dynamic
990
991 Extensions_reonly: ..\make_ext.pl ..\lib\buildcustomize.pl $(PERLDEP) $(CONFIGPM) $(DYNALOADER)
992         $(XCOPY) ..\*.h $(COREDIR)\*.*
993         $(MINIPERL) -I..\lib ..\make_ext.pl "MAKE=$(MAKE)" --dir=$(CPANDIR) --dir=$(DISTDIR) --dir=$(EXTDIR) --dynamic +re
994
995 Extensions_static : ..\make_ext.pl ..\lib\buildcustomize.pl list_static_libs.pl $(PERLDEP) $(CONFIGPM)
996         $(XCOPY) ..\*.h $(COREDIR)\*.*
997         $(MINIPERL) -I..\lib ..\make_ext.pl "MAKE=$(MAKE)" --dir=$(CPANDIR) --dir=$(DISTDIR) --dir=$(EXTDIR) --static
998         $(MINIPERL) -I..\lib list_static_libs.pl > Extensions_static
999
1000 Extensions_nonxs: ..\make_ext.pl ..\lib\buildcustomize.pl $(PERLDEP) $(CONFIGPM)
1001         $(XCOPY) ..\*.h $(COREDIR)\*.*
1002         $(MINIPERL) -I..\lib ..\make_ext.pl "MAKE=$(MAKE)" --dir=$(CPANDIR) --dir=$(DISTDIR) --dir=$(EXTDIR) --nonxs
1003
1004 $(DYNALOADER) : ..\make_ext.pl ..\lib\buildcustomize.pl $(PERLDEP) $(CONFIGPM) Extensions_nonxs
1005         $(XCOPY) ..\*.h $(COREDIR)\*.*
1006         $(MINIPERL) -I..\lib ..\make_ext.pl "MAKE=$(MAKE)" --dir=$(EXTDIR) --dynaloader
1007
1008 Extensions_clean: 
1009         -if exist $(MINIPERL) $(MINIPERL) -I..\lib ..\make_ext.pl "MAKE=$(MAKE)" --dir=$(CPANDIR) --dir=$(DISTDIR) --dir=$(EXTDIR) --all --target=clean
1010
1011 Extensions_realclean: 
1012         -if exist $(MINIPERL) $(MINIPERL) -I..\lib ..\make_ext.pl "MAKE=$(MAKE)" --dir=$(CPANDIR) --dir=$(DISTDIR) --dir=$(EXTDIR) --all --target=realclean
1013
1014 #-------------------------------------------------------------------------------
1015
1016 doc: $(PERLEXE) ..\pod\perltoc.pod
1017         $(PERLEXE) -I..\lib ..\installhtml --podroot=.. --htmldir=$(HTMLDIR) \
1018             --podpath=pod:lib:ext:utils --htmlroot="file://$(INST_HTML::=|)" \
1019             --libpod=perlfunc:perlguts:perlvar:perlrun:perlop --recurse
1020
1021 # Note that this next section is parsed (and regenerated) by pod/buildtoc
1022 # so please check that script before making structural changes here
1023
1024 utils: $(PERLEXE) $(X2P)
1025         cd ..\utils
1026         $(MAKE) PERL=$(MINIPERL)
1027         cd ..\pod
1028         copy ..\README.aix      ..\pod\perlaix.pod
1029         copy ..\README.amiga    ..\pod\perlamiga.pod
1030         copy ..\README.beos     ..\pod\perlbeos.pod
1031         copy ..\README.bs2000   ..\pod\perlbs2000.pod
1032         copy ..\README.ce       ..\pod\perlce.pod
1033         copy ..\README.cn       ..\pod\perlcn.pod
1034         copy ..\README.cygwin   ..\pod\perlcygwin.pod
1035         copy ..\README.dgux     ..\pod\perldgux.pod
1036         copy ..\README.dos      ..\pod\perldos.pod
1037         copy ..\README.epoc     ..\pod\perlepoc.pod
1038         copy ..\README.freebsd  ..\pod\perlfreebsd.pod
1039         copy ..\README.haiku    ..\pod\perlhaiku.pod
1040         copy ..\README.hpux     ..\pod\perlhpux.pod
1041         copy ..\README.hurd     ..\pod\perlhurd.pod
1042         copy ..\README.irix     ..\pod\perlirix.pod
1043         copy ..\README.jp       ..\pod\perljp.pod
1044         copy ..\README.ko       ..\pod\perlko.pod
1045         copy ..\README.linux    ..\pod\perllinux.pod
1046         copy ..\README.macos    ..\pod\perlmacos.pod
1047         copy ..\README.macosx   ..\pod\perlmacosx.pod
1048         copy ..\README.mpeix    ..\pod\perlmpeix.pod
1049         copy ..\README.netware  ..\pod\perlnetware.pod
1050         copy ..\README.openbsd  ..\pod\perlopenbsd.pod
1051         copy ..\README.os2      ..\pod\perlos2.pod
1052         copy ..\README.os390    ..\pod\perlos390.pod
1053         copy ..\README.os400    ..\pod\perlos400.pod
1054         copy ..\README.plan9    ..\pod\perlplan9.pod
1055         copy ..\README.qnx      ..\pod\perlqnx.pod
1056         copy ..\README.riscos   ..\pod\perlriscos.pod
1057         copy ..\README.solaris  ..\pod\perlsolaris.pod
1058         copy ..\README.symbian  ..\pod\perlsymbian.pod
1059         copy ..\README.tru64    ..\pod\perltru64.pod
1060         copy ..\README.tw       ..\pod\perltw.pod
1061         copy ..\README.uts      ..\pod\perluts.pod
1062         copy ..\README.vmesa    ..\pod\perlvmesa.pod
1063         copy ..\README.vos      ..\pod\perlvos.pod
1064         copy ..\README.win32    ..\pod\perlwin32.pod
1065         copy ..\pod\perldelta.pod ..\pod\perl51310delta.pod
1066         cd ..\win32
1067         $(PERLEXE) $(PL2BAT) $(UTILS)
1068         $(PERLEXE) $(ICWD) ..\autodoc.pl ..
1069         $(PERLEXE) $(ICWD) ..\pod\perlmodlib.pl -q
1070
1071 ..\pod\perltoc.pod: $(PERLEXE) Extensions Extensions_nonxs
1072         $(PERLEXE) -f ..\pod\buildtoc --build-toc -q
1073
1074 # Note that the pod cleanup in this next section is parsed (and regenerated
1075 # by pod/buildtoc so please check that script before making changes here
1076
1077 distclean: realclean
1078         -del /f $(MINIPERL) $(PERLEXE) $(PERLDLL) $(GLOBEXE) \
1079                 $(PERLIMPLIB) ..\miniperl.lib $(MINIMOD) \
1080                 $(PERLEXESTATIC) $(PERLSTATICLIB)
1081         -del /f *.def *.map
1082         -del /f $(LIBDIR)\Encode.pm $(LIBDIR)\encoding.pm $(LIBDIR)\Errno.pm
1083         -del /f $(LIBDIR)\Config.pod $(LIBDIR)\POSIX.pod $(LIBDIR)\threads.pm
1084         -del /f $(LIBDIR)\.exists $(LIBDIR)\attributes.pm $(LIBDIR)\DynaLoader.pm
1085         -del /f $(LIBDIR)\Fcntl.pm $(LIBDIR)\IO.pm $(LIBDIR)\Opcode.pm
1086         -del /f $(LIBDIR)\ops.pm $(LIBDIR)\Safe.pm
1087         -del /f $(LIBDIR)\SDBM_File.pm $(LIBDIR)\Socket.pm $(LIBDIR)\POSIX.pm
1088         -del /f $(LIBDIR)\B.pm $(LIBDIR)\O.pm $(LIBDIR)\re.pm
1089         -del /f $(LIBDIR)\File\Glob.pm
1090         -del /f $(LIBDIR)\Storable.pm
1091         -del /f $(LIBDIR)\Sys\Hostname.pm
1092         -del /f $(LIBDIR)\Time\HiRes.pm
1093         -del /f $(LIBDIR)\Unicode\Normalize.pm
1094         -del /f $(LIBDIR)\Math\BigInt\FastCalc.pm
1095         -del /f $(LIBDIR)\Win32.pm
1096         -del /f $(LIBDIR)\Win32CORE.pm
1097         -del /f $(LIBDIR)\Win32API\File.pm
1098         -del /f $(LIBDIR)\Win32API\File\cFile.pc
1099         -del /f $(LIBDIR)\buildcustomize.pl
1100         -del /f $(DISTDIR)\XSLoader\XSLoader.pm
1101         -if exist $(LIBDIR)\App rmdir /s /q $(LIBDIR)\App
1102         -if exist $(LIBDIR)\Archive rmdir /s /q $(LIBDIR)\Archive
1103         -if exist $(LIBDIR)\Attribute rmdir /s /q $(LIBDIR)\Attribute
1104         -if exist $(LIBDIR)\autodie rmdir /s /q $(LIBDIR)\autodie
1105         -if exist $(LIBDIR)\B rmdir /s /q $(LIBDIR)\B
1106         -if exist $(LIBDIR)\CGI rmdir /s /q $(LIBDIR)\CGI
1107         -if exist $(LIBDIR)\CPAN rmdir /s /q $(LIBDIR)\CPAN
1108         -if exist $(LIBDIR)\CPANPLUS rmdir /s /q $(LIBDIR)\CPANPLUS
1109         -if exist $(LIBDIR)\Compress rmdir /s /q $(LIBDIR)\Compress
1110         -if exist $(LIBDIR)\Data rmdir /s /q $(LIBDIR)\Data
1111         -if exist $(LIBDIR)\Devel rmdir /s /q $(LIBDIR)\Devel
1112         -if exist $(LIBDIR)\Digest rmdir /s /q $(LIBDIR)\Digest
1113         -if exist $(LIBDIR)\Encode rmdir /s /q $(LIBDIR)\Encode
1114         -if exist $(LIBDIR)\encoding rmdir /s /q $(LIBDIR)\encoding
1115         -if exist $(LIBDIR)\ExtUtils\CBuilder rmdir /s /q $(LIBDIR)\ExtUtils\CBuilder
1116         -if exist $(LIBDIR)\ExtUtils\Command rmdir /s /q $(LIBDIR)\ExtUtils\Command
1117         -if exist $(LIBDIR)\ExtUtils\Constant rmdir /s /q $(LIBDIR)\ExtUtils\Constant
1118         -if exist $(LIBDIR)\ExtUtils\Liblist rmdir /s /q $(LIBDIR)\ExtUtils\Liblist
1119         -if exist $(LIBDIR)\ExtUtils\MakeMaker rmdir /s /q $(LIBDIR)\ExtUtils\MakeMaker
1120         -if exist $(LIBDIR)\File\Spec rmdir /s /q $(LIBDIR)\File\Spec
1121         -if exist $(LIBDIR)\Filter rmdir /s /q $(LIBDIR)\Filter
1122         -if exist $(LIBDIR)\Hash rmdir /s /q $(LIBDIR)\Hash
1123         -if exist $(LIBDIR)\I18N\LangTags rmdir /s /q $(LIBDIR)\I18N\LangTags
1124         -if exist $(LIBDIR)\inc rmdir /s /q $(LIBDIR)\inc
1125         -if exist $(LIBDIR)\Module\Pluggable rmdir /s /q $(LIBDIR)\Module\Pluggable
1126         -if exist $(LIBDIR)\IO rmdir /s /q $(LIBDIR)\IO
1127         -if exist $(LIBDIR)\IPC rmdir /s /q $(LIBDIR)\IPC
1128         -if exist $(LIBDIR)\List rmdir /s /q $(LIBDIR)\List
1129         -if exist $(LIBDIR)\Locale rmdir /s /q $(LIBDIR)\Locale
1130         -if exist $(LIBDIR)\Log rmdir /s /q $(LIBDIR)\Log
1131         -if exist $(LIBDIR)\Math rmdir /s /q $(LIBDIR)\Math
1132         -if exist $(LIBDIR)\Memoize rmdir /s /q $(LIBDIR)\Memoize
1133         -if exist $(LIBDIR)\MIME rmdir /s /q $(LIBDIR)\MIME
1134         -if exist $(LIBDIR)\Module rmdir /s /q $(LIBDIR)\Module
1135         -if exist $(LIBDIR)\mro rmdir /s /q $(LIBDIR)\mro
1136         -if exist $(LIBDIR)\Net\FTP rmdir /s /q $(LIBDIR)\Net\FTP
1137         -if exist $(LIBDIR)\Object rmdir /s /q $(LIBDIR)\Object
1138         -if exist $(LIBDIR)\Package rmdir /s /q $(LIBDIR)\Package
1139         -if exist $(LIBDIR)\Params rmdir /s /q $(LIBDIR)\Params
1140         -if exist $(LIBDIR)\Parse rmdir /s /q $(LIBDIR)\Parse
1141         -if exist $(LIBDIR)\PerlIO rmdir /s /q $(LIBDIR)\PerlIO
1142         -if exist $(LIBDIR)\Pod\Perldoc rmdir /s /q $(LIBDIR)\Pod\Perldoc
1143         -if exist $(LIBDIR)\Pod\Simple rmdir /s /q $(LIBDIR)\Pod\Simple
1144         -if exist $(LIBDIR)\Pod\Text rmdir /s /q $(LIBDIR)\Pod\Text
1145         -if exist $(LIBDIR)\re rmdir /s /q $(LIBDIR)\re
1146         -if exist $(LIBDIR)\Scalar rmdir /s /q $(LIBDIR)\Scalar
1147         -if exist $(LIBDIR)\Sys rmdir /s /q $(LIBDIR)\Sys
1148         -if exist $(LIBDIR)\TAP rmdir /s /q $(LIBDIR)\TAP
1149         -if exist $(LIBDIR)\Term\UI rmdir /s /q $(LIBDIR)\Term\UI
1150         -if exist $(LIBDIR)\Test rmdir /s /q $(LIBDIR)\Test
1151         -if exist $(LIBDIR)\Thread rmdir /s /q $(LIBDIR)\Thread
1152         -if exist $(LIBDIR)\threads rmdir /s /q $(LIBDIR)\threads
1153         -if exist $(LIBDIR)\Tie\Hash rmdir /s /q $(LIBDIR)\Tie\Hash
1154         -if exist $(LIBDIR)\Unicode\Collate rmdir /s /q $(LIBDIR)\Unicode\Collate
1155         -if exist $(LIBDIR)\XS rmdir /s /q $(LIBDIR)\XS
1156         -if exist $(LIBDIR)\Win32API rmdir /s /q $(LIBDIR)\Win32API
1157         -cd $(PODDIR) && del /f *.html *.bat \
1158             perl51310delta.pod perlaix.pod perlamiga.pod perlapi.pod \
1159             perlbeos.pod perlbs2000.pod perlce.pod perlcn.pod \
1160             perlcygwin.pod perldgux.pod perldos.pod perlepoc.pod \
1161             perlfreebsd.pod perlhaiku.pod perlhpux.pod perlhurd.pod \
1162             perlintern.pod perlirix.pod perljp.pod perlko.pod perllinux.pod \
1163             perlmacos.pod perlmacosx.pod perlmodlib.pod perlmpeix.pod \
1164             perlnetware.pod perlopenbsd.pod perlos2.pod perlos390.pod \
1165             perlos400.pod perlplan9.pod perlqnx.pod perlriscos.pod \
1166             perlsolaris.pod perlsymbian.pod perltoc.pod perltru64.pod \
1167             perltw.pod perluniprops.pod perluts.pod perlvmesa.pod \
1168             perlvos.pod perlwin32.pod
1169         -cd ..\utils && del /f h2ph splain perlbug pl2pm c2ph pstruct h2xs \
1170             perldoc perlivp dprofpp libnetcfg enc2xs piconv cpan *.bat \
1171             xsubpp instmodsh prove ptar ptardiff ptargrep cpanp-run-perl cpanp cpan2dist shasum corelist config_data
1172         -cd ..\x2p && del /f find2perl s2p psed *.bat
1173         -del /f ..\config.sh perlmain.c dlutils.c config.h.new \
1174                 perlmainst.c
1175         -del /f $(CONFIGPM)
1176         -del /f ..\lib\Config_git.pl
1177         -del /f bin\*.bat
1178         -del /f perllibst.h
1179         -del /f $(PERLEXE_RES) perl.base
1180         -cd .. && del /s *.lib *.map *.pdb *.ilk *.bs *$(o) .exists pm_to_blib ppport.h
1181         -cd $(EXTDIR) && del /s *.def Makefile Makefile.old
1182         -cd $(DISTDIR) && del /s *.def Makefile Makefile.old
1183         -cd $(CPANDIR) && del /s *.def Makefile Makefile.old
1184         -if exist $(AUTODIR) rmdir /s /q $(AUTODIR)
1185         -if exist $(COREDIR) rmdir /s /q $(COREDIR)
1186         -if exist pod2htmd.tmp del pod2htmd.tmp
1187         -if exist pod2htmi.tmp del pod2htmi.tmp
1188         -if exist $(HTMLDIR) rmdir /s /q $(HTMLDIR)
1189         -del /f ..\t\test_state
1190
1191 install : all installbare installhtml
1192
1193 installbare : utils ..\pod\perltoc.pod
1194         $(PERLEXE) ..\installperl
1195         if exist $(WPERLEXE) $(XCOPY) $(WPERLEXE) $(INST_BIN)\*.*
1196         if exist $(PERLEXESTATIC) $(XCOPY) $(PERLEXESTATIC) $(INST_BIN)\*.*
1197         $(XCOPY) $(GLOBEXE) $(INST_BIN)\*.*
1198         if exist ..\perl*.pdb $(XCOPY) ..\perl*.pdb $(INST_BIN)\*.*
1199         if exist ..\x2p\a2p.pdb $(XCOPY) ..\x2p\a2p.pdb $(INST_BIN)\*.*
1200         $(XCOPY) bin\*.bat $(INST_SCRIPT)\*.*
1201
1202 installhtml : doc
1203         $(RCOPY) $(HTMLDIR)\*.* $(INST_HTML)\*.*
1204
1205 inst_lib : $(CONFIGPM)
1206         $(RCOPY) ..\lib $(INST_LIB)\*.*
1207
1208 $(UNIDATAFILES) ..\pod\perluniprops.pod : $(MINIPERL) $(CONFIGPM) ..\lib\unicore\mktables Extensions_nonxs
1209         cd ..\lib\unicore && \
1210         ..\$(MINIPERL) -I.. -I..\..\dist\Cwd\lib -I..\..\dist\Cwd mktables -P ..\..\pod -maketest -makelist -p -check $@ $(FIRSTUNIFILE)
1211
1212 minitest : $(MINIPERL) $(GLOBEXE) $(CONFIGPM) utils $(UNIDATAFILES)
1213         $(XCOPY) $(MINIPERL) ..\t\$(NULL)
1214         if exist ..\t\perl.exe del /f ..\t\perl.exe
1215         rename ..\t\miniperl.exe perl.exe
1216         $(XCOPY) $(GLOBEXE) ..\t\$(NULL)
1217         attrib -r ..\t\*.*
1218         cd ..\t && \
1219         $(MINIPERL) -I..\lib harness base/*.t comp/*.t cmd/*.t io/*.t op/*.t pragma/*.t
1220
1221 test-prep : all utils ../pod/perltoc.pod
1222         $(XCOPY) $(PERLEXE) ..\t\$(NULL)
1223         $(XCOPY) $(PERLDLL) ..\t\$(NULL)
1224         $(XCOPY) $(GLOBEXE) ..\t\$(NULL)
1225         set PERL_STATIC_EXT=$(STATIC_EXT)
1226
1227 test : test-prep
1228         cd ..\t
1229         $(PERLEXE) -I..\lib harness $(TEST_SWITCHES) $(TEST_FILES)
1230         cd ..\win32
1231
1232 test-reonly : reonly utils
1233         $(XCOPY) $(PERLEXE) ..\t\$(NULL)
1234         $(XCOPY) $(PERLDLL) ..\t\$(NULL)
1235         $(XCOPY) $(GLOBEXE) ..\t\$(NULL)
1236         cd ..\t
1237         $(PERLEXE) -I..\lib harness $(OPT) -re \bre\\/ $(EXTRA)
1238         cd ..\win32
1239
1240 regen :
1241         cd ..
1242         regen.pl
1243         cd win32
1244
1245 test-notty : test-prep
1246         set PERL_SKIP_TTY_TEST=1
1247         cd ..\t
1248         $(PERLEXE) -I..\lib harness $(TEST_SWITCHES) $(TEST_FILES)
1249         cd ..\win32
1250
1251 _test : 
1252        $(XCOPY) $(PERLEXE) ..\t\$(NULL)
1253        $(XCOPY) $(PERLDLL) ..\t\$(NULL)
1254        $(XCOPY) $(GLOBEXE) ..\t\$(NULL)
1255        cd ..\t
1256        $(PERLEXE) -I..\lib harness $(TEST_SWITCHES) $(TEST_FILES)
1257        cd ..\win32
1258
1259 _clean :
1260         -@$(DEL) miniperlmain$(o)
1261         -@$(DEL) $(MINIPERL)
1262         -@$(DEL) perlglob$(o)
1263         -@$(DEL) perlmain$(o)
1264         -@$(DEL) perlmainst$(o)
1265         -@$(DEL) config.w32
1266         -@$(DEL) config.h
1267         -@$(DEL) ..\git_version.h
1268         -@$(DEL) $(GLOBEXE)
1269         -@$(DEL) $(PERLEXE)
1270         -@$(DEL) $(WPERLEXE)
1271         -@$(DEL) $(PERLEXESTATIC)
1272         -@$(DEL) $(PERLSTATICLIB)
1273         -@$(DEL) $(PERLDLL)
1274         -@$(DEL) $(CORE_OBJ)
1275         -@$(DEL) $(GENUUDMAP) $(GENUUDMAP_OBJ) $(UUDMAP_H) $(BITCOUNT_H)
1276         -if exist $(MINIDIR) rmdir /s /q $(MINIDIR)
1277         -if exist $(UNIDATADIR1) rmdir /s /q $(UNIDATADIR1)
1278         -if exist $(UNIDATADIR2) rmdir /s /q $(UNIDATADIR2)
1279         -@$(DEL) $(UNIDATAFILES)
1280         -@$(DEL) $(WIN32_OBJ)
1281         -@$(DEL) $(DLL_OBJ)
1282         -@$(DEL) $(X2P_OBJ)
1283         -@$(DEL) ..\*$(o) ..\*.lib ..\*.exp *$(o) *.lib *.exp *.res
1284         -@$(DEL) ..\t\*.exe ..\t\*.dll ..\t\*.bat
1285         -@$(DEL) ..\x2p\*.exe ..\x2p\*.bat
1286         -@$(DEL) *.ilk
1287         -@$(DEL) *.pdb
1288         -@$(DEL) Extensions_static
1289
1290 clean : Extensions_clean _clean
1291
1292 realclean : Extensions_realclean _clean
1293
1294 # Handy way to run perlbug -ok without having to install and run the
1295 # installed perlbug. We don't re-run the tests here - we trust the user.
1296 # Please *don't* use this unless all tests pass.
1297 # If you want to report test failures, use "nmake nok" instead.
1298 ok: utils
1299         $(PERLEXE) -I..\lib ..\utils\perlbug -ok -s "(UNINSTALLED)"
1300
1301 okfile: utils
1302         $(PERLEXE) -I..\lib ..\utils\perlbug -ok -s "(UNINSTALLED)" -F perl.ok
1303
1304 nok: utils
1305         $(PERLEXE) -I..\lib ..\utils\perlbug -nok -s "(UNINSTALLED)"
1306
1307 nokfile: utils
1308         $(PERLEXE) -I..\lib ..\utils\perlbug -nok -s "(UNINSTALLED)" -F perl.nok