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