1# 2# Makefile to build perl on Windows using Microsoft NMAKE. 3# Supported compilers: 4# Microsoft Visual C++ 12.0 or later 5# 6# This is set up to build a perl.exe that runs off a shared library 7# (perl540.dll). Also makes individual DLLs for the XS extensions. 8# 9 10## 11## Make sure you read README.win32 *before* you mess with anything here! 12## 13 14## 15## Build configuration. Edit the values below to suit your needs. 16## 17 18# 19# Set these to wherever you want "nmake install" to put your 20# newly built perl. 21# 22INST_DRV = c: 23INST_TOP = $(INST_DRV)\perl 24 25# 26# Uncomment if you want to build a 32-bit Perl using a 32-bit compiler 27# on a 64-bit version of Windows. 28# 29#WIN64 = undef 30 31# 32# Comment this out if you DON'T want your perl installation to be versioned. 33# This means that the new installation will overwrite any files from the 34# old installation at the same INST_TOP location. Leaving it enabled is 35# the safest route, as perl adds the extra version directory to all the 36# locations it installs files to. If you disable it, an alternative 37# versioned installation can be obtained by setting INST_TOP above to a 38# path that includes an arbitrary version string. 39# 40#INST_VER = \5.40.1 41 42# 43# Comment this out if you DON'T want your perl installation to have 44# architecture specific components. This means that architecture- 45# specific files will be installed along with the architecture-neutral 46# files. Leaving it enabled is safer and more flexible, in case you 47# want to build multiple flavors of perl and install them together in 48# the same location. Commenting it out gives you a simpler 49# installation that is easier to understand for beginners. 50# 51#INST_ARCH = \$(ARCHNAME) 52 53# 54# Uncomment this if you want perl to run 55# $Config{sitelibexp}\sitecustomize.pl 56# before anything else. This script can then be set up, for example, 57# to add additional entries to @INC. 58# 59#USE_SITECUST = define 60 61# 62# uncomment to enable multiple interpreters. This is needed for fork() 63# emulation and for thread support, and is auto-enabled by USE_IMP_SYS 64# and USE_ITHREADS below. 65# 66USE_MULTI = define 67 68# 69# Interpreter cloning/threads; now reasonably complete. 70# This should be enabled to get the fork() emulation. This needs (and 71# will auto-enable) USE_MULTI above. 72# 73USE_ITHREADS = define 74 75# 76# uncomment to enable the implicit "host" layer for all system calls 77# made by perl. This is also needed to get fork(). This needs (and 78# will auto-enable) USE_MULTI above. 79# 80USE_IMP_SYS = define 81 82# 83# Uncomment this if you're building a 32-bit perl and want 64-bit integers. 84# (If you're building a 64-bit perl then you will have 64-bit integers whether 85# or not this is uncommented.) 86# 87#USE_64_BIT_INT = define 88 89# 90# Comment this out if you want the legacy default behavior of including '.' at 91# the end of @INC. 92# 93DEFAULT_INC_EXCLUDES_DOT = define 94 95# 96# Uncomment this if you want to disable looking up values from 97# HKEY_CURRENT_USER\Software\Perl and HKEY_LOCAL_MACHINE\Software\Perl in 98# the Registry. 99# 100#USE_NO_REGISTRY = define 101 102# 103# uncomment exactly one of the following 104# 105# Visual C++ 2015 (aka Visual C++ 14.0) (full version or Express Edition) 106#CCTYPE = MSVC140 107# Visual C++ 2017 (aka Visual C++ 14.1) (full version or Community Edition) 108#CCTYPE = MSVC141 109# Visual C++ 2019 (aka Visual C++ 14.2) (full version or Community Edition) 110#CCTYPE = MSVC142 111# Visual C++ 2022 (aka Visual C++ 14.3) (full version or Community Edition) 112#CCTYPE = MSVC143 113 114# 115# If you are using Intel C++ Compiler uncomment this 116# 117#__ICC = define 118 119# 120# Uncomment this if you want to build everything in C++ mode 121# This requires at least MSVC 2019. 122# 123#USE_CPLUSPLUS = define 124 125# 126# uncomment next line if you want debug version of perl (big/slow) 127# If not enabled, we automatically try to use maximum optimization 128# with all compilers that are known to have a working optimizer. 129# 130# You can also set CFG = DebugSymbols for a slightly smaller/faster 131# debug build without the special debugging code in perl which is 132# enabled via -DDEBUGGING; 133# 134# or you can set CFG = DebugFull for an even fuller (bigger/slower) 135# debug build using the debug version of the CRT, and enabling VC++ 136# debug features such as extra assertions and invalid parameter warnings 137# in perl and CRT code via -D_DEBUG. (Note that the invalid parameter 138# handler does get triggered from time to time in this configuration, 139# which causes warnings to be printed on STDERR, which in turn causes a 140# few tests to fail.) 141# 142#CFG = Debug 143 144# 145# uncomment to enable linking with setargv.obj under the Visual C 146# compiler. Setting this options enables perl to expand wildcards in 147# arguments, but it may be harder to use alternate methods like 148# File::DosGlob that are more powerful. This option is supported only with 149# Visual C. 150# 151#USE_SETARGV = define 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# 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# 167#DEBUG_MSTATS = define 168 169# 170# set this to additionally provide a statically linked perl-static.exe. 171# Note that dynamic loading will not work with this perl, so you must 172# include required modules statically using the STATIC_EXT or ALL_STATIC 173# variables below. A static library perl540s.lib will also be created. 174# Ordinary perl.exe is not affected by this option. 175# 176#BUILD_STATIC = define 177 178# 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# 188# set the install location of the compiler 189# Running VCVARS32.BAT, VCVARSALL.BAT or similar is *required* when using 190# Visual C++. 191# Versions of Visual C++ up to VC++ 14.0 define $(VCINSTALLDIR), but from 192# VC++ 14.1 we need the subfolder given by $(VCToolsInstallDir). 193# 194!IF "$(CCTYPE)" == "MSVC140" 195CCHOME = $(VCINSTALLDIR) 196!ELSE 197CCHOME = $(VCTOOLSINSTALLDIR) 198!ENDIF 199 200# 201# Additional compiler flags can be specified here. 202# 203BUILDOPT = $(BUILDOPTEXTRA) 204 205# 206# This should normally be disabled. Enabling it will disable the File::Glob 207# implementation of CORE::glob. 208# 209#BUILDOPT = $(BUILDOPT) -DPERL_EXTERNAL_GLOB 210 211# 212# Perl needs to read scripts in text mode so that the DATA filehandle 213# works correctly with seek() and tell(), or around auto-flushes of 214# all filehandles (e.g. by system(), backticks, fork(), etc). 215# 216# The current version on the ByteLoader module on CPAN however only 217# works if scripts are read in binary mode. But before you disable text 218# mode script reading (and break some DATA filehandle functionality) 219# please check first if an updated ByteLoader isn't available on CPAN. 220# 221BUILDOPT = $(BUILDOPT) -DPERL_TEXTMODE_SCRIPTS 222 223# 224# specify semicolon-separated list of extra directories that modules will 225# look for libraries (spaces in path names need not be quoted) 226# 227EXTRALIBDIRS = 228 229# 230# set this to your email address (perl will guess a value from 231# your loginname and your hostname, which may not be right) 232# 233#EMAIL = 234 235## 236## Build configuration ends. 237## 238 239##################### CHANGE THESE ONLY IF YOU MUST ##################### 240 241!IF "$(USE_IMP_SYS)" == "define" 242PERL_MALLOC = undef 243DEBUG_MSTATS = undef 244!ENDIF 245 246!IF "$(PERL_MALLOC)" == "" 247PERL_MALLOC = undef 248DEBUG_MSTATS = undef 249!ENDIF 250 251!IF "$(DEBUG_MSTATS)" == "" 252DEBUG_MSTATS = undef 253!ENDIF 254 255!IF "$(DEBUG_MSTATS)" == "define" 256BUILDOPT = $(BUILDOPT) -DPERL_DEBUGGING_MSTATS 257!ENDIF 258 259!IF "$(USE_SITECUST)" == "" 260USE_SITECUST = undef 261!ENDIF 262 263!IF "$(USE_MULTI)" == "" 264USE_MULTI = undef 265!ENDIF 266 267!IF "$(USE_ITHREADS)" == "" 268USE_ITHREADS = undef 269!ENDIF 270 271!IF "$(USE_IMP_SYS)" == "" 272USE_IMP_SYS = undef 273!ENDIF 274 275!IF "$(USE_64_BIT_INT)" == "" 276USE_64_BIT_INT = undef 277!ENDIF 278 279!IF "$(DEFAULT_INC_EXCLUDES_DOT)" == "" 280DEFAULT_INC_EXCLUDES_DOT = undef 281!ENDIF 282 283!IF "$(USE_NO_REGISTRY)" == "" 284USE_NO_REGISTRY = undef 285!ENDIF 286 287!IF "$(USE_IMP_SYS)$(USE_MULTI)" == "defineundef" 288USE_MULTI = define 289!ENDIF 290 291!IF "$(USE_ITHREADS)$(USE_MULTI)" == "defineundef" 292USE_MULTI = define 293!ENDIF 294 295!IF "$(USE_SITECUST)" == "define" 296BUILDOPT = $(BUILDOPT) -DUSE_SITECUSTOMIZE 297!ENDIF 298 299!IF "$(USE_MULTI)" != "undef" 300BUILDOPT = $(BUILDOPT) -DMULTIPLICITY 301!ENDIF 302 303!IF "$(USE_IMP_SYS)" != "undef" 304BUILDOPT = $(BUILDOPT) -DPERL_IMPLICIT_SYS 305!ENDIF 306 307!IF "$(USE_NO_REGISTRY)" != "undef" 308BUILDOPT = $(BUILDOPT) -DWIN32_NO_REGISTRY 309!ENDIF 310 311!IF "$(PROCESSOR_ARCHITECTURE)" == "" 312PROCESSOR_ARCHITECTURE = x86 313!ENDIF 314 315!IF "$(WIN64)" == "" 316# When we are running from a 32bit cmd.exe on AMD64 then 317# PROCESSOR_ARCHITECTURE is set to x86 and PROCESSOR_ARCHITEW6432 318# is set to AMD64 319! IF "$(PROCESSOR_ARCHITEW6432)" != "" 320PROCESSOR_ARCHITECTURE = $(PROCESSOR_ARCHITEW6432) 321WIN64 = define 322! ELSEIF "$(PROCESSOR_ARCHITECTURE)" == "AMD64" || "$(PROCESSOR_ARCHITECTURE)" == "IA64" || "$(PROCESSOR_ARCHITECTURE)" == "ARM64" 323WIN64 = define 324! ELSE 325WIN64 = undef 326! ENDIF 327!ENDIF 328 329!IF "$(WIN64)" == "define" 330USE_64_BIT_INT = define 331!ENDIF 332 333ARCHITECTURE = $(PROCESSOR_ARCHITECTURE) 334 335!IF "$(ARCHITECTURE)" == "AMD64" 336ARCHITECTURE = x64 337!ELSEIF "$(ARCHITECTURE)" == "IA64" 338ARCHITECTURE = ia64 339!ELSEIF "$(ARCHITECTURE)" == "ARM64" 340ARCHITECTURE = arm64 341!ENDIF 342 343!IF "$(USE_MULTI)" == "define" 344ARCHNAME = MSWin32-$(ARCHITECTURE)-multi 345!ELSE 346ARCHNAME = MSWin32-$(ARCHITECTURE)-perlio 347!ENDIF 348 349!IF "$(USE_ITHREADS)" == "define" 350ARCHNAME = $(ARCHNAME)-thread 351!ENDIF 352 353!IF "$(WIN64)" != "define" && "$(USE_64_BIT_INT)" == "define" 354ARCHNAME = $(ARCHNAME)-64int 355!ENDIF 356 357# Loading DLLs on demand makes the test suite run in about 10% less time. 358# If no registry, advapi32 is only used for Perl_pp_getlogin/getlogin/GetUserNameA 359# which is rare to execute 360!IF "$(USE_NO_REGISTRY)" != "undef" 361DELAYLOAD = -DELAYLOAD:ws2_32.dll -DELAYLOAD:advapi32.dll delayimp.lib 362MINIDELAYLOAD = 363!ELSE 364DELAYLOAD = -DELAYLOAD:ws2_32.dll delayimp.lib 365#miniperl never does any registry lookups 366MINIDELAYLOAD = -DELAYLOAD:advapi32.dll 367!ENDIF 368 369# Set the install location of the compiler headers/libraries. 370# These are saved into $Config{incpath} and $Config{libpth}. 371CCINCDIR = $(CCHOME)\include 372!IF "$(CCTYPE)" == "MSVC140" 373! IF "$(WIN64)" == "define" 374CCLIBDIR = $(CCHOME)\lib\amd64 375! ELSE 376CCLIBDIR = $(CCHOME)\lib 377! ENDIF 378!ELSE 379! IF "$(ARCHITECTURE)" == "arm64" 380CCLIBDIR = $(CCHOME)\lib\arm64 381! ELSEIF "$(WIN64)" == "define" 382CCLIBDIR = $(CCHOME)\lib\x64 383! ELSE 384CCLIBDIR = $(CCHOME)\lib\x86 385! ENDIF 386!ENDIF 387 388ARCHDIR = ..\lib\$(ARCHNAME) 389COREDIR = ..\lib\CORE 390AUTODIR = ..\lib\auto 391LIBDIR = ..\lib 392EXTDIR = ..\ext 393DISTDIR = ..\dist 394CPANDIR = ..\cpan 395PODDIR = ..\pod 396HTMLDIR = .\html 397 398INST_SCRIPT = $(INST_TOP)$(INST_VER)\bin 399INST_BIN = $(INST_SCRIPT)$(INST_ARCH) 400INST_LIB = $(INST_TOP)$(INST_VER)\lib 401INST_ARCHLIB = $(INST_LIB)$(INST_ARCH) 402INST_COREDIR = $(INST_ARCHLIB)\CORE 403INST_HTML = $(INST_TOP)$(INST_VER)\html 404 405# 406# Programs to compile, build .lib files and link 407# 408 409# Poison the recipe if no CCTYPE is set, and delete mini\.exists so everything 410# is rebuilt next time to avoid reusing a mini config.h written with no sane CC 411# version set 412!IF "$(CCTYPE)" == "" 413CC = @echo CCTYPE makefile variable not set && del mini\.exists && exit 1 && 414LINK32 = @echo CCTYPE makefile variable not set && del mini\.exists && exit 1 && 415!ELSEIF "$(__ICC)" != "define" 416CC = cl 417LINK32 = link 418!ELSE 419CC = icl 420LINK32 = xilink 421!ENDIF 422LIB32 = $(LINK32) -lib 423RSC = rc 424 425# 426# Options 427# 428 429INCLUDES = -I.\include -I. -I.. 430#PCHFLAGS = -Fpc:\temp\vcmoduls.pch -YX 431DEFINES = -DWIN32 -D_CONSOLE -DNO_STRICT 432LOCDEFS = -DPERLDLL -DPERL_CORE 433CXX_FLAG = -TP -EHsc 434!IF "$(USE_CPLUSPLUS)" == "define" 435CXX_FLAG = $(CXX_FLAG) -std:c++20 436!ENDIF 437EXTRACFLAGS = -nologo -GF -W3 438 439LIBC = ucrt.lib 440 441!IF "$(CFG)" == "Debug" 442OPTIMIZE = -Od -Zi 443LINK_DBG = -debug 444DEFINES = $(DEFINES) -DDEBUGGING 445EXTRACFLAGS = $(EXTRACFLAGS) -MD 446!ELSEIF "$(CFG)" == "DebugSymbols" 447OPTIMIZE = -Od -Zi 448LINK_DBG = -debug 449EXTRACFLAGS = $(EXTRACFLAGS) -MD 450!ELSEIF "$(CFG)" == "DebugFull" 451LIBC = ucrtd.lib 452OPTIMIZE = -Od -Zi 453LINK_DBG = -debug 454DEFINES = $(DEFINES) -D_DEBUG -DDEBUGGING 455EXTRACFLAGS = $(EXTRACFLAGS) -MDd 456!ELSE 457# Enable Whole Program Optimizations (WPO) and Link Time Code Generation (LTCG). 458# -O1 yields smaller code, which turns out to be faster than -O2 on x86 and x64 459OPTIMIZE = -O1 -Zi -GL 460# we enable debug symbols in release builds also 461LINK_DBG = -debug -opt:ref,icf -ltcg 462# you may want to enable this if you want COFF symbols in the executables 463# in addition to the PDB symbols. The default Dr. Watson that ships with 464# Windows can use the former but not latter. The free WinDbg can be 465# installed to get better stack traces from just the PDB symbols, so we 466# avoid the bloat of COFF symbols by default. 467#LINK_DBG = $(LINK_DBG) -debugtype:both 468LIB_FLAGS = -ltcg 469EXTRACFLAGS = $(EXTRACFLAGS) -MD 470!ENDIF 471 472!IF "$(WIN64)" == "define" 473DEFINES = $(DEFINES) -DWIN64 474OPTIMIZE = $(OPTIMIZE) -fp:precise 475!ENDIF 476 477# For now, silence warnings about "unsafe" CRT functions 478# and POSIX CRT function names being deprecated. 479# Likewise for deprecated Winsock APIs 480DEFINES = $(DEFINES) -D_CRT_SECURE_NO_DEPRECATE \ 481 -D_CRT_NONSTDC_NO_DEPRECATE -D_WINSOCK_DEPRECATED_NO_WARNINGS 482 483LIBBASEFILES = \ 484 oldnames.lib kernel32.lib user32.lib gdi32.lib winspool.lib \ 485 comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib \ 486 netapi32.lib uuid.lib ws2_32.lib mpr.lib winmm.lib \ 487 version.lib odbc32.lib odbccp32.lib comctl32.lib 488 489!IF "$(CFG)" == "DebugFull" 490LIBBASEFILES = $(LIBBASEFILES) msvcrtd.lib vcruntimed.lib 491!ELSE 492LIBBASEFILES = $(LIBBASEFILES) msvcrt.lib vcruntime.lib 493!ENDIF 494 495# Avoid __intel_new_proc_init link error for libircmt. 496# libmmd is /MD equivalent, other variants exist. 497# libmmd is Intel C's math addon funcs to MS CRT, contains long doubles, C99, 498# and optimized C89 funcs 499!IF "$(__ICC)" == "define" 500LIBBASEFILES = $(LIBBASEFILES) libircmt.lib libmmd.lib 501!ENDIF 502 503LIBFILES = $(LIBBASEFILES) $(LIBC) 504 505!IF "$(__ICC)" == "define" 506EXTRACFLAGS = $(EXTRACFLAGS) -Qstd=c99 507!ENDIF 508!IF "$(USE_CPLUSPLUS)" == "define" 509EXTRACFLAGS = $(EXTRACFLAGS) $(CXX_FLAG) 510!ENDIF 511CFLAGS = $(EXTRACFLAGS) $(INCLUDES) $(DEFINES) $(LOCDEFS) \ 512 $(PCHFLAGS) $(OPTIMIZE) 513LINK_FLAGS = -nologo -nodefaultlib $(LINK_DBG) \ 514 -libpath:"$(INST_COREDIR)" \ 515 -machine:$(PROCESSOR_ARCHITECTURE) 516LIB_FLAGS = $(LIB_FLAGS) -nologo 517OBJOUT_FLAG = -Fo 518EXEOUT_FLAG = -Fe 519 520CFLAGS_O = $(CFLAGS) $(BUILDOPT) 521 522RSC_FLAGS = 523 524# VS 2017 (VC++ 14.1) requires at minimum Windows 7 SP1 (with latest Windows Updates) 525 526# For XP support in >= VS 2013 (VC++ 12.0), subsystem is always in Config.pm 527# LINK_FLAGS. 528!IF "$(WIN64)" == "define" 529LINK_FLAGS = $(LINK_FLAGS) -subsystem:console,"5.02" 530!ELSE 531LINK_FLAGS = $(LINK_FLAGS) -subsystem:console,"5.01" 532!ENDIF 533 534BLINK_FLAGS = $(PRIV_LINK_FLAGS) $(LINK_FLAGS) 535 536#################### do not edit below this line ####################### 537############# NO USER-SERVICEABLE PARTS BEYOND THIS POINT ############## 538 539o = .obj 540 541# 542# Rules 543# 544 545#clear the list, we dont support .cxx .bas .cbl .for .pas .f .f90 546# .asm .cpp are not currently used but they are included for completeness 547.SUFFIXES : 548.SUFFIXES : .c $(o) .cpp .asm .dll .lib .exe .rc .res 549 550.c$(o): 551 $(CC) -c -I$(FULLDIR) -I$(<D) $(CFLAGS_O) $(OBJOUT_FLAG)$@ $< 552 553.c.i: 554 $(CC) -c -I$(FULLDIR) -I$(<D) $(CFLAGS_O) -P $(OBJOUT_FLAG)$@ $< 555 556.y.c: 557 $(NOOP) 558 559$(o).dll: 560 $(LINK32) -dll -implib:$(*B).lib -def:$(*B).def \ 561 -out:$@ $(BLINK_FLAGS) $(LIBFILES) $< $(LIBPERL) 562 563.rc.res: 564 $(RSC) -i.. $(RSC_FLAGS) $< 565 566# 567# various targets 568 569# makedef.pl must be updated if this changes, and this should normally 570# only change when there is an incompatible revision of the public API. 571PERLIMPLIB = ..\perl540.lib 572PERLSTATICLIB = ..\perl540s.lib 573PERLDLL = ..\perl540.dll 574 575MINIPERL = ..\miniperl.exe 576# contains config.h for the full perl build 577FULLDIR = .\full 578MINIDIR = .\mini 579PERLEXE = ..\perl.exe 580WPERLEXE = ..\wperl.exe 581PERLEXESTATIC = ..\perl-static.exe 582GLOBEXE = ..\perlglob.exe 583CONFIGPM = ..\lib\Config.pm ..\lib\Config_heavy.pl 584GENUUDMAP = ..\generate_uudmap.exe 585!IF "$(BUILD_STATIC)" == "define" || "$(ALL_STATIC)" == "define" 586PERLSTATIC = static 587!ELSE 588PERLSTATIC = 589!ENDIF 590 591# Unicode data files generated by mktables 592FIRSTUNIFILE = ..\lib\unicore\Decomposition.pl 593UNIDATAFILES = ..\lib\unicore\Decomposition.pl \ 594 ..\lib\unicore\CombiningClass.pl ..\lib\unicore\Name.pl \ 595 ..\lib\unicore\Heavy.pl ..\lib\unicore\mktables.lst \ 596 ..\lib\unicore\UCD.pl ..\lib\unicore\Name.pm \ 597 ..\lib\unicore\TestProp.pl 598 599# Directories of Unicode data files generated by mktables 600UNIDATADIR1 = ..\lib\unicore\To 601UNIDATADIR2 = ..\lib\unicore\lib 602 603PERLEXE_MANIFEST= .\perlexe.manifest 604PERLEXE_ICO = .\perlexe.ico 605PERLEXE_RES = .\perlexe.res 606PERLDLL_RES = 607 608# Nominate a target which causes extensions to be re-built 609# This used to be $(PERLEXE), but at worst it is the .dll that they depend 610# on and really only the interface - i.e. the .def file used to export symbols 611# from the .dll 612PERLDEP = perldll.def 613 614PL2BAT = bin\pl2bat.pl 615GLOBBAT = bin\perlglob.bat 616 617UTILS = \ 618 ..\utils\h2ph \ 619 ..\utils\splain \ 620 ..\utils\perlbug \ 621 ..\utils\pl2pm \ 622 ..\utils\h2xs \ 623 ..\utils\perldoc \ 624 ..\utils\perlivp \ 625 ..\utils\libnetcfg \ 626 ..\utils\enc2xs \ 627 ..\utils\encguess \ 628 ..\utils\piconv \ 629 ..\utils\corelist \ 630 ..\utils\cpan \ 631 ..\utils\xsubpp \ 632 ..\utils\prove \ 633 ..\utils\ptar \ 634 ..\utils\ptardiff \ 635 ..\utils\ptargrep \ 636 ..\utils\zipdetails \ 637 ..\utils\shasum \ 638 ..\utils\instmodsh \ 639 ..\utils\json_pp \ 640 ..\utils\pod2html \ 641 ..\utils\streamzip \ 642 bin\exetype.pl \ 643 bin\runperl.pl \ 644 bin\pl2bat.pl \ 645 bin\perlglob.pl \ 646 bin\search.pl 647 648MAKE = nmake -nologo 649MAKE_BARE = nmake 650 651CFGSH_TMPL = config.vc 652CFGH_TMPL = config_H.vc 653INT64 = __int64 654 655XCOPY = xcopy /f /r /i /d /y 656RCOPY = xcopy /f /r /i /e /d /y 657NOOP = @rem 658NULL = 659 660DEL = del 661 662MICROCORE_SRC = \ 663 ..\av.c \ 664 ..\caretx.c \ 665 ..\class.c \ 666 ..\builtin.c \ 667 ..\deb.c \ 668 ..\doio.c \ 669 ..\doop.c \ 670 ..\dquote.c \ 671 ..\dump.c \ 672 ..\globals.c \ 673 ..\gv.c \ 674 ..\mro_core.c \ 675 ..\hv.c \ 676 ..\locale.c \ 677 ..\keywords.c \ 678 ..\mathoms.c \ 679 ..\mg.c \ 680 ..\numeric.c \ 681 ..\op.c \ 682 ..\pad.c \ 683 ..\peep.c \ 684 ..\perl.c \ 685 ..\perly.c \ 686 ..\pp.c \ 687 ..\pp_ctl.c \ 688 ..\pp_hot.c \ 689 ..\pp_pack.c \ 690 ..\pp_sort.c \ 691 ..\pp_sys.c \ 692 ..\reentr.c \ 693 ..\regcomp.c \ 694 ..\regcomp_trie.c \ 695 ..\regcomp_debug.c \ 696 ..\regcomp_invlist.c \ 697 ..\regcomp_study.c \ 698 ..\regexec.c \ 699 ..\run.c \ 700 ..\scope.c \ 701 ..\sv.c \ 702 ..\taint.c \ 703 ..\time64.c \ 704 ..\toke.c \ 705 ..\universal.c \ 706 ..\utf8.c \ 707 ..\util.c 708 709EXTRACORE_SRC = $(EXTRACORE_SRC) perllib.c 710 711!IF "$(PERL_MALLOC)" == "define" 712EXTRACORE_SRC = $(EXTRACORE_SRC) ..\malloc.c 713!ENDIF 714 715EXTRACORE_SRC = $(EXTRACORE_SRC) ..\perlio.c 716 717WIN32_SRC = \ 718 .\win32.c \ 719 .\win32sck.c \ 720 .\win32thread.c \ 721 .\fcrypt.c 722 723CORE_NOCFG_H = \ 724 ..\av.h \ 725 ..\cop.h \ 726 ..\cv.h \ 727 ..\dosish.h \ 728 ..\embed.h \ 729 ..\form.h \ 730 ..\gv.h \ 731 ..\handy.h \ 732 ..\hv.h \ 733 ..\hv_func.h \ 734 ..\iperlsys.h \ 735 ..\mg.h \ 736 ..\nostdio.h \ 737 ..\op.h \ 738 ..\opcode.h \ 739 ..\perl.h \ 740 ..\perlapi.h \ 741 ..\perlsdio.h \ 742 ..\perly.h \ 743 ..\pp.h \ 744 ..\proto.h \ 745 ..\regcomp.h \ 746 ..\regcomp_internal.h \ 747 ..\regexp.h \ 748 ..\scope.h \ 749 ..\sv.h \ 750 ..\thread.h \ 751 ..\unixish.h \ 752 ..\utf8.h \ 753 ..\util.h \ 754 ..\warnings.h \ 755 ..\XSUB.h \ 756 ..\EXTERN.h \ 757 ..\perlvars.h \ 758 ..\intrpvar.h \ 759 .\include\dirent.h \ 760 .\include\netdb.h \ 761 .\include\sys\errno2.h \ 762 .\include\sys\socket.h \ 763 .\win32.h 764 765CONFIG_H = $(FULLDIR)\config.h 766MINI_CONFIG_H = $(MINIDIR)\config.h 767CORE_H = $(CORE_NOCFG_H) $(CONFIG_H) ..\git_version.h 768 769UUDMAP_H = ..\uudmap.h 770BITCOUNT_H = ..\bitcount.h 771MG_DATA_H = ..\mg_data.h 772GENERATED_HEADERS = $(UUDMAP_H) $(BITCOUNT_H) $(MG_DATA_H) 773 774MICROCORE_OBJ = $(MICROCORE_SRC:.c=.obj) 775CORE_OBJ = $(MICROCORE_OBJ) $(EXTRACORE_SRC:.c=.obj) 776WIN32_OBJ = $(WIN32_SRC:.c=.obj) 777MINICORE_OBJ = $(MICROCORE_OBJ:..\=.\mini\) \ 778 $(MINIDIR)\miniperlmain$(o) \ 779 $(MINIDIR)\perlio$(o) 780MINIWIN32_OBJ = $(WIN32_OBJ:.\=.\mini\) 781MINI_OBJ = $(MINICORE_OBJ) $(MINIWIN32_OBJ) 782DLL_OBJ = $(DYNALOADER) 783GENUUDMAP_OBJ = $(GENUUDMAP:.exe=.obj) 784 785PERLDLL_OBJ = $(CORE_OBJ) 786PERLEXE_OBJ = perlmain$(o) 787PERLEXEST_OBJ = perlmainst$(o) 788 789PERLDLL_OBJ = $(PERLDLL_OBJ) $(WIN32_OBJ) $(DLL_OBJ) 790 791!IF "$(USE_SETARGV)" != "" 792SETARGV_OBJ = setargv$(o) 793!ENDIF 794 795!IF "$(ALL_STATIC)" == "define" 796# some exclusions, unfortunately, until fixed: 797# - MakeMaker isn't capable enough for SDBM_File (small bug) 798STATIC_EXT = * !SDBM_File 799!ELSE 800# specify static extensions here, for example: 801# (be sure to include Win32CORE to load Win32 on demand) 802#STATIC_EXT = Win32CORE Cwd Compress/Raw/Zlib 803STATIC_EXT = Win32CORE 804!ENDIF 805 806DYNALOADER = ..\DynaLoader$(o) 807 808CFG_VARS = \ 809 "INST_TOP=$(INST_TOP)" \ 810 "INST_VER=$(INST_VER)" \ 811 "INST_ARCH=$(INST_ARCH)" \ 812 "archname=$(ARCHNAME)" \ 813 "cc=$(CC)" \ 814 "ld=$(LINK32)" \ 815 "ccflags=$(EXTRACFLAGS) $(DEFINES) $(BUILDOPT)" \ 816 "usecplusplus=$(USE_CPLUSPLUS)" \ 817 "cf_email=$(EMAIL)" \ 818 "d_mymalloc=$(PERL_MALLOC)" \ 819 "libs=$(LIBFILES)" \ 820 "incpath=$(CCINCDIR:"=\")" \ 821 "libperl=$(PERLIMPLIB:..\=)" \ 822 "libpth=$(CCLIBDIR:"=\");$(EXTRALIBDIRS:"=\")" \ 823 "libc=$(LIBC)" \ 824 "make=$(MAKE_BARE)" \ 825 "static_ext=$(STATIC_EXT)" \ 826 "usethreads=$(USE_ITHREADS)" \ 827 "useithreads=$(USE_ITHREADS)" \ 828 "usemultiplicity=$(USE_MULTI)" \ 829 "use64bitint=$(USE_64_BIT_INT)" \ 830 "uselongdouble=undef" \ 831 "usequadmath=undef" \ 832 "usesitecustomize=$(USE_SITECUST)" \ 833 "default_inc_excludes_dot=$(DEFAULT_INC_EXCLUDES_DOT)" \ 834 "LINK_FLAGS=$(LINK_FLAGS:"=\")" \ 835 "optimize=$(OPTIMIZE:"=\")" \ 836 "WIN64=$(WIN64)" \ 837 "SKIP_CCHOME_CHECK=$(SKIP_CCHOME_CHECK)" 838 839# 840# Top targets 841# 842 843all : ..\git_version.h $(GLOBEXE) $(CONFIGPM) \ 844 $(UNIDATAFILES) MakePPPort $(PERLEXE) Extensions_nonxs Extensions \ 845 $(PERLSTATIC) 846 @echo Everything is up to date. '$(MAKE_BARE) test' to run test suite. 847 848regnodes : ..\regnodes.h 849 850..\regcomp$(o) : ..\regcomp.h ..\regcomp_internal.h ..\regnodes.h ..\regcharclass.h 851 852..\regcomp_debug$(o) : ..\regcomp.h ..\regcomp_internal.h ..\regnodes.h ..\regcharclass.h 853 854..\regcomp_invlist$(o) : ..\regcomp.h ..\regcomp_internal.h ..\regnodes.h ..\regcharclass.h 855 856..\regcomp_study$(o) : ..\regcomp.h ..\regcomp_internal.h ..\regnodes.h ..\regcharclass.h 857 858..\regcomp_trie$(o) : ..\regcomp.h ..\regcomp_internal.h ..\regnodes.h ..\regcharclass.h 859 860..\regexec$(o) : ..\regnodes.h ..\regcharclass.h 861 862reonly : regnodes $(CONFIG_H) ..\git_version.h $(GLOBEXE) $(CONFIGPM) \ 863 $(UNIDATAFILES) $(PERLEXE) Extensions_reonly 864 @echo Perl and 're' are up to date. 865 866static: $(PERLEXESTATIC) 867 868#------------------------------------------------------------ 869 870$(GLOBEXE) : perlglob$(o) 871 $(LINK32) $(BLINK_FLAGS) $(LIBFILES) -out:$@ \ 872 perlglob$(o) setargv$(o) 873 874perlglob$(o) : perlglob.c 875 876..\git_version.h : $(MINIPERL) ..\make_patchnum.pl 877 cd .. && miniperl -Ilib make_patchnum.pl && cd win32 878 879# make sure that we recompile perl.c if the git version changes 880..\perl$(o) : ..\git_version.h 881 882..\config.sh : $(CFGSH_TMPL) config_sh.PL FindExt.pm $(MINIPERL) 883 $(MINIPERL) -I..\lib config_sh.PL -o ..\config.sh $(CFG_VARS) $(CFGSH_TMPL) 884 885# This target is for when changes to the main config.sh happen. 886# Edit config.vc, then make perl in a minimal configuration (i.e. with MULTI, 887# ITHREADS, IMP_SYS and LARGE_FILES off), then make this target 888# to regenerate config_H.vc. 889regen_config_h: 890 $(MINIPERL) -I..\lib config_sh.PL --prebuilt $(CFG_VARS) $(CFGSH_TMPL) > ..\config.sh 891 $(MINIPERL) -I..\lib ..\configpm --chdir=.. 892 -del /f $(CFGH_TMPL) 893 -$(MINIPERL) -I..\lib config_h.PL 894 rename config.h $(CFGH_TMPL) 895 896$(CONFIGPM) : $(MINIPERL) ..\config.sh config_h.PL ..\git_version.h 897 $(MINIPERL) -I..\lib ..\configpm --chdir=.. 898 $(XCOPY) ..\*.h $(COREDIR)\*.* 899 $(XCOPY) *.h $(COREDIR)\*.* 900 $(RCOPY) include $(COREDIR)\*.* 901 if not exist "$(FULLDIR)" mkdir "$(FULLDIR)" 902 $(MINIPERL) -I..\lib config_h.PL "CONFIG_H=$(CONFIG_H)" 903 904$(CONFIG_H) : $(CONFIGPM) 905 906# See the comment in Makefile.SH explaining this seemingly cranky ordering 907$(MINIPERL) : ..\lib\buildcustomize.pl 908 909..\lib\buildcustomize.pl : $(MINI_OBJ) ..\write_buildcustomize.pl 910 $(LINK32) -out:$(MINIPERL) @<< 911 $(BLINK_FLAGS) $(DELAYLOAD) $(MINIDELAYLOAD) $(LIBFILES) $(MINI_OBJ) 912<< 913 $(MINIPERL) -I..\lib -f ..\write_buildcustomize.pl .. 914 915$(MINIDIR)\.exists : $(CFGH_TMPL) 916 if not exist "$(MINIDIR)" mkdir "$(MINIDIR)" 917# 918# Copy the template config.h and set configurables at the end of it 919# as per the options chosen and compiler used. 920# Note: This config.h is only used to build miniperl.exe anyway, but 921# it's as well to have its options correct to be sure that it builds 922# and so that its "-V" options are correct for use by makedef.pl. The 923# real config.h used to build perl.exe is generated from the top-level 924# config_h.SH by config_h.PL (run by miniperl.exe). 925# 926 copy $(CFGH_TMPL) $(MINI_CONFIG_H) 927 @(echo.&& \ 928 echo #ifndef _config_h_footer_&& \ 929 echo #define _config_h_footer_&& \ 930 echo #undef PTRSIZE&& \ 931 echo #undef SSize_t&& \ 932 echo #undef HAS_ATOLL&& \ 933 echo #undef HAS_STRTOLL&& \ 934 echo #undef HAS_STRTOULL&& \ 935 echo #undef Size_t_size&& \ 936 echo #undef IVTYPE&& \ 937 echo #undef UVTYPE&& \ 938 echo #undef IVSIZE&& \ 939 echo #undef UVSIZE&& \ 940 echo #undef NV_PRESERVES_UV&& \ 941 echo #undef NV_PRESERVES_UV_BITS&& \ 942 echo #undef IVdf&& \ 943 echo #undef UVuf&& \ 944 echo #undef UVof&& \ 945 echo #undef UVxf&& \ 946 echo #undef UVXf&& \ 947 echo #undef USE_64_BIT_INT&& \ 948 echo #undef USE_LONG_DOUBLE&& \ 949 echo #undef USE_CPLUSPLUS)>> $(MINI_CONFIG_H) 950 @(echo #undef FILE_ptr&& \ 951 echo #undef FILE_cnt&& \ 952 echo #undef FILE_base&& \ 953 echo #undef FILE_bufsiz&& \ 954 echo #define FILE_ptr^(fp^) PERLIO_FILE_ptr^(fp^)&& \ 955 echo #define FILE_cnt^(fp^) PERLIO_FILE_cnt^(fp^)&& \ 956 echo #define FILE_base^(fp^) PERLIO_FILE_base^(fp^)&& \ 957 echo #define FILE_bufsiz^(fp^) ^(PERLIO_FILE_cnt^(fp^) + PERLIO_FILE_ptr^(fp^) - PERLIO_FILE_base^(fp^)^)&& \ 958 echo #define I_STDBOOL)>> $(MINI_CONFIG_H) 959!IF "$(WIN64)"=="define" 960 @(echo #define PTRSIZE ^8&& \ 961 echo #define SSize_t $(INT64)&& \ 962 echo #define HAS_ATOLL&& \ 963 echo #define HAS_STRTOLL&& \ 964 echo #define HAS_STRTOULL&& \ 965 echo #define Size_t_size ^8)>> $(MINI_CONFIG_H) 966!ELSE 967 @(echo #define PTRSIZE ^4&& \ 968 echo #define SSize_t int&& \ 969 echo #undef HAS_ATOLL&& \ 970 echo #undef HAS_STRTOLL&& \ 971 echo #undef HAS_STRTOULL&& \ 972 echo #define Size_t_size ^4)>> $(MINI_CONFIG_H) 973!ENDIF 974!IF "$(USE_64_BIT_INT)"=="define" 975 @(echo #define IVTYPE $(INT64)&& \ 976 echo #define UVTYPE unsigned $(INT64)&& \ 977 echo #define IVSIZE ^8&& \ 978 echo #define UVSIZE ^8&& \ 979 echo #undef NV_PRESERVES_UV&& \ 980 echo #define NV_PRESERVES_UV_BITS 53&& \ 981 echo #define IVdf "I64d"&& \ 982 echo #define UVuf "I64u"&& \ 983 echo #define UVof "I64o"&& \ 984 echo #define UVxf "I64x"&& \ 985 echo #define UVXf "I64X"&& \ 986 echo #define USE_64_BIT_INT)>> $(MINI_CONFIG_H) 987!ELSE 988 @(echo #define IVTYPE long&& \ 989 echo #define UVTYPE unsigned long&& \ 990 echo #define IVSIZE ^4&& \ 991 echo #define UVSIZE ^4&& \ 992 echo #define NV_PRESERVES_UV&& \ 993 echo #define NV_PRESERVES_UV_BITS 32&& \ 994 echo #define IVdf "ld"&& \ 995 echo #define UVuf "lu"&& \ 996 echo #define UVof "lo"&& \ 997 echo #define UVxf "lx"&& \ 998 echo #define UVXf "lX"&& \ 999 echo #undef USE_64_BIT_INT)>> $(MINI_CONFIG_H) 1000!ENDIF 1001!IF "$(USE_CPLUSPLUS)"=="define" 1002 @(echo #define USE_CPLUSPLUS&& \ 1003 echo #endif)>> $(MINI_CONFIG_H) 1004!ELSE 1005 @(echo #undef USE_CPLUSPLUS&& \ 1006 echo #endif)>> $(MINI_CONFIG_H) 1007!ENDIF 1008#separate line since this is sentinal that this target is done 1009 @rem. > $(MINIDIR)\.exists 1010 1011.c{$(MINIDIR)}$(o): 1012 $(CC) -c -Imini $(CFLAGS) -DPERL_EXTERNAL_GLOB -DPERL_IS_MINIPERL $(OBJOUT_FLAG)$@ $< 1013 1014{..\}.c{$(MINIDIR)}$(o): 1015 $(CC) -c -Imini $(CFLAGS) -DPERL_EXTERNAL_GLOB -DPERL_IS_MINIPERL $(OBJOUT_FLAG)$@ $< 1016 1017$(MINICORE_OBJ) : $(CORE_NOCFG_H) 1018 1019$(MINIWIN32_OBJ) : $(CORE_NOCFG_H) 1020 1021# -DPERL_IMPLICIT_SYS needs C++ for perllib.c 1022# This is the only file that depends on perlhost.h, vmem.h, and vdir.h 1023!IF "$(USE_IMP_SYS)" == "define" 1024perllib$(o) : perllib.c .\perlhost.h .\vdir.h .\vmem.h 1025 $(CC) -c -I$(FULLDIR) -I. $(CFLAGS_O) $(CXX_FLAG) $(OBJOUT_FLAG)$@ perllib.c 1026!ENDIF 1027 1028# We can't have miniperl.exe depend on git_version.h, as miniperl creates it 1029$(MINI_OBJ) : $(MINIDIR)\.exists $(CORE_NOCFG_H) 1030 1031$(WIN32_OBJ) : $(CORE_H) 1032$(CORE_OBJ) : $(CORE_H) 1033$(DLL_OBJ) : $(CORE_H) 1034 1035perldll.def : $(MINIPERL) $(CONFIGPM) ..\embed.fnc ..\makedef.pl create_perllibst_h.pl ..\git_version.h 1036 $(MINIPERL) -I..\lib create_perllibst_h.pl 1037 $(MINIPERL) -I..\lib -w ..\makedef.pl PLATFORM=win32 CONFIG_H=$(CONFIG_H) $(OPTIMIZE) $(DEFINES) $(BUILDOPT) \ 1038 CCTYPE=$(CCTYPE) TARG_DIR=..\ > perldll.def 1039 1040$(PERLDLL): perldll.def $(PERLDLL_OBJ) $(PERLDLL_RES) Extensions_static 1041 $(LINK32) -dll -def:perldll.def -out:$@ @Extensions_static @<< 1042 $(BLINK_FLAGS) $(DELAYLOAD) $(LIBFILES) $(PERLDLL_OBJ) $(PERLDLL_RES) 1043<< 1044 $(XCOPY) $(PERLIMPLIB) $(COREDIR) 1045 1046$(PERLSTATICLIB): Extensions_static 1047 $(LIB32) $(LIB_FLAGS) -out:$@ @Extensions_static @<< 1048 $(PERLDLL_OBJ) 1049<< 1050 $(XCOPY) $(PERLSTATICLIB) $(COREDIR) 1051 1052$(PERLEXE_RES): perlexe.rc $(PERLEXE_MANIFEST) $(PERLEXE_ICO) 1053 1054$(MINIDIR)\globals$(o) : $(GENERATED_HEADERS) 1055 1056$(UUDMAP_H) $(MG_DATA_H) : $(BITCOUNT_H) 1057 1058$(BITCOUNT_H) : $(GENUUDMAP) 1059 $(GENUUDMAP) $(GENERATED_HEADERS) 1060 1061$(GENUUDMAP_OBJ) : ..\mg_raw.h 1062 1063$(GENUUDMAP) : $(GENUUDMAP_OBJ) 1064 $(LINK32) -out:$@ @<< 1065 $(BLINK_FLAGS) $(LIBFILES) $(GENUUDMAP_OBJ) 1066<< 1067 1068perlmain.c : runperl.c 1069 copy runperl.c perlmain.c 1070 1071perlmain$(o) : perlmain.c 1072 $(CC) -I$(FULLDIR) $(CFLAGS_O:-DPERLDLL=-UPERLDLL) $(OBJOUT_FLAG)$@ -c perlmain.c 1073 1074perlmainst.c : runperl.c 1075 copy runperl.c perlmainst.c 1076 1077perlmainst$(o) : perlmainst.c 1078 $(CC) -I$(FULLDIR) $(CFLAGS_O) $(OBJOUT_FLAG)$@ -c perlmainst.c 1079 1080$(PERLEXE): $(PERLDLL) $(CONFIGPM) $(PERLEXE_OBJ) $(PERLEXE_RES) 1081 $(LINK32) -out:$@ $(BLINK_FLAGS) \ 1082 $(PERLEXE_OBJ) $(PERLEXE_RES) $(PERLIMPLIB) $(LIBFILES) $(SETARGV_OBJ) 1083 copy $(PERLEXE) $(WPERLEXE) 1084 $(MINIPERL) -I..\lib bin\exetype.pl $(WPERLEXE) WINDOWS 1085 1086$(PERLEXESTATIC): $(PERLSTATICLIB) $(CONFIGPM) $(PERLEXEST_OBJ) $(PERLEXE_RES) 1087 $(LINK32) -out:$@ $(BLINK_FLAGS) \ 1088 $(PERLEXEST_OBJ) $(PERLEXE_RES) $(PERLSTATICLIB) $(LIBFILES) $(SETARGV_OBJ) 1089 1090MakePPPort: $(MINIPERL) $(CONFIGPM) Extensions_nonxs 1091 $(MINIPERL) -I..\lib ..\mkppport 1092 1093#------------------------------------------------------------------------------- 1094# There's no direct way to mark a dependency on 1095# DynaLoader.pm, so this will have to do 1096Extensions: ..\make_ext.pl ..\lib\buildcustomize.pl $(PERLDEP) $(CONFIGPM) $(DYNALOADER) 1097 $(XCOPY) ..\*.h $(COREDIR)\*.* 1098 $(MINIPERL) -I..\lib ..\make_ext.pl "MAKE=$(MAKE)" --dir=$(CPANDIR) --dir=$(DISTDIR) --dir=$(EXTDIR) --dynamic 1099 1100Extensions_reonly: ..\make_ext.pl ..\lib\buildcustomize.pl $(PERLDEP) $(CONFIGPM) $(DYNALOADER) 1101 $(XCOPY) ..\*.h $(COREDIR)\*.* 1102 $(MINIPERL) -I..\lib ..\make_ext.pl "MAKE=$(MAKE)" --dir=$(CPANDIR) --dir=$(DISTDIR) --dir=$(EXTDIR) --dynamic +re 1103 1104Extensions_static : ..\make_ext.pl ..\lib\buildcustomize.pl list_static_libs.pl $(PERLDEP) $(CONFIGPM) Extensions_nonxs 1105 $(XCOPY) ..\*.h $(COREDIR)\*.* 1106 $(MINIPERL) -I..\lib ..\make_ext.pl "MAKE=$(MAKE)" --dir=$(CPANDIR) --dir=$(DISTDIR) --dir=$(EXTDIR) --static 1107 $(MINIPERL) -I..\lib list_static_libs.pl -o Extensions_static 1108 1109Extensions_nonxs: ..\make_ext.pl ..\lib\buildcustomize.pl $(PERLDEP) $(CONFIGPM) ..\pod\perlfunc.pod 1110 $(XCOPY) ..\*.h $(COREDIR)\*.* 1111 $(MINIPERL) -I..\lib ..\make_ext.pl "MAKE=$(MAKE)" --dir=$(CPANDIR) --dir=$(DISTDIR) --dir=$(EXTDIR) --nonxs 1112 1113$(DYNALOADER) : ..\make_ext.pl ..\lib\buildcustomize.pl $(PERLDEP) $(CONFIGPM) Extensions_nonxs 1114 $(XCOPY) ..\*.h $(COREDIR)\*.* 1115 $(MINIPERL) -I..\lib ..\make_ext.pl "MAKE=$(MAKE)" --dir=$(EXTDIR) --dynaloader 1116 1117Extensions_clean: 1118 -if exist $(MINIPERL) $(MINIPERL) -I..\lib ..\make_ext.pl "MAKE=$(MAKE)" --dir=$(CPANDIR) --dir=$(DISTDIR) --dir=$(EXTDIR) --all --target=clean 1119 1120Extensions_realclean: 1121 -if exist $(MINIPERL) $(MINIPERL) -I..\lib ..\make_ext.pl "MAKE=$(MAKE)" --dir=$(CPANDIR) --dir=$(DISTDIR) --dir=$(EXTDIR) --all --target=realclean 1122 1123#------------------------------------------------------------------------------- 1124 1125doc: $(PERLEXE) ..\pod\perltoc.pod 1126 $(PERLEXE) ..\installhtml --podroot=.. --htmldir=$(HTMLDIR) \ 1127 --podpath=pod:lib:utils --htmlroot="file://$(INST_HTML::=|)" \ 1128 --recurse 1129 1130..\utils\Makefile: $(CONFIGPM) ..\utils\Makefile.PL 1131 $(MINIPERL) -I..\lib ..\utils\Makefile.PL .. 1132 1133# Note that this next section is parsed (and regenerated) by pod/buildtoc 1134# so please check that script before making structural changes here 1135 1136utils: $(PERLEXE) ..\utils\Makefile 1137 cd ..\utils 1138 $(MAKE) PERL=$(MINIPERL) 1139 cd ..\pod 1140 copy ..\README.aix ..\pod\perlaix.pod 1141 copy ..\README.amiga ..\pod\perlamiga.pod 1142 copy ..\README.android ..\pod\perlandroid.pod 1143 copy ..\README.bs2000 ..\pod\perlbs2000.pod 1144 copy ..\README.cn ..\pod\perlcn.pod 1145 copy ..\README.cygwin ..\pod\perlcygwin.pod 1146 copy ..\README.freebsd ..\pod\perlfreebsd.pod 1147 copy ..\README.haiku ..\pod\perlhaiku.pod 1148 copy ..\README.hpux ..\pod\perlhpux.pod 1149 copy ..\README.hurd ..\pod\perlhurd.pod 1150 copy ..\README.irix ..\pod\perlirix.pod 1151 copy ..\README.jp ..\pod\perljp.pod 1152 copy ..\README.ko ..\pod\perlko.pod 1153 copy ..\README.linux ..\pod\perllinux.pod 1154 copy ..\README.macosx ..\pod\perlmacosx.pod 1155 copy ..\README.openbsd ..\pod\perlopenbsd.pod 1156 copy ..\README.os2 ..\pod\perlos2.pod 1157 copy ..\README.os390 ..\pod\perlos390.pod 1158 copy ..\README.os400 ..\pod\perlos400.pod 1159 copy ..\README.plan9 ..\pod\perlplan9.pod 1160 copy ..\README.qnx ..\pod\perlqnx.pod 1161 copy ..\README.riscos ..\pod\perlriscos.pod 1162 copy ..\README.solaris ..\pod\perlsolaris.pod 1163 copy ..\README.synology ..\pod\perlsynology.pod 1164 copy ..\README.tru64 ..\pod\perltru64.pod 1165 copy ..\README.tw ..\pod\perltw.pod 1166 copy ..\README.vos ..\pod\perlvos.pod 1167 copy ..\README.win32 ..\pod\perlwin32.pod 1168 copy ..\pod\perldelta.pod ..\pod\perl5401delta.pod 1169 cd ..\win32 1170 $(PERLEXE) $(PL2BAT) $(UTILS) 1171 $(MINIPERL) -I..\lib ..\autodoc.pl -c "win32\$(CONFIG_H)" .. 1172 $(MINIPERL) -I..\lib ..\pod\perlmodlib.PL -q .. 1173 1174..\pod\perltoc.pod: $(PERLEXE) Extensions Extensions_nonxs 1175 $(PERLEXE) -f ..\pod\buildtoc -q 1176 1177# Note that the pod cleanup in this next section is parsed (and regenerated 1178# by pod/buildtoc so please check that script before making changes here 1179 1180distclean: realclean 1181 -del /f $(MINIPERL) $(PERLEXE) $(PERLDLL) $(GLOBEXE) \ 1182 $(PERLIMPLIB) ..\miniperl.lib $(PERLEXESTATIC) $(PERLSTATICLIB) 1183 -del /f $(LIBDIR)\Encode.pm $(LIBDIR)\encoding.pm $(LIBDIR)\Errno.pm 1184 -del /f $(LIBDIR)\Config.pod $(LIBDIR)\POSIX.pod $(LIBDIR)\threads.pm 1185 -del /f $(LIBDIR)\.exists $(LIBDIR)\attributes.pm $(LIBDIR)\DynaLoader.pm 1186 -del /f $(LIBDIR)\Fcntl.pm $(LIBDIR)\IO.pm $(LIBDIR)\Opcode.pm 1187 -del /f $(LIBDIR)\ops.pm $(LIBDIR)\Safe.pm 1188 -del /f $(LIBDIR)\SDBM_File.pm $(LIBDIR)\Socket.pm $(LIBDIR)\POSIX.pm 1189 -del /f $(LIBDIR)\B.pm $(LIBDIR)\O.pm $(LIBDIR)\re.pm 1190 -del /f $(LIBDIR)\File\Glob.pm 1191 -del /f $(LIBDIR)\Storable.pm 1192 -del /f $(LIBDIR)\Sys\Hostname.pm 1193 -del /f $(LIBDIR)\Time\HiRes.pm 1194 -del /f $(LIBDIR)\Unicode\Normalize.pm 1195 -del /f $(LIBDIR)\Math\BigInt\FastCalc.pm 1196 -del /f $(LIBDIR)\Win32.pm 1197 -del /f $(LIBDIR)\Win32CORE.pm 1198 -del /f $(LIBDIR)\Win32API\File.pm 1199 -del /f $(LIBDIR)\Win32API\File\cFile.pc 1200 -del /f $(LIBDIR)\buildcustomize.pl 1201 -del /f $(DISTDIR)\XSLoader\XSLoader.pm 1202 -del /f *.def *.map 1203 -if exist $(LIBDIR)\Amiga rmdir /s /q $(LIBDIR)\Amiga 1204 -if exist $(LIBDIR)\App rmdir /s /q $(LIBDIR)\App 1205 -if exist $(LIBDIR)\Archive rmdir /s /q $(LIBDIR)\Archive 1206 -if exist $(LIBDIR)\Attribute rmdir /s /q $(LIBDIR)\Attribute 1207 -if exist $(LIBDIR)\autodie rmdir /s /q $(LIBDIR)\autodie 1208 -if exist $(LIBDIR)\Carp rmdir /s /q $(LIBDIR)\Carp 1209 -if exist $(LIBDIR)\Compress rmdir /s /q $(LIBDIR)\Compress 1210 -if exist $(LIBDIR)\Config\Perl rmdir /s /q $(LIBDIR)\Config\Perl 1211 -if exist $(LIBDIR)\CPAN rmdir /s /q $(LIBDIR)\CPAN 1212 -if exist $(LIBDIR)\Data rmdir /s /q $(LIBDIR)\Data 1213 -if exist $(LIBDIR)\Devel rmdir /s /q $(LIBDIR)\Devel 1214 -if exist $(LIBDIR)\Digest rmdir /s /q $(LIBDIR)\Digest 1215 -if exist $(LIBDIR)\Encode rmdir /s /q $(LIBDIR)\Encode 1216 -if exist $(LIBDIR)\encoding rmdir /s /q $(LIBDIR)\encoding 1217 -if exist $(LIBDIR)\Exporter rmdir /s /q $(LIBDIR)\Exporter 1218 -if exist $(LIBDIR)\ExtUtils\CBuilder rmdir /s /q $(LIBDIR)\ExtUtils\CBuilder 1219 -if exist $(LIBDIR)\ExtUtils\Command rmdir /s /q $(LIBDIR)\ExtUtils\Command 1220 -if exist $(LIBDIR)\ExtUtils\Constant rmdir /s /q $(LIBDIR)\ExtUtils\Constant 1221 -if exist $(LIBDIR)\ExtUtils\Liblist rmdir /s /q $(LIBDIR)\ExtUtils\Liblist 1222 -if exist $(LIBDIR)\ExtUtils\MakeMaker rmdir /s /q $(LIBDIR)\ExtUtils\MakeMaker 1223 -if exist $(LIBDIR)\ExtUtils\ParseXS rmdir /s /q $(LIBDIR)\ExtUtils\ParseXS 1224 -if exist $(LIBDIR)\ExtUtils\Typemaps rmdir /s /q $(LIBDIR)\ExtUtils\Typemaps 1225 -if exist $(LIBDIR)\File\Spec rmdir /s /q $(LIBDIR)\File\Spec 1226 -if exist $(LIBDIR)\Filter rmdir /s /q $(LIBDIR)\Filter 1227 -if exist $(LIBDIR)\Getopt\Long rmdir /s /q $(LIBDIR)\Getopt\Long 1228 -if exist $(LIBDIR)\Hash rmdir /s /q $(LIBDIR)\Hash 1229 -if exist $(LIBDIR)\HTTP rmdir /s /q $(LIBDIR)\HTTP 1230 -if exist $(LIBDIR)\I18N rmdir /s /q $(LIBDIR)\I18N 1231 -if exist $(LIBDIR)\inc rmdir /s /q $(LIBDIR)\inc 1232 -if exist $(LIBDIR)\IO rmdir /s /q $(LIBDIR)\IO 1233 -if exist $(LIBDIR)\IPC rmdir /s /q $(LIBDIR)\IPC 1234 -if exist $(LIBDIR)\JSON rmdir /s /q $(LIBDIR)\JSON 1235 -if exist $(LIBDIR)\List rmdir /s /q $(LIBDIR)\List 1236 -if exist $(LIBDIR)\Locale rmdir /s /q $(LIBDIR)\Locale 1237 -if exist $(LIBDIR)\Math rmdir /s /q $(LIBDIR)\Math 1238 -if exist $(LIBDIR)\Memoize rmdir /s /q $(LIBDIR)\Memoize 1239 -if exist $(LIBDIR)\MIME rmdir /s /q $(LIBDIR)\MIME 1240 -if exist $(LIBDIR)\Module rmdir /s /q $(LIBDIR)\Module 1241 -if exist $(LIBDIR)\Net\FTP rmdir /s /q $(LIBDIR)\Net\FTP 1242 -if exist $(LIBDIR)\OpenBSD rmdir /s /q $(LIBDIR)\OpenBSD 1243 -if exist $(LIBDIR)\Params rmdir /s /q $(LIBDIR)\Params 1244 -if exist $(LIBDIR)\Parse rmdir /s /q $(LIBDIR)\Parse 1245 -if exist $(LIBDIR)\Perl rmdir /s /q $(LIBDIR)\Perl 1246 -if exist $(LIBDIR)\PerlIO rmdir /s /q $(LIBDIR)\PerlIO 1247 -if exist $(LIBDIR)\Pod\Html rmdir /s /q $(LIBDIR)\Pod\Html 1248 -if exist $(LIBDIR)\Pod\Perldoc rmdir /s /q $(LIBDIR)\Pod\Perldoc 1249 -if exist $(LIBDIR)\Pod\Simple rmdir /s /q $(LIBDIR)\Pod\Simple 1250 -if exist $(LIBDIR)\Pod\Text rmdir /s /q $(LIBDIR)\Pod\Text 1251 -if exist $(LIBDIR)\Scalar rmdir /s /q $(LIBDIR)\Scalar 1252 -if exist $(LIBDIR)\Search rmdir /s /q $(LIBDIR)\Search 1253 -if exist $(LIBDIR)\Sub rmdir /s /q $(LIBDIR)\Sub 1254 -if exist $(LIBDIR)\Sys rmdir /s /q $(LIBDIR)\Sys 1255 -if exist $(LIBDIR)\TAP rmdir /s /q $(LIBDIR)\TAP 1256 -if exist $(LIBDIR)\Term rmdir /s /q $(LIBDIR)\Term 1257 -if exist $(LIBDIR)\Test rmdir /s /q $(LIBDIR)\Test 1258 -if exist $(LIBDIR)\Test2 rmdir /s /q $(LIBDIR)\Test2 1259 -if exist $(LIBDIR)\Text rmdir /s /q $(LIBDIR)\Text 1260 -if exist $(LIBDIR)\Thread rmdir /s /q $(LIBDIR)\Thread 1261 -if exist $(LIBDIR)\threads rmdir /s /q $(LIBDIR)\threads 1262 -if exist $(LIBDIR)\Tie\Hash rmdir /s /q $(LIBDIR)\Tie\Hash 1263 -if exist $(LIBDIR)\Unicode\Collate rmdir /s /q $(LIBDIR)\Unicode\Collate 1264 -if exist $(LIBDIR)\Unicode\Collate\Locale rmdir /s /q $(LIBDIR)\Unicode\Collate\Locale 1265 -if exist $(LIBDIR)\version rmdir /s /q $(LIBDIR)\version 1266 -if exist $(LIBDIR)\VMS rmdir /s /q $(LIBDIR)\VMS 1267 -if exist $(LIBDIR)\Win32API rmdir /s /q $(LIBDIR)\Win32API 1268 -if exist $(LIBDIR)\XS rmdir /s /q $(LIBDIR)\XS 1269 -cd $(PODDIR) && del /f *.html *.bat roffitall \ 1270 perl5401delta.pod perlaix.pod perlamiga.pod perlandroid.pod \ 1271 perlapi.pod perlbs2000.pod perlcn.pod perlcygwin.pod \ 1272 perlfreebsd.pod perlhaiku.pod perlhpux.pod perlhurd.pod \ 1273 perlintern.pod perlirix.pod perljp.pod perlko.pod perllinux.pod \ 1274 perlmacosx.pod perlmodlib.pod perlopenbsd.pod perlos2.pod \ 1275 perlos390.pod perlos400.pod perlplan9.pod perlqnx.pod \ 1276 perlriscos.pod perlsolaris.pod perlsynology.pod perltoc.pod \ 1277 perltru64.pod perltw.pod perlvos.pod perlwin32.pod 1278 -cd ..\utils && del /f h2ph splain perlbug pl2pm h2xs \ 1279 perldoc perlivp libnetcfg enc2xs encguess piconv cpan streamzip *.bat \ 1280 xsubpp pod2html instmodsh json_pp prove ptar ptardiff ptargrep shasum corelist zipdetails 1281 -del /f ..\config.sh perlmain.c dlutils.c config.h.new \ 1282 perlmainst.c 1283 -del /f $(CONFIGPM) 1284 -del /f ..\lib\Config_git.pl 1285 -del /f bin\*.bat 1286 -del /f perllibst.h 1287 -del /f $(PERLEXE_RES) perl.base 1288 -cd .. && del /s *.lib *.map *.pdb *.ilk *.bs *$(o) .exists pm_to_blib ppport.h 1289 -cd $(EXTDIR) && del /s *.def Makefile Makefile.old 1290 -cd $(DISTDIR) && del /s *.def Makefile Makefile.old 1291 -cd $(CPANDIR) && del /s *.def Makefile Makefile.old 1292 -del /s ..\utils\Makefile 1293 -if exist $(AUTODIR) rmdir /s /q $(AUTODIR) 1294 -if exist $(COREDIR) rmdir /s /q $(COREDIR) 1295 -if exist pod2htmd.tmp del pod2htmd.tmp 1296 -if exist $(HTMLDIR) rmdir /s /q $(HTMLDIR) 1297 -del /f ..\t\test_state 1298 1299install : all installbare installhtml 1300 1301installbare : utils ..\pod\perltoc.pod 1302 $(PERLEXE) ..\installperl 1303 if exist $(WPERLEXE) $(XCOPY) $(WPERLEXE) $(INST_BIN)\*.* 1304 if exist $(PERLEXESTATIC) $(XCOPY) $(PERLEXESTATIC) $(INST_BIN)\*.* 1305 $(XCOPY) $(GLOBEXE) $(INST_BIN)\*.* 1306 if exist ..\perl*.pdb $(XCOPY) ..\perl*.pdb $(INST_BIN)\*.* 1307 $(XCOPY) bin\*.bat $(INST_SCRIPT)\*.* 1308 1309installhtml : doc 1310 $(RCOPY) $(HTMLDIR)\*.* $(INST_HTML)\*.* 1311 1312inst_lib : $(CONFIGPM) 1313 $(RCOPY) ..\lib $(INST_LIB)\*.* 1314 1315$(UNIDATAFILES) ..\pod\perluniprops.pod : $(MINIPERL) $(CONFIGPM) ..\lib\unicore\mktables Extensions_nonxs 1316 cd ..\lib\unicore && \ 1317 ..\$(MINIPERL) -I.. mktables -P ..\..\pod -maketest -makelist -p -check $@ $(FIRSTUNIFILE) 1318 1319minitest : $(CONFIG_H) $(MINIPERL) ..\git_version.h $(GLOBEXE) $(CONFIGPM) $(UNIDATAFILES) 1320 $(XCOPY) $(MINIPERL) ..\t\$(NULL) 1321 if exist ..\t\perl.exe del /f ..\t\perl.exe 1322 rename ..\t\miniperl.exe perl.exe 1323 $(XCOPY) $(GLOBEXE) ..\t\$(NULL) 1324# Note this perl.exe is miniperl 1325 cd ..\t && perl.exe TEST base/*.t comp/*.t cmd/*.t run/*.t io/*.t re/*.t opbasic/*.t op/*.t uni/*.t perf/*.t pragma/*.t 1326 1327test-prep : all utils ../pod/perltoc.pod 1328 $(XCOPY) $(PERLEXE) ..\t\$(NULL) 1329 $(XCOPY) $(PERLDLL) ..\t\$(NULL) 1330 $(XCOPY) $(GLOBEXE) ..\t\$(NULL) 1331 set PERL_STATIC_EXT=$(STATIC_EXT) 1332 1333test : test-prep 1334 cd ..\t 1335 perl.exe harness $(TEST_ARGS) $(TEST_SWITCHES) $(TEST_FILES) 1336 cd ..\win32 1337 1338test_porting : test-prep 1339 cd ..\t 1340 perl.exe harness $(TEST_ARGS) $(TEST_SWITCHES) porting\*.t ..\lib\diagnostics.t 1341 cd ..\win32 1342 1343test-reonly : reonly utils 1344 $(XCOPY) $(PERLEXE) ..\t\$(NULL) 1345 $(XCOPY) $(PERLDLL) ..\t\$(NULL) 1346 $(XCOPY) $(GLOBEXE) ..\t\$(NULL) 1347 cd ..\t 1348 perl.exe harness $(OPT) -re \bre\\/ $(EXTRA) 1349 cd ..\win32 1350 1351regen : 1352 cd .. 1353 regen.pl 1354 cd win32 1355 1356test-notty : test-prep 1357 set PERL_SKIP_TTY_TEST=1 1358 cd ..\t 1359 perl.exe harness $(TEST_ARGS) $(TEST_SWITCHES) $(TEST_FILES) 1360 cd ..\win32 1361 1362_test : 1363 $(XCOPY) $(PERLEXE) ..\t\$(NULL) 1364 $(XCOPY) $(PERLDLL) ..\t\$(NULL) 1365 $(XCOPY) $(GLOBEXE) ..\t\$(NULL) 1366 cd ..\t 1367 perl.exe harness $(TEST_ARGS) $(TEST_SWITCHES) $(TEST_FILES) 1368 cd ..\win32 1369 1370_clean : 1371 -@$(DEL) miniperlmain$(o) 1372 -@$(DEL) $(MINIPERL) 1373 -@$(DEL) perlglob$(o) 1374 -@$(DEL) perlmain$(o) 1375 -@$(DEL) perlmainst$(o) 1376 -@$(DEL) config.h 1377 -@$(DEL) ..\git_version.h 1378 -@$(DEL) $(GLOBEXE) 1379 -@$(DEL) $(PERLEXE) 1380 -@$(DEL) $(WPERLEXE) 1381 -@$(DEL) $(PERLEXESTATIC) 1382 -@$(DEL) $(PERLSTATICLIB) 1383 -@$(DEL) $(PERLDLL) 1384 -@$(DEL) $(CORE_OBJ) 1385 -@$(DEL) $(GENUUDMAP) $(GENUUDMAP_OBJ) $(GENERATED_HEADERS) 1386 -if exist $(MINIDIR) rmdir /s /q $(MINIDIR) 1387 -if exist $(UNIDATADIR1) rmdir /s /q $(UNIDATADIR1) 1388 -if exist $(UNIDATADIR2) rmdir /s /q $(UNIDATADIR2) 1389 -@$(DEL) $(UNIDATAFILES) 1390 -@$(DEL) $(WIN32_OBJ) 1391 -@$(DEL) $(DLL_OBJ) 1392 -@$(DEL) ..\*$(o) ..\*.lib ..\*.exp *$(o) *.lib *.exp *.res 1393 -@$(DEL) ..\t\*.exe ..\t\*.dll ..\t\*.bat 1394 -@$(DEL) *.ilk 1395 -@$(DEL) *.pdb 1396 -@$(DEL) Extensions_static 1397 1398clean : Extensions_clean _clean 1399 1400realclean : Extensions_realclean _clean 1401 1402# Handy way to run perlbug -ok without having to install and run the 1403# installed perlbug. We don't re-run the tests here - we trust the user. 1404# Please *don't* use this unless all tests pass. 1405# If you want to report test failures, use "nmake nok" instead. 1406ok: utils 1407 $(PERLEXE) ..\utils\perlbug -ok -s "(UNINSTALLED)" 1408 1409okfile: utils 1410 $(PERLEXE) ..\utils\perlbug -ok -s "(UNINSTALLED)" -F perl.ok 1411 1412nok: utils 1413 $(PERLEXE) ..\utils\perlbug -nok -s "(UNINSTALLED)" 1414 1415nokfile: utils 1416 $(PERLEXE) ..\utils\perlbug -nok -s "(UNINSTALLED)" -F perl.nok 1417