e72963a7dd652de65f9589ee674a910e38d0a98b
[p5sagit/p5-mst-13.2.git] / win32 / Makefile
1 #
2 # Makefile to build perl on Windows NT using Microsoft NMAKE.
3 #
4 # This is set up to build a perl.exe that runs off a shared library
5 # (perl.dll).  Also makes individual DLLs for the XS extensions.
6 #
7
8 ##
9 ## Build configuration.  Edit the values below to suit your needs.
10 ##
11
12 #
13 # Set these to wherever you want "nmake install" to put your
14 # newly built perl.
15 #
16 INST_DRV        = c:
17 INST_TOP        = $(INST_DRV)\perl
18
19 #
20 # Comment this out if you DON'T want your perl installation to be versioned.
21 # This means that the new installation will overwrite any files from the
22 # old installation at the same INST_TOP location.  Leaving it enabled is
23 # the safest route, as perl adds the extra version directory to all the
24 # locations it installs files to.  If you disable it, an alternative
25 # versioned installation can be obtained by setting INST_TOP above to a
26 # path that includes an arbitrary version string.
27 #
28 INST_VER        = \5.00475
29
30 #
31 # uncomment to enable threads-capabilities
32 #
33 #USE_THREADS    = define
34
35 #
36 # uncomment next line if you are using Visual C++ 2.x
37 #
38 #CCTYPE         = MSVC20
39
40 #
41 # uncomment next line if you want to use the perl object
42 # Currently, this cannot be enabled if you ask for threads above
43 #
44 #OBJECT         = -DPERL_OBJECT
45
46 #
47 # uncomment next line if you want debug version of perl (big,slow)
48 #
49 #CFG            = Debug
50
51 #
52 # uncomment to enable use of PerlCRT.DLL.  Highly recommended.  It has
53 # patches that fix known bugs in MSCVRT.DLL.  You will need to download it
54 # from: <TBD> and follow the directions in the package to install.
55 #
56 #USE_PERLCRT    = define
57
58 #
59 # uncomment to enable linking with setargv.obj under the Visual C
60 # compiler. Setting this options enables perl to expand wildcards in
61 # arguments, but it may be harder to use alternate methods like
62 # File::DosGlob that are more powerful.  This option is supported only with
63 # Visual C.
64 #
65 #USE_SETARGV    = define
66
67 #
68 # if you have the source for des_fcrypt(), uncomment this and make sure the
69 # file exists (see README.win32).  File should be located in the same
70 # directory as this file.  Not (yet) supported with PERL_OBJECT.
71 #
72 #CRYPT_SRC      = des_fcrypt.c
73
74 #
75 # if you didn't set CRYPT_SRC and if you have des_fcrypt() available in a
76 # library, uncomment this, and make sure the library exists (see README.win32)
77 # Specify the full pathname of the library.
78 #
79 #CRYPT_LIB      = des_fcrypt.lib
80
81 #
82 # set this if you wish to use perl's malloc
83 # WARNING: Turning this on/off WILL break binary compatibility with extensions
84 # you may have compiled with/without it.  Be prepared to recompile all
85 # extensions if you change the default.  Currently, this cannot be enabled
86 # if you ask for PERL_OBJECT above.
87 #
88 #PERL_MALLOC    = define
89
90 #
91 # set the install locations of the compiler include/libraries
92 #
93 #CCHOME         = f:\msvc20
94 CCHOME          = $(MSVCDIR)
95 CCINCDIR        = $(CCHOME)\include
96 CCLIBDIR        = $(CCHOME)\lib
97
98 #
99 # specify space-separated list of extra directories to look for libraries
100 #
101 EXTRALIBDIRS    =
102
103 #
104 # set this to your email address (perl will guess a value from
105 # from your loginname and your hostname, which may not be right)
106 #
107 #EMAIL          = 
108
109 ##
110 ## Build configuration ends.
111 ##
112
113 ##################### CHANGE THESE ONLY IF YOU MUST #####################
114
115 !IF "$(CRYPT_SRC)$(CRYPT_LIB)" == ""
116 D_CRYPT         = undef
117 !ELSE
118 D_CRYPT         = define
119 CRYPT_FLAG      = -DHAVE_DES_FCRYPT
120 !ENDIF
121
122 !IF "$(OBJECT)" != ""
123 PERL_MALLOC     = undef
124 !ENDIF
125
126 !IF "$(PERL_MALLOC)" == ""
127 PERL_MALLOC     = undef
128 !ENDIF
129
130 !IF "$(USE_THREADS)" == ""
131 USE_THREADS     = undef
132 !ENDIF
133
134 #BUILDOPT       = -DMULTIPLICITY 
135 #BUILDOPT       = -DPERL_GLOBAL_STRUCT -DMULTIPLICITY
136 # -DUSE_PERLIO -D__STDC__=1 -DUSE_SFIO -DI_SFIO -I\sfio97\include
137
138 !IF "$(PROCESSOR_ARCHITECTURE)" == ""
139 PROCESSOR_ARCHITECTURE  = x86
140 !ENDIF
141
142 !IF "$(OBJECT)" != ""
143 ARCHNAME        = MSWin32-$(PROCESSOR_ARCHITECTURE)-object
144 !ELSE
145 !IF "$(USE_THREADS)" == "define"
146 ARCHNAME        = MSWin32-$(PROCESSOR_ARCHITECTURE)-thread
147 !ELSE
148 ARCHNAME        = MSWin32-$(PROCESSOR_ARCHITECTURE)
149 !ENDIF
150 !ENDIF
151
152 ARCHDIR         = ..\lib\$(ARCHNAME)
153 COREDIR         = ..\lib\CORE
154 AUTODIR         = ..\lib\auto
155
156 #
157 # Programs to compile, build .lib files and link
158 #
159
160 CC              = cl.exe
161 LINK32          = link.exe
162 LIB32           = $(LINK32) -lib
163
164 #
165 # Options
166 #
167
168 RUNTIME         = -MD
169 INCLUDES        = -I$(COREDIR) -I.\include -I. -I..
170 #PCHFLAGS       = -Fpc:\temp\vcmoduls.pch -YX 
171 DEFINES         = -DWIN32 -D_CONSOLE -DNO_STRICT $(BUILDOPT) $(CRYPT_FLAG)
172 LOCDEFS         = -DPERLDLL -DPERL_CORE
173 SUBSYS          = console
174 CXX_FLAG        = -TP -GX
175
176 !IF "$(USE_PERLCRT)" == ""
177 !   IF  "$(CFG)" == "Debug"
178 PERLCRTLIBC     = msvcrtd.lib
179 !   ELSE
180 PERLCRTLIBC     = msvcrt.lib
181 !   ENDIF
182 !ELSE
183 !   IF  "$(CFG)" == "Debug"
184 PERLCRTLIBC     = PerlCRTD.lib
185 !   ELSE
186 PERLCRTLIBC     = PerlCRT.lib
187 !   ENDIF
188 !ENDIF
189
190 !IF "$(RUNTIME)" == "-MD"
191 LIBC            = $(PERLCRTLIBC)
192 !ELSE
193 LIBC            = libcmt.lib
194 !ENDIF
195
196 !IF  "$(CFG)" == "Debug"
197 !  IF "$(CCTYPE)" == "MSVC20"
198 OPTIMIZE        = -Od $(RUNTIME) -Z7 -D_DEBUG -DDEBUGGING
199 !  ELSE
200 OPTIMIZE        = -Od $(RUNTIME)d -Zi -D_DEBUG -DDEBUGGING
201 !  ENDIF
202 LINK_DBG        = -debug -pdb:none
203 !ELSE
204 !  IF "$(CCTYPE)" == "MSVC20"
205 OPTIMIZE        = -Od $(RUNTIME) -DNDEBUG
206 !  ELSE
207 OPTIMIZE        = -Od $(RUNTIME) -DNDEBUG
208 !  ENDIF
209 LINK_DBG        = -release
210 !ENDIF
211
212 !IF "$(OBJECT)" != ""
213 OPTIMIZE        = $(OPTIMIZE) $(CXX_FLAG)
214 !ENDIF
215
216 LIBBASEFILES    = $(CRYPT_LIB) oldnames.lib kernel32.lib user32.lib gdi32.lib \
217                 winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib \
218                 oleaut32.lib netapi32.lib uuid.lib wsock32.lib mpr.lib winmm.lib \
219                 version.lib odbc32.lib odbccp32.lib
220
221 # we add LIBC here, since we may be using PerlCRT.dll
222 LIBFILES        = $(LIBBASEFILES) $(LIBC)
223
224 CFLAGS          = -nologo -Gf -W3 $(INCLUDES) $(DEFINES) $(LOCDEFS) \
225                 $(PCHFLAGS) $(OPTIMIZE)
226 LINK_FLAGS      = -nologo -nodefaultlib $(LINK_DBG) -machine:$(PROCESSOR_ARCHITECTURE)
227 OBJOUT_FLAG     = -Fo
228 EXEOUT_FLAG     = -Fe
229
230 CFLAGS_O        = $(CFLAGS) $(OBJECT)
231
232 #################### do not edit below this line #######################
233 ############# NO USER-SERVICEABLE PARTS BEYOND THIS POINT ##############
234
235 o = .obj
236
237 #
238 # Rules
239
240
241 .SUFFIXES : .c $(o) .dll .lib .exe
242
243 .c$(o):
244         $(CC) -c -I$(<D) $(CFLAGS_O) $(OBJOUT_FLAG)$@ $<
245
246 .y.c:
247         $(NOOP)
248
249 $(o).dll:
250         $(LINK32) -dll -subsystem:windows -implib:$(*B).lib -def:$(*B).def \
251             -out:$@ $(LINK_FLAGS) $(LIBFILES) $< $(LIBPERL)  
252
253 #
254 INST_BIN        = $(INST_TOP)$(INST_VER)\bin\$(ARCHNAME)
255 INST_SCRIPT     = $(INST_TOP)$(INST_VER)\bin
256 INST_LIB        = $(INST_TOP)$(INST_VER)\lib
257 INST_POD        = $(INST_LIB)\pod
258 INST_HTML       = $(INST_POD)\html
259 LIBDIR          = ..\lib
260 EXTDIR          = ..\ext
261 PODDIR          = ..\pod
262 EXTUTILSDIR     = $(LIBDIR)\extutils
263
264 #
265 # various targets
266 !IF "$(OBJECT)" == "-DPERL_OBJECT"
267 PERLIMPLIB      = ..\perlcore.lib
268 PERLDLL         = ..\perlcore.dll
269 CAPILIB         = $(COREDIR)\PerlCAPI.lib
270 !ELSE
271 PERLIMPLIB      = ..\perl.lib
272 PERLDLL         = ..\perl.dll
273 CAPILIB         =
274 !ENDIF
275
276 MINIPERL        = ..\miniperl.exe
277 MINIDIR         = .\mini
278 PERLEXE         = ..\perl.exe
279 GLOBEXE         = ..\perlglob.exe
280 CONFIGPM        = ..\lib\Config.pm
281 MINIMOD         = ..\lib\ExtUtils\Miniperl.pm
282 X2P             = ..\x2p\a2p.exe
283
284 PL2BAT          = bin\pl2bat.pl
285 GLOBBAT         = bin\perlglob.bat
286
287 UTILS           =                       \
288                 ..\utils\h2ph           \
289                 ..\utils\splain         \
290                 ..\utils\perlbug        \
291                 ..\utils\pl2pm          \
292                 ..\utils\c2ph           \
293                 ..\utils\h2xs           \
294                 ..\utils\perldoc        \
295                 ..\utils\pstruct        \
296                 ..\utils\perlcc         \
297                 ..\pod\checkpods        \
298                 ..\pod\pod2html         \
299                 ..\pod\pod2latex        \
300                 ..\pod\pod2man          \
301                 ..\pod\pod2text         \
302                 ..\x2p\find2perl        \
303                 ..\x2p\s2p              \
304                 bin\www.pl              \
305                 bin\runperl.pl          \
306                 bin\pl2bat.pl           \
307                 bin\perlglob.pl         \
308                 bin\search.pl
309
310 MAKE            = nmake -nologo
311
312 CFGSH_TMPL      = config.vc
313 CFGH_TMPL       = config_H.vc
314
315 !IF "$(USE_PERLCRT)" == ""
316 PERL95EXE       = ..\perl95.exe
317 !ENDIF
318
319 XCOPY           = xcopy /f /r /i /d
320 RCOPY           = xcopy /f /r /i /e /d
321 NOOP            = @echo
322 NULL            =
323
324 #
325 # filenames given to xsubpp must have forward slashes (since it puts
326 # full pathnames in #line strings)
327 XSUBPP          = ..\$(MINIPERL) -I..\..\lib ..\$(EXTUTILSDIR)\xsubpp \
328                 -C++ -prototypes
329
330 MICROCORE_SRC   =               \
331                 ..\av.c         \
332                 ..\byterun.c    \
333                 ..\deb.c        \
334                 ..\doio.c       \
335                 ..\doop.c       \
336                 ..\dump.c       \
337                 ..\globals.c    \
338                 ..\gv.c         \
339                 ..\hv.c         \
340                 ..\mg.c         \
341                 ..\op.c         \
342                 ..\perl.c       \
343                 ..\perly.c      \
344                 ..\pp.c         \
345                 ..\pp_ctl.c     \
346                 ..\pp_hot.c     \
347                 ..\pp_sys.c     \
348                 ..\regcomp.c    \
349                 ..\regexec.c    \
350                 ..\run.c        \
351                 ..\scope.c      \
352                 ..\sv.c         \
353                 ..\taint.c      \
354                 ..\toke.c       \
355                 ..\universal.c  \
356                 ..\util.c
357
358 !IF "$(PERL_MALLOC)" == "define"
359 EXTRACORE_SRC   = $(EXTRACORE_SRC) ..\malloc.c
360 !ENDIF
361
362 !IF "$(OBJECT)" == ""
363 EXTRACORE_SRC   = $(EXTRACORE_SRC) ..\perlio.c
364 !ENDIF
365
366 WIN32_SRC       =               \
367                 .\win32.c       \
368                 .\win32sck.c
369
370 !IF "$(USE_THREADS)" == "define"
371 WIN32_SRC       = $(WIN32_SRC) .\win32thread.c 
372 !ENDIF
373
374 !IF "$(CRYPT_SRC)" != ""
375 WIN32_SRC       = $(WIN32_SRC) .\$(CRYPT_SRC)
376 !ENDIF
377
378 PERL95_SRC      =               \
379                 perl95.c        \
380                 win32mt.c       \
381                 win32sckmt.c
382
383 !IF "$(CRYPT_SRC)" != ""
384 PERL95_SRC      = $(PERL95_SRC) .\$(CRYPT_SRC)
385 !ENDIF
386
387 DLL_SRC         = $(DYNALOADER).c
388
389
390 !IF "$(OBJECT)" == ""
391 DLL_SRC         = $(DLL_SRC) perllib.c
392 !ENDIF
393
394 X2P_SRC         =               \
395                 ..\x2p\a2p.c    \
396                 ..\x2p\hash.c   \
397                 ..\x2p\str.c    \
398                 ..\x2p\util.c   \
399                 ..\x2p\walk.c
400
401 CORE_NOCFG_H    =               \
402                 ..\av.h         \
403                 ..\byterun.h    \
404                 ..\bytecode.h   \
405                 ..\cop.h        \
406                 ..\cv.h         \
407                 ..\dosish.h     \
408                 ..\embed.h      \
409                 ..\form.h       \
410                 ..\gv.h         \
411                 ..\handy.h      \
412                 ..\hv.h         \
413                 ..\iperlsys.h   \
414                 ..\mg.h         \
415                 ..\nostdio.h    \
416                 ..\op.h         \
417                 ..\opcode.h     \
418                 ..\perl.h       \
419                 ..\perlsdio.h   \
420                 ..\perlsfio.h   \
421                 ..\perly.h      \
422                 ..\pp.h         \
423                 ..\proto.h      \
424                 ..\regexp.h     \
425                 ..\scope.h      \
426                 ..\sv.h         \
427                 ..\thread.h     \
428                 ..\unixish.h    \
429                 ..\util.h       \
430                 ..\XSUB.h       \
431                 ..\EXTERN.h     \
432                 ..\perlvars.h   \
433                 ..\intrpvar.h   \
434                 ..\thrdvar.h    \
435                 .\include\dirent.h      \
436                 .\include\netdb.h       \
437                 .\include\sys\socket.h  \
438                 .\win32.h
439
440 CORE_H          = $(CORE_NOCFG_H) .\config.h
441
442 MICROCORE_OBJ   = $(MICROCORE_SRC:.c=.obj)
443 CORE_OBJ        = $(MICROCORE_OBJ) $(EXTRACORE_SRC:.c=.obj)
444 WIN32_OBJ       = $(WIN32_SRC:.c=.obj)
445 MINICORE_OBJ    = $(MICROCORE_OBJ:..\=.\mini\)  \
446                   $(MINIDIR)\miniperlmain$(o)   \
447                   $(MINIDIR)\perlio$(o)
448 MINIWIN32_OBJ   = $(WIN32_OBJ:.\=.\mini\)
449 MINI_OBJ        = $(MINICORE_OBJ) $(MINIWIN32_OBJ)
450 PERL95_OBJ      = $(PERL95_SRC:.c=.obj)
451 DLL_OBJ         = $(DLL_SRC:.c=.obj)
452 X2P_OBJ         = $(X2P_SRC:.c=.obj)
453
454 PERLDLL_OBJ     = $(CORE_OBJ)
455 PERLEXE_OBJ     = perlmain$(o)
456
457 !IF "$(OBJECT)" == ""
458 PERLDLL_OBJ     = $(PERLDLL_OBJ) $(WIN32_OBJ) $(DLL_OBJ)
459 !ELSE
460 PERLEXE_OBJ     = $(PERLEXE_OBJ) $(WIN32_OBJ) $(DLL_OBJ)
461 PERL95_OBJ      = $(PERL95_OBJ) DynaLoadmt$(o)
462 !ENDIF
463
464 !IF "$(USE_SETARGV)" != ""
465 SETARGV_OBJ     = setargv$(o)
466 !ENDIF
467
468 DYNAMIC_EXT     = Socket IO Fcntl Opcode SDBM_File POSIX attrs Thread B re \
469                 Data/Dumper
470 STATIC_EXT      = DynaLoader
471 NONXS_EXT       = Errno
472
473 DYNALOADER      = $(EXTDIR)\DynaLoader\DynaLoader
474 SOCKET          = $(EXTDIR)\Socket\Socket
475 FCNTL           = $(EXTDIR)\Fcntl\Fcntl
476 OPCODE          = $(EXTDIR)\Opcode\Opcode
477 SDBM_FILE       = $(EXTDIR)\SDBM_File\SDBM_File
478 IO              = $(EXTDIR)\IO\IO
479 POSIX           = $(EXTDIR)\POSIX\POSIX
480 ATTRS           = $(EXTDIR)\attrs\attrs
481 THREAD          = $(EXTDIR)\Thread\Thread
482 B               = $(EXTDIR)\B\B
483 RE              = $(EXTDIR)\re\re
484 DUMPER          = $(EXTDIR)\Data\Dumper\Dumper
485 ERRNO           = $(EXTDIR)\Errno\Errno
486
487 SOCKET_DLL      = $(AUTODIR)\Socket\Socket.dll
488 FCNTL_DLL       = $(AUTODIR)\Fcntl\Fcntl.dll
489 OPCODE_DLL      = $(AUTODIR)\Opcode\Opcode.dll
490 SDBM_FILE_DLL   = $(AUTODIR)\SDBM_File\SDBM_File.dll
491 IO_DLL          = $(AUTODIR)\IO\IO.dll
492 POSIX_DLL       = $(AUTODIR)\POSIX\POSIX.dll
493 ATTRS_DLL       = $(AUTODIR)\attrs\attrs.dll
494 THREAD_DLL      = $(AUTODIR)\Thread\Thread.dll
495 B_DLL           = $(AUTODIR)\B\B.dll
496 DUMPER_DLL      = $(AUTODIR)\Data\Dumper\Dumper.dll
497 RE_DLL          = $(AUTODIR)\re\re.dll
498
499 ERRNO_PM        = $(LIBDIR)\Errno.pm
500
501 EXTENSION_C     =               \
502                 $(SOCKET).c     \
503                 $(FCNTL).c      \
504                 $(OPCODE).c     \
505                 $(SDBM_FILE).c  \
506                 $(IO).c         \
507                 $(POSIX).c      \
508                 $(ATTRS).c      \
509                 $(THREAD).c     \
510                 $(RE).c         \
511                 $(DUMPER).c     \
512                 $(B).c
513
514 EXTENSION_DLL   =               \
515                 $(SOCKET_DLL)   \
516                 $(FCNTL_DLL)    \
517                 $(OPCODE_DLL)   \
518                 $(SDBM_FILE_DLL)\
519                 $(IO_DLL)       \
520                 $(POSIX_DLL)    \
521                 $(ATTRS_DLL)    \
522                 $(DUMPER_DLL)   \
523                 $(B_DLL)
524
525 EXTENSION_PM    =               \
526                 $(ERRNO_PM)
527
528 !IF "$(OBJECT)" == ""
529 EXTENSION_DLL   =               \
530                 $(EXTENSION_DLL)\
531                 $(THREAD_DLL)   \
532                 $(RE_DLL)
533 !ENDIF
534
535 POD2HTML        = $(PODDIR)\pod2html
536 POD2MAN         = $(PODDIR)\pod2man
537 POD2LATEX       = $(PODDIR)\pod2latex
538 POD2TEXT        = $(PODDIR)\pod2text
539
540 CFG_VARS        =                                       \
541                 "INST_DRV=$(INST_DRV)"                  \
542                 "INST_TOP=$(INST_TOP)"                  \
543                 "INST_VER=$(INST_VER)"                  \
544                 "archname=$(ARCHNAME)"                  \
545                 "cc=$(CC)"                              \
546                 "ccflags=$(OPTIMIZE) $(DEFINES) $(OBJECT)"      \
547                 "cf_email=$(EMAIL)"                     \
548                 "d_crypt=$(D_CRYPT)"                    \
549                 "d_mymalloc=$(PERL_MALLOC)"             \
550                 "libs=$(LIBFILES)"                      \
551                 "incpath=$(CCINCDIR)"                   \
552                 "libperl=$(PERLIMPLIB:..\=)"                    \
553                 "libpth=$(CCLIBDIR) $(EXTRALIBDIRS)"    \
554                 "libc=$(LIBC)"                          \
555                 "make=nmake"                            \
556                 "static_ext=$(STATIC_EXT)"              \
557                 "dynamic_ext=$(DYNAMIC_EXT)"            \
558                 "nonxs_ext=$(NONXS_EXT)"                \
559                 "usethreads=$(USE_THREADS)"             \
560                 "LINK_FLAGS=$(LINK_FLAGS)"              \
561                 "optimize=$(OPTIMIZE)"
562
563 #
564 # Top targets
565 #
566
567 all : .\config.h $(GLOBEXE) $(MINIMOD) $(CONFIGPM) $(PERLEXE) $(PERL95EXE) \
568         $(CAPILIB) $(X2P) $(EXTENSION_DLL) $(EXTENSION_PM)
569
570 $(DYNALOADER)$(o) : $(DYNALOADER).c $(CORE_H) $(EXTDIR)\DynaLoader\dlutils.c
571
572 #------------------------------------------------------------
573
574 $(GLOBEXE) : perlglob$(o)
575         $(LINK32) $(LINK_FLAGS) $(LIBFILES) -out:$@ -subsystem:$(SUBSYS) \
576             perlglob$(o) setargv$(o) 
577
578 perlglob$(o)  : perlglob.c
579
580 config.w32 : $(CFGSH_TMPL)
581         copy $(CFGSH_TMPL) config.w32
582
583 .\config.h : $(CFGH_TMPL)
584         -del /f config.h
585         copy $(CFGH_TMPL) config.h
586
587 ..\config.sh : config.w32 $(MINIPERL) config_sh.PL
588         $(MINIPERL) -I..\lib config_sh.PL $(CFG_VARS) config.w32 > ..\config.sh
589
590 # this target is for when changes to the main config.sh happen
591 # edit config.{b,v,g}c and make this target once for each supported
592 # compiler (e.g. `dmake CCTYPE=BORLAND regen_config_h`)
593 regen_config_h:
594         perl config_sh.PL $(CFG_VARS) $(CFGSH_TMPL) > ..\config.sh
595         cd ..
596         -del /f perl.exe
597         perl configpm
598         cd win32
599         -del /f $(CFGH_TMPL)
600         -mkdir ..\lib\CORE
601         -perl -I..\lib config_h.PL "INST_VER=$(INST_VER)"
602         rename config.h $(CFGH_TMPL)
603
604 $(CONFIGPM) : $(MINIPERL) ..\config.sh config_h.PL ..\minimod.pl
605         cd .. && miniperl configpm
606         if exist lib\* $(RCOPY) lib\*.* ..\lib\$(NULL)
607         $(XCOPY) ..\*.h $(COREDIR)\*.*
608         $(XCOPY) *.h $(COREDIR)\*.*
609         $(XCOPY) ..\ext\re\re.pm $(LIBDIR)\*.*
610         $(RCOPY) include $(COREDIR)\*.*
611         $(MINIPERL) -I..\lib config_h.PL "INST_VER=$(INST_VER)" \
612             || $(MAKE) $(MAKEFLAGS) $(CONFIGPM)
613
614 $(MINIPERL) : $(MINIDIR) $(MINI_OBJ)
615         $(LINK32) -subsystem:console -out:$@ @<<
616         $(LINK_FLAGS) $(LIBFILES) $(MINI_OBJ)
617 <<
618
619 $(MINIDIR) :
620         if not exist "$(MINIDIR)" mkdir "$(MINIDIR)"
621
622 $(MINICORE_OBJ) : $(CORE_NOCFG_H)
623         $(CC) -c $(CFLAGS) $(OBJOUT_FLAG)$@ ..\$(*F).c
624
625 $(MINIWIN32_OBJ) : $(CORE_NOCFG_H)
626         $(CC) -c $(CFLAGS) $(OBJOUT_FLAG)$@ $(*F).c
627
628 # 1. we don't want to rebuild miniperl.exe when config.h changes
629 # 2. we don't want to rebuild miniperl.exe with non-default config.h
630 $(MINI_OBJ)     : $(CORE_NOCFG_H)
631
632 $(WIN32_OBJ)    : $(CORE_H)
633 $(CORE_OBJ)     : $(CORE_H)
634 $(DLL_OBJ)      : $(CORE_H)
635 $(PERL95_OBJ)   : $(CORE_H)
636 $(X2P_OBJ)      : $(CORE_H)
637
638 perldll.def : $(MINIPERL) $(CONFIGPM) ..\global.sym makedef.pl
639         $(MINIPERL) -w makedef.pl $(OPTIMIZE) $(DEFINES) $(OBJECT) \
640             CCTYPE=$(CCTYPE) > perldll.def
641
642 $(PERLDLL): perldll.def $(PERLDLL_OBJ)
643         $(LINK32) -dll -def:perldll.def -out:$@ @<<
644                 $(LINK_FLAGS) $(LIBFILES) $(PERLDLL_OBJ)
645 <<
646         $(XCOPY) $(PERLIMPLIB) $(COREDIR)
647
648 perl.def  : $(MINIPERL) makeperldef.pl
649         $(MINIPERL) -I..\lib makeperldef.pl $(NULL) > perl.def
650
651 $(MINIMOD) : $(MINIPERL) ..\minimod.pl
652         cd .. && miniperl minimod.pl > lib\ExtUtils\Miniperl.pm
653
654 ..\x2p\a2p$(o) : ..\x2p\a2p.c
655         $(CC) -I..\x2p $(CFLAGS) $(OBJOUT_FLAG)$@ -c ..\x2p\a2p.c
656
657 ..\x2p\hash$(o) : ..\x2p\hash.c
658         $(CC) -I..\x2p  $(CFLAGS) $(OBJOUT_FLAG)$@ -c ..\x2p\hash.c
659
660 ..\x2p\str$(o) : ..\x2p\str.c
661         $(CC) -I..\x2p  $(CFLAGS) $(OBJOUT_FLAG)$@ -c ..\x2p\str.c
662
663 ..\x2p\util$(o) : ..\x2p\util.c
664         $(CC) -I..\x2p  $(CFLAGS) $(OBJOUT_FLAG)$@ -c ..\x2p\util.c
665
666 ..\x2p\walk$(o) : ..\x2p\walk.c
667         $(CC) -I..\x2p  $(CFLAGS) $(OBJOUT_FLAG)$@ -c ..\x2p\walk.c
668
669 $(X2P) : $(MINIPERL) $(X2P_OBJ)
670         $(MINIPERL) ..\x2p\find2perl.PL
671         $(MINIPERL) ..\x2p\s2p.PL
672         $(LINK32) -subsystem:console -out:$@ @<<
673                 $(LINK_FLAGS) $(LIBFILES) $(X2P_OBJ)
674 <<
675
676 perlmain.c : runperl.c 
677         copy runperl.c perlmain.c
678
679 perlmain$(o) : perlmain.c
680         $(CC) $(CFLAGS_O) -UPERLDLL $(OBJOUT_FLAG)$@ -c perlmain.c
681
682 $(PERLEXE): $(PERLDLL) $(CONFIGPM) $(PERLEXE_OBJ)
683         $(LINK32) -subsystem:console -out:$@ $(LINK_FLAGS) $(LIBFILES) \
684             $(PERLEXE_OBJ) $(SETARGV_OBJ) $(PERLIMPLIB) 
685         copy splittree.pl .. 
686         $(MINIPERL) -I..\lib ..\splittree.pl "../LIB" $(AUTODIR)
687
688 !IF "$(USE_PERLCRT)" == ""
689
690 perl95.c : runperl.c 
691         copy runperl.c perl95.c
692
693 perl95$(o) : perl95.c
694         $(CC) $(CFLAGS_O) -MT -UPERLDLL -DWIN95FIX -c perl95.c
695
696 win32sckmt$(o) : win32sck.c
697         $(CC) $(CFLAGS_O) -MT -UPERLDLL -DWIN95FIX -c \
698             $(OBJOUT_FLAG)win32sckmt$(o) win32sck.c
699
700 win32mt$(o) : win32.c
701         $(CC) $(CFLAGS_O) -MT -UPERLDLL -DWIN95FIX -c \
702             $(OBJOUT_FLAG)win32mt$(o) win32.c
703
704 DynaLoadmt$(o) : $(DYNALOADER).c
705         $(CC) $(CFLAGS_O) -MT -UPERLDLL -DWIN95FIX -c \
706             $(OBJOUT_FLAG)DynaLoadmt$(o) $(DYNALOADER).c
707
708 $(PERL95EXE): $(PERLDLL) $(CONFIGPM) $(PERL95_OBJ)
709         $(LINK32) -subsystem:console -nodefaultlib -out:$@ $(LINK_FLAGS) \
710             $(LIBBASEFILES) $(PERL95_OBJ) $(SETARGV_OBJ) $(PERLIMPLIB) \
711             libcmt.lib
712
713 !ENDIF
714
715 $(DYNALOADER).c: $(MINIPERL) $(EXTDIR)\DynaLoader\dl_win32.xs $(CONFIGPM)
716         if not exist $(AUTODIR) mkdir $(AUTODIR)
717         cd $(EXTDIR)\$(*B)
718         ..\$(MINIPERL) -I..\..\lib $(*B)_pm.PL
719         cd ..\..\win32
720         $(XCOPY) $(EXTDIR)\$(*B)\$(*B).pm $(LIBDIR)\$(NULL)
721         cd $(EXTDIR)\$(*B)
722         $(XSUBPP) dl_win32.xs > $(*B).c
723         cd ..\..\win32
724
725 !IF "$(OBJECT)" == "-DPERL_OBJECT"
726 PerlCAPI.cpp : $(MINIPERL)
727         $(MINIPERL) GenCAPI.pl $(COREDIR)
728
729 PerlCAPI$(o) : PerlCAPI.cpp
730         $(CC) $(CFLAGS_O) $(RUNTIME) -UPERLDLL -c \
731             $(OBJOUT_FLAG)PerlCAPI$(o) PerlCAPI.cpp
732
733 $(CAPILIB) : PerlCAPI.cpp PerlCAPI$(o)
734         lib /OUT:$(CAPILIB) PerlCAPI$(o)
735 !ENDIF
736
737 $(EXTDIR)\DynaLoader\dl_win32.xs: dl_win32.xs
738         copy dl_win32.xs $(EXTDIR)\DynaLoader\dl_win32.xs
739
740 $(DUMPER_DLL): $(PERLEXE) $(DUMPER).xs
741         cd $(EXTDIR)\Data\$(*B)
742         ..\..\..\miniperl -I..\..\..\lib Makefile.PL INSTALLDIRS=perl
743         $(MAKE)
744         cd ..\..\..\win32
745
746 $(RE_DLL): $(PERLEXE) $(RE).xs
747         cd $(EXTDIR)\$(*B)
748         ..\..\miniperl -I..\..\lib Makefile.PL INSTALLDIRS=perl
749         $(MAKE)
750         cd ..\..\win32
751
752 $(B_DLL): $(PERLEXE) $(B).xs
753         cd $(EXTDIR)\$(*B)
754         ..\..\miniperl -I..\..\lib Makefile.PL INSTALLDIRS=perl
755         $(MAKE)
756         cd ..\..\win32
757
758 $(THREAD_DLL): $(PERLEXE) $(THREAD).xs
759         cd $(EXTDIR)\$(*B)
760         ..\..\miniperl -I..\..\lib Makefile.PL INSTALLDIRS=perl
761         $(MAKE)
762         cd ..\..\win32
763
764 $(ATTRS_DLL): $(PERLEXE) $(ATTRS).xs
765         cd $(EXTDIR)\$(*B)
766         ..\..\miniperl -I..\..\lib Makefile.PL INSTALLDIRS=perl
767         $(MAKE)
768         cd ..\..\win32
769
770 $(POSIX_DLL): $(PERLEXE) $(POSIX).xs
771         cd $(EXTDIR)\$(*B)
772         ..\..\miniperl -I..\..\lib Makefile.PL INSTALLDIRS=perl
773         $(MAKE)
774         cd ..\..\win32
775
776 $(IO_DLL): $(PERLEXE) $(IO).xs
777         cd $(EXTDIR)\$(*B)
778         ..\..\miniperl -I..\..\lib Makefile.PL INSTALLDIRS=perl
779         $(MAKE)
780         cd ..\..\win32
781
782 $(SDBM_FILE_DLL) : $(PERLEXE) $(SDBM_FILE).xs
783         cd $(EXTDIR)\$(*B)
784         ..\..\miniperl -I..\..\lib Makefile.PL INSTALLDIRS=perl
785         $(MAKE)
786         cd ..\..\win32
787
788 $(FCNTL_DLL): $(PERLEXE) $(FCNTL).xs
789         cd $(EXTDIR)\$(*B)
790         ..\..\miniperl -I..\..\lib Makefile.PL INSTALLDIRS=perl
791         $(MAKE)
792         cd ..\..\win32
793
794 $(OPCODE_DLL): $(PERLEXE) $(OPCODE).xs
795         cd $(EXTDIR)\$(*B)
796         ..\..\miniperl -I..\..\lib Makefile.PL INSTALLDIRS=perl
797         $(MAKE)
798         cd ..\..\win32
799
800 $(SOCKET_DLL): $(PERLEXE) $(SOCKET).xs
801         cd $(EXTDIR)\$(*B)
802         ..\..\miniperl -I..\..\lib Makefile.PL INSTALLDIRS=perl
803         $(MAKE)
804         cd ..\..\win32
805
806 $(ERRNO_PM): $(PERLEXE) $(ERRNO)_pm.PL
807         cd $(EXTDIR)\$(*B)
808         ..\..\miniperl -I..\..\lib Makefile.PL INSTALLDIRS=perl
809         $(MAKE)
810         cd ..\..\win32
811
812 doc: $(PERLEXE)
813         copy ..\README.win32 ..\pod\perlwin32.pod
814         $(PERLEXE) -I..\lib ..\installhtml --podroot=.. --htmldir=./html \
815             --podpath=pod:lib:ext:utils --htmlroot="file://$(INST_HTML::=|)" \
816             --libpod=perlfunc:perlguts:perlvar:perlrun:perlop --recurse
817
818 utils: $(PERLEXE) $(X2P)
819         cd ..\utils
820         $(MAKE) PERL=$(MINIPERL)
821         cd ..\pod
822         $(MAKE) -f ..\win32\pod.mak converters
823         cd ..\win32
824         $(PERLEXE) $(PL2BAT) $(UTILS)
825
826 distclean: clean
827         -del /f $(MINIPERL) $(PERLEXE) $(PERL95EXE) $(PERLDLL) $(GLOBEXE) \
828                 $(PERLIMPLIB) ..\miniperl.lib $(MINIMOD)
829         -del /f *.def *.map
830         -del /f $(EXTENSION_DLL) $(EXTENSION_PM)
831         -del /f $(EXTENSION_C) $(DYNALOADER).c $(ERRNO).pm
832         -del /f $(EXTDIR)\DynaLoader\dl_win32.xs
833         -del /f $(LIBDIR)\.exists $(LIBDIR)\attrs.pm $(LIBDIR)\DynaLoader.pm
834         -del /f $(LIBDIR)\Fcntl.pm $(LIBDIR)\IO.pm $(LIBDIR)\Opcode.pm
835         -del /f $(LIBDIR)\ops.pm $(LIBDIR)\Safe.pm $(LIBDIR)\Thread.pm
836         -del /f $(LIBDIR)\SDBM_File.pm $(LIBDIR)\Socket.pm $(LIBDIR)\POSIX.pm
837         -del /f $(LIBDIR)\B.pm $(LIBDIR)\O.pm $(LIBDIR)\re.pm
838         -del /f $(LIBDIR)\Data\Dumper.pm
839         -rmdir /s /q $(LIBDIR)\IO || rmdir /s $(LIBDIR)\IO
840         -rmdir /s /q $(LIBDIR)\Thread || rmdir /s $(LIBDIR)\Thread
841         -rmdir /s /q $(LIBDIR)\B || rmdir /s $(LIBDIR)\B
842         -rmdir /s /q $(LIBDIR)\Data || rmdir /s $(LIBDIR)\Data
843         -del /f $(PODDIR)\*.html
844         -del /f $(PODDIR)\*.bat
845         cd ..\utils
846         -del /f h2ph splain perlbug pl2pm c2ph h2xs perldoc pstruct
847         -del /f *.bat
848         cd ..\win32
849         cd ..\x2p
850         -del /f find2perl s2p
851         -del /f *.bat
852         cd ..\win32
853         -del /f ..\config.sh ..\splittree.pl perlmain.c dlutils.c config.h.new
854         -del /f $(CONFIGPM)
855         -del /f perl95.c
856         -del /f bin\*.bat
857         cd $(EXTDIR)
858         -del /s *.lib *.def *.map *.bs Makefile *$(o) pm_to_blib
859         cd ..\win32
860         -rmdir /s /q $(AUTODIR) || rmdir /s $(AUTODIR)
861         -rmdir /s /q $(COREDIR) || rmdir /s $(COREDIR)
862
863 install : all installbare installhtml
864
865 installbare : utils
866         $(PERLEXE) ..\installperl
867 !IF "$(USE_PERLCRT)" == ""
868         $(XCOPY) $(PERL95EXE) $(INST_BIN)\*.*
869 !ENDIF
870         $(XCOPY) $(GLOBEXE) $(INST_BIN)\*.*
871         $(XCOPY) bin\*.bat $(INST_SCRIPT)\*.*
872         $(XCOPY) bin\network.pl $(INST_LIB)\*.*
873
874 installhtml : doc
875         $(RCOPY) html\*.* $(INST_HTML)\*.*
876
877 inst_lib : $(CONFIGPM)
878         copy splittree.pl .. 
879         $(MINIPERL) -I..\lib ..\splittree.pl "../LIB" $(AUTODIR)
880         $(RCOPY) ..\lib $(INST_LIB)\*.*
881
882 minitest : $(MINIPERL) $(GLOBEXE) $(CONFIGPM) utils
883         $(XCOPY) $(MINIPERL) ..\t\perl.exe
884         $(XCOPY) $(GLOBEXE) ..\t\$(NULL)
885         attrib -r ..\t\*.*
886         copy test ..\t
887         cd ..\t
888         $(MINIPERL) -I..\lib test base/*.t comp/*.t cmd/*.t io/*.t op/*.t pragma/*.t
889         cd ..\win32
890
891 test-prep : all utils
892         $(XCOPY) $(PERLEXE) ..\t\$(NULL)
893         $(XCOPY) $(PERLDLL) ..\t\$(NULL)
894         $(XCOPY) $(GLOBEXE) ..\t\$(NULL)
895
896 test : test-prep
897         cd ..\t
898         $(PERLEXE) -I..\lib harness
899         cd ..\win32
900
901 test-notty : test-prep
902         set PERL_SKIP_TTY_TEST=1
903         cd ..\t
904         $(PERLEXE) -I..\lib harness
905         cd ..\win32
906
907 clean : 
908         -@erase miniperlmain$(o)
909         -@erase $(MINIPERL)
910         -@erase perlglob$(o)
911         -@erase perlmain$(o)
912         -@erase config.w32
913         -@erase /f config.h
914         -@erase PerlCAPI.cpp
915         -@erase $(GLOBEXE)
916         -@erase $(PERLEXE)
917         -@erase $(PERLDLL)
918         -@erase $(CORE_OBJ)
919         -@erase $(CAPILIB)
920         -rmdir /s /q $(MINIDIR) || rmdir /s $(MINIDIR)
921         -@erase $(WIN32_OBJ)
922         -@erase $(DLL_OBJ)
923         -@erase $(X2P_OBJ)
924         -@erase ..\*$(o) ..\*.lib ..\*.exp *$(o) *.lib *.exp
925         -@erase ..\t\*.exe ..\t\*.dll ..\t\*.bat
926         -@erase ..\x2p\*.exe ..\x2p\*.bat
927         -@erase *.ilk
928         -@erase *.pdb