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