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