This is a live mirror of the Perl 5 development currently hosted at https://github.com/perl/perl5
Correct errors in the use of multiple targets for bitcount.h and uudmap.h
[perl5.git] / win32 / makefile.mk
CommitLineData
1e71036e 1#
b6c85593 2# Makefile to build perl on Windows using DMAKE.
1e71036e 3# Supported compilers:
b6c85593 4# Microsoft Visual C++ 6.0 or later
a7d225ec 5# Borland C++ 5.02 or later
ceb0c681 6# MinGW with gcc-3.2 or later
b6c85593 7# Windows SDK 64-bit compiler and tools **experimental**
1e71036e
JH
8#
9# This is set up to build a perl.exe that runs off a shared library
cb47d8a5 10# (perl513.dll). Also makes individual DLLs for the XS extensions.
1e71036e
JH
11#
12
13##
14## Make sure you read README.win32 *before* you mess with anything here!
15##
16
17##
18## Build configuration. Edit the values below to suit your needs.
19##
20
21#
22# Set these to wherever you want "dmake install" to put your
23# newly built perl.
24#
25INST_DRV *= c:
26INST_TOP *= $(INST_DRV)\perl
27
28#
b86e806e
JD
29# Uncomment if you want to build a 32-bit Perl using a 32-bit compiler
30# on a 64-bit version of Windows.
31#WIN64 *= undef
32
33#
1e71036e
JH
34# Comment this out if you DON'T want your perl installation to be versioned.
35# This means that the new installation will overwrite any files from the
36# old installation at the same INST_TOP location. Leaving it enabled is
37# the safest route, as perl adds the extra version directory to all the
38# locations it installs files to. If you disable it, an alternative
39# versioned installation can be obtained by setting INST_TOP above to a
40# path that includes an arbitrary version string.
41#
aff3bd8f 42#INST_VER *= \5.13.4
1e71036e
JH
43
44#
45# Comment this out if you DON'T want your perl installation to have
46# architecture specific components. This means that architecture-
47# specific files will be installed along with the architecture-neutral
48# files. Leaving it enabled is safer and more flexible, in case you
49# want to build multiple flavors of perl and install them together in
50# the same location. Commenting it out gives you a simpler
51# installation that is easier to understand for beginners.
52#
ec25c072 53#INST_ARCH *= \$(ARCHNAME)
1e71036e
JH
54
55#
7ada00a0
SH
56# Uncomment this if you want perl to run
57# $Config{sitelibexp}\sitecustomize.pl
58# before anything else. This script can then be set up, for example,
59# to add additional entries to @INC.
60#
61#USE_SITECUST *= define
62
63#
1e71036e 64# uncomment to enable multiple interpreters. This is need for fork()
2cbbe5a1 65# emulation and for thread support.
1e71036e
JH
66#
67USE_MULTI *= define
68
69#
2cbbe5a1
NIS
70# Interpreter cloning/threads; now reasonably complete.
71# This should be enabled to get the fork() emulation.
72# This needs USE_MULTI above.
1e71036e
JH
73#
74USE_ITHREADS *= define
75
76#
77# uncomment to enable the implicit "host" layer for all system calls
2cbbe5a1
NIS
78# made by perl. This needs USE_MULTI above.
79# This is also needed to get fork().
1e71036e
JH
80#
81USE_IMP_SYS *= define
82
83#
2cbbe5a1
NIS
84# Comment out next assign to disable perl's I/O subsystem and use compiler's
85# stdio for IO - depending on your compiler vendor and run time library you may
86# then get a number of fails from make test i.e. bugs - complain to them not us ;-).
87# You will also be unable to take full advantage of perl5.8's support for multiple
88# encodings and may see lower IO performance. You have been warned.
4a9d6100
GS
89USE_PERLIO *= define
90
91#
92# Comment this out if you don't want to enable large file support for
93# some reason. Should normally only be changed to maintain compatibility
94# with an older release of perl.
bdb4cb88 95USE_LARGE_FILES *= define
1e71036e
JH
96
97#
1e71036e
JH
98# uncomment exactly one of the following
99#
1c847d4b 100# Visual C++ 6.x (aka Visual C++ 98)
e2736246 101#CCTYPE *= MSVC60
1c847d4b 102# Visual C++ Toolkit 2003 (aka Visual C++ 7.x) (free command-line tools)
da2c7419 103#CCTYPE *= MSVC70FREE
1c847d4b 104# Visual C++ .NET 2003 (aka Visual C++ 7.x) (full version)
da2c7419 105#CCTYPE *= MSVC70
1c847d4b
SH
106# Visual C++ 2005 Express Edition (aka Visual C++ 8.x) (free version)
107#CCTYPE *= MSVC80FREE
108# Visual C++ 2005 (aka Visual C++ 8.x) (full version)
109#CCTYPE *= MSVC80
4a3cf07b
SH
110# Visual C++ 2008 Express Edition (aka Visual C++ 9.x) (free version)
111#CCTYPE *= MSVC90FREE
112# Visual C++ 2008 (aka Visual C++ 9.x) (full version)
113#CCTYPE *= MSVC90
1e71036e
JH
114# Borland 5.02 or later
115#CCTYPE *= BORLAND
ceb0c681 116# MinGW or mingw-w64 with gcc-3.2 or later
e2736246 117CCTYPE *= GCC
1e71036e
JH
118
119#
120# uncomment this if your Borland compiler is older than v5.4.
bdb4cb88 121#BCCOLD *= define
1e71036e
JH
122#
123# uncomment this if you want to use Borland's VCL as your CRT
bdb4cb88 124#BCCVCL *= define
1e71036e
JH
125
126#
127# uncomment this if you are compiling under Windows 95/98 and command.com
128# (not needed if you're running under 4DOS/NT 6.01 or later)
129#IS_WIN95 *= define
130
131#
132# uncomment next line if you want debug version of perl (big,slow)
133# If not enabled, we automatically try to use maximum optimization
134# with all compilers that are known to have a working optimizer.
135#
2cbbe5a1 136#CFG *= Debug
1e71036e
JH
137
138#
1e71036e
JH
139# uncomment to enable linking with setargv.obj under the Visual C
140# compiler. Setting this options enables perl to expand wildcards in
141# arguments, but it may be harder to use alternate methods like
142# File::DosGlob that are more powerful. This option is supported only with
143# Visual C.
144#
145#USE_SETARGV *= define
146
147#
4ace4afb
SH
148# if you want to have the crypt() builtin function implemented, leave this or
149# CRYPT_LIB uncommented. The fcrypt.c file named here contains a suitable
150# version of des_fcrypt().
1e71036e 151#
4ace4afb 152CRYPT_SRC *= fcrypt.c
1e71036e
JH
153
154#
155# if you didn't set CRYPT_SRC and if you have des_fcrypt() available in a
156# library, uncomment this, and make sure the library exists (see README.win32)
157# Specify the full pathname of the library.
158#
159#CRYPT_LIB *= fcrypt.lib
160
161#
162# set this if you wish to use perl's malloc
163# WARNING: Turning this on/off WILL break binary compatibility with extensions
164# you may have compiled with/without it. Be prepared to recompile all
165# extensions if you change the default. Currently, this cannot be enabled
166# if you ask for USE_IMP_SYS above.
167#
c800dd8b 168#PERL_MALLOC *= define
8bcd5811
VK
169
170#
171# set this to enable debugging mstats
172# This must be enabled to use the Devel::Peek::mstat() function. This cannot
173# be enabled without PERL_MALLOC as well.
174#
646e33b6 175#DEBUG_MSTATS *= define
1e71036e
JH
176
177#
ed2eab3f
SH
178# set this to additionally provide a statically linked perl-static.exe.
179# Note that dynamic loading will not work with this perl, so you must
a1f2e719 180# include required modules statically using the STATIC_EXT or ALL_STATIC
cb47d8a5 181# variables below. A static library perl513s.lib will also be created.
ed2eab3f
SH
182# Ordinary perl.exe is not affected by this option.
183#
184#BUILD_STATIC *= define
185
186#
a1f2e719
VK
187# in addition to BUILD_STATIC the option ALL_STATIC makes *every*
188# extension get statically built
189# This will result in a very large perl executable, but the main purpose
190# is to have proper linking set so as to be able to create miscellaneous
191# executables with different built-in extensions
192#
193#ALL_STATIC *= define
194
195#
1e71036e
JH
196# set the install locations of the compiler include/libraries
197# Running VCVARS32.BAT is *required* when using Visual C.
198# Some versions of Visual C don't define MSVCDIR in the environment,
199# so you may have to set CCHOME explicitly (spaces in the path name should
200# not be quoted)
201#
c572eed0 202.IF "$(CCTYPE)" == "BORLAND"
8169a885 203CCHOME *= C:\Borland\BCC55
c572eed0
NIS
204.ELIF "$(CCTYPE)" == "GCC"
205CCHOME *= C:\MinGW
206.ELSE
1e71036e 207CCHOME *= $(MSVCDIR)
c572eed0 208.ENDIF
1e71036e
JH
209
210#
fa58a56f
S
211# If building with gcc-4.x.x (or x86_64-w64-mingw32-gcc-4.x.x), then
212# uncomment the following assignment to GCC_4XX, make sure that CCHOME
213# has been set correctly above, and uncomment the appropriate
214# GCCHELPERDLL line.
215# The name of the dll can change, depending upon which vendor has supplied
216# your 4.x.x compiler, and upon the values of "x".
217# (The dll will be in your mingw/bin folder, so check there if you're
218# unsure about the correct name.)
219# Without these corrections, the op/taint.t test script will fail.
220#
221#GCC_4XX *= define
222#GCCHELPERDLL *= $(CCHOME)\bin\libgcc_s_sjlj-1.dll
223#GCCHELPERDLL *= $(CCHOME)\bin\libgcc_s_dw2-1.dll
224#GCCHELPERDLL *= $(CCHOME)\bin\libgcc_s_1.dll
225
226#
227# uncomment this if you are using x86_64-w64-mingw32 cross-compiler
228# ie if your gcc executable is called 'x86_64-w64-mingw32-gcc'
229# instead of the usual 'gcc'.
230#
231#GCCCROSS *= define
232
233#
23ae7f17
S
234# Following sets $Config{incpath} and $Config{libpth}
235#
236
237.IF "$(GCCCROSS)" == "define"
238CCINCDIR *= $(CCHOME)\mingw\include
239CCLIBDIR *= $(CCHOME)\mingw\lib
240.ELSE
241CCINCDIR *= $(CCHOME)\include
242CCLIBDIR *= $(CCHOME)\lib
243.ENDIF
244
245#
1e71036e
JH
246# Additional compiler flags can be specified here.
247#
2e30e1e1 248BUILDOPT *= $(BUILDOPTEXTRA)
1e71036e
JH
249
250#
2eb87578
SH
251# Adding -DPERL_HASH_SEED_EXPLICIT will disable randomization of Perl's
252# internal hash function unless the PERL_HASH_SEED environment variable is set.
253# Alternatively, adding -DNO_HASH_SEED will completely disable the
254# randomization feature.
255# The latter is required to maintain binary compatibility with Perl 5.8.0.
256#
257#BUILDOPT += -DPERL_HASH_SEED_EXPLICIT
258#BUILDOPT += -DNO_HASH_SEED
259
260#
1e71036e
JH
261# This should normally be disabled. Enabling it will disable the File::Glob
262# implementation of CORE::glob.
263#
264#BUILDOPT += -DPERL_EXTERNAL_GLOB
265
266#
267# This should normally be disabled. Enabling it causes perl to read scripts
268# in text mode (which is the 5.005 behavior) and will break ByteLoader.
bdb4cb88 269#
1e71036e
JH
270#BUILDOPT += -DPERL_TEXTMODE_SCRIPTS
271
272#
273# specify semicolon-separated list of extra directories that modules will
274# look for libraries (spaces in path names need not be quoted)
275#
276EXTRALIBDIRS *=
277
278#
279# set this to point to cmd.exe (only needed if you use some
280# alternate shell that doesn't grok cmd.exe style commands)
281#
282#SHELL *= g:\winnt\system32\cmd.exe
283
284#
285# set this to your email address (perl will guess a value from
286# from your loginname and your hostname, which may not be right)
287#
288#EMAIL *=
289
290##
291## Build configuration ends.
292##
293
294##################### CHANGE THESE ONLY IF YOU MUST #####################
295
296.IF "$(CRYPT_SRC)$(CRYPT_LIB)" == ""
297D_CRYPT = undef
298.ELSE
299D_CRYPT = define
300CRYPT_FLAG = -DHAVE_DES_FCRYPT
301.ENDIF
302
1e71036e 303PERL_MALLOC *= undef
646e33b6 304DEBUG_MSTATS *= undef
1e71036e 305
7ada00a0 306USE_SITECUST *= undef
1e71036e 307USE_MULTI *= undef
1e71036e
JH
308USE_ITHREADS *= undef
309USE_IMP_SYS *= undef
310USE_PERLIO *= undef
4a9d6100 311USE_LARGE_FILES *= undef
1e71036e 312
646e33b6 313.IF "$(USE_IMP_SYS)" == "define"
8bcd5811 314PERL_MALLOC = undef
8bcd5811
VK
315.ENDIF
316
646e33b6
SH
317.IF "$(PERL_MALLOC)" == "undef"
318DEBUG_MSTATS = undef
8bcd5811
VK
319.ENDIF
320
321.IF "$(DEBUG_MSTATS)" == "define"
646e33b6 322BUILDOPT += -DPERL_DEBUGGING_MSTATS
c800dd8b
SH
323.ENDIF
324
66e09d83 325.IF "$(USE_IMP_SYS) $(USE_MULTI)" == "define undef"
1e71036e
JH
326USE_MULTI != define
327.ENDIF
328
66e09d83 329.IF "$(USE_ITHREADS) $(USE_MULTI)" == "define undef"
1e71036e 330USE_MULTI != define
1e71036e
JH
331.ENDIF
332
7ada00a0
SH
333.IF "$(USE_SITECUST)" == "define"
334BUILDOPT += -DUSE_SITECUSTOMIZE
335.ENDIF
336
3db8f154 337.IF "$(USE_MULTI)" != "undef"
1e71036e
JH
338BUILDOPT += -DPERL_IMPLICIT_CONTEXT
339.ENDIF
340
341.IF "$(USE_IMP_SYS)" != "undef"
342BUILDOPT += -DPERL_IMPLICIT_SYS
343.ENDIF
344
9b1007c4 345.IMPORT .IGNORE : PROCESSOR_ARCHITECTURE PROCESSOR_ARCHITEW6432 WIN64
1e71036e
JH
346
347PROCESSOR_ARCHITECTURE *= x86
348
c623ac67 349.IF "$(WIN64)" == ""
bf2a35e5
JD
350# When we are running from a 32bit cmd.exe on AMD64 then
351# PROCESSOR_ARCHITECTURE is set to x86 and PROCESSOR_ARCHITEW6432
352# is set to AMD64
c623ac67 353.IF "$(PROCESSOR_ARCHITEW6432)" != ""
e9948054 354PROCESSOR_ARCHITECTURE != $(PROCESSOR_ARCHITEW6432)
c623ac67 355WIN64 = define
bf2a35e5 356.ELIF "$(PROCESSOR_ARCHITECTURE)" == "AMD64" || "$(PROCESSOR_ARCHITECTURE)" == "IA64"
c623ac67
GS
357WIN64 = define
358.ELSE
359WIN64 = undef
360.ENDIF
361.ENDIF
362
bf2a35e5
JD
363ARCHITECTURE = $(PROCESSOR_ARCHITECTURE)
364.IF "$(ARCHITECTURE)" == "AMD64"
365ARCHITECTURE = x64
9453ddcd 366.ENDIF
bf2a35e5
JD
367.IF "$(ARCHITECTURE)" == "IA64"
368ARCHITECTURE = ia64
9453ddcd
SH
369.ENDIF
370
3db8f154 371.IF "$(USE_MULTI)" == "define"
bf2a35e5 372ARCHNAME = MSWin32-$(ARCHITECTURE)-multi
1e71036e
JH
373.ELSE
374.IF "$(USE_PERLIO)" == "define"
bf2a35e5 375ARCHNAME = MSWin32-$(ARCHITECTURE)-perlio
1e71036e 376.ELSE
bf2a35e5 377ARCHNAME = MSWin32-$(ARCHITECTURE)
1e71036e 378.ENDIF
1e71036e
JH
379.ENDIF
380
381.IF "$(USE_ITHREADS)" == "define"
382ARCHNAME !:= $(ARCHNAME)-thread
383.ENDIF
384
4a3cf07b
SH
385# Visual C++ 98, .NET 2003, 2005 and 2008 specific.
386# VC++ 6.x, 7.x, 8.x and 9.x can load DLL's on demand. Makes the test suite run
387# in about 10% less time. (The free version of 7.x can't do this, but the free
388# versions of 8.x and 9.x can.)
389.IF "$(CCTYPE)" == "MSVC60" || "$(CCTYPE)" == "MSVC70" || \
390 "$(CCTYPE)" == "MSVC80" || "$(CCTYPE)" == "MSVC80FREE" ||
391 "$(CCTYPE)" == "MSVC90" || "$(CCTYPE)" == "MSVC90FREE"
d1a8253e 392DELAYLOAD *= -DELAYLOAD:ws2_32.dll delayimp.lib
1e71036e
JH
393.ENDIF
394
4a3cf07b
SH
395# Visual C++ 2005 and 2008 (VC++ 8.x and 9.x) create manifest files for EXEs and
396# DLLs. These either need copying everywhere with the binaries, or else need
3ddd48aa
SH
397# embedding in them otherwise MSVCR80.dll or MSVCR90.dll won't be found. For
398# simplicity, embed them if they exist (and delete them afterwards so that they
399# don't get installed too).
4adc95e6
SH
400EMBED_EXE_MANI = if exist $@.manifest mt -nologo -manifest $@.manifest -outputresource:$@;1 && \
401 if exist $@.manifest del $@.manifest
402EMBED_DLL_MANI = if exist $@.manifest mt -nologo -manifest $@.manifest -outputresource:$@;2 && \
403 if exist $@.manifest del $@.manifest
c8e599d3 404
1e71036e
JH
405ARCHDIR = ..\lib\$(ARCHNAME)
406COREDIR = ..\lib\CORE
407AUTODIR = ..\lib\auto
408LIBDIR = ..\lib
409EXTDIR = ..\ext
a193a2db 410DISTDIR = ..\dist
83d5895a 411CPANDIR = ..\cpan
1e71036e
JH
412PODDIR = ..\pod
413EXTUTILSDIR = $(LIBDIR)\ExtUtils
b4a41557 414HTMLDIR = .\html
1e71036e
JH
415
416#
417INST_SCRIPT = $(INST_TOP)$(INST_VER)\bin
418INST_BIN = $(INST_SCRIPT)$(INST_ARCH)
419INST_LIB = $(INST_TOP)$(INST_VER)\lib
420INST_ARCHLIB = $(INST_LIB)$(INST_ARCH)
421INST_COREDIR = $(INST_ARCHLIB)\CORE
1e71036e
JH
422INST_HTML = $(INST_TOP)$(INST_VER)\html
423
424#
425# Programs to compile, build .lib files and link
426#
427
428.USESHELL :
429
430.IF "$(CCTYPE)" == "BORLAND"
431
432CC = bcc32
433.IF "$(BCCOLD)" != "define"
434LINK32 = ilink32
435.ELSE
436LINK32 = tlink32
437.ENDIF
ed2eab3f 438LIB32 = tlib /a /P128
1e71036e 439IMPLIB = implib -c
e54e7e92 440RSC = brcc32
1e71036e
JH
441
442#
443# Options
444#
445INCLUDES = -I$(COREDIR) -I.\include -I. -I.. -I"$(CCINCDIR)"
ba14dd9a 446#PCHFLAGS = -H -Hc -H=c:\temp\bcmoduls.pch
1e71036e
JH
447DEFINES = -DWIN32 $(CRYPT_FLAG)
448LOCDEFS = -DPERLDLL -DPERL_CORE
449SUBSYS = console
450CXX_FLAG = -P
451
452LIBC = cw32mti.lib
8169a885
SH
453
454# same libs as MSVC, except Borland doesn't have oldnames.lib
455LIBFILES = $(CRYPT_LIB) \
456 kernel32.lib user32.lib gdi32.lib winspool.lib \
457 comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib \
458 netapi32.lib uuid.lib ws2_32.lib mpr.lib winmm.lib \
4ebea3c6 459 version.lib odbc32.lib odbccp32.lib comctl32.lib \
8169a885 460 import32.lib $(LIBC)
1e71036e
JH
461
462.IF "$(CFG)" == "Debug"
463OPTIMIZE = -v -D_RTLDLL -DDEBUGGING
464LINK_DBG = -v
465.ELSE
466OPTIMIZE = -O2 -D_RTLDLL
467LINK_DBG =
468.ENDIF
469
bb275e72 470EXTRACFLAGS =
1e71036e
JH
471CFLAGS = -w -g0 -tWM -tWD $(INCLUDES) $(DEFINES) $(LOCDEFS) \
472 $(PCHFLAGS) $(OPTIMIZE)
457f4f73 473LINK_FLAGS = $(LINK_DBG) -x -L"$(INST_COREDIR)" -L"$(CCLIBDIR)" \
8169a885 474 -L"$(CCLIBDIR)\PSDK"
1e71036e
JH
475OBJOUT_FLAG = -o
476EXEOUT_FLAG = -e
477LIBOUT_FLAG =
478.IF "$(BCCOLD)" != "define"
479LINK_FLAGS += -Gn
480DEFINES += -D_MT -D__USELOCALES__ -D_WIN32_WINNT=0x0410
481.END
482.IF "$(BCCVCL)" == "define"
483LIBC = cp32mti.lib vcl.lib vcl50.lib vclx50.lib vcle50.lib
484LINK_FLAGS += -L"$(CCLIBDIR)\Release"
485.END
486
487
488.ELIF "$(CCTYPE)" == "GCC"
489
fa58a56f
S
490.IF "$(GCCCROSS)" == "define"
491ARCHPREFIX = x86_64-w64-mingw32-
492.ENDIF
493
494CC = $(ARCHPREFIX)gcc
495LINK32 = $(ARCHPREFIX)g++
496LIB32 = $(ARCHPREFIX)ar rc
497IMPLIB = $(ARCHPREFIX)dlltool
498RSC = $(ARCHPREFIX)windres
1e71036e
JH
499
500i = .i
501o = .o
502a = .a
503
504#
505# Options
506#
507
508INCLUDES = -I.\include -I. -I.. -I$(COREDIR)
509DEFINES = -DWIN32 $(CRYPT_FLAG)
fa58a56f
S
510.IF "$(WIN64)" == "define"
511DEFINES += -DWIN64 -DCONSERVATIVE
512.ENDIF
1e71036e
JH
513LOCDEFS = -DPERLDLL -DPERL_CORE
514SUBSYS = console
515CXX_FLAG = -xc++
516
679b67fe
JD
517# Current releases of MinGW 5.1.4 (as of 11-Aug-2009) will fail to link
518# correctly if -lmsvcrt is specified explicitly.
519LIBC =
520#LIBC = -lmsvcrt
1e71036e
JH
521
522# same libs as MSVC
523LIBFILES = $(CRYPT_LIB) $(LIBC) \
524 -lmoldname -lkernel32 -luser32 -lgdi32 \
525 -lwinspool -lcomdlg32 -ladvapi32 -lshell32 -lole32 \
036c1c1e 526 -loleaut32 -lnetapi32 -luuid -lws2_32 -lmpr \
4ebea3c6 527 -lwinmm -lversion -lodbc32 -lodbccp32 -lcomctl32
1e71036e
JH
528
529.IF "$(CFG)" == "Debug"
530OPTIMIZE = -g -O2 -DDEBUGGING
531LINK_DBG = -g
532.ELSE
ec25c072
SH
533OPTIMIZE = -s -O2
534LINK_DBG = -s
1e71036e
JH
535.ENDIF
536
bb275e72 537EXTRACFLAGS =
1e71036e
JH
538CFLAGS = $(INCLUDES) $(DEFINES) $(LOCDEFS) $(OPTIMIZE)
539LINK_FLAGS = $(LINK_DBG) -L"$(INST_COREDIR)" -L"$(CCLIBDIR)"
540OBJOUT_FLAG = -o
541EXEOUT_FLAG = -o
542LIBOUT_FLAG =
543
544# NOTE: we assume that GCC uses MSVCRT.DLL
46e77f11 545# See comments about PERL_MSVCRT_READFIX in the "cl" compiler section below.
654eccd5 546BUILDOPT += -fno-strict-aliasing -mms-bitfields -DPERL_MSVCRT_READFIX
1e71036e
JH
547
548.ELSE
549
550CC = cl
551LINK32 = link
552LIB32 = $(LINK32) -lib
553RSC = rc
554
555#
556# Options
557#
558
559INCLUDES = -I$(COREDIR) -I.\include -I. -I..
560#PCHFLAGS = -Fpc:\temp\vcmoduls.pch -YX
561DEFINES = -DWIN32 -D_CONSOLE -DNO_STRICT $(CRYPT_FLAG)
562LOCDEFS = -DPERLDLL -DPERL_CORE
563SUBSYS = console
a7d225ec 564CXX_FLAG = -TP -EHsc
1e71036e 565
1e71036e 566LIBC = msvcrt.lib
1e71036e 567
1e71036e 568.IF "$(CFG)" == "Debug"
c623ac67 569OPTIMIZE = -O1 -MD -Zi -DDEBUGGING
c623ac67 570LINK_DBG = -debug
1e71036e 571.ELSE
ec25c072
SH
572OPTIMIZE = -MD -Zi -DNDEBUG
573# we enable debug symbols in release builds also
574LINK_DBG = -debug -opt:ref,icf
575# you may want to enable this if you want COFF symbols in the executables
576# in addition to the PDB symbols. The default Dr. Watson that ships with
577# Windows can use the the former but not latter. The free WinDbg can be
578# installed to get better stack traces from just the PDB symbols, so we
579# avoid the bloat of COFF symbols by default.
580#LINK_DBG = $(LINK_DBG) -debugtype:both
d921a5fb
GS
581.IF "$(WIN64)" == "define"
582# enable Whole Program Optimizations (WPO) and Link Time Code Generation (LTCG)
583OPTIMIZE += -Ox -GL
584LINK_DBG += -ltcg
1e71036e 585.ELSE
d921a5fb
GS
586# -O1 yields smaller code, which turns out to be faster than -O2 on x86
587OPTIMIZE += -O1
588#OPTIMIZE += -O2
1e71036e 589.ENDIF
1e71036e
JH
590.ENDIF
591
c623ac67
GS
592.IF "$(WIN64)" == "define"
593DEFINES += -DWIN64 -DCONSERVATIVE
9453ddcd 594OPTIMIZE += -Wp64 -fp:precise
da2c7419 595.ENDIF
c5b31784 596
4a3cf07b
SH
597# For now, silence VC++ 8.x's and 9.x's warnings about "unsafe" CRT functions
598# and POSIX CRT function names being deprecated.
599.IF "$(CCTYPE)" == "MSVC80" || "$(CCTYPE)" == "MSVC80FREE" || \
600 "$(CCTYPE)" == "MSVC90" || "$(CCTYPE)" == "MSVC90FREE"
26a6faa8 601DEFINES += -D_CRT_SECURE_NO_DEPRECATE -D_CRT_NONSTDC_NO_DEPRECATE
c5b31784 602.ENDIF
da2c7419 603
6d8f7c99
JD
604# Use the MSVCRT read() fix only when using VC++ 6.x or earlier. Later
605# versions use MSVCR70.dll, MSVCR71.dll, etc, which do not require the
606# fix.
b6c85593 607.IF "$(CCTYPE)" == "MSVC60"
c623ac67
GS
608BUILDOPT += -DPERL_MSVCRT_READFIX
609.ENDIF
610
1e71036e
JH
611LIBBASEFILES = $(CRYPT_LIB) \
612 oldnames.lib kernel32.lib user32.lib gdi32.lib winspool.lib \
613 comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib \
036c1c1e 614 netapi32.lib uuid.lib ws2_32.lib mpr.lib winmm.lib \
6b1226db 615 version.lib odbc32.lib odbccp32.lib comctl32.lib
c623ac67 616
9453ddcd
SH
617# The 64 bit Platform SDK compilers contain a runtime library that doesn't
618# include the buffer overrun verification code used by the /GS switch.
619# Since the code links against libraries that are compiled with /GS, this
620# "security cookie verification" must be included via bufferoverlow.lib.
621.IF "$(WIN64)" == "define"
d5415745 622LIBBASEFILES += bufferoverflowU.lib
c623ac67 623.ENDIF
1e71036e 624
1e71036e
JH
625LIBFILES = $(LIBBASEFILES) $(LIBC)
626
9453ddcd 627EXTRACFLAGS = -nologo -GF -W3
bb275e72 628CFLAGS = $(EXTRACFLAGS) $(INCLUDES) $(DEFINES) $(LOCDEFS) \
1e71036e
JH
629 $(PCHFLAGS) $(OPTIMIZE)
630LINK_FLAGS = -nologo -nodefaultlib $(LINK_DBG) \
631 -libpath:"$(INST_COREDIR)" \
632 -machine:$(PROCESSOR_ARCHITECTURE)
ed2eab3f 633LIB_FLAGS = -nologo
1e71036e
JH
634OBJOUT_FLAG = -Fo
635EXEOUT_FLAG = -Fe
636LIBOUT_FLAG = /out:
637
1e71036e
JH
638.ENDIF
639
1e71036e
JH
640CFLAGS_O = $(CFLAGS) $(BUILDOPT)
641
4ebea3c6
JD
642.IF "$(CCTYPE)" == "MSVC80" || "$(CCTYPE)" == "MSVC80FREE" || \
643 "$(CCTYPE)" == "MSVC90" || "$(CCTYPE)" == "MSVC90FREE"
5e863249 644LINK_FLAGS += "/manifestdependency:type='Win32' name='Microsoft.Windows.Common-Controls' version='6.0.0.0' processorArchitecture='*' publicKeyToken='6595b64144ccf1df' language='*'"
4ebea3c6
JD
645.ELSE
646RSC_FLAGS = -DINCLUDE_MANIFEST
647.ENDIF
648
649
1e71036e
JH
650# used to allow local linking flags that are not propogated into Config.pm,
651# currently unused
652# -- BKS, 12-12-1999
653PRIV_LINK_FLAGS *=
654BLINK_FLAGS = $(PRIV_LINK_FLAGS) $(LINK_FLAGS)
655
656#################### do not edit below this line #######################
657############# NO USER-SERVICEABLE PARTS BEYOND THIS POINT ##############
658
13631a73
SH
659# Some old dmakes (including Sarathy's one at
660# http://search.cpan.org/CPAN/authors/id/G/GS/GSAR/dmake-4.1pl1-win32.zip)
661# don't support logical OR (||) or logical AND (&&) in conditional
662# expressions and hence don't process this makefile correctly. Determine
663# whether this is the case so that we can give the user an error message.
664.IF 1 == 1 || 1 == 1
665NEWDMAKE = define
66e09d83 666.ELSE
13631a73 667NEWDMAKE = undef
e54e7e92
SH
668.ENDIF
669
1e71036e
JH
670o *= .obj
671a *= .lib
672
673LKPRE = INPUT (
674LKPOST = )
675
676#
677# Rules
678#
679
680.SUFFIXES : .c .i $(o) .dll $(a) .exe .rc .res
681
682.c$(o):
683 $(CC) -c $(null,$(<:d) $(NULL) -I$(<:d)) $(CFLAGS_O) $(OBJOUT_FLAG)$@ $<
684
685.c.i:
686 $(CC) -c $(null,$(<:d) $(NULL) -I$(<:d)) $(CFLAGS_O) -E $< >$@
687
688.y.c:
689 $(NOOP)
690
691$(o).dll:
692.IF "$(CCTYPE)" == "BORLAND"
693 $(LINK32) -Tpd -ap $(BLINK_FLAGS) c0d32$(o) $<,$@,,$(LIBFILES),$(*B).def
694 $(IMPLIB) $(*B).lib $@
695.ELIF "$(CCTYPE)" == "GCC"
696 $(LINK32) -o $@ $(BLINK_FLAGS) $< $(LIBFILES)
697 $(IMPLIB) --input-def $(*B).def --output-lib $(*B).a $@
698.ELSE
699 $(LINK32) -dll -subsystem:windows -implib:$(*B).lib -def:$(*B).def \
700 -out:$@ $(BLINK_FLAGS) $(LIBFILES) $< $(LIBPERL)
c8e599d3 701 $(EMBED_DLL_MANI)
1e71036e
JH
702.ENDIF
703
704.rc.res:
770c139a 705.IF "$(CCTYPE)" == "GCC"
4ebea3c6 706 $(RSC) --use-temp-file --include-dir=. --include-dir=.. -O COFF -D INCLUDE_MANIFEST -i $< -o $@
770c139a 707.ELSE
4ebea3c6 708 $(RSC) -i.. -DINCLUDE_MANIFEST $<
770c139a 709.ENDIF
1e71036e
JH
710
711#
712# various targets
713MINIPERL = ..\miniperl.exe
714MINIDIR = .\mini
715PERLEXE = ..\perl.exe
716WPERLEXE = ..\wperl.exe
ed2eab3f 717PERLEXESTATIC = ..\perl-static.exe
1e71036e 718GLOBEXE = ..\perlglob.exe
2d9d8159 719CONFIGPM = ..\lib\Config.pm ..\lib\Config_heavy.pl
1e71036e
JH
720MINIMOD = ..\lib\ExtUtils\Miniperl.pm
721X2P = ..\x2p\a2p.exe
202d1001 722GENUUDMAP = ..\generate_uudmap.exe
ed2eab3f
SH
723.IF "$(BUILD_STATIC)" == "define"
724PERLSTATIC = static
725.ELSE
726PERLSTATIC =
727.ENDIF
1e71036e 728
ca12659b 729# Unicode data files generated by mktables
3df51b85 730UNIDATAFILES = ..\lib\unicore\Decomposition.pl ..\lib\unicore\TestProp.pl \
7ebf06b3 731 ..\lib\unicore\CombiningClass.pl ..\lib\unicore\Name.pl \
3e344d15 732 ..\lib\unicore\Heavy.pl ..\lib\unicore\mktables.lst
ca12659b
NC
733
734# Directories of Unicode data files generated by mktables
27a8011f
SH
735UNIDATADIR1 = ..\lib\unicore\To
736UNIDATADIR2 = ..\lib\unicore\lib
ca12659b 737
4ebea3c6 738PERLEXE_MANIFEST= .\perlexe.manifest
3890b58f
RGS
739PERLEXE_ICO = .\perlexe.ico
740PERLEXE_RES = .\perlexe.res
741PERLDLL_RES =
742
1e71036e
JH
743# Nominate a target which causes extensions to be re-built
744# This used to be $(PERLEXE), but at worst it is the .dll that they depend
745# on and really only the interface - i.e. the .def file used to export symbols
746# from the .dll
747PERLDEP = perldll.def
748
749
750PL2BAT = bin\pl2bat.pl
751GLOBBAT = bin\perlglob.bat
752
753UTILS = \
754 ..\utils\h2ph \
755 ..\utils\splain \
756 ..\utils\dprofpp \
757 ..\utils\perlbug \
758 ..\utils\pl2pm \
759 ..\utils\c2ph \
827a599d 760 ..\utils\pstruct \
1e71036e
JH
761 ..\utils\h2xs \
762 ..\utils\perldoc \
1e71036e
JH
763 ..\utils\perlivp \
764 ..\utils\libnetcfg \
827a599d
GS
765 ..\utils\enc2xs \
766 ..\utils\piconv \
bb4e9162 767 ..\utils\config_data \
18a1cebe 768 ..\utils\corelist \
83cd6e83 769 ..\utils\cpan \
ea0e987d 770 ..\utils\xsubpp \
4b618757 771 ..\utils\prove \
291d3373 772 ..\utils\ptar \
b8669316 773 ..\utils\ptardiff \
6aaee015
RGS
774 ..\utils\cpanp-run-perl \
775 ..\utils\cpanp \
776 ..\utils\cpan2dist \
3ddf9550 777 ..\utils\shasum \
ea0e987d 778 ..\utils\instmodsh \
1e71036e
JH
779 ..\pod\pod2html \
780 ..\pod\pod2latex \
781 ..\pod\pod2man \
782 ..\pod\pod2text \
783 ..\pod\pod2usage \
784 ..\pod\podchecker \
785 ..\pod\podselect \
786 ..\x2p\find2perl \
827a599d 787 ..\x2p\psed \
1e71036e 788 ..\x2p\s2p \
1e71036e
JH
789 bin\exetype.pl \
790 bin\runperl.pl \
791 bin\pl2bat.pl \
792 bin\perlglob.pl \
793 bin\search.pl
794
795.IF "$(CCTYPE)" == "BORLAND"
796
797CFGSH_TMPL = config.bc
798CFGH_TMPL = config_H.bc
799
800.ELIF "$(CCTYPE)" == "GCC"
801
fa58a56f
S
802.IF "$(WIN64)" == "define"
803.IF "$(GCCCROSS)" == "define"
804CFGSH_TMPL = config.gc64
805CFGH_TMPL = config_H.gc64
806.ELSE
807CFGSH_TMPL = config.gc64nox
808CFGH_TMPL = config_H.gc64nox
809.ENDIF
810.ELSE
1e71036e
JH
811CFGSH_TMPL = config.gc
812CFGH_TMPL = config_H.gc
fa58a56f 813.ENDIF
b70b2c2a
VP
814PERLIMPLIB = ..\libperl513$(a)
815PERLSTATICLIB = ..\libperl513s$(a)
1e71036e
JH
816
817.ELSE
818
c623ac67
GS
819.IF "$(WIN64)" == "define"
820CFGSH_TMPL = config.vc64
821CFGH_TMPL = config_H.vc64
822.ELSE
1e71036e
JH
823CFGSH_TMPL = config.vc
824CFGH_TMPL = config_H.vc
c623ac67 825.ENDIF
1e71036e
JH
826
827.ENDIF
828
829# makedef.pl must be updated if this changes, and this should normally
830# only change when there is an incompatible revision of the public API.
cb47d8a5
JV
831PERLIMPLIB *= ..\perl513$(a)
832PERLSTATICLIB *= ..\perl513s$(a)
833PERLDLL = ..\perl513.dll
1e71036e 834
b6ed7314
YO
835XCOPY = xcopy /f /r /i /d /y
836RCOPY = xcopy /f /r /i /e /d /y
65980d94 837NOOP = @rem
1e71036e 838
1e71036e
JH
839MICROCORE_SRC = \
840 ..\av.c \
841 ..\deb.c \
842 ..\doio.c \
843 ..\doop.c \
844 ..\dump.c \
845 ..\globals.c \
846 ..\gv.c \
e1a479c5 847 ..\mro.c \
1e71036e
JH
848 ..\hv.c \
849 ..\locale.c \
a0d89a74 850 ..\mathoms.c \
1e71036e
JH
851 ..\mg.c \
852 ..\numeric.c \
853 ..\op.c \
ff6de8cd 854 ..\pad.c \
1e71036e
JH
855 ..\perl.c \
856 ..\perlapi.c \
857 ..\perly.c \
858 ..\pp.c \
859 ..\pp_ctl.c \
860 ..\pp_hot.c \
861 ..\pp_pack.c \
84d4ea48 862 ..\pp_sort.c \
1e71036e 863 ..\pp_sys.c \
10bc17b6 864 ..\reentr.c \
1e71036e
JH
865 ..\regcomp.c \
866 ..\regexec.c \
867 ..\run.c \
868 ..\scope.c \
869 ..\sv.c \
870 ..\taint.c \
871 ..\toke.c \
872 ..\universal.c \
873 ..\utf8.c \
48462a74 874 ..\util.c
1e71036e
JH
875
876EXTRACORE_SRC += perllib.c
877
878.IF "$(PERL_MALLOC)" == "define"
879EXTRACORE_SRC += ..\malloc.c
880.ENDIF
881
1e71036e 882EXTRACORE_SRC += ..\perlio.c
1e71036e
JH
883
884WIN32_SRC = \
885 .\win32.c \
1e71036e
JH
886 .\win32sck.c \
887 .\win32thread.c
888
b6d604f4
NIS
889# We need this for miniperl build unless we override canned
890# config.h #define building mini\*
891#.IF "$(USE_PERLIO)" == "define"
6ea0e807 892WIN32_SRC += .\win32io.c
b6d604f4 893#.ENDIF
6ea0e807 894
1e71036e
JH
895.IF "$(CRYPT_SRC)" != ""
896WIN32_SRC += .\$(CRYPT_SRC)
897.ENDIF
898
1e71036e
JH
899X2P_SRC = \
900 ..\x2p\a2p.c \
901 ..\x2p\hash.c \
902 ..\x2p\str.c \
903 ..\x2p\util.c \
904 ..\x2p\walk.c
905
906CORE_NOCFG_H = \
907 ..\av.h \
908 ..\cop.h \
909 ..\cv.h \
910 ..\dosish.h \
911 ..\embed.h \
912 ..\form.h \
913 ..\gv.h \
914 ..\handy.h \
915 ..\hv.h \
916 ..\iperlsys.h \
917 ..\mg.h \
918 ..\nostdio.h \
919 ..\op.h \
920 ..\opcode.h \
921 ..\perl.h \
922 ..\perlapi.h \
923 ..\perlsdio.h \
924 ..\perlsfio.h \
925 ..\perly.h \
926 ..\pp.h \
927 ..\proto.h \
cdb0f547 928 ..\regcomp.h \
1e71036e
JH
929 ..\regexp.h \
930 ..\scope.h \
931 ..\sv.h \
932 ..\thread.h \
933 ..\unixish.h \
934 ..\utf8.h \
935 ..\util.h \
936 ..\warnings.h \
937 ..\XSUB.h \
938 ..\EXTERN.h \
939 ..\perlvars.h \
940 ..\intrpvar.h \
1e71036e
JH
941 .\include\dirent.h \
942 .\include\netdb.h \
943 .\include\sys\socket.h \
944 .\win32.h
945
a148edb6 946CORE_H = $(CORE_NOCFG_H) .\config.h ..\git_version.h
1e71036e 947
202d1001 948UUDMAP_H = ..\uudmap.h
efa50c51 949BITCOUNT_H = ..\bitcount.h
202d1001 950
1e71036e
JH
951MICROCORE_OBJ = $(MICROCORE_SRC:db:+$(o))
952CORE_OBJ = $(MICROCORE_OBJ) $(EXTRACORE_SRC:db:+$(o))
953WIN32_OBJ = $(WIN32_SRC:db:+$(o))
954MINICORE_OBJ = $(MINIDIR)\{$(MICROCORE_OBJ:f) miniperlmain$(o) perlio$(o)}
ba14dd9a 955MINIWIN32_OBJ = $(MINIDIR)\{$(WIN32_OBJ:f)}
1e71036e 956MINI_OBJ = $(MINICORE_OBJ) $(MINIWIN32_OBJ)
281da5ea 957DLL_OBJ = $(DYNALOADER)
1e71036e 958X2P_OBJ = $(X2P_SRC:db:+$(o))
202d1001 959GENUUDMAP_OBJ = $(GENUUDMAP:db:+$(o))
1e71036e
JH
960
961PERLDLL_OBJ = $(CORE_OBJ)
962PERLEXE_OBJ = perlmain$(o)
ed2eab3f 963PERLEXEST_OBJ = perlmainst$(o)
1e71036e
JH
964
965PERLDLL_OBJ += $(WIN32_OBJ) $(DLL_OBJ)
966
967.IF "$(USE_SETARGV)" != ""
968SETARGV_OBJ = setargv$(o)
969.ENDIF
970
a1f2e719
VK
971.IF "$(ALL_STATIC)" == "define"
972# some exclusions, unfortunately, until fixed:
973# - Win32 extension contains overlapped symbols with win32.c (BUG!)
974# - MakeMaker isn't capable enough for SDBM_File (smaller bug)
975# - Encode (encoding search algorithm relies on shared library?)
9788a75a 976STATIC_EXT = * !Win32 !SDBM_File !Encode
a1f2e719
VK
977.ELSE
978# specify static extensions here, for example:
47ef3394 979#STATIC_EXT = Cwd Compress/Raw/Zlib
78ff2d7b 980STATIC_EXT = Win32CORE
a1f2e719 981.ENDIF
1e71036e 982
281da5ea 983DYNALOADER = ..\DynaLoader$(o)
1e71036e 984
1e71036e
JH
985# vars must be separated by "\t+~\t+", since we're using the tempfile
986# version of config_sh.pl (we were overflowing someone's buffer by
987# trying to fit them all on the command line)
988# -- BKS 10-17-1999
989CFG_VARS = \
990 INST_DRV=$(INST_DRV) ~ \
13631a73
SH
991 INST_TOP=$(INST_TOP) ~ \
992 INST_VER=$(INST_VER) ~ \
1e71036e
JH
993 INST_ARCH=$(INST_ARCH) ~ \
994 archname=$(ARCHNAME) ~ \
995 cc=$(CC) ~ \
996 ld=$(LINK32) ~ \
bb275e72 997 ccflags=$(EXTRACFLAGS) $(OPTIMIZE) $(DEFINES) $(BUILDOPT) ~ \
1e71036e
JH
998 cf_email=$(EMAIL) ~ \
999 d_crypt=$(D_CRYPT) ~ \
1000 d_mymalloc=$(PERL_MALLOC) ~ \
1001 libs=$(LIBFILES:f) ~ \
13631a73 1002 incpath=$(CCINCDIR) ~ \
1e71036e 1003 libperl=$(PERLIMPLIB:f) ~ \
13631a73 1004 libpth=$(CCLIBDIR);$(EXTRALIBDIRS) ~ \
1e71036e
JH
1005 libc=$(LIBC) ~ \
1006 make=dmake ~ \
84c322f7
MB
1007 _o=$(o) ~ \
1008 obj_ext=$(o) ~ \
1009 _a=$(a) ~ \
1010 lib_ext=$(a) ~ \
1e71036e 1011 static_ext=$(STATIC_EXT) ~ \
7e0017d3 1012 usethreads=$(USE_ITHREADS) ~ \
1e71036e 1013 useithreads=$(USE_ITHREADS) ~ \
1e71036e
JH
1014 usemultiplicity=$(USE_MULTI) ~ \
1015 useperlio=$(USE_PERLIO) ~ \
c7dd62f6 1016 uselargefiles=$(USE_LARGE_FILES) ~ \
7ada00a0 1017 usesitecustomize=$(USE_SITECUST) ~ \
13631a73 1018 LINK_FLAGS=$(LINK_FLAGS) ~ \
1e71036e
JH
1019 optimize=$(OPTIMIZE)
1020
1021#
1022# set up targets varying between Win95 and WinNT builds
1023#
1024
1025.IF "$(IS_WIN95)" == "define"
1026MK2 = .\makefile.95
1027RIGHTMAKE = __switch_makefiles
1e71036e
JH
1028.ELSE
1029MK2 = __not_needed
1030RIGHTMAKE =
1031.ENDIF
1032
8169a885
SH
1033.IMPORT .IGNORE : SystemRoot windir
1034
1035# Don't just .IMPORT OS from the environment because dmake sets OS itself.
1036ENV_OS=$(subst,OS=, $(shell @set OS))
1037
1038.IF "$(ENV_OS)" == "Windows_NT"
1039ODBCCP32_DLL = $(SystemRoot)\system32\odbccp32.dll
1040.ELSE
1041ODBCCP32_DLL = $(windir)\system\odbccp32.dll
1042.ENDIF
1043
2a6dc374 1044ICWD = -I..\dist\Cwd -I..\dist\Cwd\lib
403f501d 1045
1e71036e
JH
1046#
1047# Top targets
1048#
1049
a148edb6
SH
1050all : CHECKDMAKE .\config.h ..\git_version.h $(GLOBEXE) $(MINIPERL) $(MK2) \
1051 $(RIGHTMAKE) $(MINIMOD) $(CONFIGPM) $(UNIDATAFILES) MakePPPort \
a34ce875 1052 $(PERLEXE) $(X2P) Extensions Extensions_nonxs $(PERLSTATIC)
1e71036e 1053
c900f745
SH
1054regnodes : ..\regnodes.h
1055
9ce5b024
SH
1056..\regcomp$(o) : ..\regnodes.h ..\regcharclass.h
1057
1058..\regexec$(o) : ..\regnodes.h ..\regcharclass.h
1059
a148edb6
SH
1060reonly : regnodes .\config.h ..\git_version.h $(GLOBEXE) $(MINIPERL) $(MK2) \
1061 $(RIGHTMAKE) $(MINIMOD) $(CONFIGPM) $(UNIDATAFILES) $(PERLEXE) \
250c5aad
SH
1062 $(X2P) Extensions_reonly
1063
ed2eab3f
SH
1064static: $(PERLEXESTATIC)
1065
1e71036e
JH
1066#----------------------------------------------------------------
1067
1068#-------------------- BEGIN Win95 SPECIFIC ----------------------
1069
1070# this target is a jump-off point for Win95
1071# 1. it switches to the Win95-specific makefile if it exists
1072# (__do_switch_makefiles)
1073# 2. it prints a message when the Win95-specific one finishes (__done)
1074# 3. it then kills this makefile by trying to make __no_such_target
1075
1076__switch_makefiles: __do_switch_makefiles __done __no_such_target
1077
1078__do_switch_makefiles:
1079.IF "$(NOTFIRST)" != "true"
1080 if exist $(MK2) $(MAKE:s/-S//) -f $(MK2) $(MAKETARGETS) NOTFIRST=true
1081.ELSE
1082 $(NOOP)
1083.ENDIF
1084
1085.IF "$(NOTFIRST)" != "true"
1086__done:
1087 @echo Build process complete. Ignore any errors after this message.
1088 @echo Run "dmake test" to test and "dmake install" to install
1089
1090.ELSE
1091# dummy targets for Win95-specific makefile
1092
1093__done:
1094 $(NOOP)
1095
1096__no_such_target:
1097 $(NOOP)
1098
1099.ENDIF
1100
1101# This target is used to generate the new makefile (.\makefile.95) for Win95
1102
1103.\makefile.95: .\makefile.mk
1104 $(MINIPERL) genmk95.pl makefile.mk $(MK2)
1105
1106#--------------------- END Win95 SPECIFIC ---------------------
1107
1108# a blank target for when builds don't need to do certain things
1109# this target added for Win95 port but used to keep the WinNT port able to
1110# use this file
1111__not_needed:
1112 $(NOOP)
1113
13631a73
SH
1114CHECKDMAKE :
1115.IF "$(NEWDMAKE)" == "define"
1116 $(NOOP)
1117.ELSE
1118 @echo Your dmake doesn't support ^|^| or ^&^& in conditional expressions.
1119 @echo Please get the latest dmake from http://search.cpan.org/dist/dmake/
1120 @exit 1
1121.ENDIF
1122
1e71036e
JH
1123$(GLOBEXE) : perlglob$(o)
1124.IF "$(CCTYPE)" == "BORLAND"
1125 $(CC) -c -w -v -tWM -I"$(CCINCDIR)" perlglob.c
1126 $(LINK32) -Tpe -ap $(BLINK_FLAGS) c0x32$(o) perlglob$(o) \
1127 "$(CCLIBDIR)\32BIT\wildargs$(o)",$@,,import32.lib cw32mt.lib,
1128.ELIF "$(CCTYPE)" == "GCC"
1129 $(LINK32) $(BLINK_FLAGS) -mconsole -o $@ perlglob$(o) $(LIBFILES)
1130.ELSE
1131 $(LINK32) $(BLINK_FLAGS) $(LIBFILES) -out:$@ -subsystem:$(SUBSYS) \
1132 perlglob$(o) setargv$(o)
c8e599d3 1133 $(EMBED_EXE_MANI)
1e71036e
JH
1134.ENDIF
1135
1136perlglob$(o) : perlglob.c
1137
1138config.w32 : $(CFGSH_TMPL)
1139 copy $(CFGSH_TMPL) config.w32
1140
1141.\config.h : $(CFGH_TMPL) $(CORE_NOCFG_H)
1142 -del /f config.h
1143 copy $(CFGH_TMPL) config.h
1144
fcd65f8d 1145..\git_version.h : $(MINIPERL) ..\make_patchnum.pl
16ad9bfa 1146 cd .. && miniperl -Ilib make_patchnum.pl
a148edb6 1147
931482b7
NC
1148# make sure that we recompile perl.c if the git version changes
1149..\perl$(o) : ..\git_version.h
a148edb6 1150
1e71036e
JH
1151..\config.sh : config.w32 $(MINIPERL) config_sh.PL FindExt.pm
1152 $(MINIPERL) -I..\lib config_sh.PL --cfgsh-option-file \
1153 $(mktmp $(CFG_VARS)) config.w32 > ..\config.sh
1154
76febb1c
SH
1155# this target is for when changes to the main config.sh happen.
1156# edit config.gc, then make perl using GCC in a minimal configuration (i.e.
1157# with MULTI, ITHREADS, IMP_SYS, LARGE_FILES, PERLIO and CRYPT off), then make
1158# this target to regenerate config_H.gc.
1159# unfortunately, some further manual editing is also then required to restore all
1160# the special _MSC_VER handling that is otherwise lost.
1161# repeat for config.bc and config_H.bc (using BORLAND), except that there is no
1162# _MSC_VER stuff in that case.
1e71036e 1163regen_config_h:
76febb1c 1164 $(MINIPERL) -I..\lib config_sh.PL --cfgsh-option-file $(mktmp $(CFG_VARS)) \
1e71036e 1165 $(CFGSH_TMPL) > ..\config.sh
4e73d6a4 1166 $(MINIPERL) -I..\lib ..\configpm --chdir=..
1e71036e 1167 -del /f $(CFGH_TMPL)
38cd195c 1168 -$(MINIPERL) -I..\lib $(ICWD) config_h.PL "INST_VER=$(INST_VER)"
1e71036e
JH
1169 rename config.h $(CFGH_TMPL)
1170
1171$(CONFIGPM) : $(MINIPERL) ..\config.sh config_h.PL ..\minimod.pl
4e73d6a4 1172 $(MINIPERL) -I..\lib ..\configpm --chdir=..
1e71036e
JH
1173 if exist lib\* $(RCOPY) lib\*.* ..\lib\$(NULL)
1174 $(XCOPY) ..\*.h $(COREDIR)\*.*
1175 $(XCOPY) *.h $(COREDIR)\*.*
1176 $(XCOPY) ..\ext\re\re.pm $(LIBDIR)\*.*
1177 $(RCOPY) include $(COREDIR)\*.*
38cd195c 1178 $(MINIPERL) -I..\lib $(ICWD) config_h.PL "INST_VER=$(INST_VER)" \
1e71036e
JH
1179 || $(MAKE) $(MAKEMACROS) $(CONFIGPM) $(MAKEFILE)
1180
1181$(MINIPERL) : $(MINIDIR) $(MINI_OBJ) $(CRTIPMLIBS)
1182.IF "$(CCTYPE)" == "BORLAND"
8169a885
SH
1183 if not exist $(CCLIBDIR)\PSDK\odbccp32.lib \
1184 cd $(CCLIBDIR)\PSDK && implib odbccp32.lib $(ODBCCP32_DLL)
1e71036e 1185 $(LINK32) -Tpe -ap $(BLINK_FLAGS) \
13631a73 1186 @$(mktmp c0x32$(o) $(MINI_OBJ),$@,,$(LIBFILES),)
1e71036e
JH
1187.ELIF "$(CCTYPE)" == "GCC"
1188 $(LINK32) -v -mconsole -o $@ $(BLINK_FLAGS) \
13631a73 1189 $(mktmp $(LKPRE) $(MINI_OBJ) $(LIBFILES) $(LKPOST))
1e71036e 1190.ELSE
78d58004 1191 $(LINK32) -subsystem:console -out:$@ $(BLINK_FLAGS) \
13631a73 1192 @$(mktmp $(LIBFILES) $(MINI_OBJ))
c8e599d3 1193 $(EMBED_EXE_MANI)
1e71036e
JH
1194.ENDIF
1195
1196$(MINIDIR) :
1197 if not exist "$(MINIDIR)" mkdir "$(MINIDIR)"
1198
1199$(MINICORE_OBJ) : $(CORE_NOCFG_H)
8c4561fb 1200 $(CC) -c $(CFLAGS) -DPERL_EXTERNAL_GLOB -DPERL_IS_MINIPERL $(OBJOUT_FLAG)$@ ..\$(*B).c
1e71036e
JH
1201
1202$(MINIWIN32_OBJ) : $(CORE_NOCFG_H)
1203 $(CC) -c $(CFLAGS) $(OBJOUT_FLAG)$@ $(*B).c
1204
1205# -DPERL_IMPLICIT_SYS needs C++ for perllib.c
1206# rules wrapped in .IFs break Win9X build (we end up with unbalanced []s unless
1207# unless the .IF is true), so instead we use a .ELSE with the default.
1208# This is the only file that depends on perlhost.h, vmem.h, and vdir.h
1209
1210perllib$(o) : perllib.c .\perlhost.h .\vdir.h .\vmem.h
acfe0abc 1211.IF "$(USE_IMP_SYS)" == "define"
322fd642 1212 $(CC) -c -I. $(CFLAGS_O) $(CXX_FLAG) $(OBJOUT_FLAG)$@ perllib.c
1e71036e 1213.ELSE
322fd642 1214 $(CC) -c -I. $(CFLAGS_O) $(OBJOUT_FLAG)$@ perllib.c
1e71036e
JH
1215.ENDIF
1216
1217# 1. we don't want to rebuild miniperl.exe when config.h changes
1218# 2. we don't want to rebuild miniperl.exe with non-default config.h
931482b7 1219# 3. we can't have miniperl.exe depend on git_version.h, as miniperl creates it
1e71036e
JH
1220$(MINI_OBJ) : $(CORE_NOCFG_H)
1221
1222$(WIN32_OBJ) : $(CORE_H)
9848074e 1223
1e71036e 1224$(CORE_OBJ) : $(CORE_H)
9848074e 1225
1e71036e 1226$(DLL_OBJ) : $(CORE_H)
9848074e 1227
1e71036e
JH
1228$(X2P_OBJ) : $(CORE_H)
1229
c6d234b8
NC
1230perldll.def : $(MINIPERL) $(CONFIGPM) ..\global.sym ..\pp.sym ..\makedef.pl create_perllibst_h.pl
1231 $(MINIPERL) -I..\lib create_perllibst_h.pl
c1effa61 1232 $(MINIPERL) -I..\lib -w ..\makedef.pl PLATFORM=win32 $(OPTIMIZE) $(DEFINES) \
1e71036e
JH
1233 $(BUILDOPT) CCTYPE=$(CCTYPE) > perldll.def
1234
d2b25974 1235$(PERLDLL): perldll.def $(PERLDLL_OBJ) $(PERLDLL_RES) Extensions_static
1e71036e
JH
1236.IF "$(CCTYPE)" == "BORLAND"
1237 $(LINK32) -Tpd -ap $(BLINK_FLAGS) \
13631a73
SH
1238 @$(mktmp c0d32$(o) $(PERLDLL_OBJ),$@,, \
1239 $(shell @type Extensions_static) $(LIBFILES),perldll.def)
1e71036e
JH
1240 $(IMPLIB) $*.lib $@
1241.ELIF "$(CCTYPE)" == "GCC"
1242 $(LINK32) -mdll -o $@ -Wl,--base-file -Wl,perl.base $(BLINK_FLAGS) \
13631a73
SH
1243 $(mktmp $(LKPRE) $(PERLDLL_OBJ) \
1244 $(shell @type Extensions_static) \
1245 $(LIBFILES) $(LKPOST))
fa58a56f 1246 $(IMPLIB) --output-lib $(PERLIMPLIB) \
1e71036e
JH
1247 --dllname $(PERLDLL:b).dll \
1248 --def perldll.def \
1249 --base-file perl.base \
1250 --output-exp perl.exp
1251 $(LINK32) -mdll -o $@ $(BLINK_FLAGS) \
13631a73
SH
1252 $(mktmp $(LKPRE) $(PERLDLL_OBJ) \
1253 $(shell @type Extensions_static) \
1254 $(LIBFILES) perl.exp $(LKPOST))
1e71036e 1255.ELSE
78d58004 1256 $(LINK32) -dll -def:perldll.def -out:$@ $(BLINK_FLAGS) \
9e7cf449 1257 @Extensions_static \
78d58004 1258 @$(mktmp -base:0x28000000 $(DELAYLOAD) $(LIBFILES) \
13631a73 1259 $(PERLDLL_RES) $(PERLDLL_OBJ))
c8e599d3 1260 $(EMBED_DLL_MANI)
1e71036e
JH
1261.ENDIF
1262 $(XCOPY) $(PERLIMPLIB) $(COREDIR)
1263
ed2eab3f
SH
1264$(PERLSTATICLIB): Extensions_static
1265.IF "$(CCTYPE)" == "BORLAND"
1266 $(LIB32) $(LIB_FLAGS) $@ \
13631a73
SH
1267 @$(mktmp $(shell @type Extensions_static) \
1268 $(PERLDLL_OBJ))
ed2eab3f 1269.ELIF "$(CCTYPE)" == "GCC"
df06d623
SH
1270# XXX: It would be nice if MinGW's ar accepted a temporary file, but this
1271# doesn't seem to work:
1272# $(LIB32) $(LIB_FLAGS) $@ \
13631a73
SH
1273# $(mktmp $(LKPRE) $(shell @type Extensions_static) \
1274# $(PERLDLL_OBJ) $(LKPOST))
df06d623 1275 $(LIB32) $(LIB_FLAGS) $@ \
13631a73
SH
1276 $(shell @type Extensions_static) \
1277 $(PERLDLL_OBJ)
ed2eab3f
SH
1278.ELSE
1279 $(LIB32) $(LIB_FLAGS) -out:$@ @Extensions_static \
13631a73 1280 @$(mktmp $(PERLDLL_OBJ))
ed2eab3f
SH
1281.ENDIF
1282 $(XCOPY) $(PERLSTATICLIB) $(COREDIR)
d2b25974 1283
4ebea3c6 1284$(PERLEXE_RES): perlexe.rc $(PERLEXE_MANIFEST) $(PERLEXE_ICO)
e84ac4e2 1285
1e71036e
JH
1286$(MINIMOD) : $(MINIPERL) ..\minimod.pl
1287 cd .. && miniperl minimod.pl > lib\ExtUtils\Miniperl.pm
1288
1289..\x2p\a2p$(o) : ..\x2p\a2p.c
1290 $(CC) -I..\x2p $(CFLAGS) $(OBJOUT_FLAG)$@ -c ..\x2p\a2p.c
1291
1292..\x2p\hash$(o) : ..\x2p\hash.c
1293 $(CC) -I..\x2p $(CFLAGS) $(OBJOUT_FLAG)$@ -c ..\x2p\hash.c
1294
1295..\x2p\str$(o) : ..\x2p\str.c
1296 $(CC) -I..\x2p $(CFLAGS) $(OBJOUT_FLAG)$@ -c ..\x2p\str.c
1297
1298..\x2p\util$(o) : ..\x2p\util.c
1299 $(CC) -I..\x2p $(CFLAGS) $(OBJOUT_FLAG)$@ -c ..\x2p\util.c
1300
1301..\x2p\walk$(o) : ..\x2p\walk.c
1302 $(CC) -I..\x2p $(CFLAGS) $(OBJOUT_FLAG)$@ -c ..\x2p\walk.c
1303
403f501d 1304$(X2P) : $(MINIPERL) $(X2P_OBJ) Extensions
c1effa61
NC
1305 $(MINIPERL) -I..\lib ..\x2p\find2perl.PL
1306 $(MINIPERL) -I..\lib ..\x2p\s2p.PL
1e71036e
JH
1307.IF "$(CCTYPE)" == "BORLAND"
1308 $(LINK32) -Tpe -ap $(BLINK_FLAGS) \
13631a73 1309 @$(mktmp c0x32$(o) $(X2P_OBJ),$@,,$(LIBFILES),)
1e71036e
JH
1310.ELIF "$(CCTYPE)" == "GCC"
1311 $(LINK32) -v -o $@ $(BLINK_FLAGS) \
13631a73 1312 $(mktmp $(LKPRE) $(X2P_OBJ) $(LIBFILES) $(LKPOST))
1e71036e 1313.ELSE
78d58004 1314 $(LINK32) -subsystem:console -out:$@ $(BLINK_FLAGS) \
13631a73 1315 @$(mktmp $(LIBFILES) $(X2P_OBJ))
c8e599d3 1316 $(EMBED_EXE_MANI)
1e71036e
JH
1317.ENDIF
1318
efa50c51 1319$(MINIDIR)\globals$(o) : $(UUDMAP_H) $(BITCOUNT_H)
9444d213 1320
6999193b
NC
1321$(UUDMAP_H) : $(BITCOUNT_H)
1322
1323$(BITCOUNT_H) : $(GENUUDMAP)
efa50c51 1324 $(GENUUDMAP) $(UUDMAP_H) $(BITCOUNT_H)
9444d213 1325
202d1001 1326$(GENUUDMAP) : $(GENUUDMAP_OBJ)
9444d213
NC
1327.IF "$(CCTYPE)" == "BORLAND"
1328 $(LINK32) -Tpe -ap $(BLINK_FLAGS) \
13631a73 1329 @$(mktmp c0x32$(o) $(GENUUDMAP_OBJ),$@,,$(LIBFILES),)
9444d213
NC
1330.ELIF "$(CCTYPE)" == "GCC"
1331 $(LINK32) -v -o $@ $(BLINK_FLAGS) \
13631a73 1332 $(mktmp $(LKPRE) $(GENUUDMAP_OBJ) $(LIBFILES) $(LKPOST))
9444d213
NC
1333.ELSE
1334 $(LINK32) -subsystem:console -out:$@ $(BLINK_FLAGS) \
13631a73 1335 @$(mktmp $(LIBFILES) $(GENUUDMAP_OBJ))
202d1001 1336 $(EMBED_EXE_MANI)
9444d213
NC
1337.ENDIF
1338
1e71036e
JH
1339perlmain.c : runperl.c
1340 copy runperl.c perlmain.c
1341
1342perlmain$(o) : perlmain.c
88c9158a 1343 $(CC) $(CFLAGS_O:s,-DPERLDLL,-UPERLDLL,) $(OBJOUT_FLAG)$@ -c perlmain.c
1e71036e 1344
ed2eab3f
SH
1345perlmainst.c : runperl.c
1346 copy runperl.c perlmainst.c
1347
1348perlmainst$(o) : perlmainst.c
88c9158a 1349 $(CC) $(CFLAGS_O) $(OBJOUT_FLAG)$@ -c perlmainst.c
ed2eab3f 1350
931482b7 1351$(PERLEXE): $(PERLDLL) $(CONFIGPM) $(PERLEXE_OBJ) $(PERLEXE_RES)
1e71036e
JH
1352.IF "$(CCTYPE)" == "BORLAND"
1353 $(LINK32) -Tpe -ap $(BLINK_FLAGS) \
13631a73
SH
1354 @$(mktmp c0x32$(o) $(PERLEXE_OBJ),$@,, \
1355 $(PERLIMPLIB) $(LIBFILES),,$(PERLEXE_RES))
1e71036e
JH
1356.ELIF "$(CCTYPE)" == "GCC"
1357 $(LINK32) -mconsole -o $@ $(BLINK_FLAGS) \
f721bdf3 1358 $(PERLEXE_OBJ) $(PERLEXE_RES) $(PERLIMPLIB) $(LIBFILES)
1e71036e
JH
1359.ELSE
1360 $(LINK32) -subsystem:console -out:$@ -stack:0x1000000 $(BLINK_FLAGS) \
1361 $(LIBFILES) $(PERLEXE_OBJ) $(SETARGV_OBJ) $(PERLIMPLIB) $(PERLEXE_RES)
c8e599d3 1362 $(EMBED_EXE_MANI)
1e71036e
JH
1363.ENDIF
1364 copy $(PERLEXE) $(WPERLEXE)
1365 $(MINIPERL) -I..\lib bin\exetype.pl $(WPERLEXE) WINDOWS
1e71036e 1366
931482b7 1367$(PERLEXESTATIC): $(PERLSTATICLIB) $(CONFIGPM) $(PERLEXEST_OBJ) $(PERLEXE_RES)
ed2eab3f
SH
1368.IF "$(CCTYPE)" == "BORLAND"
1369 $(LINK32) -Tpe -ap $(BLINK_FLAGS) \
13631a73
SH
1370 @$(mktmp c0x32$(o) $(PERLEXEST_OBJ),$@,, \
1371 $(shell @type Extensions_static) $(PERLSTATICLIB) $(LIBFILES),, \
1372 $(PERLEXE_RES))
ed2eab3f
SH
1373.ELIF "$(CCTYPE)" == "GCC"
1374 $(LINK32) -mconsole -o $@ $(BLINK_FLAGS) \
13631a73
SH
1375 $(mktmp $(LKPRE) $(shell @type Extensions_static) \
1376 $(PERLSTATICLIB) $(LIBFILES) $(PERLEXEST_OBJ) \
1377 $(PERLEXE_RES) $(LKPOST))
ed2eab3f
SH
1378.ELSE
1379 $(LINK32) -subsystem:console -out:$@ -stack:0x1000000 $(BLINK_FLAGS) \
a1f2e719 1380 @Extensions_static $(PERLSTATICLIB) /PDB:NONE \
ed2eab3f
SH
1381 $(LIBFILES) $(PERLEXEST_OBJ) $(SETARGV_OBJ) $(PERLEXE_RES)
1382 $(EMBED_EXE_MANI)
1383.ENDIF
1384
d1a21686 1385MakePPPort: $(MINIPERL) $(CONFIGPM) Extensions_nonxs
403f501d 1386 $(MINIPERL) -I..\lib $(ICWD) ..\mkppport
42e07562 1387
9dcb9602 1388#-------------------------------------------------------------------------------
281da5ea 1389# There's no direct way to mark a dependency on
6afd19bc 1390# DynaLoader.pm, so this will have to do
281da5ea 1391Extensions : ..\make_ext.pl $(PERLDEP) $(CONFIGPM) $(DYNALOADER)
250c5aad 1392 $(XCOPY) ..\*.h $(COREDIR)\*.*
a193a2db 1393 $(MINIPERL) -I..\lib ..\make_ext.pl "MAKE=$(MAKE)" --dir=$(CPANDIR) --dir=$(DISTDIR) --dir=$(EXTDIR) --dynamic
d2b25974 1394
281da5ea 1395Extensions_reonly : ..\make_ext.pl $(PERLDEP) $(CONFIGPM) $(DYNALOADER)
250c5aad 1396 $(XCOPY) ..\*.h $(COREDIR)\*.*
a193a2db 1397 $(MINIPERL) -I..\lib ..\make_ext.pl "MAKE=$(MAKE)" --dir=$(CPANDIR) --dir=$(DISTDIR) --dir=$(EXTDIR) --dynamic +re
250c5aad 1398
286d62c2 1399Extensions_static : ..\make_ext.pl list_static_libs.pl $(PERLDEP) $(CONFIGPM)
250c5aad 1400 $(XCOPY) ..\*.h $(COREDIR)\*.*
a193a2db 1401 $(MINIPERL) -I..\lib ..\make_ext.pl "MAKE=$(MAKE)" --dir=$(CPANDIR) --dir=$(DISTDIR) --dir=$(EXTDIR) --static
c6d234b8 1402 $(MINIPERL) -I..\lib list_static_libs.pl > Extensions_static
1e71036e 1403
9ddff148 1404Extensions_nonxs : ..\make_ext.pl $(PERLDEP) $(CONFIGPM)
a34ce875 1405 $(XCOPY) ..\*.h $(COREDIR)\*.*
a193a2db 1406 $(MINIPERL) -I..\lib ..\make_ext.pl "MAKE=$(MAKE)" --dir=$(CPANDIR) --dir=$(DISTDIR) --dir=$(EXTDIR) --nonxs
a34ce875 1407
281da5ea
NC
1408$(DYNALOADER) : ..\make_ext.pl $(PERLDEP) $(CONFIGPM) Extensions_nonxs
1409 $(XCOPY) ..\*.h $(COREDIR)\*.*
1410 $(MINIPERL) -I..\lib ..\make_ext.pl "MAKE=$(MAKE)" --dir=$(EXTDIR) --dynaloader
1411
ba14dd9a 1412Extensions_clean :
a193a2db 1413 -if exist $(MINIPERL) $(MINIPERL) -I..\lib ..\make_ext.pl "MAKE=$(MAKE)" --dir=$(CPANDIR) --dir=$(DISTDIR) --dir=$(EXTDIR) --all --target=clean
1e71036e 1414
b4dc1df6 1415Extensions_realclean :
a193a2db 1416 -if exist $(MINIPERL) $(MINIPERL) -I..\lib ..\make_ext.pl "MAKE=$(MAKE)" --dir=$(CPANDIR) --dir=$(DISTDIR) --dir=$(EXTDIR) --all --target=realclean
b4dc1df6 1417
9dcb9602 1418#-------------------------------------------------------------------------------
1e71036e
JH
1419
1420
0195b144 1421doc: $(PERLEXE) ..\pod\perltoc.pod
b4a41557 1422 $(PERLEXE) -I..\lib ..\installhtml --podroot=.. --htmldir=$(HTMLDIR) \
1e71036e
JH
1423 --podpath=pod:lib:ext:utils --htmlroot="file://$(INST_HTML:s,:,|,)"\
1424 --libpod=perlfunc:perlguts:perlvar:perlrun:perlop --recurse
1425
b0b6bf2b
AT
1426# Note that this next section is parsed (and regenerated) by pod/buildtoc
1427# so please check that script before making structural changes here
9ddff148 1428utils: $(PERLEXE) $(X2P)
1e71036e 1429 cd ..\utils && $(MAKE) PERL=$(MINIPERL)
b0b6bf2b
AT
1430 copy ..\README.aix ..\pod\perlaix.pod
1431 copy ..\README.amiga ..\pod\perlamiga.pod
1432 copy ..\README.apollo ..\pod\perlapollo.pod
1433 copy ..\README.beos ..\pod\perlbeos.pod
1434 copy ..\README.bs2000 ..\pod\perlbs2000.pod
1435 copy ..\README.ce ..\pod\perlce.pod
1436 copy ..\README.cn ..\pod\perlcn.pod
1437 copy ..\README.cygwin ..\pod\perlcygwin.pod
1438 copy ..\README.dgux ..\pod\perldgux.pod
1439 copy ..\README.dos ..\pod\perldos.pod
1440 copy ..\README.epoc ..\pod\perlepoc.pod
1441 copy ..\README.freebsd ..\pod\perlfreebsd.pod
9f968a8d 1442 copy ..\README.haiku ..\pod\perlhaiku.pod
b0b6bf2b
AT
1443 copy ..\README.hpux ..\pod\perlhpux.pod
1444 copy ..\README.hurd ..\pod\perlhurd.pod
1445 copy ..\README.irix ..\pod\perlirix.pod
1446 copy ..\README.jp ..\pod\perljp.pod
1447 copy ..\README.ko ..\pod\perlko.pod
6477b319 1448 copy ..\README.linux ..\pod\perllinux.pod
b0b6bf2b
AT
1449 copy ..\README.macos ..\pod\perlmacos.pod
1450 copy ..\README.macosx ..\pod\perlmacosx.pod
b0b6bf2b
AT
1451 copy ..\README.mpeix ..\pod\perlmpeix.pod
1452 copy ..\README.netware ..\pod\perlnetware.pod
b0846812 1453 copy ..\README.openbsd ..\pod\perlopenbsd.pod
b0b6bf2b
AT
1454 copy ..\README.os2 ..\pod\perlos2.pod
1455 copy ..\README.os390 ..\pod\perlos390.pod
1456 copy ..\README.os400 ..\pod\perlos400.pod
1457 copy ..\README.plan9 ..\pod\perlplan9.pod
1458 copy ..\README.qnx ..\pod\perlqnx.pod
2f08ed66 1459 copy ..\README.riscos ..\pod\perlriscos.pod
b0b6bf2b 1460 copy ..\README.solaris ..\pod\perlsolaris.pod
27da23d5 1461 copy ..\README.symbian ..\pod\perlsymbian.pod
b0b6bf2b
AT
1462 copy ..\README.tru64 ..\pod\perltru64.pod
1463 copy ..\README.tw ..\pod\perltw.pod
1464 copy ..\README.uts ..\pod\perluts.pod
1465 copy ..\README.vmesa ..\pod\perlvmesa.pod
b0b6bf2b
AT
1466 copy ..\README.vos ..\pod\perlvos.pod
1467 copy ..\README.win32 ..\pod\perlwin32.pod
587354ab 1468 copy ..\pod\perl5135delta.pod ..\pod\perldelta.pod
b0b6bf2b 1469 cd ..\pod && $(MAKE) -f ..\win32\pod.mak converters
1e71036e 1470 $(PERLEXE) $(PL2BAT) $(UTILS)
403f501d
NC
1471 $(PERLEXE) $(ICWD) ..\autodoc.pl ..
1472 $(PERLEXE) $(ICWD) ..\pod\perlmodlib.pl -q
0195b144
NC
1473
1474..\pod\perltoc.pod: $(PERLEXE) Extensions Extensions_nonxs
87e06404 1475 $(PERLEXE) -f ..\pod\buildtoc --build-toc -q
1e71036e 1476
b0b6bf2b
AT
1477# Note that the pod cleanup in this next section is parsed (and regenerated
1478# by pod/buildtoc so please check that script before making changes here
1479
b4dc1df6 1480distclean: realclean
1e71036e 1481 -del /f $(MINIPERL) $(PERLEXE) $(PERLDLL) $(GLOBEXE) \
ed2eab3f
SH
1482 $(PERLIMPLIB) ..\miniperl$(a) $(MINIMOD) \
1483 $(PERLEXESTATIC) $(PERLSTATICLIB)
1e71036e 1484 -del /f *.def *.map
ca67812f
SH
1485 -del /f $(LIBDIR)\Encode.pm $(LIBDIR)\encoding.pm $(LIBDIR)\Errno.pm
1486 -del /f $(LIBDIR)\Config.pod $(LIBDIR)\POSIX.pod $(LIBDIR)\threads.pm
48462a74 1487 -del /f $(LIBDIR)\.exists $(LIBDIR)\attributes.pm $(LIBDIR)\DynaLoader.pm
1e71036e 1488 -del /f $(LIBDIR)\Fcntl.pm $(LIBDIR)\IO.pm $(LIBDIR)\Opcode.pm
a9bf183d 1489 -del /f $(LIBDIR)\ops.pm $(LIBDIR)\Safe.pm
1e71036e
JH
1490 -del /f $(LIBDIR)\SDBM_File.pm $(LIBDIR)\Socket.pm $(LIBDIR)\POSIX.pm
1491 -del /f $(LIBDIR)\B.pm $(LIBDIR)\O.pm $(LIBDIR)\re.pm
1e71036e
JH
1492 -del /f $(LIBDIR)\File\Glob.pm
1493 -del /f $(LIBDIR)\Storable.pm
ca67812f 1494 -del /f $(LIBDIR)\Sys\Hostname.pm
1e71036e 1495 -del /f $(LIBDIR)\Time\HiRes.pm
ac5ea531 1496 -del /f $(LIBDIR)\Unicode\Normalize.pm
4e74047c 1497 -del /f $(LIBDIR)\Math\BigInt\FastCalc.pm
b4ad57f4 1498 -del /f $(LIBDIR)\Win32.pm
37ca3c28 1499 -del /f $(LIBDIR)\Win32CORE.pm
00701878
SH
1500 -del /f $(LIBDIR)\Win32API\File.pm
1501 -del /f $(LIBDIR)\Win32API\File\cFile.pc
a85e0e8c 1502 -del /f $(DISTDIR)\XSLoader\XSLoader.pm
1a6c65ed
SH
1503 -if exist $(LIBDIR)\App rmdir /s /q $(LIBDIR)\App
1504 -if exist $(LIBDIR)\Archive rmdir /s /q $(LIBDIR)\Archive
1505 -if exist $(LIBDIR)\Attribute rmdir /s /q $(LIBDIR)\Attribute
1506 -if exist $(LIBDIR)\autodie rmdir /s /q $(LIBDIR)\autodie
522078af 1507 -if exist $(LIBDIR)\B rmdir /s /q $(LIBDIR)\B
1a6c65ed
SH
1508 -if exist $(LIBDIR)\CGI rmdir /s /q $(LIBDIR)\CGI
1509 -if exist $(LIBDIR)\CPAN rmdir /s /q $(LIBDIR)\CPAN
1510 -if exist $(LIBDIR)\CPANPLUS rmdir /s /q $(LIBDIR)\CPANPLUS
46ffdcf0 1511 -if exist $(LIBDIR)\Compress rmdir /s /q $(LIBDIR)\Compress
522078af 1512 -if exist $(LIBDIR)\Data rmdir /s /q $(LIBDIR)\Data
1a6c65ed
SH
1513 -if exist $(LIBDIR)\Devel rmdir /s /q $(LIBDIR)\Devel
1514 -if exist $(LIBDIR)\Digest rmdir /s /q $(LIBDIR)\Digest
ca67812f 1515 -if exist $(LIBDIR)\Encode rmdir /s /q $(LIBDIR)\Encode
1a6c65ed
SH
1516 -if exist $(LIBDIR)\encoding rmdir /s /q $(LIBDIR)\encoding
1517 -if exist $(LIBDIR)\ExtUtils\CBuilder rmdir /s /q $(LIBDIR)\ExtUtils\CBuilder
1518 -if exist $(LIBDIR)\ExtUtils\Command rmdir /s /q $(LIBDIR)\ExtUtils\Command
1519 -if exist $(LIBDIR)\ExtUtils\Constant rmdir /s /q $(LIBDIR)\ExtUtils\Constant
1520 -if exist $(LIBDIR)\ExtUtils\Liblist rmdir /s /q $(LIBDIR)\ExtUtils\Liblist
1521 -if exist $(LIBDIR)\ExtUtils\MakeMaker rmdir /s /q $(LIBDIR)\ExtUtils\MakeMaker
1522 -if exist $(LIBDIR)\File\Spec rmdir /s /q $(LIBDIR)\File\Spec
1523 -if exist $(LIBDIR)\Filter rmdir /s /q $(LIBDIR)\Filter
96c33d98 1524 -if exist $(LIBDIR)\Hash rmdir /s /q $(LIBDIR)\Hash
1a6c65ed
SH
1525 -if exist $(LIBDIR)\I18N\LangTags rmdir /s /q $(LIBDIR)\I18N\LangTags
1526 -if exist $(LIBDIR)\inc rmdir /s /q $(LIBDIR)\inc
c146e560 1527 -if exist $(LIBDIR)\Module\Pluggable rmdir /s /q $(LIBDIR)\Module\Pluggable
1a6c65ed
SH
1528 -if exist $(LIBDIR)\IO rmdir /s /q $(LIBDIR)\IO
1529 -if exist $(LIBDIR)\IPC rmdir /s /q $(LIBDIR)\IPC
69f57184 1530 -if exist $(LIBDIR)\List rmdir /s /q $(LIBDIR)\List
1a6c65ed
SH
1531 -if exist $(LIBDIR)\Locale rmdir /s /q $(LIBDIR)\Locale
1532 -if exist $(LIBDIR)\Log rmdir /s /q $(LIBDIR)\Log
1533 -if exist $(LIBDIR)\Math rmdir /s /q $(LIBDIR)\Math
1534 -if exist $(LIBDIR)\Memoize rmdir /s /q $(LIBDIR)\Memoize
69f57184 1535 -if exist $(LIBDIR)\MIME rmdir /s /q $(LIBDIR)\MIME
1a6c65ed
SH
1536 -if exist $(LIBDIR)\Module rmdir /s /q $(LIBDIR)\Module
1537 -if exist $(LIBDIR)\mro rmdir /s /q $(LIBDIR)\mro
1538 -if exist $(LIBDIR)\Net\FTP rmdir /s /q $(LIBDIR)\Net\FTP
1539 -if exist $(LIBDIR)\Object rmdir /s /q $(LIBDIR)\Object
1540 -if exist $(LIBDIR)\Package rmdir /s /q $(LIBDIR)\Package
1541 -if exist $(LIBDIR)\Params rmdir /s /q $(LIBDIR)\Params
1542 -if exist $(LIBDIR)\Parse rmdir /s /q $(LIBDIR)\Parse
1543 -if exist $(LIBDIR)\PerlIO rmdir /s /q $(LIBDIR)\PerlIO
1544 -if exist $(LIBDIR)\Pod\Perldoc rmdir /s /q $(LIBDIR)\Pod\Perldoc
1545 -if exist $(LIBDIR)\Pod\Simple rmdir /s /q $(LIBDIR)\Pod\Simple
1546 -if exist $(LIBDIR)\Pod\Text rmdir /s /q $(LIBDIR)\Pod\Text
849a608a 1547 -if exist $(LIBDIR)\re rmdir /s /q $(LIBDIR)\re
522078af 1548 -if exist $(LIBDIR)\Scalar rmdir /s /q $(LIBDIR)\Scalar
6c4b87ea 1549 -if exist $(LIBDIR)\Sys rmdir /s /q $(LIBDIR)\Sys
1a6c65ed
SH
1550 -if exist $(LIBDIR)\TAP rmdir /s /q $(LIBDIR)\TAP
1551 -if exist $(LIBDIR)\Term\UI rmdir /s /q $(LIBDIR)\Term\UI
1552 -if exist $(LIBDIR)\Test rmdir /s /q $(LIBDIR)\Test
1553 -if exist $(LIBDIR)\Thread rmdir /s /q $(LIBDIR)\Thread
6c4b87ea 1554 -if exist $(LIBDIR)\threads rmdir /s /q $(LIBDIR)\threads
1a6c65ed 1555 -if exist $(LIBDIR)\Unicode\Collate rmdir /s /q $(LIBDIR)\Unicode\Collate
522078af 1556 -if exist $(LIBDIR)\XS rmdir /s /q $(LIBDIR)\XS
00701878 1557 -if exist $(LIBDIR)\Win32API rmdir /s /q $(LIBDIR)\Win32API
1a6c65ed 1558 -cd $(PODDIR) && del /f *.html *.bat \
9e64a656
NC
1559 perlaix.pod perlamiga.pod perlapi.pod perlapollo.pod \
1560 perlbeos.pod perlbs2000.pod perlce.pod perlcn.pod \
1561 perlcygwin.pod perldelta.pod perldgux.pod perldos.pod \
1562 perlepoc.pod perlfreebsd.pod perlhaiku.pod perlhpux.pod \
1563 perlhurd.pod perlintern.pod perlirix.pod perljp.pod perlko.pod \
7cdf958d
DM
1564 perllinux.pod perlmacos.pod perlmacosx.pod perlmodlib.pod \
1565 perlmpeix.pod perlnetware.pod perlopenbsd.pod perlos2.pod \
1566 perlos390.pod perlos400.pod perlplan9.pod perlqnx.pod \
1567 perlriscos.pod perlsolaris.pod perlsymbian.pod perltoc.pod \
524ce141
RGS
1568 perltru64.pod perltw.pod perluniprops.pod perluts.pod \
1569 perlvmesa.pod perlvos.pod perlwin32.pod \
4cb44f92 1570 pod2html pod2latex pod2man pod2text pod2usage \
1a6c65ed 1571 podchecker podselect
827a599d 1572 -cd ..\utils && del /f h2ph splain perlbug pl2pm c2ph pstruct h2xs \
de125441 1573 perldoc perlivp dprofpp libnetcfg enc2xs piconv cpan *.bat \
6aaee015 1574 xsubpp instmodsh prove ptar ptardiff cpanp-run-perl cpanp cpan2dist shasum corelist config_data
827a599d 1575 -cd ..\x2p && del /f find2perl s2p psed *.bat
19ec6f53 1576 -del /f ..\config.sh perlmain.c dlutils.c config.h.new \
ed2eab3f 1577 perlmainst.c
1e71036e 1578 -del /f $(CONFIGPM)
a148edb6 1579 -del /f ..\lib\Config_git.pl
1e71036e 1580 -del /f bin\*.bat
d2b25974 1581 -del /f perllibst.h
4ebea3c6 1582 -del /f $(PERLEXE_RES) perl.base
85741d00 1583 -cd .. && del /s *$(a) *.map *.pdb *.ilk *.tds *.bs *$(o) .exists pm_to_blib ppport.h
827a599d 1584 -cd $(EXTDIR) && del /s *.def Makefile Makefile.old
a193a2db 1585 -cd $(DISTDIR) && del /s *.def Makefile Makefile.old
83d5895a 1586 -cd $(CPANDIR) && del /s *.def Makefile Makefile.old
522078af 1587 -if exist $(AUTODIR) rmdir /s /q $(AUTODIR)
522078af 1588 -if exist $(COREDIR) rmdir /s /q $(COREDIR)
b4a41557
SH
1589 -if exist pod2htmd.tmp del pod2htmd.tmp
1590 -if exist pod2htmi.tmp del pod2htmi.tmp
1591 -if exist $(HTMLDIR) rmdir /s /q $(HTMLDIR)
0279961e 1592 -del /f ..\t\test_state
1e71036e
JH
1593
1594install : all installbare installhtml
1595
0195b144 1596installbare : $(RIGHTMAKE) utils ..\pod\perltoc.pod
1e71036e
JH
1597 $(PERLEXE) ..\installperl
1598 if exist $(WPERLEXE) $(XCOPY) $(WPERLEXE) $(INST_BIN)\*.*
5548433c 1599 if exist $(PERLEXESTATIC) $(XCOPY) $(PERLEXESTATIC) $(INST_BIN)\*.*
1e71036e 1600 $(XCOPY) $(GLOBEXE) $(INST_BIN)\*.*
ec25c072
SH
1601 if exist ..\perl*.pdb $(XCOPY) ..\perl*.pdb $(INST_BIN)\*.*
1602 if exist ..\x2p\a2p.pdb $(XCOPY) ..\x2p\a2p.pdb $(INST_BIN)\*.*
1e71036e
JH
1603 $(XCOPY) bin\*.bat $(INST_SCRIPT)\*.*
1604
1605installhtml : doc
b4a41557 1606 $(RCOPY) $(HTMLDIR)\*.* $(INST_HTML)\*.*
1e71036e
JH
1607
1608inst_lib : $(CONFIGPM)
1e71036e
JH
1609 $(RCOPY) ..\lib $(INST_LIB)\*.*
1610
58fa074c 1611$(UNIDATAFILES) ..\pod\perluniprops.pod .UPDATEALL : $(MINIPERL) $(CONFIGPM) ..\lib\unicore\mktables Extensions_nonxs
27a8011f 1612 cd ..\lib\unicore && \
2a6dc374 1613 ..\$(MINIPERL) -I.. -I..\..\dist\Cwd\lib -I..\..\dist\Cwd mktables -P ..\..\pod -maketest -makelist -p
ca12659b
NC
1614
1615minitest : $(MINIPERL) $(GLOBEXE) $(CONFIGPM) $(UNIDATAFILES) utils
6c85d12e
SH
1616 $(XCOPY) $(MINIPERL) ..\t\$(NULL)
1617 if exist ..\t\perl.exe del /f ..\t\perl.exe
1618 rename ..\t\miniperl.exe perl.exe
1e71036e
JH
1619.IF "$(CCTYPE)" == "BORLAND"
1620 $(XCOPY) $(GLOBBAT) ..\t\$(NULL)
1621.ELSE
1622 $(XCOPY) $(GLOBEXE) ..\t\$(NULL)
1623.ENDIF
1624 attrib -r ..\t\*.*
1e71036e 1625 cd ..\t && \
6c85d12e 1626 $(MINIPERL) -I..\lib harness base/*.t comp/*.t cmd/*.t io/*.t op/*.t pragma/*.t
1e71036e 1627
6e2cec71 1628test-prep : all utils
1e71036e
JH
1629 $(XCOPY) $(PERLEXE) ..\t\$(NULL)
1630 $(XCOPY) $(PERLDLL) ..\t\$(NULL)
1631.IF "$(CCTYPE)" == "BORLAND"
1632 $(XCOPY) $(GLOBBAT) ..\t\$(NULL)
1633.ELSE
1634 $(XCOPY) $(GLOBEXE) ..\t\$(NULL)
1635.ENDIF
fa58a56f
S
1636.IF "$(CCTYPE)" == "GCC"
1637.IF "$(GCC_4XX)" == "define"
1638 $(XCOPY) $(GCCHELPERDLL) ..\t\$(NULL)
1639.ENDIF
1640.ENDIF
1e71036e
JH
1641
1642test : $(RIGHTMAKE) test-prep
89087c85 1643 cd ..\t && $(PERLEXE) -I..\lib harness $(TEST_SWITCHES) $(TEST_FILES)
1e71036e 1644
250c5aad
SH
1645test-reonly : reonly utils
1646 $(XCOPY) $(PERLEXE) ..\t\$(NULL)
1647 $(XCOPY) $(PERLDLL) ..\t\$(NULL)
1648 $(XCOPY) $(GLOBEXE) ..\t\$(NULL)
1649 cd ..\t && \
a4499558 1650 $(PERLEXE) -I..\lib harness $(OPT) -re \bpat\\/ $(EXTRA) && \
250c5aad
SH
1651 cd ..\win32
1652
1653regen :
1654 cd .. && regen.pl && cd win32
1655
1e71036e
JH
1656test-notty : test-prep
1657 set PERL_SKIP_TTY_TEST=1 && \
89087c85 1658 cd ..\t && $(PERLEXE) -I.\lib harness $(TEST_SWITCHES) $(TEST_FILES)
1e71036e 1659
b4a93add 1660_test : $(RIGHTMAKE)
a01cf021
JH
1661 $(XCOPY) $(PERLEXE) ..\t\$(NULL)
1662 $(XCOPY) $(PERLDLL) ..\t\$(NULL)
b4a93add 1663.IF "$(CCTYPE)" == "BORLAND"
a01cf021 1664 $(XCOPY) $(GLOBBAT) ..\t\$(NULL)
b4a93add 1665.ELSE
a01cf021 1666 $(XCOPY) $(GLOBEXE) ..\t\$(NULL)
b4a93add 1667.ENDIF
89087c85 1668 cd ..\t && $(PERLEXE) -I..\lib harness $(TEST_SWITCHES) $(TEST_FILES)
b4a93add 1669
b4dc1df6 1670_clean :
1e71036e
JH
1671 -@erase miniperlmain$(o)
1672 -@erase $(MINIPERL)
1673 -@erase perlglob$(o)
1674 -@erase perlmain$(o)
ed2eab3f 1675 -@erase perlmainst$(o)
1e71036e
JH
1676 -@erase config.w32
1677 -@erase /f config.h
a148edb6 1678 -@erase /f ..\git_version.h
1e71036e
JH
1679 -@erase $(GLOBEXE)
1680 -@erase $(PERLEXE)
1681 -@erase $(WPERLEXE)
ed2eab3f
SH
1682 -@erase $(PERLEXESTATIC)
1683 -@erase $(PERLSTATICLIB)
1e71036e
JH
1684 -@erase $(PERLDLL)
1685 -@erase $(CORE_OBJ)
efa50c51 1686 -@erase $(GENUUDMAP) $(GENUUDMAP_OBJ) $(UUDMAP_H) $(BITCOUNT_H)
522078af 1687 -if exist $(MINIDIR) rmdir /s /q $(MINIDIR)
27a8011f 1688 -if exist $(UNIDATADIR1) rmdir /s /q $(UNIDATADIR1)
27a8011f 1689 -if exist $(UNIDATADIR2) rmdir /s /q $(UNIDATADIR2)
ca12659b 1690 -@erase $(UNIDATAFILES)
1e71036e
JH
1691 -@erase $(WIN32_OBJ)
1692 -@erase $(DLL_OBJ)
1693 -@erase $(X2P_OBJ)
1694 -@erase ..\*$(o) ..\*$(a) ..\*.exp *$(o) *$(a) *.exp *.res
1695 -@erase ..\t\*.exe ..\t\*.dll ..\t\*.bat
1696 -@erase ..\x2p\*.exe ..\x2p\*.bat
1697 -@erase *.ilk
1698 -@erase *.pdb
44ba898b 1699 -@erase *.tds
9e7cf449 1700 -@erase Extensions_static
1e71036e 1701
b4dc1df6 1702
1266ad8f 1703
6e2cec71 1704clean : Extensions_clean _clean
1266ad8f 1705
85741d00 1706realclean : Extensions_realclean _clean
b4dc1df6 1707
1e71036e
JH
1708# Handy way to run perlbug -ok without having to install and run the
1709# installed perlbug. We don't re-run the tests here - we trust the user.
1710# Please *don't* use this unless all tests pass.
1711# If you want to report test failures, use "dmake nok" instead.
1712ok: utils
1713 $(PERLEXE) -I..\lib ..\utils\perlbug -ok -s "(UNINSTALLED)"
1714
1715okfile: utils
1716 $(PERLEXE) -I..\lib ..\utils\perlbug -ok -s "(UNINSTALLED)" -F perl.ok
1717
1718nok: utils
1719 $(PERLEXE) -I..\lib ..\utils\perlbug -nok -s "(UNINSTALLED)"
1720
1721nokfile: utils
1722 $(PERLEXE) -I..\lib ..\utils\perlbug -nok -s "(UNINSTALLED)" -F perl.nok