a8d1af14ab149d9ab78c3a54bce8814c17fe1ca2
[perl.git] / win32 / Makefile
1 #
2 # Makefile to build perl on Windows NT using Microsoft NMAKE.
3 # Supported compilers:
4 #       Visual C++ 2.0 through 7.0 (and possibly newer versions)
5 #       MS Platform SDK 64-bit compiler and tools
6 #
7 # This is set up to build a perl.exe that runs off a shared library
8 # (perl59.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 # Comment this out if you DON'T want your perl installation to be versioned.
28 # This means that the new installation will overwrite any files from the
29 # old installation at the same INST_TOP location.  Leaving it enabled is
30 # the safest route, as perl adds the extra version directory to all the
31 # locations it installs files to.  If you disable it, an alternative
32 # versioned installation can be obtained by setting INST_TOP above to a
33 # path that includes an arbitrary version string.
34 #
35 #INST_VER       = \5.9.5
36
37 #
38 # Comment this out if you DON'T want your perl installation to have
39 # architecture specific components.  This means that architecture-
40 # specific files will be installed along with the architecture-neutral
41 # files.  Leaving it enabled is safer and more flexible, in case you
42 # want to build multiple flavors of perl and install them together in
43 # the same location.  Commenting it out gives you a simpler
44 # installation that is easier to understand for beginners.
45 #
46 #INST_ARCH      = \$(ARCHNAME)
47
48 #
49 # Uncomment this if you want perl to run
50 #       $Config{sitelibexp}\sitecustomize.pl
51 # before anything else.  This script can then be set up, for example,
52 # to add additional entries to @INC.
53 #
54 #USE_SITECUST   = define
55
56 #
57 # uncomment to enable multiple interpreters.  This is need for fork()
58 # emulation and for thread support.
59 #
60 USE_MULTI       = define
61
62 #
63 # Beginnings of interpreter cloning/threads; now reasonably complete.
64 # This should be enabled to get the fork() emulation.  This needs
65 # USE_MULTI as well.
66 #
67 USE_ITHREADS    = define
68
69 #
70 # uncomment to enable the implicit "host" layer for all system calls
71 # made by perl.  This needs USE_MULTI above.  This is also needed to
72 # get fork().
73 #
74 USE_IMP_SYS     = define
75
76 #
77 # Comment out next assign to disable perl's I/O subsystem and use compiler's 
78 # stdio for IO - depending on your compiler vendor and run time library you may 
79 # then get a number of fails from make test i.e. bugs - complain to them not us ;-). 
80 # You will also be unable to take full advantage of perl5.8's support for multiple 
81 # encodings and may see lower IO performance. You have been warned.
82 USE_PERLIO      = define
83
84 #
85 # Comment this out if you don't want to enable large file support for
86 # some reason.  Should normally only be changed to maintain compatibility
87 # with an older release of perl.
88 USE_LARGE_FILES = define
89
90 #
91 # uncomment exactly one of the following
92 #
93 # Visual C++ 2.x
94 #CCTYPE         = MSVC20
95 # Visual C++ > 2.x and < 6.x
96 #CCTYPE         = MSVC
97 # Visual C++ 6.x (aka Visual C++ 98)
98 CCTYPE          = MSVC60
99 # Visual C++ Toolkit 2003 (aka Visual C++ 7.x) (free command-line tools)
100 #CCTYPE         = MSVC70FREE
101 # Visual C++ .NET 2003 (aka Visual C++ 7.x) (full version)
102 #CCTYPE         = MSVC70
103 # Visual C++ 2005 Express Edition (aka Visual C++ 8.x) (free version)
104 #CCTYPE         = MSVC80FREE
105 # Visual C++ 2005 (aka Visual C++ 8.x) (full version)
106 #CCTYPE         = MSVC80
107
108 #
109 # uncomment next line if you want debug version of perl (big,slow)
110 # If not enabled, we automatically try to use maximum optimization
111 # with all compilers that are known to have a working optimizer.
112 #
113 #CFG            = Debug
114
115 #
116 # uncomment to enable use of PerlCRT.DLL when using the Visual C compiler.
117 # It has patches that fix known bugs in older versions of MSVCRT.DLL.
118 # This currently requires VC 5.0 with Service Pack 3 or later.
119 # Get it from CPAN at http://www.cpan.org/authors/id/D/DO/DOUGL/
120 # and follow the directions in the package to install.
121 #
122 # Not recommended if you have VC 6.x and you're not running Windows 9x.
123 #
124 #USE_PERLCRT    = define
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 # if you want to have the crypt() builtin function implemented, leave this or
137 # CRYPT_LIB uncommented.  The fcrypt.c file named here contains a suitable
138 # version of des_fcrypt().
139 #
140 CRYPT_SRC       = fcrypt.c
141
142 #
143 # if you didn't set CRYPT_SRC and if you have des_fcrypt() available in a
144 # library, uncomment this, and make sure the library exists (see README.win32)
145 # Specify the full pathname of the library.
146 #
147 #CRYPT_LIB      = fcrypt.lib
148
149 #
150 # set this if you wish to use perl's malloc
151 # WARNING: Turning this on/off WILL break binary compatibility with extensions
152 # you may have compiled with/without it.  Be prepared to recompile all
153 # extensions if you change the default.  Currently, this cannot be enabled
154 # if you ask for USE_IMP_SYS above.
155 #
156 #PERL_MALLOC    = define
157
158 #
159 # set this to enable debugging mstats
160 # This must be enabled to use the Devel::Peek::mstat() function.  This cannot
161 # be enabled without PERL_MALLOC as well.
162 #
163 #DEBUG_MSTATS   = define
164
165 #
166 #
167 # set the install locations of the compiler include/libraries
168 # Running VCVARS32.BAT is *required* when using Visual C.
169 # Some versions of Visual C don't define MSVCDIR in the environment,
170 # so you may have to set CCHOME explicitly (spaces in the path name should
171 # not be quoted)
172 #
173 #CCHOME         = f:\msvc20
174 CCHOME          = $(MSVCDIR)
175 CCINCDIR        = $(CCHOME)\include
176 CCLIBDIR        = $(CCHOME)\lib
177
178 #
179 # Additional compiler flags can be specified here.
180 #
181 BUILDOPT        = $(BUILDOPTEXTRA)
182
183 #
184 # Adding -DPERL_HASH_SEED_EXPLICIT will disable randomization of Perl's
185 # internal hash function unless the PERL_HASH_SEED environment variable is set.
186 # Alternatively, adding -DNO_HASH_SEED will completely disable the
187 # randomization feature. 
188 # The latter is required to maintain binary compatibility with Perl 5.8.0.
189 #
190 #BUILDOPT       = $(BUILDOPT) -DPERL_HASH_SEED_EXPLICIT
191 #BUILDOPT       = $(BUILDOPT) -DNO_HASH_SEED
192
193 #
194 # This should normally be disabled.  Adding -DPERL_POLLUTE enables support
195 # for old symbols by default, at the expense of extreme pollution.  You most
196 # probably just want to build modules that won't compile with
197 #         perl Makefile.PL POLLUTE=1
198 # instead of enabling this.  Please report such modules to the respective
199 # authors.
200 #
201 #BUILDOPT       = $(BUILDOPT) -DPERL_POLLUTE
202
203 #
204 # This should normally be disabled.  Enabling it will disable the File::Glob
205 # implementation of CORE::glob.
206 #
207 #BUILDOPT       = $(BUILDOPT) -DPERL_EXTERNAL_GLOB
208
209 #
210 # This should normally be disabled.  Enabling it causes perl to read scripts
211 # in text mode (which is the 5.005 behavior) and will break ByteLoader.
212 #
213 #BUILDOPT       = $(BUILDOPT) -DPERL_TEXTMODE_SCRIPTS
214
215 #
216 # specify semicolon-separated list of extra directories that modules will
217 # look for libraries (spaces in path names need not be quoted)
218 #
219 EXTRALIBDIRS    =
220
221 #
222 # set this to your email address (perl will guess a value from
223 # from your loginname and your hostname, which may not be right)
224 #
225 #EMAIL          =
226
227 ##
228 ## Build configuration ends.
229 ##
230
231 ##################### CHANGE THESE ONLY IF YOU MUST #####################
232
233 !IF "$(CRYPT_SRC)$(CRYPT_LIB)" == ""
234 D_CRYPT         = undef
235 !ELSE
236 D_CRYPT         = define
237 CRYPT_FLAG      = -DHAVE_DES_FCRYPT
238 !ENDIF
239
240 !IF "$(USE_IMP_SYS)" == "define"
241 PERL_MALLOC     = undef
242 DEBUG_MSTATS    = undef
243 !ENDIF
244
245 !IF "$(PERL_MALLOC)" == ""
246 PERL_MALLOC     = undef
247 DEBUG_MSTATS    = undef
248 !ENDIF
249
250 !IF "$(DEBUG_MSTATS)" == ""
251 DEBUG_MSTATS    = undef
252 !ENDIF
253
254 !IF "$(DEBUG_MSTATS)" == "define"
255 BUILDOPT        = $(BUILDOPT) -DPERL_DEBUGGING_MSTATS
256 !ENDIF
257
258 !IF "$(USE_SITECUST)" == ""
259 USE_SITECUST    = undef
260 !ENDIF
261
262 !IF "$(USE_MULTI)" == ""
263 USE_MULTI       = undef
264 !ENDIF
265
266 !IF "$(USE_ITHREADS)" == ""
267 USE_ITHREADS    = undef
268 !ENDIF
269
270 !IF "$(USE_IMP_SYS)" == ""
271 USE_IMP_SYS     = undef
272 !ENDIF
273
274 !IF "$(USE_PERLIO)" == ""
275 USE_PERLIO      = undef
276 !ENDIF
277
278 !IF "$(USE_LARGE_FILES)" == ""
279 USE_LARGE_FILES = undef
280 !ENDIF
281
282 !IF "$(USE_PERLCRT)" == ""
283 USE_PERLCRT     = undef
284 !ENDIF
285
286 !IF "$(USE_IMP_SYS)$(USE_MULTI)" == "defineundef"
287 USE_MULTI       = define
288 !ENDIF
289
290 !IF "$(USE_ITHREADS)$(USE_MULTI)" == "defineundef"
291 USE_MULTI       = define
292 !ENDIF
293
294 !IF "$(USE_SITECUST)" == "define"
295 BUILDOPT        = $(BUILDOPT) -DUSE_SITECUSTOMIZE
296 !ENDIF
297
298 !IF "$(USE_MULTI)" != "undef"
299 BUILDOPT        = $(BUILDOPT) -DPERL_IMPLICIT_CONTEXT
300 !ENDIF
301
302 !IF "$(USE_IMP_SYS)" != "undef"
303 BUILDOPT        = $(BUILDOPT) -DPERL_IMPLICIT_SYS
304 !ENDIF
305
306 !IF "$(PROCESSOR_ARCHITECTURE)" == ""
307 PROCESSOR_ARCHITECTURE  = x86
308 !ENDIF
309
310 !IF "$(WIN64)" == ""
311 # When we are running from a 32bit cmd.exe on AMD64 then
312 # PROCESSOR_ARCHITECTURE is set to x86 and PROCESSOR_ARCHITEW6432
313 # is set to AMD64
314 !IF "$(PROCESSOR_ARCHITEW6432)" != ""
315 PROCESSOR_ARCHITECTURE  = $(PROCESSOR_ARCHITEW6432)
316 WIN64                   = define
317 !ELSE
318 !IF "$(PROCESSOR_ARCHITECTURE)" == "AMD64" || "$(PROCESSOR_ARCHITECTURE)" == "IA64"
319 WIN64                   = define
320 !ELSE
321 WIN64                   = undef
322 !ENDIF
323 !ENDIF
324 !ENDIF
325
326 ARCHITECTURE = $(PROCESSOR_ARCHITECTURE)
327 !IF "$(ARCHITECTURE)" == "AMD64"
328 ARCHITECTURE    = x64
329 !ENDIF
330 !IF "$(ARCHITECTURE)" == "IA64"
331 ARCHITECTURE    = ia64
332 !ENDIF
333
334 !IF "$(USE_MULTI)" == "define"
335 ARCHNAME        = MSWin32-$(ARCHITECTURE)-multi
336 !ELSE
337 !IF "$(USE_PERLIO)" == "define"
338 ARCHNAME        = MSWin32-$(ARCHITECTURE)-perlio
339 !ELSE
340 ARCHNAME        = MSWin32-$(ARCHITECTURE)
341 !ENDIF
342 !ENDIF
343
344 !IF "$(USE_PERLIO)" == "define"
345 BUILDOPT        = $(BUILDOPT) -DUSE_PERLIO
346 !ENDIF
347
348 !IF "$(USE_ITHREADS)" == "define"
349 ARCHNAME        = $(ARCHNAME)-thread
350 !ENDIF
351
352 # Visual C++ 98, .NET 2003 and 2005 specific.
353 # VC++ 6.x, 7.x and 8.x can load DLL's on demand.  Makes the test suite run in
354 # about 10% less time.  (The free version of 7.x can't do this, but the free
355 # version of 8.x can.)
356 !IF "$(CCTYPE)" == "MSVC60" || "$(CCTYPE)" == "MSVC70" || \
357     "$(CCTYPE)" == "MSVC80" || "$(CCTYPE)" == "MSVC80FREE"
358 DELAYLOAD       = -DELAYLOAD:ws2_32.dll -DELAYLOAD:shell32.dll delayimp.lib
359 !ENDIF
360
361 # Visual C++ 2005 (VC++ 8.x) creates manifest files for EXEs and DLLs. These
362 # either need copying everywhere with the binaries, or else need embedding in
363 # them otherwise MSVCR80.dll won't be found. Embed them for simplicity, and
364 # delete them afterwards so that they don't get installed too.
365 !IF "$(CCTYPE)" == "MSVC80" || "$(CCTYPE)" == "MSVC80FREE"
366 EMBED_EXE_MANI  = mt -nologo -manifest $@.manifest -outputresource:$@;1 && \
367                   del $@.manifest
368 EMBED_DLL_MANI  = mt -nologo -manifest $@.manifest -outputresource:$@;2 && \
369                   del $@.manifest
370 !ENDIF
371
372 ARCHDIR         = ..\lib\$(ARCHNAME)
373 COREDIR         = ..\lib\CORE
374 AUTODIR         = ..\lib\auto
375 LIBDIR          = ..\lib
376 EXTDIR          = ..\ext
377 PODDIR          = ..\pod
378 EXTUTILSDIR     = $(LIBDIR)\ExtUtils
379 HTMLDIR         = .\html
380
381 #
382 INST_SCRIPT     = $(INST_TOP)$(INST_VER)\bin
383 INST_BIN        = $(INST_SCRIPT)$(INST_ARCH)
384 INST_LIB        = $(INST_TOP)$(INST_VER)\lib
385 INST_ARCHLIB    = $(INST_LIB)$(INST_ARCH)
386 INST_COREDIR    = $(INST_ARCHLIB)\CORE
387 INST_HTML       = $(INST_TOP)$(INST_VER)\html
388
389 #
390 # Programs to compile, build .lib files and link
391 #
392
393 CC              = cl
394 LINK32          = link
395 LIB32           = $(LINK32) -lib
396 RSC             = rc
397
398 #
399 # Options
400 #
401
402 INCLUDES        = -I$(COREDIR) -I.\include -I. -I..
403 #PCHFLAGS       = -Fpc:\temp\vcmoduls.pch -YX
404 DEFINES         = -DWIN32 -D_CONSOLE -DNO_STRICT $(CRYPT_FLAG)
405 LOCDEFS         = -DPERLDLL -DPERL_CORE
406 SUBSYS          = console
407 CXX_FLAG        = -TP -GX
408
409 !IF "$(USE_PERLCRT)" != "define"
410 LIBC    = msvcrt.lib
411 !ELSE
412 LIBC    = PerlCRT.lib
413 !ENDIF
414
415 !IF  "$(CFG)" == "Debug"
416 !  IF "$(CCTYPE)" == "MSVC20"
417 OPTIMIZE        = -Od -MD -Z7 -DDEBUGGING
418 !  ELSE
419 OPTIMIZE        = -Od -MD -Zi -DDEBUGGING
420 !  ENDIF
421 LINK_DBG        = -debug
422 !ELSE
423 OPTIMIZE        = -MD -Zi -DNDEBUG
424 # we enable debug symbols in release builds also
425 LINK_DBG        = -debug -opt:ref,icf
426 # you may want to enable this if you want COFF symbols in the executables
427 # in addition to the PDB symbols.  The default Dr. Watson that ships with
428 # Windows can use the the former but not latter.  The free WinDbg can be
429 # installed to get better stack traces from just the PDB symbols, so we
430 # avoid the bloat of COFF symbols by default.
431 #LINK_DBG       = $(LINK_DBG) -debugtype:both
432 !  IF "$(WIN64)" == "define"
433 # enable Whole Program Optimizations (WPO) and Link Time Code Generation (LTCG)
434 OPTIMIZE        = $(OPTIMIZE) -Ox -GL
435 LINK_DBG        = $(LINK_DBG) -ltcg
436 !  ELSE
437 # -O1 yields smaller code, which turns out to be faster than -O2 on x86
438 OPTIMIZE        = $(OPTIMIZE) -O1
439 #OPTIMIZE       = $(OPTIMIZE) -O2
440 !  ENDIF
441 !ENDIF
442
443 !IF "$(WIN64)" == "define"
444 DEFINES         = $(DEFINES) -DWIN64 -DCONSERVATIVE
445 OPTIMIZE        = $(OPTIMIZE) -Wp64 -fp:precise
446 !ENDIF
447
448 # Use the MSVCRT read() fix if the PerlCRT was not chosen, but only when using
449 # VC++ 6.x or earlier. Later versions use MSVCR70.dll, MSVCR71.dll, etc, which
450 # do not require the fix.
451 !IF "$(CCTYPE)" == "MSVC20" || "$(CCTYPE)" == "MSVC" || "$(CCTYPE)" == "MSVC60" 
452 !  IF "$(USE_PERLCRT)" != "define"
453 BUILDOPT        = $(BUILDOPT) -DPERL_MSVCRT_READFIX
454 !  ENDIF
455 !ENDIF
456
457 LIBBASEFILES    = $(CRYPT_LIB) \
458                 oldnames.lib kernel32.lib user32.lib gdi32.lib winspool.lib \
459                 comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib \
460                 netapi32.lib uuid.lib ws2_32.lib mpr.lib winmm.lib \
461                 version.lib odbc32.lib odbccp32.lib
462
463 # The 64 bit Platform SDK compilers contain a runtime library that doesn't
464 # include the buffer overrun verification code used by the /GS switch.
465 # Since the code links against libraries that are compiled with /GS, this
466 # "security cookie verification" must be included via bufferoverlow.lib.
467 !IF "$(WIN64)" == "define"
468 LIBBASEFILES    = $(LIBBASEFILES) bufferoverflowU.lib
469 !ENDIF
470
471 # we add LIBC here, since we may be using PerlCRT.dll
472 LIBFILES        = $(LIBBASEFILES) $(LIBC)
473
474 #EXTRACFLAGS    = -nologo -GF -W4 -wd4127 -wd4706
475 EXTRACFLAGS     = -nologo -GF -W3
476 CFLAGS          = $(EXTRACFLAGS) $(INCLUDES) $(DEFINES) $(LOCDEFS) \
477                 $(PCHFLAGS) $(OPTIMIZE)
478 LINK_FLAGS      = -nologo -nodefaultlib $(LINK_DBG) \
479                 -libpath:"$(INST_COREDIR)" \
480                 -machine:$(PROCESSOR_ARCHITECTURE)
481 OBJOUT_FLAG     = -Fo
482 EXEOUT_FLAG     = -Fe
483
484 CFLAGS_O        = $(CFLAGS) $(BUILDOPT)
485
486 #################### do not edit below this line #######################
487 ############# NO USER-SERVICEABLE PARTS BEYOND THIS POINT ##############
488
489 o = .obj
490
491 #
492 # Rules
493 #
494
495 .SUFFIXES : .c $(o) .dll .lib .exe .rc .res
496
497 .c$(o):
498         $(CC) -c -I$(<D) $(CFLAGS_O) $(OBJOUT_FLAG)$@ $<
499
500 .y.c:
501         $(NOOP)
502
503 $(o).dll:
504         $(LINK32) -dll -subsystem:windows -implib:$(*B).lib -def:$(*B).def \
505             -out:$@ $(LINK_FLAGS) $(LIBFILES) $< $(LIBPERL)
506         $(EMBED_DLL_MANI)
507
508 .rc.res:
509         $(RSC) -i.. $<
510
511         
512 #
513 # various targets
514
515 # makedef.pl must be updated if this changes, and this should normally
516 # only change when there is an incompatible revision of the public API.
517 PERLIMPLIB      = ..\perl59.lib
518 PERLDLL         = ..\perl59.dll
519
520 MINIPERL        = ..\miniperl.exe
521 MINIDIR         = .\mini
522 PERLEXE         = ..\perl.exe
523 WPERLEXE        = ..\wperl.exe
524 GLOBEXE         = ..\perlglob.exe
525 CONFIGPM        = ..\lib\Config.pm ..\lib\Config_heavy.pl
526 MINIMOD         = ..\lib\ExtUtils\Miniperl.pm
527 X2P             = ..\x2p\a2p.exe
528   
529 # Unicode data files generated by mktables
530 FIRSTUNIFILE     = ..\lib\unicore\Canonical.pl
531 UNIDATAFILES     = ..\lib\unicore\Canonical.pl ..\lib\unicore\Exact.pl \
532                    ..\lib\unicore\Properties ..\lib\unicore\Decomposition.pl \
533                    ..\lib\unicore\CombiningClass.pl ..\lib\unicore\Name.pl \
534                    ..\lib\unicore\PVA.pl
535
536 # Directories of Unicode data files generated by mktables
537 UNIDATADIR1     = ..\lib\unicore\To
538 UNIDATADIR2     = ..\lib\unicore\lib
539
540 PERLEXE_ICO     = .\perlexe.ico
541 PERLEXE_RES     = .\perlexe.res
542 PERLDLL_RES     =
543
544 # Nominate a target which causes extensions to be re-built
545 # This used to be $(PERLEXE), but at worst it is the .dll that they depend
546 # on and really only the interface - i.e. the .def file used to export symbols
547 # from the .dll
548 PERLDEP         = perldll.def
549
550 PL2BAT          = bin\pl2bat.pl
551 GLOBBAT         = bin\perlglob.bat
552
553 UTILS           =                       \
554                 ..\utils\h2ph           \
555                 ..\utils\splain         \
556                 ..\utils\dprofpp        \
557                 ..\utils\perlbug        \
558                 ..\utils\pl2pm          \
559                 ..\utils\c2ph           \
560                 ..\utils\pstruct        \
561                 ..\utils\h2xs           \
562                 ..\utils\perldoc        \
563                 ..\utils\perlivp        \
564                 ..\utils\libnetcfg      \
565                 ..\utils\enc2xs         \
566                 ..\utils\piconv         \
567                 ..\utils\config_data    \
568                 ..\utils\corelist       \
569                 ..\utils\cpan           \
570                 ..\utils\xsubpp         \
571                 ..\utils\prove          \
572                 ..\utils\ptar           \
573                 ..\utils\ptardiff       \
574                 ..\utils\shasum         \
575                 ..\utils\instmodsh      \
576                 ..\pod\checkpods        \
577                 ..\pod\pod2html         \
578                 ..\pod\pod2latex        \
579                 ..\pod\pod2man          \
580                 ..\pod\pod2text         \
581                 ..\pod\pod2usage        \
582                 ..\pod\podchecker       \
583                 ..\pod\podselect        \
584                 ..\x2p\find2perl        \
585                 ..\x2p\psed             \
586                 ..\x2p\s2p              \
587                 bin\exetype.pl          \
588                 bin\runperl.pl          \
589                 bin\pl2bat.pl           \
590                 bin\perlglob.pl         \
591                 bin\search.pl
592
593 MAKE            = nmake -nologo
594 MAKE_BARE       = nmake
595
596 !IF "$(WIN64)" == "define"
597 CFGSH_TMPL      = config.vc64
598 CFGH_TMPL       = config_H.vc64
599 !ELSE
600 CFGSH_TMPL      = config.vc
601 CFGH_TMPL       = config_H.vc
602 !ENDIF
603
604 XCOPY           = xcopy /f /r /i /d /y
605 RCOPY           = xcopy /f /r /i /e /d /y
606 NOOP            = @rem
607 NULL            =
608
609 DEL             = del
610
611 #
612 # filenames given to xsubpp must have forward slashes (since it puts
613 # full pathnames in #line strings)
614 XSUBPP          = ..\$(MINIPERL) -I..\..\lib ..\$(EXTUTILSDIR)\xsubpp \
615                 -C++ -prototypes
616
617 MICROCORE_SRC   =               \
618                 ..\av.c         \
619                 ..\deb.c        \
620                 ..\doio.c       \
621                 ..\doop.c       \
622                 ..\dump.c       \
623                 ..\globals.c    \
624                 ..\gv.c         \
625                 ..\hv.c         \
626                 ..\locale.c     \
627                 ..\mathoms.c    \
628                 ..\mg.c         \
629                 ..\numeric.c    \
630                 ..\op.c         \
631                 ..\pad.c        \
632                 ..\perl.c       \
633                 ..\perlapi.c    \
634                 ..\perly.c      \
635                 ..\pp.c         \
636                 ..\pp_ctl.c     \
637                 ..\pp_hot.c     \
638                 ..\pp_pack.c    \
639                 ..\pp_sort.c    \
640                 ..\pp_sys.c     \
641                 ..\reentr.c     \
642                 ..\regcomp.c    \
643                 ..\regexec.c    \
644                 ..\run.c        \
645                 ..\scope.c      \
646                 ..\sv.c         \
647                 ..\taint.c      \
648                 ..\toke.c       \
649                 ..\universal.c  \
650                 ..\utf8.c       \
651                 ..\util.c       \
652                 ..\xsutils.c
653
654 EXTRACORE_SRC   = $(EXTRACORE_SRC) perllib.c
655
656 !IF "$(PERL_MALLOC)" == "define"
657 EXTRACORE_SRC   = $(EXTRACORE_SRC) ..\malloc.c
658 !ENDIF
659
660 EXTRACORE_SRC   = $(EXTRACORE_SRC) ..\perlio.c
661
662 WIN32_SRC       =               \
663                 .\win32.c       \
664                 .\win32sck.c    \
665                 .\win32thread.c
666
667 # We need this for miniperl build unless we override canned 
668 # config.h #define building mini\*
669 #!IF "$(USE_PERLIO)" == "define"
670 WIN32_SRC       = $(WIN32_SRC) .\win32io.c
671 #!ENDIF
672
673 !IF "$(CRYPT_SRC)" != ""
674 WIN32_SRC       = $(WIN32_SRC) .\$(CRYPT_SRC)
675 !ENDIF
676
677 DLL_SRC         = $(DYNALOADER).c
678
679 X2P_SRC         =               \
680                 ..\x2p\a2p.c    \
681                 ..\x2p\hash.c   \
682                 ..\x2p\str.c    \
683                 ..\x2p\util.c   \
684                 ..\x2p\walk.c
685
686 CORE_NOCFG_H    =               \
687                 ..\av.h         \
688                 ..\cop.h        \
689                 ..\cv.h         \
690                 ..\dosish.h     \
691                 ..\embed.h      \
692                 ..\form.h       \
693                 ..\gv.h         \
694                 ..\handy.h      \
695                 ..\hv.h         \
696                 ..\iperlsys.h   \
697                 ..\mg.h         \
698                 ..\nostdio.h    \
699                 ..\op.h         \
700                 ..\opcode.h     \
701                 ..\perl.h       \
702                 ..\perlapi.h    \
703                 ..\perlsdio.h   \
704                 ..\perlsfio.h   \
705                 ..\perly.h      \
706                 ..\pp.h         \
707                 ..\proto.h      \
708                 ..\regcomp.h    \
709                 ..\regexp.h     \
710                 ..\scope.h      \
711                 ..\sv.h         \
712                 ..\thread.h     \
713                 ..\unixish.h    \
714                 ..\utf8.h       \
715                 ..\util.h       \
716                 ..\warnings.h   \
717                 ..\XSUB.h       \
718                 ..\EXTERN.h     \
719                 ..\perlvars.h   \
720                 ..\intrpvar.h   \
721                 ..\thrdvar.h    \
722                 .\include\dirent.h      \
723                 .\include\netdb.h       \
724                 .\include\sys\socket.h  \
725                 .\win32.h
726
727 CORE_H          = $(CORE_NOCFG_H) .\config.h
728
729 MICROCORE_OBJ   = $(MICROCORE_SRC:.c=.obj)
730 CORE_OBJ        = $(MICROCORE_OBJ) $(EXTRACORE_SRC:.c=.obj)
731 WIN32_OBJ       = $(WIN32_SRC:.c=.obj)
732 MINICORE_OBJ    = $(MICROCORE_OBJ:..\=.\mini\)  \
733                   $(MINIDIR)\miniperlmain$(o)   \
734                   $(MINIDIR)\perlio$(o)
735 MINIWIN32_OBJ   = $(WIN32_OBJ:.\=.\mini\)
736 MINI_OBJ        = $(MINICORE_OBJ) $(MINIWIN32_OBJ)
737 DLL_OBJ         = $(DLL_SRC:.c=.obj)
738 X2P_OBJ         = $(X2P_SRC:.c=.obj)
739
740 PERLDLL_OBJ     = $(CORE_OBJ)
741 PERLEXE_OBJ     = perlmain$(o)
742
743 PERLDLL_OBJ     = $(PERLDLL_OBJ) $(WIN32_OBJ) $(DLL_OBJ)
744 #PERLEXE_OBJ    = $(PERLEXE_OBJ) $(WIN32_OBJ) $(DLL_OBJ)
745
746 !IF "$(USE_SETARGV)" != ""
747 SETARGV_OBJ     = setargv$(o)
748 !ENDIF
749
750 # specify static extensions here
751 #STATIC_EXT     = Cwd Compress/Zlib
752 STATIC_EXT      = 
753
754 DYNALOADER              = $(EXTDIR)\DynaLoader\DynaLoader
755 SOCKET                  = $(EXTDIR)\Socket\Socket
756 FCNTL                   = $(EXTDIR)\Fcntl\Fcntl
757 OPCODE                  = $(EXTDIR)\Opcode\Opcode
758 SDBM_FILE               = $(EXTDIR)\SDBM_File\SDBM_File
759 IO                      = $(EXTDIR)\IO\IO
760 POSIX                   = $(EXTDIR)\POSIX\POSIX
761 ATTRS                   = $(EXTDIR)\attrs\attrs
762 THREAD                  = $(EXTDIR)\Thread\Thread
763 B                       = $(EXTDIR)\B\B
764 RE                      = $(EXTDIR)\re\re
765 DUMPER                  = $(EXTDIR)\Data\Dumper\Dumper
766 ERRNO                   = $(EXTDIR)\Errno\Errno
767 PEEK                    = $(EXTDIR)\Devel\Peek\Peek
768 BYTELOADER              = $(EXTDIR)\ByteLoader\ByteLoader
769 DPROF                   = $(EXTDIR)\Devel\DProf\DProf
770 GLOB                    = $(EXTDIR)\File\Glob\Glob
771 HOSTNAME                = $(EXTDIR)\Sys\Hostname\Hostname
772 STORABLE                = $(EXTDIR)\Storable\Storable
773 FILTER                  = $(EXTDIR)\Filter\Util\Call\Call
774 ENCODE                  = $(EXTDIR)\Encode\Encode
775 MD5                     = $(EXTDIR)\Digest\MD5\MD5
776 SHA                     = $(EXTDIR)\Digest\SHA\SHA
777 PERLIOSCALAR            = $(EXTDIR)\PerlIO\scalar\scalar
778 MIMEBASE64              = $(EXTDIR)\MIME\Base64\Base64
779 TIMEHIRES               = $(EXTDIR)\Time\HiRes\HiRes
780 CWD                     = $(EXTDIR)\Cwd\Cwd
781 LISTUTIL                = $(EXTDIR)\List\Util\Util
782 HASHUTIL                = $(EXTDIR)\Hash\Util\Util
783 PERLIOVIA               = $(EXTDIR)\PerlIO\via\via
784 XSAPITEST               = $(EXTDIR)\XS\APItest\APItest
785 XSTYPEMAP               = $(EXTDIR)\XS\Typemap\Typemap
786 UNICODENORMALIZE        = $(EXTDIR)\Unicode\Normalize\Normalize
787 MATHBIGINTFASTCALC      = $(EXTDIR)\Math\BigInt\FastCalc\FastCalc
788 COMPRESSZLIB            = $(EXTDIR)\Compress\Zlib\Zlib
789 WIN32_DIR               = ext\Win32
790 WIN32APIFILE            = ext\Win32API\File\File
791
792 SOCKET_DLL              = $(AUTODIR)\Socket\Socket.dll
793 FCNTL_DLL               = $(AUTODIR)\Fcntl\Fcntl.dll
794 OPCODE_DLL              = $(AUTODIR)\Opcode\Opcode.dll
795 SDBM_FILE_DLL           = $(AUTODIR)\SDBM_File\SDBM_File.dll
796 IO_DLL                  = $(AUTODIR)\IO\IO.dll
797 POSIX_DLL               = $(AUTODIR)\POSIX\POSIX.dll
798 ATTRS_DLL               = $(AUTODIR)\attrs\attrs.dll
799 THREAD_DLL              = $(AUTODIR)\Thread\Thread.dll
800 B_DLL                   = $(AUTODIR)\B\B.dll
801 DUMPER_DLL              = $(AUTODIR)\Data\Dumper\Dumper.dll
802 PEEK_DLL                = $(AUTODIR)\Devel\Peek\Peek.dll
803 RE_DLL                  = $(AUTODIR)\re\re.dll
804 BYTELOADER_DLL          = $(AUTODIR)\ByteLoader\ByteLoader.dll
805 DPROF_DLL               = $(AUTODIR)\Devel\DProf\DProf.dll
806 GLOB_DLL                = $(AUTODIR)\File\Glob\Glob.dll
807 HOSTNAME_DLL            = $(AUTODIR)\Sys\Hostname\Hostname.dll
808 STORABLE_DLL            = $(AUTODIR)\Storable\Storable.dll
809 FILTER_DLL              = $(AUTODIR)\Filter\Util\Call\Call.dll
810 ENCODE_DLL              = $(AUTODIR)\Encode\Encode.dll
811 MD5_DLL                 = $(AUTODIR)\Digest\MD5\MD5.dll
812 SHA_DLL                 = $(AUTODIR)\Digest\SHA\SHA.dll
813 PERLIOSCALAR_DLL        = $(AUTODIR)\PerlIO\scalar\scalar.dll
814 MIMEBASE64_DLL          = $(AUTODIR)\MIME\Base64\Base64.dll
815 TIMEHIRES_DLL           = $(AUTODIR)\Time\HiRes\HiRes.dll
816 CWD_DLL                 = $(AUTODIR)\Cwd\Cwd.dll
817 LISTUTIL_DLL            = $(AUTODIR)\List\Util\Util.dll
818 HASHUTIL_DLL            = $(AUTODIR)\HASH\Util\Util.dll
819 PERLIOVIA_DLL           = $(AUTODIR)\PerlIO\via\via.dll
820 XSAPITEST_DLL           = $(AUTODIR)\XS\APItest\APItest.dll
821 XSTYPEMAP_DLL           = $(AUTODIR)\XS\Typemap\Typemap.dll
822 UNICODENORMALIZE_DLL    = $(AUTODIR)\Unicode\Normalize\Normalize.dll
823 MATHBIGINTFASTCALC_DLL  = $(AUTODIR)\Math\BigInt\FastCalc\FastCalc.dll
824 COMPRESSZLIB_DLL        = $(AUTODIR)\Compress\Zlib\Zlib.dll
825 WIN32_DLL               = $(AUTODIR)\Win32\Win32.dll
826 WIN32APIFILE_DLL        = $(AUTODIR)\Win32API\File\File.dll
827
828 EXTENSION_C     =               \
829                 $(SOCKET).c     \
830                 $(FCNTL).c      \
831                 $(OPCODE).c     \
832                 $(SDBM_FILE).c  \
833                 $(IO).c         \
834                 $(POSIX).c      \
835                 $(ATTRS).c      \
836                 $(THREAD).c     \
837                 $(RE).c         \
838                 $(DUMPER).c     \
839                 $(PEEK).c       \
840                 $(B).c          \
841                 $(BYTELOADER).c \
842                 $(DPROF).c      \
843                 $(GLOB).c       \
844                 $(HOSTNAME).c   \
845                 $(STORABLE).c   \
846                 $(FILTER).c     \
847                 $(ENCODE).c     \
848                 $(MD5).c        \
849                 $(SHA).c        \
850                 $(PERLIOSCALAR).c       \
851                 $(MIMEBASE64).c \
852                 $(TIMEHIRES).c  \
853                 $(CWD).c        \
854                 $(LISTUTIL).c   \
855                 $(HASHUTIL).c   \
856                 $(PERLIOVIA).c  \
857                 $(XSAPITEST).c  \
858                 $(XSTYPEMAP).c  \
859                 $(UNICODENORMALIZE).c   \
860                 $(MATHBIGINTFASTCALC).c \
861                 $(COMPRESSZLIB).c       \
862                 $(WIN32_DIR).c  \
863                 $(WIN32APIFILE).c
864
865 EXTENSION_DLL   =               \
866                 $(SOCKET_DLL)   \
867                 $(FCNTL_DLL)    \
868                 $(OPCODE_DLL)   \
869                 $(SDBM_FILE_DLL)\
870                 $(IO_DLL)       \
871                 $(POSIX_DLL)    \
872                 $(ATTRS_DLL)    \
873                 $(DUMPER_DLL)   \
874                 $(PEEK_DLL)     \
875                 $(B_DLL)        \
876                 $(RE_DLL)       \
877                 $(THREAD_DLL)   \
878                 $(BYTELOADER_DLL)       \
879                 $(DPROF_DLL)    \
880                 $(GLOB_DLL)     \
881                 $(HOSTNAME_DLL) \
882                 $(STORABLE_DLL) \
883                 $(FILTER_DLL)   \
884                 $(ENCODE_DLL)   \
885                 $(MD5_DLL)      \
886                 $(SHA_DLL)      \
887                 $(PERLIOSCALAR_DLL) \
888                 $(MIMEBASE64_DLL) \
889                 $(TIMEHIRES_DLL)  \
890                 $(CWD_DLL)      \
891                 $(LISTUTIL_DLL) \
892                 $(HASHUTIL_DLL) \
893                 $(PERLIOVIA_DLL)        \
894                 $(XSAPITEST_DLL)        \
895                 $(XSTYPEMAP_DLL)        \
896                 $(UNICODENORMALIZE_DLL) \
897                 $(MATHBIGINTFASTCALC_DLL)       \
898                 $(COMPRESSZLIB_DLL)     \
899                 $(WIN32_DLL)    \
900                 $(WIN32APIFILE_DLL)
901
902 CFG_VARS        =                                       \
903                 "INST_DRV=$(INST_DRV)"                  \
904                 "INST_TOP=$(INST_TOP)"                  \
905                 "INST_VER=$(INST_VER)"                  \
906                 "INST_ARCH=$(INST_ARCH)"                \
907                 "archname=$(ARCHNAME)"                  \
908                 "cc=$(CC)"                              \
909                 "ld=$(LINK32)"                          \
910                 "ccflags=$(EXTRACFLAGS) $(OPTIMIZE:"=\") $(DEFINES) $(BUILDOPT)"        \
911                 "cf_email=$(EMAIL)"                     \
912                 "d_crypt=$(D_CRYPT)"                    \
913                 "d_mymalloc=$(PERL_MALLOC)"             \
914                 "libs=$(LIBFILES)"                      \
915                 "incpath=$(CCINCDIR:"=\")"              \
916                 "libperl=$(PERLIMPLIB:..\=)"            \
917                 "libpth=$(CCLIBDIR:"=\");$(EXTRALIBDIRS:"=\")"  \
918                 "libc=$(LIBC)"                          \
919                 "make=$(MAKE_BARE)"                             \
920                 "static_ext=$(STATIC_EXT)"              \
921                 "usethreads=$(USE_ITHREADS)"            \
922                 "useithreads=$(USE_ITHREADS)"           \
923                 "usemultiplicity=$(USE_MULTI)"          \
924                 "useperlio=$(USE_PERLIO)"               \
925                 "uselargefiles=$(USE_LARGE_FILES)"      \
926                 "usesitecustomize=$(USE_SITECUST)"      \
927                 "LINK_FLAGS=$(LINK_FLAGS:"=\")"         \
928                 "optimize=$(OPTIMIZE:"=\")"
929
930 #
931 # Top targets
932 #
933
934 all : .\config.h $(GLOBEXE) $(MINIMOD) $(CONFIGPM) $(UNIDATAFILES) $(PERLEXE) \
935         $(X2P) MakePPPort Extensions
936         @echo   Everything is up to date. '$(MAKE_BARE) test' to run test suite.
937
938 ..\regnodes.h : ..\regcomp.sym
939         cd ..
940         regcomp.pl
941         cd win32
942
943 regnodes :  ..\regnodes.h
944
945 reonly : regnodes .\config.h $(GLOBEXE) $(MINIMOD) $(CONFIGPM) $(UNIDATAFILES) $(PERLEXE) \
946         $(X2P) Extensions_reonly
947         @echo   Perl and 're' are up to date.
948
949 $(DYNALOADER)$(o) : $(DYNALOADER).c $(CORE_H) $(EXTDIR)\DynaLoader\dlutils.c
950
951 #------------------------------------------------------------
952
953 $(GLOBEXE) : perlglob$(o)
954         $(LINK32) $(LINK_FLAGS) $(LIBFILES) -out:$@ -subsystem:$(SUBSYS) \
955             perlglob$(o) setargv$(o)
956         $(EMBED_EXE_MANI)
957
958 perlglob$(o)  : perlglob.c
959
960 config.w32 : $(CFGSH_TMPL)
961         copy $(CFGSH_TMPL) config.w32
962
963 .\config.h : $(CFGH_TMPL)
964         -del /f config.h
965         copy $(CFGH_TMPL) config.h
966
967 ..\config.sh : config.w32 $(MINIPERL) config_sh.PL
968         $(MINIPERL) -I..\lib config_sh.PL $(CFG_VARS) config.w32 > ..\config.sh
969
970 # this target is for when changes to the main config.sh happen
971 # edit config.{b,v,g}c and make this target once for each supported
972 # compiler (e.g. `nmake CCTYPE=BORLAND regen_config_h`)
973 regen_config_h:
974         perl config_sh.PL $(CFG_VARS) $(CFGSH_TMPL) > ..\config.sh
975         cd ..
976         -del /f perl.exe perl*.dll
977         perl configpm
978         cd win32
979         -del /f $(CFGH_TMPL)
980         -mkdir $(COREDIR)
981         -perl config_h.PL "INST_VER=$(INST_VER)"
982         rename config.h $(CFGH_TMPL)
983
984 $(CONFIGPM) : $(MINIPERL) ..\config.sh config_h.PL ..\minimod.pl
985         cd ..
986         miniperl configpm
987         cd win32
988         if exist lib\* $(RCOPY) lib\*.* ..\lib\$(NULL)
989         $(XCOPY) ..\*.h $(COREDIR)\*.*
990         $(XCOPY) *.h $(COREDIR)\*.*
991         $(XCOPY) ..\ext\re\re.pm $(LIBDIR)\*.*
992         $(RCOPY) include $(COREDIR)\*.*
993         -$(MINIPERL) -I..\lib config_h.PL "INST_VER=$(INST_VER)"
994         if errorlevel 1 $(MAKE) /$(MAKEFLAGS) $(CONFIGPM)
995
996 $(MINIPERL) : $(MINIDIR) $(MINI_OBJ)
997         $(LINK32) -subsystem:console -out:$@ @<<
998         $(LINK_FLAGS) $(LIBFILES) $(MINI_OBJ)
999 <<
1000         $(EMBED_EXE_MANI)
1001
1002 $(MINIDIR) :
1003         if not exist "$(MINIDIR)" mkdir "$(MINIDIR)"
1004
1005 $(MINICORE_OBJ) : $(CORE_NOCFG_H)
1006         $(CC) -c $(CFLAGS) -DPERL_EXTERNAL_GLOB $(OBJOUT_FLAG)$@ ..\$(*F).c
1007
1008 $(MINIWIN32_OBJ) : $(CORE_NOCFG_H)
1009         $(CC) -c $(CFLAGS) $(OBJOUT_FLAG)$@ $(*F).c
1010
1011 # -DPERL_IMPLICIT_SYS needs C++ for perllib.c
1012 # This is the only file that depends on perlhost.h, vmem.h, and vdir.h
1013 !IF "$(USE_IMP_SYS)" == "define"
1014 perllib$(o)     : perllib.c .\perlhost.h .\vdir.h .\vmem.h
1015         $(CC) -c -I. $(CFLAGS_O) $(CXX_FLAG) $(OBJOUT_FLAG)$@ perllib.c
1016 !ENDIF
1017
1018 # 1. we don't want to rebuild miniperl.exe when config.h changes
1019 # 2. we don't want to rebuild miniperl.exe with non-default config.h
1020 $(MINI_OBJ)     : $(CORE_NOCFG_H)
1021
1022 $(WIN32_OBJ)    : $(CORE_H)
1023 $(CORE_OBJ)     : $(CORE_H)
1024 $(DLL_OBJ)      : $(CORE_H)
1025 $(X2P_OBJ)      : $(CORE_H)
1026
1027 perldll.def : $(MINIPERL) $(CONFIGPM) ..\global.sym ..\pp.sym ..\makedef.pl
1028         $(MINIPERL) -I..\lib buildext.pl --create-perllibst-h
1029         $(MINIPERL) -w ..\makedef.pl PLATFORM=win32 $(OPTIMIZE) $(DEFINES) $(BUILDOPT) \
1030             CCTYPE=$(CCTYPE) > perldll.def
1031
1032 $(PERLDLL): perldll.def $(PERLDLL_OBJ) $(PERLDLL_RES) Extensions_static
1033         $(LINK32) -dll -def:perldll.def -base:0x28000000 -out:$@ @Extensions_static @<<
1034                 $(LINK_FLAGS) $(DELAYLOAD) $(LIBFILES) $(PERLDLL_OBJ) $(PERLDLL_RES)
1035 <<
1036         $(EMBED_DLL_MANI)
1037         $(XCOPY) $(PERLIMPLIB) $(COREDIR)
1038
1039 $(PERLEXE_ICO): $(MINIPERL) makeico.pl
1040         $(MINIPERL) makeico.pl > $@
1041
1042 $(PERLEXE_RES): perlexe.rc $(PERLEXE_ICO)
1043
1044 $(MINIMOD) : $(MINIPERL) ..\minimod.pl
1045         cd ..
1046         miniperl minimod.pl > lib\ExtUtils\Miniperl.pm
1047         cd win32
1048
1049 ..\x2p\a2p$(o) : ..\x2p\a2p.c
1050         $(CC) -I..\x2p $(CFLAGS) $(OBJOUT_FLAG)$@ -c ..\x2p\a2p.c
1051
1052 ..\x2p\hash$(o) : ..\x2p\hash.c
1053         $(CC) -I..\x2p  $(CFLAGS) $(OBJOUT_FLAG)$@ -c ..\x2p\hash.c
1054
1055 ..\x2p\str$(o) : ..\x2p\str.c
1056         $(CC) -I..\x2p  $(CFLAGS) $(OBJOUT_FLAG)$@ -c ..\x2p\str.c
1057
1058 ..\x2p\util$(o) : ..\x2p\util.c
1059         $(CC) -I..\x2p  $(CFLAGS) $(OBJOUT_FLAG)$@ -c ..\x2p\util.c
1060
1061 ..\x2p\walk$(o) : ..\x2p\walk.c
1062         $(CC) -I..\x2p  $(CFLAGS) $(OBJOUT_FLAG)$@ -c ..\x2p\walk.c
1063
1064 $(X2P) : $(MINIPERL) $(X2P_OBJ)
1065         $(MINIPERL) ..\x2p\find2perl.PL
1066         $(MINIPERL) ..\x2p\s2p.PL
1067         $(LINK32) -subsystem:console -out:$@ @<<
1068                 $(LINK_FLAGS) $(LIBFILES) $(X2P_OBJ)
1069 <<
1070         $(EMBED_EXE_MANI)
1071
1072 perlmain.c : runperl.c
1073         copy runperl.c perlmain.c
1074
1075 perlmain$(o) : perlmain.c
1076         $(CC) $(CFLAGS_O) -UPERLDLL $(OBJOUT_FLAG)$@ -c perlmain.c
1077
1078 $(PERLEXE): $(PERLDLL) $(CONFIGPM) $(PERLEXE_OBJ) $(PERLEXE_RES)
1079         $(LINK32) -subsystem:console -out:$@ -stack:0x1000000 $(LINK_FLAGS) \
1080             $(LIBFILES) $(PERLEXE_OBJ) $(SETARGV_OBJ) $(PERLIMPLIB) $(PERLEXE_RES)
1081         $(EMBED_EXE_MANI)
1082         copy $(PERLEXE) $(WPERLEXE)
1083         $(MINIPERL) -I..\lib bin\exetype.pl $(WPERLEXE) WINDOWS
1084         copy splittree.pl ..
1085         $(MINIPERL) -I..\lib ..\splittree.pl "../LIB" $(AUTODIR)
1086
1087 $(DYNALOADER).c: $(MINIPERL) $(EXTDIR)\DynaLoader\dl_win32.xs $(CONFIGPM)
1088         if not exist $(AUTODIR) mkdir $(AUTODIR)
1089         cd $(EXTDIR)\$(*B)
1090         ..\$(MINIPERL) -I..\..\lib $(*B)_pm.PL
1091         ..\$(MINIPERL) -I..\..\lib XSLoader_pm.PL
1092         cd ..\..\win32
1093         $(XCOPY) $(EXTDIR)\$(*B)\$(*B).pm $(LIBDIR)\$(NULL)
1094         $(XCOPY) $(EXTDIR)\$(*B)\XSLoader.pm $(LIBDIR)\$(NULL)
1095         cd $(EXTDIR)\$(*B)
1096         $(XSUBPP) dl_win32.xs > $(*B).c
1097         cd ..\..\win32
1098
1099 $(EXTDIR)\DynaLoader\dl_win32.xs: dl_win32.xs
1100         copy dl_win32.xs $(EXTDIR)\DynaLoader\dl_win32.xs
1101
1102 MakePPPort: $(MINIPERL) $(CONFIGPM)
1103         $(MINIPERL) -I..\lib ..\mkppport
1104
1105 MakePPPort_clean:
1106         -if exist $(MINIPERL) $(MINIPERL) -I..\lib ..\mkppport --clean
1107
1108 #-------------------------------------------------------------------------------
1109 Extensions: buildext.pl $(PERLDEP) $(CONFIGPM)
1110         $(XCOPY) ..\*.h $(COREDIR)\*.*
1111         $(MINIPERL) -I..\lib buildext.pl $(MAKE) $(PERLDEP) $(EXTDIR) --dynamic
1112         $(MINIPERL) -I..\lib buildext.pl $(MAKE) $(PERLDEP) ext --dynamic
1113
1114 Extensions_reonly: buildext.pl $(PERLDEP) $(CONFIGPM)
1115         $(XCOPY) ..\*.h $(COREDIR)\*.*
1116         $(MINIPERL) -I..\lib buildext.pl $(MAKE) $(PERLDEP) $(EXTDIR) --dynamic +re
1117         $(MINIPERL) -I..\lib buildext.pl $(MAKE) $(PERLDEP) ext --dynamic +re
1118
1119 Extensions_static : buildext.pl
1120         $(XCOPY) ..\*.h $(COREDIR)\*.*
1121         $(MINIPERL) -I..\lib buildext.pl $(MAKE) $(PERLDEP) $(EXTDIR) --static
1122         $(MINIPERL) -I..\lib buildext.pl $(MAKE) $(PERLDEP) ext --static
1123         $(MINIPERL) -I..\lib buildext.pl --list-static-libs > Extensions_static
1124
1125 Extensions_clean: 
1126         -if exist $(MINIPERL) $(MINIPERL) -I..\lib buildext.pl $(MAKE) $(PERLDEP) $(EXTDIR) clean
1127         -if exist $(MINIPERL) $(MINIPERL) -I..\lib buildext.pl $(MAKE) $(PERLDEP) ext clean
1128
1129 Extensions_realclean: 
1130         -if exist $(MINIPERL) $(MINIPERL) -I..\lib buildext.pl $(MAKE) $(PERLDEP) $(EXTDIR) realclean
1131         -if exist $(MINIPERL) $(MINIPERL) -I..\lib buildext.pl $(MAKE) $(PERLDEP) ext realclean
1132
1133 #-------------------------------------------------------------------------------
1134
1135 doc: $(PERLEXE)
1136         $(PERLEXE) -I..\lib ..\installhtml --podroot=.. --htmldir=$(HTMLDIR) \
1137             --podpath=pod:lib:ext:utils --htmlroot="file://$(INST_HTML::=|)" \
1138             --libpod=perlfunc:perlguts:perlvar:perlrun:perlop --recurse
1139
1140 # Note that this next section is parsed (and regenerated) by pod/buildtoc
1141 # so please check that script before making structural changes here
1142
1143 utils: $(PERLEXE) $(X2P)
1144         cd ..\utils
1145         $(MAKE) PERL=$(MINIPERL)
1146         cd ..\pod
1147         copy ..\vms\perlvms.pod .\perlvms.pod
1148         copy ..\README.aix      ..\pod\perlaix.pod
1149         copy ..\README.amiga    ..\pod\perlamiga.pod
1150         copy ..\README.apollo   ..\pod\perlapollo.pod
1151         copy ..\README.beos     ..\pod\perlbeos.pod
1152         copy ..\README.bs2000   ..\pod\perlbs2000.pod
1153         copy ..\README.ce       ..\pod\perlce.pod
1154         copy ..\README.cn       ..\pod\perlcn.pod
1155         copy ..\README.cygwin   ..\pod\perlcygwin.pod
1156         copy ..\README.dgux     ..\pod\perldgux.pod
1157         copy ..\README.dos      ..\pod\perldos.pod
1158         copy ..\README.epoc     ..\pod\perlepoc.pod
1159         copy ..\README.freebsd  ..\pod\perlfreebsd.pod
1160         copy ..\README.hpux     ..\pod\perlhpux.pod
1161         copy ..\README.hurd     ..\pod\perlhurd.pod
1162         copy ..\README.irix     ..\pod\perlirix.pod
1163         copy ..\README.jp       ..\pod\perljp.pod
1164         copy ..\README.ko       ..\pod\perlko.pod
1165         copy ..\README.linux    ..\pod\perllinux.pod
1166         copy ..\README.machten  ..\pod\perlmachten.pod
1167         copy ..\README.macos    ..\pod\perlmacos.pod
1168         copy ..\README.macosx   ..\pod\perlmacosx.pod
1169         copy ..\README.mint     ..\pod\perlmint.pod
1170         copy ..\README.mpeix    ..\pod\perlmpeix.pod
1171         copy ..\README.netware  ..\pod\perlnetware.pod
1172         copy ..\README.openbsd  ..\pod\perlopenbsd.pod
1173         copy ..\README.os2      ..\pod\perlos2.pod
1174         copy ..\README.os390    ..\pod\perlos390.pod
1175         copy ..\README.os400    ..\pod\perlos400.pod
1176         copy ..\README.plan9    ..\pod\perlplan9.pod
1177         copy ..\README.qnx      ..\pod\perlqnx.pod
1178         copy ..\README.riscos   ..\pod\perlriscos.pod
1179         copy ..\README.solaris  ..\pod\perlsolaris.pod
1180         copy ..\README.symbian  ..\pod\perlsymbian.pod
1181         copy ..\README.tru64    ..\pod\perltru64.pod
1182         copy ..\README.tw       ..\pod\perltw.pod
1183         copy ..\README.uts      ..\pod\perluts.pod
1184         copy ..\README.vmesa    ..\pod\perlvmesa.pod
1185         copy ..\README.vms      ..\pod\perlvms.pod
1186         copy ..\README.vos      ..\pod\perlvos.pod
1187         copy ..\README.win32    ..\pod\perlwin32.pod
1188         copy ..\pod\perl595delta.pod ..\pod\perldelta.pod
1189         $(MAKE) -f ..\win32\pod.mak converters
1190         cd ..\lib
1191         $(PERLEXE) lib_pm.PL
1192         cd ..\win32
1193         $(PERLEXE) $(PL2BAT) $(UTILS)
1194
1195 # Note that the pod cleanup in this next section is parsed (and regenerated
1196 # by pod/buildtoc so please check that script before making changes here
1197
1198 distclean: realclean
1199         -del /f $(MINIPERL) $(PERLEXE) $(PERLDLL) $(GLOBEXE) \
1200                 $(PERLIMPLIB) ..\miniperl.lib $(MINIMOD)
1201         -del /f *.def *.map
1202         -del /f $(EXTENSION_DLL)
1203         -del /f $(EXTENSION_C) $(DYNALOADER).c $(ERRNO).pm
1204         -del /f $(EXTDIR)\DynaLoader\dl_win32.xs
1205         -del /f $(EXTDIR)\DynaLoader\DynaLoader.pm
1206         -del /f $(EXTDIR)\DynaLoader\XSLoader.pm
1207         -del /f $(LIBDIR)\Encode.pm $(LIBDIR)\encoding.pm $(LIBDIR)\Errno.pm
1208         -del /f $(LIBDIR)\Config.pod $(LIBDIR)\POSIX.pod $(LIBDIR)\threads.pm
1209         -del /f $(LIBDIR)\.exists $(LIBDIR)\attrs.pm $(LIBDIR)\DynaLoader.pm
1210         -del /f $(LIBDIR)\XSLoader.pm $(LIBDIR)\lib.pm
1211         -del /f $(LIBDIR)\Fcntl.pm $(LIBDIR)\IO.pm $(LIBDIR)\Opcode.pm
1212         -del /f $(LIBDIR)\ops.pm $(LIBDIR)\Safe.pm
1213         -del /f $(LIBDIR)\SDBM_File.pm $(LIBDIR)\Socket.pm $(LIBDIR)\POSIX.pm
1214         -del /f $(LIBDIR)\B.pm $(LIBDIR)\O.pm $(LIBDIR)\re.pm
1215         -del /f $(LIBDIR)\ByteLoader.pm
1216         -del /f $(LIBDIR)\Devel\Peek.pm $(LIBDIR)\Devel\DProf.pm
1217         -del /f $(LIBDIR)\Devel\PPPort.pm
1218         -del /f $(LIBDIR)\File\Glob.pm
1219         -del /f $(LIBDIR)\Storable.pm
1220         -del /f $(LIBDIR)\Digest\MD5.pm
1221         -del /f $(LIBDIR)\Digest\SHA.pm
1222         -del /f $(LIBDIR)\PerlIO\encoding.pm
1223         -del /f $(LIBDIR)\PerlIO\scalar.pm
1224         -del /f $(LIBDIR)\PerlIO\via.pm
1225         -del /f $(LIBDIR)\Sys\Hostname.pm
1226         -del /f $(LIBDIR)\Thread\Signal.pm $(LIBDIR)\Thread\Specific.pm
1227         -del /f $(LIBDIR)\threads\shared.pm
1228         -del /f $(LIBDIR)\Time\HiRes.pm
1229         -del /f $(LIBDIR)\Unicode\Normalize.pm
1230         -del /f $(LIBDIR)\Math\BigInt\FastCalc.pm
1231         -del /f $(LIBDIR)\Win32.pm
1232         -del /f $(LIBDIR)\Win32API\File.pm
1233         -del /f $(LIBDIR)\Win32API\File\cFile.pc
1234         -if exist $(LIBDIR)\B rmdir /s /q $(LIBDIR)\B
1235         -if exist $(LIBDIR)\Compress rmdir /s /q $(LIBDIR)\Compress
1236         -if exist $(LIBDIR)\Data rmdir /s /q $(LIBDIR)\Data
1237         -if exist $(LIBDIR)\Encode rmdir /s /q $(LIBDIR)\Encode
1238         -if exist $(LIBDIR)\Filter\Util rmdir /s /q $(LIBDIR)\Filter\Util
1239         -if exist $(LIBDIR)\Hash rmdir /s /q $(LIBDIR)\Hash
1240         -if exist $(LIBDIR)\IO\Compress rmdir /s /q $(LIBDIR)\IO\Compress
1241         -if exist $(LIBDIR)\IO\Socket rmdir /s /q $(LIBDIR)\IO\Socket
1242         -if exist $(LIBDIR)\IO\Uncompress rmdir /s /q $(LIBDIR)\IO\Uncompress
1243         -if exist $(LIBDIR)\List rmdir /s /q $(LIBDIR)\List
1244         -if exist $(LIBDIR)\MIME rmdir /s /q $(LIBDIR)\MIME
1245         -if exist $(LIBDIR)\Scalar rmdir /s /q $(LIBDIR)\Scalar
1246         -if exist $(LIBDIR)\Sys rmdir /s /q $(LIBDIR)\Sys
1247         -if exist $(LIBDIR)\threads rmdir /s /q $(LIBDIR)\threads
1248         -if exist $(LIBDIR)\XS rmdir /s /q $(LIBDIR)\XS
1249         -if exist $(LIBDIR)\Win32API rmdir /s /q $(LIBDIR)\Win32API
1250         -cd $(PODDIR) && del /f *.html *.bat checkpods \
1251             perlaix.pod perlamiga.pod perlapollo.pod perlbeos.pod \
1252             perlbs2000.pod perlce.pod perlcn.pod perlcygwin.pod \
1253             perldelta.pod perldgux.pod perldos.pod perlepoc.pod \
1254             perlfreebsd.pod perlhpux.pod perlhurd.pod perlirix.pod \
1255             perljp.pod perlko.pod perllinux.pod perlmachten.pod \
1256             perlmacos.pod perlmacosx.pod perlmint.pod perlmpeix.pod \
1257             perlnetware.pod perlopenbsd.pod perlos2.pod perlos390.pod \
1258             perlos400.pod perlplan9.pod perlqnx.pod perlriscos.pod \
1259             perlsolaris.pod perlsymbian.pod perltru64.pod perltw.pod \
1260             perluts.pod perlvmesa.pod perlvms.pod perlvms.pod perlvos.pod \
1261             perlwin32.pod \
1262             pod2html pod2latex pod2man pod2text pod2usage \
1263             podchecker podselect
1264         -cd ..\utils && del /f h2ph splain perlbug pl2pm c2ph pstruct h2xs \
1265             perldoc perlivp dprofpp libnetcfg enc2xs piconv cpan *.bat \
1266             xsubpp instmodsh prove ptar ptardiff shasum corelist config_data
1267         -cd ..\x2p && del /f find2perl s2p psed *.bat
1268         -del /f ..\config.sh ..\splittree.pl perlmain.c dlutils.c config.h.new
1269         -del /f $(CONFIGPM)
1270         -del /f bin\*.bat
1271         -del /f perllibst.h
1272         -del /f $(PERLEXE_ICO) perl.base
1273         -cd .. && del /s *.lib *.map *.pdb *.ilk *.bs *$(o) .exists pm_to_blib
1274         -cd $(EXTDIR) && del /s *.def Makefile Makefile.old
1275         -if exist $(AUTODIR) rmdir /s /q $(AUTODIR)
1276         -if exist $(COREDIR) rmdir /s /q $(COREDIR)
1277         -if exist pod2htmd.tmp del pod2htmd.tmp
1278         -if exist pod2htmi.tmp del pod2htmi.tmp
1279         -if exist $(HTMLDIR) rmdir /s /q $(HTMLDIR)
1280
1281 install : all installbare installhtml
1282
1283 installbare : utils
1284         $(PERLEXE) ..\installperl
1285         if exist $(WPERLEXE) $(XCOPY) $(WPERLEXE) $(INST_BIN)\*.*
1286         $(XCOPY) $(GLOBEXE) $(INST_BIN)\*.*
1287         if exist ..\perl*.pdb $(XCOPY) ..\perl*.pdb $(INST_BIN)\*.*
1288         if exist ..\x2p\a2p.pdb $(XCOPY) ..\x2p\a2p.pdb $(INST_BIN)\*.*
1289         $(XCOPY) bin\*.bat $(INST_SCRIPT)\*.*
1290
1291 installhtml : doc
1292         $(RCOPY) $(HTMLDIR)\*.* $(INST_HTML)\*.*
1293
1294 inst_lib : $(CONFIGPM)
1295         copy splittree.pl ..
1296         $(MINIPERL) -I..\lib ..\splittree.pl "../LIB" $(AUTODIR)
1297         $(RCOPY) ..\lib $(INST_LIB)\*.*
1298
1299 $(UNIDATAFILES) : $(MINIPERL) $(CONFIGPM) ..\lib\unicore\mktables
1300         cd ..\lib\unicore && \
1301         ..\$(MINIPERL) -I.. mktables -check $@ $(FIRSTUNIFILE)
1302
1303 minitest : $(MINIPERL) $(GLOBEXE) $(CONFIGPM) utils $(UNIDATAFILES)
1304         $(XCOPY) $(MINIPERL) ..\t\$(NULL)
1305         if exist ..\t\perl.exe del /f ..\t\perl.exe
1306         rename ..\t\miniperl.exe perl.exe
1307         $(XCOPY) $(GLOBEXE) ..\t\$(NULL)
1308         attrib -r ..\t\*.*
1309         cd ..\t && \
1310         $(MINIPERL) -I..\lib harness base/*.t comp/*.t cmd/*.t io/*.t op/*.t pragma/*.t
1311
1312 test-prep : all utils
1313         $(XCOPY) $(PERLEXE) ..\t\$(NULL)
1314         $(XCOPY) $(PERLDLL) ..\t\$(NULL)
1315         $(XCOPY) $(GLOBEXE) ..\t\$(NULL)
1316
1317 test : test-prep
1318         cd ..\t
1319         $(PERLEXE) -I..\lib harness $(TEST_SWITCHES) $(TEST_FILES)
1320         cd ..\win32
1321
1322 test-reonly : reonly utils
1323         $(XCOPY) $(PERLEXE) ..\t\$(NULL)
1324         $(XCOPY) $(PERLDLL) ..\t\$(NULL)
1325         $(XCOPY) $(GLOBEXE) ..\t\$(NULL)
1326         cd ..\t
1327         $(PERLEXE) -I..\lib harness $(OPT) -re \bpat\b \breg \bre\b $(EXTRA)
1328         cd ..\win32
1329
1330 regen : 
1331         cd ..
1332         regen.pl
1333         cd win32
1334
1335 test-notty : test-prep
1336         set PERL_SKIP_TTY_TEST=1
1337         cd ..\t
1338         $(PERLEXE) -I..\lib harness $(TEST_SWITCHES) $(TEST_FILES)
1339         cd ..\win32
1340
1341 _test : 
1342        $(XCOPY) $(PERLEXE) ..\t\$(NULL)
1343        $(XCOPY) $(PERLDLL) ..\t\$(NULL)
1344        $(XCOPY) $(GLOBEXE) ..\t\$(NULL)
1345        cd ..\t
1346        $(PERLEXE) -I..\lib harness $(TEST_SWITCHES) $(TEST_FILES)
1347        cd ..\win32
1348
1349 _clean :
1350         -@$(DEL) miniperlmain$(o)
1351         -@$(DEL) $(MINIPERL)
1352         -@$(DEL) perlglob$(o)
1353         -@$(DEL) perlmain$(o)
1354         -@$(DEL) config.w32
1355         -@$(DEL) config.h
1356         -@$(DEL) $(GLOBEXE)
1357         -@$(DEL) $(PERLEXE)
1358         -@$(DEL) $(WPERLEXE)
1359         -@$(DEL) $(PERLDLL)
1360         -@$(DEL) $(CORE_OBJ)
1361         -if exist $(MINIDIR) rmdir /s /q $(MINIDIR)
1362         -if exist $(UNIDATADIR1) rmdir /s /q $(UNIDATADIR1)
1363         -if exist $(UNIDATADIR2) rmdir /s /q $(UNIDATADIR2)
1364         -@$(DEL) $(UNIDATAFILES)
1365         -@$(DEL) $(WIN32_OBJ)
1366         -@$(DEL) $(DLL_OBJ)
1367         -@$(DEL) $(X2P_OBJ)
1368         -@$(DEL) ..\*$(o) ..\*.lib ..\*.exp *$(o) *.lib *.exp *.res
1369         -@$(DEL) ..\t\*.exe ..\t\*.dll ..\t\*.bat
1370         -@$(DEL) ..\x2p\*.exe ..\x2p\*.bat
1371         -@$(DEL) *.ilk
1372         -@$(DEL) *.pdb
1373         -@$(DEL) Extensions_static
1374
1375 clean : Extensions_clean _clean
1376
1377 realclean : Extensions_realclean MakePPPort_clean _clean
1378
1379 # Handy way to run perlbug -ok without having to install and run the
1380 # installed perlbug. We don't re-run the tests here - we trust the user.
1381 # Please *don't* use this unless all tests pass.
1382 # If you want to report test failures, use "nmake nok" instead.
1383 ok: utils
1384         $(PERLEXE) -I..\lib ..\utils\perlbug -ok -s "(UNINSTALLED)"
1385
1386 okfile: utils
1387         $(PERLEXE) -I..\lib ..\utils\perlbug -ok -s "(UNINSTALLED)" -F perl.ok
1388
1389 nok: utils
1390         $(PERLEXE) -I..\lib ..\utils\perlbug -nok -s "(UNINSTALLED)"
1391
1392 nokfile: utils
1393         $(PERLEXE) -I..\lib ..\utils\perlbug -nok -s "(UNINSTALLED)" -F perl.nok