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