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