1# 2# Makefile to build perl on Windows using GMAKE. 3# Supported compilers: 4# Microsoft Visual C++ 12.0 or later 5# MinGW with gcc-3.4.5-5.3.0 6# MinGW64 with gcc-4.4.3 or later 7# 8# This is set up to build a perl.exe that runs off a shared library 9# (perl540.dll). Also makes individual DLLs for the XS extensions. 10# 11# The easiest way to customize the build process is to use parameters like this: 12# 13# c:\dev\perlsrc\win32> gmake INST_TOP=c:\sw\perl CCHOME=c:\sw\mingw USE_64_BIT_INT=define 14 15 16## 17## Make sure you read README.win32 *before* you mess with anything here! 18## 19 20# 21# We set this to point to cmd.exe in case GNU Make finds sh.exe in the path. 22# Comment this line out if necessary 23# 24SHELL := cmd.exe 25 26# define whether you want to use native gcc compiler or cross-compiler 27# possible values: gcc 28# i686-w64-mingw32-gcc 29# x86_64-w64-mingw32-gcc 30GCCBIN := gcc 31 32ifeq ($(GCCBIN),x86_64-w64-mingw32-gcc) 33GCCCROSS := x86_64-w64-mingw32 34endif 35ifeq ($(GCCBIN),i686-w64-mingw32-gcc) 36GCCCROSS := i686-w64-mingw32 37endif 38 39 40## 41## Build configuration. Edit the values below to suit your needs. 42## 43 44# 45# Set these to wherever you want "gmake install" to put your 46# newly built perl. 47# 48INST_DRV := c: 49INST_TOP := $(INST_DRV)\perl 50 51# 52# Uncomment if you want to build a 32-bit Perl using a 32-bit compiler 53# on a 64-bit version of Windows. 54# 55#WIN64 := undef 56 57# 58# Comment this out if you DON'T want your perl installation to be versioned. 59# This means that the new installation will overwrite any files from the 60# old installation at the same INST_TOP location. Leaving it enabled is 61# the safest route, as perl adds the extra version directory to all the 62# locations it installs files to. If you disable it, an alternative 63# versioned installation can be obtained by setting INST_TOP above to a 64# path that includes an arbitrary version string. 65# 66#INST_VER := \5.40.1 67 68# 69# Comment this out if you DON'T want your perl installation to have 70# architecture specific components. This means that architecture- 71# specific files will be installed along with the architecture-neutral 72# files. Leaving it enabled is safer and more flexible, in case you 73# want to build multiple flavors of perl and install them together in 74# the same location. Commenting it out gives you a simpler 75# installation that is easier to understand for beginners. 76# 77#INST_ARCH := \$(ARCHNAME) 78 79# 80# Uncomment this if you want perl to run 81# $Config{sitelibexp}\sitecustomize.pl 82# before anything else. This script can then be set up, for example, 83# to add additional entries to @INC. 84# 85#USE_SITECUST := define 86 87# 88# uncomment to enable multiple interpreters. This is needed for fork() 89# emulation and for thread support, and is auto-enabled by USE_IMP_SYS 90# and USE_ITHREADS below. 91# 92USE_MULTI := define 93 94# 95# Interpreter cloning/threads; now reasonably complete. 96# This should be enabled to get the fork() emulation. This needs (and 97# will auto-enable) USE_MULTI above. 98# 99USE_ITHREADS := define 100 101# 102# uncomment to enable the implicit "host" layer for all system calls 103# made by perl. This is also needed to get fork(). This needs (and 104# will auto-enable) USE_MULTI above. 105# 106USE_IMP_SYS := define 107 108# 109# Comment out next assign to disable perl's I/O subsystem and use compiler's 110# stdio for IO - depending on your compiler vendor and run time library you may 111# then get a number of fails from make test i.e. bugs - complain to them not us ;-). 112# You will also be unable to take full advantage of perl5.8's support for multiple 113# encodings and may see lower IO performance. You have been warned. 114# 115USE_PERLIO := define 116 117# 118# Uncomment this if you're building a 32-bit perl and want 64-bit integers. 119# (If you're building a 64-bit perl then you will have 64-bit integers whether 120# or not this is uncommented.) 121# 122#USE_64_BIT_INT := define 123 124# 125# Uncomment this if you want to support the use of long doubles in GCC builds. 126# This option is not supported for MSVC builds. 127# 128#USE_LONG_DOUBLE := define 129 130# 131# Uncomment these if you want to support the use of __float128 in GCC builds. 132# This option is not supported for MSVC builds. 133# 134#USE_QUADMATH := define 135#I_QUADMATH := define 136 137# 138# Comment this out if you want to build perl without __USE_MINGW_ANSI_STDIO defined. 139# (If you're building perl with USE_LONG_DOUBLE defined then 140# __USE_MINGW_ANSI_STDIO will be defined whether or not this is uncommented.) 141# The advantage of defining __USE_MINGW_ANSI_STDIO is that it provides correct 142# (s)printf formatting of numbers, whereas the MS runtime might not. 143# This option has no effect on MSVC builds. 144# 145USE_MINGW_ANSI_STDIO := define 146 147# 148# Comment this out if you want the legacy default behavior of including '.' at 149# the end of @INC. 150# 151DEFAULT_INC_EXCLUDES_DOT := define 152 153# 154# Uncomment this if you want to disable looking up values from 155# HKEY_CURRENT_USER\Software\Perl and HKEY_LOCAL_MACHINE\Software\Perl in 156# the Registry. 157# 158#USE_NO_REGISTRY := define 159 160# 161# uncomment exactly one of the following 162# 163# Visual C++ 2015 (aka Visual C++ 14.0) (full version or Express Edition) 164#CCTYPE := MSVC140 165# Visual C++ 2017 (aka Visual C++ 14.1) (full version or Community Edition) 166#CCTYPE := MSVC141 167# Visual C++ 2019 (aka Visual C++ 14.2) (full version or Community Edition) 168#CCTYPE := MSVC142 169# Visual C++ 2022 (aka Visual C++ 14.3) (full version or Community Edition) 170#CCTYPE := MSVC143 171# MinGW or mingw-w64 with gcc-3.4.5 or later 172#CCTYPE := GCC 173 174# 175# If you are using Intel C++ Compiler uncomment this 176# 177#__ICC := define 178 179# 180# Uncomment this if you want to build everything in C++ mode 181# This requires gcc or at least MSVC 2019. 182# 183#USE_CPLUSPLUS := define 184 185# 186# uncomment next line if you want debug version of perl (big/slow) 187# If not enabled, we automatically try to use maximum optimization 188# with all compilers that are known to have a working optimizer. 189# 190# You can also set CFG = DebugSymbols for a slightly smaller/faster 191# debug build without the special debugging code in perl which is 192# enabled via -DDEBUGGING; 193# 194#CFG := Debug 195 196# 197# uncomment to enable linking with setargv.obj under the Visual C 198# compiler. Setting this options enables perl to expand wildcards in 199# arguments, but it may be harder to use alternate methods like 200# File::DosGlob that are more powerful. This option is supported only with 201# Visual C. 202# 203#USE_SETARGV := define 204 205# 206# set this if you wish to use perl's malloc 207# WARNING: Turning this on/off WILL break binary compatibility with extensions 208# you may have compiled with/without it. Be prepared to recompile all 209# extensions if you change the default. Currently, this cannot be enabled 210# if you ask for USE_IMP_SYS above. 211# 212#PERL_MALLOC := define 213 214# 215# set this to enable debugging mstats 216# This must be enabled to use the Devel::Peek::mstat() function. This cannot 217# be enabled without PERL_MALLOC as well. 218# 219#DEBUG_MSTATS := define 220 221# 222# set this to additionally provide a statically linked perl-static.exe. 223# Note that dynamic loading will not work with this perl, so you must 224# include required modules statically using the STATIC_EXT or ALL_STATIC 225# variables below. A static library perl540s.lib will also be created. 226# Ordinary perl.exe is not affected by this option. 227# 228#BUILD_STATIC := define 229 230# 231# in addition to BUILD_STATIC the option ALL_STATIC makes *every* 232# extension get statically built. 233# This will result in a very large perl executable, but the main purpose 234# is to have proper linking set so as to be able to create miscellaneous 235# executables with different built-in extensions. It implies BUILD_STATIC. 236# 237#ALL_STATIC := define 238 239# 240# set the install locations of the compiler 241# Running VCVARS32.BAT, VCVARSALL.BAT or similar is *required* when using 242# Visual C++. 243# 244# For GCC builds this should be the directory containing the bin, include, 245# lib directories for your compiler. 246# 247#CCHOME := C:\MinGW 248 249# 250# Additional compiler flags can be specified here. 251# 252BUILDOPT := $(BUILDOPTEXTRA) 253 254# 255# This should normally be disabled. Enabling it will disable the File::Glob 256# implementation of CORE::glob. 257# 258#BUILDOPT += -DPERL_EXTERNAL_GLOB 259 260# 261# Perl needs to read scripts in text mode so that the DATA filehandle 262# works correctly with seek() and tell(), or around auto-flushes of 263# all filehandles (e.g. by system(), backticks, fork(), etc). 264# 265# The current version on the ByteLoader module on CPAN however only 266# works if scripts are read in binary mode. But before you disable text 267# mode script reading (and break some DATA filehandle functionality) 268# please check first if an updated ByteLoader isn't available on CPAN. 269# 270BUILDOPT += -DPERL_TEXTMODE_SCRIPTS 271 272# 273# specify semicolon-separated list of extra directories that modules will 274# look for libraries (spaces in path names need not be quoted) 275# 276EXTRALIBDIRS := 277 278# 279# set this to your email address (perl will guess a value from 280# your loginname and your hostname, which may not be right) 281# 282#EMAIL := 283 284## 285## Build configuration ends. 286## 287 288##################### CHANGE THESE ONLY IF YOU MUST ##################### 289 290PERL_MALLOC ?= undef 291DEBUG_MSTATS ?= undef 292 293USE_SITECUST ?= undef 294USE_MULTI ?= undef 295USE_ITHREADS ?= undef 296USE_IMP_SYS ?= undef 297USE_PERLIO ?= undef 298USE_LARGE_FILES ?= undef 299USE_64_BIT_INT ?= undef 300USE_LONG_DOUBLE ?= undef 301USE_QUADMATH ?= undef 302I_QUADMATH ?= undef 303DEFAULT_INC_EXCLUDES_DOT ?= undef 304USE_NO_REGISTRY ?= undef 305 306ifeq ($(USE_IMP_SYS),define) 307PERL_MALLOC = undef 308endif 309 310ifeq ($(PERL_MALLOC),undef) 311DEBUG_MSTATS = undef 312endif 313 314ifeq ($(DEBUG_MSTATS),define) 315BUILDOPT += -DPERL_DEBUGGING_MSTATS 316endif 317 318ifeq ("$(USE_IMP_SYS) $(USE_MULTI)","define undef") 319USE_MULTI = define 320endif 321 322ifeq ("$(USE_ITHREADS) $(USE_MULTI)","define undef") 323USE_MULTI = define 324endif 325 326ifeq ($(USE_SITECUST),define) 327BUILDOPT += -DUSE_SITECUSTOMIZE 328endif 329 330ifneq ($(USE_MULTI),undef) 331BUILDOPT += -DMULTIPLICITY 332endif 333 334ifneq ($(USE_IMP_SYS),undef) 335BUILDOPT += -DPERL_IMPLICIT_SYS 336endif 337 338ifeq ($(USE_NO_REGISTRY),define) 339BUILDOPT += -DWIN32_NO_REGISTRY 340endif 341 342ifeq ($(CCTYPE),GCC) 343GCCTARGET := $(shell $(GCCBIN) -dumpmachine) 344endif 345 346#no explicit CCTYPE given, do auto detection 347ifeq ($(CCTYPE),) 348GCCTARGET := $(shell $(GCCBIN) -dumpmachine 2>NUL) 349#do we have a GCC? 350ifneq ($(GCCTARGET),) 351CCTYPE := GCC 352else 353WIN64 := $(shell for /f "tokens=3 delims=.^ " \ 354 %%i in ('cl ^2^>^&1') do @if "%%i" == "32-bit" echo undef) 355#major version of CL has diff position based on 32 vs 64 356#Microsoft (R) C/C++ Optimizing Compiler Version 15.00.30729.01 for x64 357#Microsoft (R) 32-bit C/C++ Optimizing Compiler Version 15.00.30729.01 for 80x86 358#use var to capture 1st line only, not 8th token of lines 2 & 3 in cl.exe output 359#removing the cmd /c (extra scope) on the echo causes the env var to be undef 360#when echo executes but it isn't undef for the "set MSVCVER", gmake or 361#cmd.exe bug? 362ifeq ($(WIN64),undef) 363MSVCVER := $(shell (set MSVCVER=) & (for /f "tokens=8,9 delims=.^ " \ 364 %%i in ('cl ^2^>^&1') do if not defined MSVCVER if %%i%% geq 19 \ 365 (set /A "MSVCVER=((%%i-5)*10)+(%%j/10)") \ 366 else (set /A "MSVCVER=(%%i-6)*10")) & cmd /c echo %%MSVCVER%%) 367else 368MSVCVER := $(shell (set MSVCVER=) & (for /f "tokens=7,8 delims=.^ " \ 369 %%i in ('cl ^2^>^&1') do if not defined MSVCVER if %%i%% geq 19 \ 370 (set /A "MSVCVER=((%%i-5)*10)+(%%j/10)") \ 371 else (set /A "MSVCVER=(%%i-6)*10")) & cmd /c echo %%MSVCVER%%) 372endif 373#autodetect failed, reset to empty string 374ifeq ($(MSVCVER),-50) 375CCTYPE := 376else 377CCTYPE := MSVC$(MSVCVER) 378endif 379endif 380endif 381 382# Versions of Visual C++ up to VC++ 14.0 define $(VCINSTALLDIR), but for 383# VC++ 14.1 we need the subfolder given by $(VCToolsInstallDir). 384ifeq ($(CCHOME),) 385ifeq ($(CCTYPE),GCC) 386CCHOME := C:\MinGW 387else ifeq ($(CCTYPE),MSVC140) 388CCHOME := $(VCINSTALLDIR) 389else 390CCHOME := $(VCToolsInstallDir) 391endif 392endif 393 394# Check processor architecture from target triplet 395# possible values: 396# gcc: i686-w64-mingw32, x86_64-w64-mingw32 397# clang: i686-w64-windows-gnu, x86_64-w64-windows-gnu 398ifeq ($(CCTYPE),GCC) 399ifeq (x86_64, $(findstring x86_64, $(GCCTARGET))) 400WIN64 := define 401PROCESSOR_ARCHITECTURE := x64 402endif 403ifeq (i686, $(findstring i686, $(GCCTARGET))) 404WIN64 := undef 405PROCESSOR_ARCHITECTURE := x86 406endif 407endif 408 409PROCESSOR_ARCHITECTURE ?= x86 410 411ifeq ($(WIN64),undef) 412PROCESSOR_ARCHITECTURE = x86 413endif 414 415ifeq ($(WIN64),) 416# When we are running from a 32bit cmd.exe on AMD64 then 417# PROCESSOR_ARCHITECTURE is set to x86 and PROCESSOR_ARCHITEW6432 418# is set to AMD64 419ifneq ($(PROCESSOR_ARCHITEW6432),) 420PROCESSOR_ARCHITECTURE = $(PROCESSOR_ARCHITEW6432) 421WIN64 = define 422else ifeq ($(PROCESSOR_ARCHITECTURE),AMD64) 423WIN64 = define 424else ifeq ($(PROCESSOR_ARCHITECTURE),IA64) 425WIN64 = define 426else 427WIN64 = undef 428endif 429endif 430 431ifeq ($(WIN64),define) 432USE_64_BIT_INT = define 433endif 434 435# Disable the long double option for MSVC builds since that compiler 436# does not support it. 437ifneq ($(CCTYPE),GCC) 438USE_LONG_DOUBLE = undef 439USE_QUADMATH = undef 440I_QUADMATH = undef 441endif 442 443ARCHITECTURE = $(PROCESSOR_ARCHITECTURE) 444ifeq ($(ARCHITECTURE),AMD64) 445ARCHITECTURE = x64 446endif 447ifeq ($(ARCHITECTURE),IA64) 448ARCHITECTURE = ia64 449endif 450 451ifeq ($(USE_MULTI),define) 452ARCHNAME = MSWin32-$(ARCHITECTURE)-multi 453else 454ifeq ($(USE_PERLIO),define) 455ARCHNAME = MSWin32-$(ARCHITECTURE)-perlio 456else 457ARCHNAME = MSWin32-$(ARCHITECTURE) 458endif 459endif 460 461ifeq ($(USE_PERLIO),define) 462BUILDOPT += -DUSE_PERLIO 463endif 464 465ifeq ($(USE_ITHREADS),define) 466ARCHNAME := $(ARCHNAME)-thread 467endif 468 469ifneq ($(WIN64),define) 470ifeq ($(USE_64_BIT_INT),define) 471ARCHNAME := $(ARCHNAME)-64int 472endif 473endif 474 475ifeq ($(USE_LONG_DOUBLE),define) 476ARCHNAME := $(ARCHNAME)-ld 477endif 478 479ifeq ($(USE_QUADMATH),define) 480ARCHNAME := $(ARCHNAME)-quadmath 481endif 482 483ifeq ($(CCTYPE),GCC) 484GCCVER := $(shell $(GCCBIN) -dumpversion) 485GCCVER1 := $(shell for /f "delims=. tokens=1,2,3" %%i in ('$(GCCBIN) -dumpversion') do echo %%i) 486GCCVER2 := $(shell for /f "delims=. tokens=1,2,3" %%i in ('$(GCCBIN) -dumpversion') do echo %%j) 487GCCVER3 := $(shell for /f "delims=. tokens=1,2,3" %%i in ('$(GCCBIN) -dumpversion') do echo %%k) 488endif 489 490# Set the install location of the compiler headers/libraries. 491# These are saved into $Config{incpath} and $Config{libpth}. 492ifneq ($(GCCCROSS),) 493CCINCDIR := $(CCHOME)\$(GCCCROSS)\include 494CCLIBDIR := $(CCHOME)\$(GCCCROSS)\lib 495ARCHPREFIX := $(GCCCROSS)- 496else ifeq ($(CCTYPE),GCC) 497CCINCDIR := $(CCHOME)\include 498CCLIBDIR := $(CCHOME)\lib;$(CCHOME)\$(GCCTARGET)\lib;$(CCHOME)\lib\gcc\$(GCCTARGET)\$(GCCVER) 499ARCHPREFIX := 500else 501CCINCDIR := $(CCHOME)\include 502ifeq ($(CCTYPE),MSVC140) 503ifeq ($(WIN64),define) 504CCLIBDIR := $(CCHOME)\lib\amd64 505else 506CCLIBDIR := $(CCHOME)\lib 507endif 508else 509ifeq ($(WIN64),define) 510CCLIBDIR := $(CCHOME)\lib\x64 511else 512CCLIBDIR := $(CCHOME)\lib\x86 513endif 514endif 515ARCHPREFIX := 516endif 517 518# Set DLL location for GCC compilers. 519ifeq ($(CCTYPE),GCC) 520ifneq ($(GCCCROSS),) 521CCDLLDIR := $(CCHOME)\$(GCCCROSS)\lib 522else 523CCDLLDIR := $(CCHOME)\bin 524endif 525endif 526 527ARCHDIR = ..\lib\$(ARCHNAME) 528COREDIR = ..\lib\CORE 529AUTODIR = ..\lib\auto 530LIBDIR = ..\lib 531EXTDIR = ..\ext 532DISTDIR = ..\dist 533CPANDIR = ..\cpan 534PODDIR = ..\pod 535HTMLDIR = .\html 536 537# Strip trailing backslash from INST_TOP 538override INST_TOP := $(INST_TOP:\=) 539 540INST_SCRIPT = $(INST_TOP)$(INST_VER)\bin 541INST_BIN = $(INST_SCRIPT)$(INST_ARCH) 542INST_LIB = $(INST_TOP)$(INST_VER)\lib 543INST_ARCHLIB = $(INST_LIB)$(INST_ARCH) 544INST_COREDIR = $(INST_ARCHLIB)\CORE 545INST_HTML = $(INST_TOP)$(INST_VER)\html 546 547# 548# Programs to compile, build .lib files and link 549# 550 551MINIBUILDOPT := 552 553ifeq ($(CCTYPE),GCC) 554 555CC = $(ARCHPREFIX)gcc 556LINK32 = $(ARCHPREFIX)g++ 557LIB32 = $(ARCHPREFIX)ar rc 558IMPLIB = $(ARCHPREFIX)dlltool 559RSC = $(ARCHPREFIX)windres 560 561ifeq ($(USE_LONG_DOUBLE),define) 562BUILDOPT += -D__USE_MINGW_ANSI_STDIO 563MINIBUILDOPT += -D__USE_MINGW_ANSI_STDIO 564else ifeq ($(USE_MINGW_ANSI_STDIO),define) 565BUILDOPT += -D__USE_MINGW_ANSI_STDIO 566MINIBUILDOPT += -D__USE_MINGW_ANSI_STDIO 567endif 568 569 570# By default add -fwrapv, since we depend on 2's complement behaviour 571# for signed numbers. 572# See https://github.com/Perl/perl5/issues/13690 573# 574GCCWRAPV := define 575 576ifeq ($(GCCWRAPV),define) 577BUILDOPT += -fwrapv 578MINIBUILDOPT += -fwrapv 579endif 580 581i = .i 582o = .o 583a = .a 584 585# 586# Options 587# 588 589INCLUDES = -I.\include -I. -I.. 590DEFINES = -DWIN32 591ifeq ($(WIN64),define) 592DEFINES += -DWIN64 593endif 594LOCDEFS = -DPERLDLL -DPERL_CORE 595CXX_FLAG = -xc++ 596LIBC = 597LIBFILES = $(LIBC) -lmoldname -lkernel32 -luser32 -lgdi32 -lwinspool \ 598 -lcomdlg32 -ladvapi32 -lshell32 -lole32 -loleaut32 -lnetapi32 \ 599 -luuid -lws2_32 -lmpr -lwinmm -lversion -lodbc32 -lodbccp32 -lcomctl32 600 601ifeq ($(USE_QUADMATH),define) 602LIBFILES += -lquadmath 603endif 604 605ifeq ($(CFG),Debug) 606# According to https://gcc.gnu.org/onlinedocs/gcc-8.3.0/gcc/Optimize-Options.html 607# -Og should provide some optimizations while still giving convenient debugging 608OPTIMIZE = -g -Og 609LINK_DBG = -g 610DEFINES += -DDEBUGGING 611else ifeq ($(CFG),DebugSymbols) 612OPTIMIZE = -g -Og 613LINK_DBG = -g 614else 615# In https://github.com/Perl/perl5/issues/20081 it is found that the previous 616# optimization level -O2 causes generated code that fails in mysterious ways 617# when run on Win11 (*even* if it was built and successfully tested on Win10!). 618OPTIMIZE = -Os 619LINK_DBG = -s 620endif 621 622CWARNFLAGS = -Wall -Wextra -Werror=pointer-arith -Wno-format -Wno-long-long -Werror=vla 623ifeq ($(USE_CPLUSPLUS),define) 624EXTRACFLAGS += $(CXX_FLAG) 625else 626EXTRACFLAGS += -std=c99 627endif 628CFLAGS = $(EXTRACFLAGS) $(INCLUDES) $(DEFINES) $(LOCDEFS) $(OPTIMIZE) 629LINK_FLAGS = $(LINK_DBG) -L"$(INST_COREDIR)" -L"$(subst ;," -L",$(CCLIBDIR))" 630OBJOUT_FLAG = -o 631EXEOUT_FLAG = -o 632LIBOUT_FLAG = 633PDBOUT = 634 635BUILDOPT += -fno-strict-aliasing -mms-bitfields 636MINIBUILDOPT += -fno-strict-aliasing 637 638TESTPREPGCC = test-prep-gcc 639 640else 641 642o = .obj 643 644# Loading DLLs on demand makes the test suite run in about 10% less time. 645# If no registry, advapi32 is only used for Perl_pp_getlogin/getlogin/GetUserNameA 646# which is rare to execute 647ifneq ($(USE_NO_REGISTRY),undef) 648DELAYLOAD = -DELAYLOAD:ws2_32.dll -DELAYLOAD:advapi32.dll delayimp.lib 649MINIDELAYLOAD = 650else 651DELAYLOAD = -DELAYLOAD:ws2_32.dll delayimp.lib 652#miniperl never does any registry lookups 653MINIDELAYLOAD = -DELAYLOAD:advapi32.dll 654endif 655 656ifneq ($(__ICC),define) 657CC = cl 658LINK32 = link 659else 660CC = icl 661LINK32 = xilink 662endif 663LIB32 = $(LINK32) -lib 664RSC = rc 665 666# 667# Options 668# 669 670INCLUDES = -I.\include -I. -I.. 671#PCHFLAGS = -Fpc:\temp\vcmoduls.pch -YX 672DEFINES = -DWIN32 -D_CONSOLE -DNO_STRICT 673LOCDEFS = -DPERLDLL -DPERL_CORE 674CXX_FLAG = -TP -EHsc 675ifeq ($(USE_CPLUSPLUS),define) 676CXX_FLAG += -std:c++20 677endif 678EXTRACFLAGS = -nologo -GF -W3 679 680LIBC = ucrt.lib 681 682ifeq ($(CFG),Debug) 683OPTIMIZE = -Od -Zi 684LINK_DBG = -debug 685DEFINES += -DDEBUGGING 686EXTRACFLAGS += -MD 687else ifeq ($(CFG),DebugSymbols) 688OPTIMIZE = -Od -Zi 689LINK_DBG = -debug 690EXTRACFLAGS += -MD 691else ifeq ($(CFG),DebugFull) 692LIBC = ucrtd.lib 693OPTIMIZE = -Od -Zi 694LINK_DBG = -debug 695DEFINES += -D_DEBUG -DDEBUGGING 696EXTRACFLAGS += -MDd 697 698else 699# Enable Whole Program Optimizations (WPO) and Link Time Code Generation (LTCG). 700# -O1 yields smaller code, which turns out to be faster than -O2 on x86 and x64 701OPTIMIZE = -O1 -Zi -GL 702# we enable debug symbols in release builds also 703LINK_DBG = -debug -opt:ref,icf -ltcg 704# you may want to enable this if you want COFF symbols in the executables 705# in addition to the PDB symbols. The default Dr. Watson that ships with 706# Windows can use the former but not latter. The free WinDbg can be 707# installed to get better stack traces from just the PDB symbols, so we 708# avoid the bloat of COFF symbols by default. 709#LINK_DBG += -debugtype:both 710LIB_FLAGS = -ltcg 711EXTRACFLAGS += -MD 712endif 713 714ifeq ($(WIN64),define) 715DEFINES += -DWIN64 716OPTIMIZE += -fp:precise 717endif 718 719# For now, silence warnings about "unsafe" CRT functions 720# and POSIX CRT function names being deprecated. 721# Likewise for deprecated Winsock APIs 722DEFINES += -D_CRT_SECURE_NO_DEPRECATE -D_CRT_NONSTDC_NO_DEPRECATE \ 723 -D_WINSOCK_DEPRECATED_NO_WARNINGS 724 725LIBBASEFILES = oldnames.lib kernel32.lib user32.lib gdi32.lib winspool.lib \ 726 comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib \ 727 netapi32.lib uuid.lib ws2_32.lib mpr.lib winmm.lib version.lib \ 728 odbc32.lib odbccp32.lib comctl32.lib 729 730ifeq ($(CFG),DebugFull) 731LIBBASEFILES += msvcrtd.lib vcruntimed.lib 732else 733LIBBASEFILES += msvcrt.lib vcruntime.lib 734endif 735 736# Avoid __intel_new_proc_init link error for libircmt. 737# libmmd is /MD equivalent, other variants exist. 738# libmmd is Intel C's math addon funcs to MS CRT, contains long doubles, C99, 739# and optimized C89 funcs 740ifeq ($(__ICC),define) 741LIBBASEFILES += libircmt.lib libmmd.lib 742endif 743 744LIBFILES = $(LIBBASEFILES) $(LIBC) 745 746ifeq ($(__ICC),define) 747EXTRACFLAGS += -Qstd=c99 748endif 749ifeq ($(USE_CPLUSPLUS),define) 750EXTRACFLAGS += $(CXX_FLAG) 751endif 752CFLAGS = $(EXTRACFLAGS) $(INCLUDES) $(DEFINES) $(LOCDEFS) \ 753 $(PCHFLAGS) $(OPTIMIZE) 754LINK_FLAGS = -nologo -nodefaultlib $(LINK_DBG) \ 755 -libpath:"$(INST_COREDIR)" \ 756 -machine:$(PROCESSOR_ARCHITECTURE) 757LIB_FLAGS += -nologo 758OBJOUT_FLAG = -Fo 759EXEOUT_FLAG = -Fe 760LIBOUT_FLAG = /out: 761PDBOUT = -Fd$(*).pdb 762TESTPREPGCC = 763 764endif 765 766CFLAGS_O = $(CFLAGS) $(BUILDOPT) $(CWARNFLAGS) 767 768RSC_FLAGS = 769 770# VS 2017 (VC++ 14.1) requires at minimum Windows 7 SP1 (with latest Windows Updates) 771 772# For XP support in >= VS 2013 (VC++ 12.0), subsystem is always in Config.pm 773# LINK_FLAGS. 774 775ifneq ($(CCTYPE),GCC) 776ifeq ($(WIN64),define) 777LINK_FLAGS += -subsystem:console,"5.02" 778else 779LINK_FLAGS += -subsystem:console,"5.01" 780endif 781endif 782 783BLINK_FLAGS = $(PRIV_LINK_FLAGS) $(LINK_FLAGS) 784 785#################### do not edit below this line ####################### 786############# NO USER-SERVICEABLE PARTS BEYOND THIS POINT ############## 787 788#prevent -j from reaching EUMM/make_ext.pl/"sub makes", Win32 EUMM not parallel 789#compatible yet 790unexport MAKEFLAGS 791 792a ?= .lib 793 794.SUFFIXES : .c .i $(o) .dll $(a) .exe .rc .res 795 796%$(o): %.c 797 $(CC) -c -I$(<D) -I$(FULLDIR) $(CFLAGS_O) $(OBJOUT_FLAG)$@ $(PDBOUT) $< 798 799%.i: %.c 800 $(CC) -c -I$(<D) -I$(FULLDIR) $(CFLAGS_O) -E $< >$@ 801 802%.c: %.y 803 $(NOOP) 804 805%.dll: %$(o) 806 $(LINK32) -o $@ $(BLINK_FLAGS) $< $(LIBFILES) 807 $(IMPLIB) --input-def $(*F).def --output-lib $(*F).a $@ 808 809%.res: %.rc 810ifeq ($(CCTYPE),GCC) 811 $(RSC) --use-temp-file --include-dir=. --include-dir=.. -O COFF -D INCLUDE_MANIFEST -i $< -o $@ 812else 813 $(RSC) -i.. -DINCLUDE_MANIFEST $< 814endif 815 816# 817# various targets 818 819#do not put $(MINIPERL) as a dep/prereq in a rule, instead put $(HAVEMINIPERL) 820#$(MINIPERL) is not a buildable target, use "gmake mp" if you want to just build 821#miniperl alone 822MINIPERL = ..\miniperl.exe 823HAVEMINIPERL = ..\lib\buildcustomize.pl 824# contains config.h for the full perl build 825FULLDIR = full 826MINIDIR = mini 827PERLEXE = ..\perl.exe 828WPERLEXE = ..\wperl.exe 829PERLEXESTATIC = ..\perl-static.exe 830STATICDIR = .\static.tmp 831GLOBEXE = ..\perlglob.exe 832CONFIGPM = ..\lib\Config.pm 833GENUUDMAP = ..\generate_uudmap.exe 834ifeq ($(BUILD_STATIC),define) 835PERLSTATIC = static 836else 837ifeq ($(ALL_STATIC),define) 838PERLSTATIC = static 839else 840PERLSTATIC = 841endif 842endif 843 844# Unicode data files generated by mktables 845UNIDATAFILES = ..\lib\unicore\Decomposition.pl ..\lib\unicore\TestProp.pl \ 846 ..\lib\unicore\CombiningClass.pl ..\lib\unicore\Name.pl \ 847 ..\lib\unicore\UCD.pl ..\lib\unicore\Name.pm \ 848 ..\lib\unicore\mktables.lst 849 850# Directories of Unicode data files generated by mktables 851UNIDATADIR1 = ..\lib\unicore\To 852UNIDATADIR2 = ..\lib\unicore\lib 853 854PERLEXE_MANIFEST= .\perlexe.manifest 855PERLEXE_ICO = .\perlexe.ico 856PERLEXE_RES = .\perlexe.res 857PERLDLL_RES = 858 859# Nominate a target which causes extensions to be re-built 860# This used to be $(PERLEXE), but at worst it is the .dll that they depend 861# on and really only the interface - i.e. the .def file used to export symbols 862# from the .dll 863PERLDEP = $(PERLIMPLIB) 864 865 866PL2BAT = bin\pl2bat.pl 867 868UTILS = \ 869 ..\utils\h2ph \ 870 ..\utils\splain \ 871 ..\utils\perlbug \ 872 ..\utils\pl2pm \ 873 ..\utils\h2xs \ 874 ..\utils\perldoc \ 875 ..\utils\perlivp \ 876 ..\utils\libnetcfg \ 877 ..\utils\enc2xs \ 878 ..\utils\encguess \ 879 ..\utils\piconv \ 880 ..\utils\corelist \ 881 ..\utils\cpan \ 882 ..\utils\xsubpp \ 883 ..\utils\pod2html \ 884 ..\utils\prove \ 885 ..\utils\ptar \ 886 ..\utils\ptardiff \ 887 ..\utils\ptargrep \ 888 ..\utils\zipdetails \ 889 ..\utils\shasum \ 890 ..\utils\instmodsh \ 891 ..\utils\json_pp \ 892 bin\exetype.pl \ 893 bin\runperl.pl \ 894 bin\pl2bat.pl \ 895 bin\perlglob.pl \ 896 bin\search.pl 897 898ifeq ($(CCTYPE),GCC) 899 900CFGSH_TMPL = config.gc 901CFGH_TMPL = config_H.gc 902PERLIMPLIB = $(COREDIR)\libperl540$(a) 903PERLIMPLIBBASE = libperl540$(a) 904PERLSTATICLIB = ..\libperl540s$(a) 905INT64 = long long 906 907else 908 909CFGSH_TMPL = config.vc 910CFGH_TMPL = config_H.vc 911INT64 = __int64 912 913endif 914 915# makedef.pl must be updated if this changes, and this should normally 916# only change when there is an incompatible revision of the public API. 917PERLIMPLIB ?= $(COREDIR)\perl540$(a) 918PERLIMPLIBBASE ?= perl540$(a) 919PERLEXPLIB ?= $(COREDIR)\perl540.exp 920PERLSTATICLIB ?= ..\perl540s$(a) 921PERLDLL = ..\perl540.dll 922PERLDLLBASE = perl540.dll 923 924# don't let "gmake -n all" try to run "miniperl.exe make_ext.pl" 925PLMAKE = gmake 926 927XCOPY = xcopy /f /r /i /d /y 928RCOPY = xcopy /f /r /i /e /d /y 929NOOP = @rem 930 931#first ones are arrange in compile time order for faster parallel building 932#see #123867 for details 933MICROCORE_SRC = \ 934 ..\toke.c \ 935 ..\regcomp.c \ 936 ..\regcomp_trie.c \ 937 ..\regcomp_debug.c \ 938 ..\regcomp_invlist.c \ 939 ..\regcomp_study.c \ 940 ..\regexec.c \ 941 ..\op.c \ 942 ..\sv.c \ 943 ..\pp.c \ 944 ..\pp_ctl.c \ 945 ..\pp_sys.c \ 946 ..\pp_pack.c \ 947 ..\pp_hot.c \ 948 ..\gv.c \ 949 ..\perl.c \ 950 ..\utf8.c \ 951 ..\dump.c \ 952 ..\hv.c \ 953 ..\av.c \ 954 ..\builtin.c \ 955 ..\caretx.c \ 956 ..\class.c \ 957 ..\deb.c \ 958 ..\doio.c \ 959 ..\doop.c \ 960 ..\dquote.c \ 961 ..\globals.c \ 962 ..\mro_core.c \ 963 ..\locale.c \ 964 ..\keywords.c \ 965 ..\mathoms.c \ 966 ..\mg.c \ 967 ..\numeric.c \ 968 ..\pad.c \ 969 ..\peep.c \ 970 ..\perly.c \ 971 ..\pp_sort.c \ 972 ..\reentr.c \ 973 ..\run.c \ 974 ..\scope.c \ 975 ..\taint.c \ 976 ..\time64.c \ 977 ..\universal.c \ 978 ..\util.c 979 980EXTRACORE_SRC += perllib.c 981 982ifeq ($(PERL_MALLOC),define) 983EXTRACORE_SRC += ..\malloc.c 984endif 985 986EXTRACORE_SRC += ..\perlio.c 987 988WIN32_SRC = \ 989 .\win32.c \ 990 .\win32sck.c \ 991 .\win32thread.c \ 992 .\fcrypt.c 993 994CORE_NOCFG_H = \ 995 ..\av.h \ 996 ..\cop.h \ 997 ..\cv.h \ 998 ..\dosish.h \ 999 ..\embed.h \ 1000 ..\form.h \ 1001 ..\gv.h \ 1002 ..\handy.h \ 1003 ..\hv.h \ 1004 ..\hv_func.h \ 1005 ..\iperlsys.h \ 1006 ..\mg.h \ 1007 ..\nostdio.h \ 1008 ..\op.h \ 1009 ..\opcode.h \ 1010 ..\perl.h \ 1011 ..\perlapi.h \ 1012 ..\perlsdio.h \ 1013 ..\perly.h \ 1014 ..\pp.h \ 1015 ..\proto.h \ 1016 ..\regcomp.h \ 1017 ..\regcomp_internal.h \ 1018 ..\regexp.h \ 1019 ..\scope.h \ 1020 ..\sv.h \ 1021 ..\thread.h \ 1022 ..\unixish.h \ 1023 ..\utf8.h \ 1024 ..\util.h \ 1025 ..\warnings.h \ 1026 ..\XSUB.h \ 1027 ..\EXTERN.h \ 1028 ..\perlvars.h \ 1029 ..\intrpvar.h \ 1030 .\include\dirent.h \ 1031 .\include\netdb.h \ 1032 .\include\sys\errno2.h \ 1033 .\include\sys\socket.h \ 1034 .\win32.h 1035 1036CONFIG_H = $(FULLDIR)\config.h 1037MINI_CONFIG_H = $(MINIDIR)\config.h 1038CORE_H = $(CORE_NOCFG_H) $(CONFIG_H) ..\git_version.h 1039 1040UUDMAP_H = ..\uudmap.h 1041BITCOUNT_H = ..\bitcount.h 1042MG_DATA_H = ..\mg_data.h 1043GENERATED_HEADERS = $(UUDMAP_H) $(BITCOUNT_H) $(MG_DATA_H) 1044 1045HAVE_COREDIR = .coreheaders 1046 1047MICROCORE_OBJ = $(MICROCORE_SRC:.c=$(o)) 1048CORE_OBJ = $(MICROCORE_OBJ) $(EXTRACORE_SRC:.c=$(o)) 1049WIN32_OBJ = $(WIN32_SRC:.c=$(o)) 1050 1051MINICORE_OBJ = $(subst ..\,mini\,$(MICROCORE_OBJ)) \ 1052 $(MINIDIR)\miniperlmain$(o) \ 1053 $(MINIDIR)\perlio$(o) 1054MINIWIN32_OBJ = $(subst .\,mini\,$(WIN32_OBJ)) 1055MINI_OBJ = $(MINICORE_OBJ) $(MINIWIN32_OBJ) 1056DLL_OBJ = $(DYNALOADER) 1057 1058PERLDLL_OBJ = $(CORE_OBJ) 1059PERLEXE_OBJ = perlmain$(o) 1060PERLEXEST_OBJ = perlmainst$(o) 1061 1062PERLDLL_OBJ += $(WIN32_OBJ) $(DLL_OBJ) 1063 1064ifneq ($(USE_SETARGV),) 1065SETARGV_OBJ = setargv$(o) 1066endif 1067 1068ifeq ($(ALL_STATIC),define) 1069# some exclusions, unfortunately, until fixed: 1070# - MakeMaker isn't capable enough for SDBM_File (small bug) 1071STATIC_EXT = * !SDBM_File 1072NORMALIZE_STATIC = Normalize_static 1073else 1074# specify static extensions here, for example: 1075# (be sure to include Win32CORE to load Win32 on demand) 1076#STATIC_EXT = Win32CORE Cwd Compress/Raw/Zlib 1077STATIC_EXT = Win32CORE 1078NORMALIZE_DYN = Normalize_dyn 1079endif 1080 1081DYNALOADER = ..\DynaLoader$(o) 1082 1083# vars must be separated by "\t+~\t+", since we're using the tempfile 1084# version of config_sh.pl (we were overflowing someone's buffer by 1085# trying to fit them all on the command line) 1086# -- BKS 10-17-1999 1087CFG_VARS = \ 1088 "INST_TOP=$(INST_TOP)" \ 1089 "INST_VER=$(INST_VER)" \ 1090 "INST_ARCH=$(INST_ARCH)" \ 1091 "archname=$(ARCHNAME)" \ 1092 "cc=$(CC)" \ 1093 "ld=$(LINK32)" \ 1094 "ccflags=$(subst ",\",$(EXTRACFLAGS) $(DEFINES) $(BUILDOPT))" \ 1095 "usecplusplus=$(USE_CPLUSPLUS)" \ 1096 "cf_email=$(EMAIL)" \ 1097 "d_mymalloc=$(PERL_MALLOC)" \ 1098 "i_quadmath=$(I_QUADMATH)" \ 1099 "libs=$(LIBFILES)" \ 1100 "incpath=$(subst ",\",$(CCINCDIR))" \ 1101 "libperl=$(subst ",\",$(PERLIMPLIBBASE))" \ 1102 "libpth=$(subst ",\",$(CCLIBDIR);$(EXTRALIBDIRS))" \ 1103 "libc=$(LIBC)" \ 1104 "make=$(PLMAKE)" \ 1105 "_o=$(o)" \ 1106 "obj_ext=$(o)" \ 1107 "_a=$(a)" \ 1108 "lib_ext=$(a)" \ 1109 "static_ext=$(STATIC_EXT)" \ 1110 "usethreads=$(USE_ITHREADS)" \ 1111 "useithreads=$(USE_ITHREADS)" \ 1112 "usemultiplicity=$(USE_MULTI)" \ 1113 "useperlio=$(USE_PERLIO)" \ 1114 "use64bitint=$(USE_64_BIT_INT)" \ 1115 "uselongdouble=$(USE_LONG_DOUBLE)" \ 1116 "usequadmath=$(USE_QUADMATH)" \ 1117 "usesitecustomize=$(USE_SITECUST)" \ 1118 "default_inc_excludes_dot=$(DEFAULT_INC_EXCLUDES_DOT)" \ 1119 "LINK_FLAGS=$(subst ",\",$(LINK_FLAGS))"\ 1120 "optimize=$(subst ",\",$(OPTIMIZE))" \ 1121 "ARCHPREFIX=$(ARCHPREFIX)" \ 1122 "WIN64=$(WIN64)" \ 1123 "SKIP_CCHOME_CHECK=$(SKIP_CCHOME_CHECK)" 1124 1125# 1126# Top targets 1127# 1128 1129.PHONY: all info 1130 1131all : info rebasePE Extensions_nonxs $(PERLSTATIC) 1132 1133info : 1134ifeq ($(CCTYPE),GCC) 1135 @echo # CCTYPE=$(CCTYPE)&& \ 1136 echo # GCCBIN=$(GCCBIN)&& \ 1137 echo # GCCVER=$(GCCVER1).$(GCCVER2).$(GCCVER3)&& \ 1138 echo # GCCTARGET=$(GCCTARGET)&& \ 1139 echo # GCCCROSS=$(GCCCROSS)&& \ 1140 echo # WIN64=$(WIN64)&& \ 1141 echo # ARCHITECTURE=$(ARCHITECTURE)&& \ 1142 echo # ARCHNAME=$(ARCHNAME)&& \ 1143 echo # MAKE=$(PLMAKE) 1144else 1145 @echo # CCTYPE=$(CCTYPE)&& \ 1146 echo # WIN64=$(WIN64)&& \ 1147 echo # ARCHITECTURE=$(ARCHITECTURE)&& \ 1148 echo # ARCHNAME=$(ARCHNAME)&& \ 1149 echo # MAKE=$(PLMAKE) 1150endif 1151ifeq ($(CCTYPE),) 1152 @echo Unable to detect gcc and/or architecture! 1153 @exit 1 1154endif 1155 1156 1157..\regcomp$(o) : ..\regcomp.h ..\regcomp_internal.h ..\regnodes.h ..\regcharclass.h 1158 1159..\regcomp_debug$(o) : ..\regcomp.h ..\regcomp_internal.h ..\regnodes.h ..\regcharclass.h 1160 1161..\regcomp_invlist$(o) : ..\regcomp.h ..\regcomp_internal.h ..\regnodes.h ..\regcharclass.h 1162 1163..\regcomp_study$(o) : ..\regcomp.h ..\regcomp_internal.h ..\regnodes.h ..\regcharclass.h 1164 1165..\regcomp_trie$(o) : ..\regcomp.h ..\regcomp_internal.h ..\regnodes.h ..\regcharclass.h 1166 1167..\regexec$(o) : ..\regnodes.h ..\regcharclass.h 1168 1169reonly : ..\regnodes.h $(CONFIG_H) ..\git_version.h $(GLOBEXE) $(HAVEMINIPERL)\ 1170 $(CONFIGPM) $(UNIDATAFILES) $(PERLEXE) \ 1171 Extensions_reonly 1172 1173static: $(PERLEXESTATIC) 1174 1175#---------------------------------------------------------------- 1176 1177$(GLOBEXE) : perlglob.c 1178ifeq ($(CCTYPE),GCC) 1179 $(LINK32) $(EXTRACFLAGS) $(OPTIMIZE) $(BLINK_FLAGS) -mconsole -o $@ perlglob.c $(LIBFILES) 1180else 1181 $(CC) $(EXTRACFLAGS) $(OPTIMIZE) $(PDBOUT) -Fe$@ perlglob.c -link $(BLINK_FLAGS) \ 1182 setargv$(o) $(LIBFILES) 1183endif 1184 1185..\git_version.h : $(HAVEMINIPERL) ..\make_patchnum.pl 1186 $(MINIPERL) -I..\lib ..\make_patchnum.pl 1187 1188# make sure that we recompile perl.c if the git version changes 1189..\perl$(o) : ..\git_version.h 1190 1191..\config.sh : $(CFGSH_TMPL) config_sh.PL FindExt.pm $(HAVEMINIPERL) 1192 $(MINIPERL) -I..\lib config_sh.PL -o ..\config.sh $(CFG_VARS) $(CFGSH_TMPL) 1193 1194# This target is for when changes to the main config.sh happen. 1195# Edit config.gc, then make perl using GCC in a minimal configuration (i.e. 1196# with MULTI, ITHREADS, IMP_SYS, LARGE_FILES and PERLIO off), then make 1197# this target to regenerate config_H.gc. 1198regen_config_h: 1199 $(MINIPERL) -I..\lib config_sh.PL --prebuilt $(CFG_VARS) $(CFGSH_TMPL) > ..\config.sh 1200 $(MINIPERL) -I..\lib ..\configpm --chdir=.. 1201 -del /f $(CFGH_TMPL) 1202 -$(MINIPERL) -I..\lib config_h.PL "ARCHPREFIX=$(ARCHPREFIX)" 1203 rename config.h $(CFGH_TMPL) 1204 1205$(CONFIGPM): ..\config.sh config_h.PL ..\git_version.h 1206 $(MINIPERL) -I..\lib ..\configpm --chdir=.. 1207 if not exist "$(FULLDIR)" mkdir "$(FULLDIR)" 1208 $(MINIPERL) -I..\lib config_h.PL "CONFIG_H=$(CONFIG_H)" "ARCHPREFIX=$(ARCHPREFIX)" 1209 1210$(CONFIG_H) : $(CONFIGPM) 1211 1212# See the comment in Makefile.SH explaining this seemingly cranky ordering 1213..\lib\buildcustomize.pl : $(MINI_OBJ) ..\write_buildcustomize.pl 1214ifeq ($(CCTYPE),GCC) 1215 $(LINK32) -mconsole -o $(MINIPERL) $(BLINK_FLAGS) $(MINI_OBJ) $(LIBFILES) 1216else 1217 $(LINK32) -out:$(MINIPERL) $(BLINK_FLAGS) \ 1218 $(DELAYLOAD) $(MINIDELAYLOAD) $(LIBFILES) $(MINI_OBJ) 1219 1220endif 1221 $(MINIPERL) -I..\lib -f ..\write_buildcustomize.pl .. 1222 1223#convinence target, get a working miniperl 1224mp : $(CONFIGPM) 1225 1226$(MINIDIR)\.exists : $(CFGH_TMPL) 1227 if not exist "$(MINIDIR)" mkdir "$(MINIDIR)" 1228# 1229# Copy the template config.h and set configurables at the end of it 1230# as per the options chosen and compiler used. 1231# Note: This config.h is only used to build miniperl.exe anyway, but 1232# it's as well to have its options correct to be sure that it builds 1233# and so that it's "-V" options are correct for use by makedef.pl. The 1234# real config.h used to build perl.exe is generated from the top-level 1235# config_h.SH by config_h.PL (run by miniperl.exe). 1236# 1237# MINIDIR generates config.h so miniperl.exe is not rebuilt when the 2nd 1238# config.h is generated in CONFIGPM target, see also the comments for $(MINI_OBJ). 1239 copy $(CFGH_TMPL) $(MINI_CONFIG_H) 1240 @(echo.&& \ 1241 echo #ifndef _config_h_footer_&& \ 1242 echo #define _config_h_footer_&& \ 1243 echo #undef PTRSIZE&& \ 1244 echo #undef SSize_t&& \ 1245 echo #undef HAS_ATOLL&& \ 1246 echo #undef HAS_STRTOLL&& \ 1247 echo #undef HAS_STRTOULL&& \ 1248 echo #undef Size_t_size&& \ 1249 echo #undef IVTYPE&& \ 1250 echo #undef UVTYPE&& \ 1251 echo #undef IVSIZE&& \ 1252 echo #undef UVSIZE&& \ 1253 echo #undef NV_PRESERVES_UV&& \ 1254 echo #undef NV_PRESERVES_UV_BITS&& \ 1255 echo #undef IVdf&& \ 1256 echo #undef UVuf&& \ 1257 echo #undef UVof&& \ 1258 echo #undef UVxf&& \ 1259 echo #undef UVXf&& \ 1260 echo #undef USE_64_BIT_INT&& \ 1261 echo #undef Gconvert&& \ 1262 echo #undef HAS_FREXPL&& \ 1263 echo #undef HAS_ISNANL&& \ 1264 echo #undef HAS_MODFL&& \ 1265 echo #undef HAS_MODFL_PROTO&& \ 1266 echo #undef HAS_SQRTL&& \ 1267 echo #undef HAS_STRTOLD&& \ 1268 echo #undef PERL_PRIfldbl&& \ 1269 echo #undef PERL_PRIgldbl&& \ 1270 echo #undef PERL_PRIeldbl&& \ 1271 echo #undef PERL_SCNfldbl&& \ 1272 echo #undef NVTYPE&& \ 1273 echo #undef NVSIZE&& \ 1274 echo #undef LONG_DOUBLESIZE&& \ 1275 echo #undef NV_OVERFLOWS_INTEGERS_AT&& \ 1276 echo #undef NVef&& \ 1277 echo #undef NVff&& \ 1278 echo #undef NVgf&& \ 1279 echo #undef USE_LONG_DOUBLE&& \ 1280 echo #undef I_QUADMATH&& \ 1281 echo #undef USE_QUADMATH&& \ 1282 echo #undef USE_CPLUSPLUS)>> $(MINI_CONFIG_H) 1283 @(echo #undef FILE_ptr&& \ 1284 echo #undef FILE_cnt&& \ 1285 echo #undef FILE_base&& \ 1286 echo #undef FILE_bufsiz&& \ 1287 echo #define FILE_ptr^(fp^) PERLIO_FILE_ptr^(fp^)&& \ 1288 echo #define FILE_cnt^(fp^) PERLIO_FILE_cnt^(fp^)&& \ 1289 echo #define FILE_base^(fp^) PERLIO_FILE_base^(fp^)&& \ 1290 echo #define FILE_bufsiz^(fp^) ^(PERLIO_FILE_cnt^(fp^) + PERLIO_FILE_ptr^(fp^) - PERLIO_FILE_base^(fp^)^)&& \ 1291 echo #define I_STDBOOL)>> $(MINI_CONFIG_H) 1292ifeq ($(WIN64),define) 1293ifeq ($(CCTYPE),GCC) 1294 @(echo #define LONG_DOUBLESIZE ^16)>> $(MINI_CONFIG_H) 1295else 1296 @(echo #define LONG_DOUBLESIZE ^8)>> $(MINI_CONFIG_H) 1297endif 1298 @(echo #define PTRSIZE ^8&& \ 1299 echo #define SSize_t $(INT64)&& \ 1300 echo #define HAS_ATOLL&& \ 1301 echo #define HAS_STRTOLL&& \ 1302 echo #define HAS_STRTOULL&& \ 1303 echo #define Size_t_size ^8)>> $(MINI_CONFIG_H) 1304else 1305ifeq ($(CCTYPE),GCC) 1306 @(echo #define LONG_DOUBLESIZE ^12)>> $(MINI_CONFIG_H) 1307else 1308 @(echo #define LONG_DOUBLESIZE ^8)>> $(MINI_CONFIG_H) 1309endif 1310 @(echo #define PTRSIZE ^4&& \ 1311 echo #define SSize_t int&& \ 1312 echo #undef HAS_ATOLL&& \ 1313 echo #undef HAS_STRTOLL&& \ 1314 echo #undef HAS_STRTOULL&& \ 1315 echo #define Size_t_size ^4)>> $(MINI_CONFIG_H) 1316endif 1317ifeq ($(USE_64_BIT_INT),define) 1318 @(echo #define IVTYPE $(INT64)&& \ 1319 echo #define UVTYPE unsigned $(INT64)&& \ 1320 echo #define IVSIZE ^8&& \ 1321 echo #define UVSIZE ^8)>> $(MINI_CONFIG_H) 1322ifeq ($(USE_LONG_DOUBLE),define) 1323 @(echo #define NV_PRESERVES_UV&& \ 1324 echo #define NV_PRESERVES_UV_BITS 64)>> $(MINI_CONFIG_H) 1325else ifeq ($(USE_QUADMATH),define) 1326 @(echo #define NV_PRESERVES_UV&& \ 1327 echo #define NV_PRESERVES_UV_BITS 64)>> $(MINI_CONFIG_H) 1328else 1329 @(echo #undef NV_PRESERVES_UV&& \ 1330 echo #define NV_PRESERVES_UV_BITS 53)>> $(MINI_CONFIG_H) 1331endif 1332 @(echo #define IVdf "I64d"&& \ 1333 echo #define UVuf "I64u"&& \ 1334 echo #define UVof "I64o"&& \ 1335 echo #define UVxf "I64x"&& \ 1336 echo #define UVXf "I64X"&& \ 1337 echo #define USE_64_BIT_INT)>> $(MINI_CONFIG_H) 1338else 1339 @(echo #define IVTYPE long&& \ 1340 echo #define UVTYPE unsigned long&& \ 1341 echo #define IVSIZE ^4&& \ 1342 echo #define UVSIZE ^4&& \ 1343 echo #define NV_PRESERVES_UV&& \ 1344 echo #define NV_PRESERVES_UV_BITS 32&& \ 1345 echo #define IVdf "ld"&& \ 1346 echo #define UVuf "lu"&& \ 1347 echo #define UVof "lo"&& \ 1348 echo #define UVxf "lx"&& \ 1349 echo #define UVXf "lX"&& \ 1350 echo #undef USE_64_BIT_INT)>> $(MINI_CONFIG_H) 1351endif 1352ifeq ($(USE_LONG_DOUBLE),define) 1353 @(echo #define Gconvert^(x,n,t,b^) sprintf^(^(b^),"%%.*""Lg",^(n^),^(x^)^)&& \ 1354 echo #define HAS_FREXPL&& \ 1355 echo #define HAS_ISNANL&& \ 1356 echo #define HAS_MODFL&& \ 1357 echo #define HAS_MODFL_PROTO&& \ 1358 echo #define HAS_SQRTL&& \ 1359 echo #define HAS_STRTOLD&& \ 1360 echo #define PERL_PRIfldbl "Lf"&& \ 1361 echo #define PERL_PRIgldbl "Lg"&& \ 1362 echo #define PERL_PRIeldbl "Le"&& \ 1363 echo #define PERL_SCNfldbl "Lf"&& \ 1364 echo #define NVTYPE long double&& \ 1365 echo #define NVSIZE LONG_DOUBLESIZE&& \ 1366 echo #define NV_OVERFLOWS_INTEGERS_AT 256.0*256.0*256.0*256.0*256.0*256.0*256.0*2.0*2.0*2.0*2.0*2.0*2.0*2.0*2.0&& \ 1367 echo #define NVef "Le"&& \ 1368 echo #define NVff "Lf"&& \ 1369 echo #define NVgf "Lg"&& \ 1370 echo #undef I_QUADMATH&& \ 1371 echo #undef USE_QUADMATH&& \ 1372 echo #define USE_LONG_DOUBLE)>> $(MINI_CONFIG_H) 1373else ifeq ($(USE_QUADMATH),define) 1374 @(echo #define Gconvert^(x,n,t,b^) sprintf^(^(b^),"%%.*""Lg",^(n^),^(x^)^)&& \ 1375 echo #define HAS_FREXPL&& \ 1376 echo #define HAS_ISNANL&& \ 1377 echo #define HAS_MODFL&& \ 1378 echo #define HAS_MODFL_PROTO&& \ 1379 echo #define HAS_SQRTL&& \ 1380 echo #define HAS_STRTOLD&& \ 1381 echo #define PERL_PRIfldbl "Lf"&& \ 1382 echo #define PERL_PRIgldbl "Lg"&& \ 1383 echo #define PERL_PRIeldbl "Le"&& \ 1384 echo #define PERL_SCNfldbl "Lf"&& \ 1385 echo #define NVTYPE __float128&& \ 1386 echo #define NVSIZE 16&& \ 1387 echo #define NV_OVERFLOWS_INTEGERS_AT 256.0*256.0*256.0*256.0*256.0*256.0*256.0*256.0*256.0*256.0*256.0*256.0*256.0*256.0*2.0&& \ 1388 echo #define NVef "Qe"&& \ 1389 echo #define NVff "Qf"&& \ 1390 echo #define NVgf "Qg"&& \ 1391 echo #undef USE_LONG_DOUBLE&& \ 1392 echo #define I_QUADMATH&& \ 1393 echo #define USE_QUADMATH)>> $(MINI_CONFIG_H) 1394else 1395 @(echo #define Gconvert^(x,n,t,b^) sprintf^(^(b^),"%%.*g",^(n^),^(x^)^)&& \ 1396 echo #undef HAS_FREXPL&& \ 1397 echo #undef HAS_ISNANL&& \ 1398 echo #undef HAS_MODFL&& \ 1399 echo #undef HAS_MODFL_PROTO&& \ 1400 echo #undef HAS_SQRTL&& \ 1401 echo #undef HAS_STRTOLD&& \ 1402 echo #undef PERL_PRIfldbl&& \ 1403 echo #undef PERL_PRIgldbl&& \ 1404 echo #undef PERL_PRIeldbl&& \ 1405 echo #undef PERL_SCNfldbl&& \ 1406 echo #define NVTYPE double&& \ 1407 echo #define NVSIZE ^8&& \ 1408 echo #define NV_OVERFLOWS_INTEGERS_AT 256.0*256.0*256.0*256.0*256.0*256.0*2.0*2.0*2.0*2.0*2.0&& \ 1409 echo #define NVef "e"&& \ 1410 echo #define NVff "f"&& \ 1411 echo #define NVgf "g"&& \ 1412 echo #undef I_QUADMATH&& \ 1413 echo #undef USE_QUADMATH&& \ 1414 echo #undef USE_LONG_DOUBLE)>> $(MINI_CONFIG_H) 1415endif 1416ifeq ($(USE_CPLUSPLUS),define) 1417 @(echo #define USE_CPLUSPLUS&& \ 1418 echo #endif)>> $(MINI_CONFIG_H) 1419else 1420 @(echo #undef USE_CPLUSPLUS&& \ 1421 echo #endif)>> $(MINI_CONFIG_H) 1422endif 1423#separate line since this is sentinal that this target is done 1424 @rem. > $(MINIDIR)\.exists 1425 1426$(MINIDIR)\\%$(o): %.c 1427 $(CC) -c -I$(MINIDIR) $(CFLAGS) $(CWARNFLAGS) $(MINIBUILDOPT) -DPERL_EXTERNAL_GLOB -DPERL_IS_MINIPERL $(OBJOUT_FLAG)$@ $(PDBOUT) $< 1428 1429$(MINIDIR)\\%$(o): ..\%.c 1430 $(CC) -c -I$(MINIDIR) $(CFLAGS) $(CWARNFLAGS) $(MINIBUILDOPT) -DPERL_EXTERNAL_GLOB -DPERL_IS_MINIPERL $(OBJOUT_FLAG)$@ $(PDBOUT) $< 1431 1432$(MINICORE_OBJ) : $(CORE_NOCFG_H) 1433 1434$(MINIWIN32_OBJ) : $(CORE_NOCFG_H) 1435 1436# -DPERL_IMPLICIT_SYS needs C++ for perllib.c 1437# rules wrapped in .IFs break Win9X build (we end up with unbalanced []s 1438# unless the .IF is true), so instead we use a .ELSE with the default. 1439# This is the only file that depends on perlhost.h, vmem.h, and vdir.h 1440 1441perllib$(o) : perllib.c perllibst.h .\perlhost.h .\vdir.h .\vmem.h 1442ifeq ($(USE_IMP_SYS),define) 1443 $(CC) -c -I$(FULLDIR) -I. $(CFLAGS_O) $(CXX_FLAG) $(OBJOUT_FLAG)$@ $(PDBOUT) perllib.c 1444else 1445 $(CC) -c -I$(FULLDIR) -I. $(CFLAGS_O) $(OBJOUT_FLAG)$@ $(PDBOUT) perllib.c 1446endif 1447 1448# We can't have miniperl.exe depend on git_version.h, as miniperl creates it 1449$(MINI_OBJ) : $(MINIDIR)\.exists $(CORE_NOCFG_H) 1450 1451$(WIN32_OBJ) : $(CORE_H) 1452 1453$(CORE_OBJ) : $(CORE_H) 1454 1455$(DLL_OBJ) : $(CORE_H) 1456 1457 1458perllibst.h : $(HAVEMINIPERL) $(CONFIGPM) create_perllibst_h.pl 1459 $(MINIPERL) -I..\lib create_perllibst_h.pl 1460 1461perldll.def : $(HAVEMINIPERL) $(CONFIGPM) ..\embed.fnc ..\makedef.pl 1462 $(MINIPERL) -I..\lib -w ..\makedef.pl PLATFORM=win32 CONFIG_H=$(CONFIG_H) $(OPTIMIZE) $(DEFINES) \ 1463 $(BUILDOPT) CCTYPE=$(CCTYPE) TARG_DIR=..\ > perldll.def 1464 1465$(PERLEXPLIB) : $(PERLIMPLIB) 1466 1467$(PERLIMPLIB) : perldll.def 1468ifeq ($(CCTYPE),GCC) 1469 $(IMPLIB) -k -d perldll.def -D $(PERLDLLBASE) -l $(PERLIMPLIB) -e $(PERLEXPLIB) 1470else 1471 lib -def:perldll.def -machine:$(ARCHITECTURE) /OUT:$(PERLIMPLIB) 1472endif 1473 1474$(PERLDLL): $(PERLEXPLIB) $(PERLDLL_OBJ) $(PERLDLL_RES) Extensions_static 1475ifeq ($(CCTYPE),GCC) 1476 $(LINK32) -shared -o $@ $(BLINK_FLAGS) \ 1477 $(PERLDLL_OBJ) $(shell type Extensions_static) $(LIBFILES) $(PERLEXPLIB) 1478else 1479 $(LINK32) -dll -out:$@ $(BLINK_FLAGS) \ 1480 @Extensions_static \ 1481 $(DELAYLOAD) $(LIBFILES) \ 1482 $(PERLDLL_RES) $(PERLDLL_OBJ) $(PERLEXPLIB) 1483endif 1484 1485$(PERLSTATICLIB): $(PERLDLL_OBJ) Extensions_static 1486ifeq ($(CCTYPE),GCC) 1487 $(LIB32) $(LIB_FLAGS) $@ $(PERLDLL_OBJ) 1488 if exist $(STATICDIR) rmdir /s /q $(STATICDIR) 1489 for %%i in ($(shell type Extensions_static)) do \ 1490 @mkdir $(STATICDIR) && cd $(STATICDIR) && \ 1491 $(ARCHPREFIX)ar x ..\%%i && \ 1492 $(ARCHPREFIX)ar q ..\$@ *$(o) && \ 1493 cd .. && rmdir /s /q $(STATICDIR) 1494else 1495 $(LIB32) $(LIB_FLAGS) -out:$@ @Extensions_static \ 1496 $(PERLDLL_OBJ) 1497endif 1498 $(XCOPY) $(PERLSTATICLIB) $(COREDIR) 1499 1500$(PERLEXE_RES): perlexe.rc $(PERLEXE_MANIFEST) $(PERLEXE_ICO) 1501 1502$(MINIDIR)\globals$(o) : $(GENERATED_HEADERS) 1503 1504$(UUDMAP_H) $(MG_DATA_H) : $(BITCOUNT_H) 1505 1506$(BITCOUNT_H) : $(GENUUDMAP) 1507 $(GENUUDMAP) $(GENERATED_HEADERS) 1508 1509$(GENUUDMAP) : ..\mg_raw.h 1510ifeq ($(CCTYPE),GCC) 1511 $(LINK32) $(CFLAGS_O) -o..\generate_uudmap.exe ..\generate_uudmap.c \ 1512 $(BLINK_FLAGS) $(LIBFILES) 1513else 1514 $(CC) $(CFLAGS_O) $(PDBOUT) -Fe..\generate_uudmap.exe ..\generate_uudmap.c -link $(LIBFILES) $(BLINK_FLAGS) 1515endif 1516 1517.PHONY: MakePPPort 1518 1519MakePPPort : $(HAVEMINIPERL) $(CONFIGPM) 1520 $(MINIPERL) -I..\lib ..\mkppport 1521 1522# also known as $(HAVE_COREDIR) 1523.coreheaders : $(CORE_H) 1524 $(XCOPY) *.h $(COREDIR)\\*.* 1525 $(RCOPY) include $(COREDIR)\\*.* 1526 $(XCOPY) ..\\*.h $(COREDIR)\\*.* 1527 rem. > $@ 1528 1529perlmain$(o) : runperl.c $(CONFIGPM) 1530 $(CC) -I$(FULLDIR) $(subst -DPERLDLL,-UPERLDLL,$(CFLAGS_O)) $(OBJOUT_FLAG)$@ $(PDBOUT) -c runperl.c 1531 1532perlmainst$(o) : runperl.c $(CONFIGPM) 1533 $(CC) -I$(FULLDIR) $(CFLAGS_O) $(OBJOUT_FLAG)$@ $(PDBOUT) -c runperl.c 1534 1535$(PERLEXE): $(CONFIGPM) $(PERLEXE_OBJ) $(PERLEXE_RES) $(PERLIMPLIB) 1536ifeq ($(CCTYPE),GCC) 1537 $(LINK32) -mconsole -o $@ $(BLINK_FLAGS) \ 1538 $(PERLEXE_OBJ) $(PERLEXE_RES) $(PERLIMPLIB) $(LIBFILES) 1539else 1540 $(LINK32) -out:$@ $(BLINK_FLAGS) \ 1541 $(PERLEXE_OBJ) $(PERLEXE_RES) $(PERLIMPLIB) $(LIBFILES) $(SETARGV_OBJ) 1542endif 1543 copy $(PERLEXE) $(WPERLEXE) 1544 $(MINIPERL) -I..\lib bin\exetype.pl $(WPERLEXE) WINDOWS 1545 1546$(PERLEXESTATIC): $(PERLSTATICLIB) $(CONFIGPM) $(PERLEXEST_OBJ) $(PERLEXE_RES) 1547ifeq ($(CCTYPE),GCC) 1548 $(LINK32) -mconsole -o $@ $(BLINK_FLAGS) \ 1549 $(PERLEXEST_OBJ) $(PERLEXE_RES) $(PERLSTATICLIB) $(LIBFILES) 1550else 1551 $(LINK32) -out:$@ $(BLINK_FLAGS) \ 1552 $(PERLEXEST_OBJ) $(PERLEXE_RES) $(PERLSTATICLIB) $(LIBFILES) $(SETARGV_OBJ) 1553endif 1554 1555#------------------------------------------------------------------------------- 1556# There's no direct way to mark a dependency on 1557# DynaLoader.pm, so this will have to do 1558 1559#most of deps of this target are in DYNALOADER and therefore omitted here 1560Extensions : $(PERLDEP) $(DYNALOADER) Extension_lib $(GLOBEXE) MakePPPort 1561 $(MINIPERL) -I..\lib ..\make_ext.pl "MAKE=$(PLMAKE)" --dir=$(CPANDIR) --dir=$(DISTDIR) --dir=$(EXTDIR) --dynamic !Unicode/Normalize 1562 1563Normalize_static : $(CONFIGPM) $(GLOBEXE) $(HAVE_COREDIR) $(UNIDATAFILES) 1564 $(MINIPERL) -I..\lib ..\make_ext.pl "MAKE=$(PLMAKE)" --dir=$(CPANDIR) --dir=$(DISTDIR) --dir=$(EXTDIR) --static +Unicode/Normalize 1565 1566Normalize_dyn : $(PERLDEP) $(DYNALOADER) $(GLOBEXE) $(UNIDATAFILES) 1567 $(MINIPERL) -I..\lib ..\make_ext.pl "MAKE=$(PLMAKE)" --dir=$(CPANDIR) --dir=$(DISTDIR) --dir=$(EXTDIR) --dynamic +Unicode/Normalize 1568 1569Extensions_reonly : $(PERLDEP) $(DYNALOADER) 1570 $(MINIPERL) -I..\lib ..\make_ext.pl "MAKE=$(PLMAKE)" --dir=$(CPANDIR) --dir=$(DISTDIR) --dir=$(EXTDIR) --dynamic +re 1571 1572Exts_static_general : ..\make_ext.pl $(CONFIGPM) Extension_lib $(GLOBEXE) $(HAVE_COREDIR) MakePPPort 1573 $(MINIPERL) -I..\lib ..\make_ext.pl "MAKE=$(PLMAKE)" --dir=$(CPANDIR) --dir=$(DISTDIR) --dir=$(EXTDIR) --static !Unicode/Normalize 1574 1575Extensions_static : list_static_libs.pl Exts_static_general $(NORMALIZE_STATIC) 1576 $(MINIPERL) -I..\lib list_static_libs.pl -o Extensions_static 1577 1578Extensions_nonxs : ..\make_ext.pl ..\pod\perlfunc.pod $(CONFIGPM) $(GLOBEXE) 1579 $(MINIPERL) -I..\lib ..\make_ext.pl "MAKE=$(PLMAKE)" --dir=$(CPANDIR) --dir=$(DISTDIR) --dir=$(EXTDIR) --nonxs !libs 1580 1581Extension_lib : ..\make_ext.pl $(CONFIGPM) 1582 $(MINIPERL) -I..\lib ..\make_ext.pl "MAKE=$(PLMAKE)" --dir=$(CPANDIR) --dir=$(DISTDIR) --dir=$(EXTDIR) lib 1583 1584#lib must be built, it can't be buildcustomize.pl-ed, and is required for XS building 1585$(DYNALOADER) : ..\make_ext.pl $(CONFIGPM) $(HAVE_COREDIR) 1586 $(MINIPERL) -I..\lib ..\make_ext.pl "MAKE=$(PLMAKE)" --dir=$(EXTDIR) --dir=$(DISTDIR) --dynaloader 1587 1588Extensions_clean : 1589 -if exist $(MINIPERL) $(MINIPERL) -I..\lib ..\make_ext.pl "MAKE=$(PLMAKE)" --dir=$(CPANDIR) --dir=$(DISTDIR) --dir=$(EXTDIR) --all --target=clean 1590 1591Extensions_realclean : 1592 -if exist $(MINIPERL) $(MINIPERL) -I..\lib ..\make_ext.pl "MAKE=$(PLMAKE)" --dir=$(CPANDIR) --dir=$(DISTDIR) --dir=$(EXTDIR) --all --target=realclean 1593 1594# all PE files need to be built by the time this target runs, PP files can still 1595# be running in parallel like UNIDATAFILES, this target a placeholder for the 1596# future 1597ifeq ($(PERLSTATIC),static) 1598rebasePE : Extensions $(PERLDLL) $(PERLEXE) $(PERLEXESTATIC) 1599else 1600rebasePE : Extensions $(PERLDLL) $(NORMALIZE_DYN) $(PERLEXE) 1601endif 1602 $(NOOP) 1603 1604#------------------------------------------------------------------------------- 1605 1606doc: $(PERLEXE) $(PERLDLL) ..\pod\perltoc.pod 1607 $(PERLEXE) -I..\lib ..\installhtml --podroot=.. --htmldir=$(HTMLDIR) \ 1608 --podpath=pod:lib:utils --htmlroot="file://$(subst :,|,$(INST_HTML))"\ 1609 --recurse 1610 1611..\utils\Makefile: $(CONFIGPM) ..\utils\Makefile.PL 1612 $(MINIPERL) -I..\lib ..\utils\Makefile.PL .. 1613 1614# Note that this next section is parsed (and regenerated) by pod/buildtoc 1615# so please check that script before making structural changes here 1616utils: $(HAVEMINIPERL) ..\utils\Makefile 1617 cd ..\utils && $(PLMAKE) PERL=$(MINIPERL) 1618 copy ..\README.aix ..\pod\perlaix.pod 1619 copy ..\README.amiga ..\pod\perlamiga.pod 1620 copy ..\README.android ..\pod\perlandroid.pod 1621 copy ..\README.bs2000 ..\pod\perlbs2000.pod 1622 copy ..\README.cn ..\pod\perlcn.pod 1623 copy ..\README.cygwin ..\pod\perlcygwin.pod 1624 copy ..\README.freebsd ..\pod\perlfreebsd.pod 1625 copy ..\README.haiku ..\pod\perlhaiku.pod 1626 copy ..\README.hpux ..\pod\perlhpux.pod 1627 copy ..\README.hurd ..\pod\perlhurd.pod 1628 copy ..\README.irix ..\pod\perlirix.pod 1629 copy ..\README.jp ..\pod\perljp.pod 1630 copy ..\README.ko ..\pod\perlko.pod 1631 copy ..\README.linux ..\pod\perllinux.pod 1632 copy ..\README.macosx ..\pod\perlmacosx.pod 1633 copy ..\README.openbsd ..\pod\perlopenbsd.pod 1634 copy ..\README.os2 ..\pod\perlos2.pod 1635 copy ..\README.os390 ..\pod\perlos390.pod 1636 copy ..\README.os400 ..\pod\perlos400.pod 1637 copy ..\README.plan9 ..\pod\perlplan9.pod 1638 copy ..\README.qnx ..\pod\perlqnx.pod 1639 copy ..\README.riscos ..\pod\perlriscos.pod 1640 copy ..\README.solaris ..\pod\perlsolaris.pod 1641 copy ..\README.synology ..\pod\perlsynology.pod 1642 copy ..\README.tru64 ..\pod\perltru64.pod 1643 copy ..\README.tw ..\pod\perltw.pod 1644 copy ..\README.vos ..\pod\perlvos.pod 1645 copy ..\README.win32 ..\pod\perlwin32.pod 1646 copy ..\pod\perldelta.pod ..\pod\perl5401delta.pod 1647 $(MINIPERL) -I..\lib $(PL2BAT) $(UTILS) 1648 $(MINIPERL) -I..\lib ..\autodoc.pl -c "win32\$(CONFIG_H)" .. 1649 $(MINIPERL) -I..\lib ..\pod\perlmodlib.PL -q .. 1650 1651..\pod\perltoc.pod: $(PERLEXE) $(PERLDLL) Extensions Extensions_nonxs $(NORMALIZE_DYN) utils 1652 $(PERLEXE) -f ..\pod\buildtoc -q 1653 1654# Note that the pod cleanup in this next section is parsed (and regenerated 1655# by pod/buildtoc so please check that script before making changes here 1656 1657distclean: realclean 1658 -del /f $(MINIPERL) $(PERLEXE) $(PERLDLL) $(GLOBEXE) \ 1659 $(PERLIMPLIB) ..\miniperl$(a) $(PERLEXESTATIC) $(PERLSTATICLIB) 1660 -del /f $(LIBDIR)\Encode.pm $(LIBDIR)\encoding.pm $(LIBDIR)\Errno.pm 1661 -del /f $(LIBDIR)\Config.pod $(LIBDIR)\POSIX.pod $(LIBDIR)\threads.pm 1662 -del /f $(LIBDIR)\.exists $(LIBDIR)\attributes.pm $(LIBDIR)\DynaLoader.pm 1663 -del /f $(LIBDIR)\Fcntl.pm $(LIBDIR)\IO.pm $(LIBDIR)\Opcode.pm 1664 -del /f $(LIBDIR)\ops.pm $(LIBDIR)\Safe.pm 1665 -del /f $(LIBDIR)\SDBM_File.pm $(LIBDIR)\Socket.pm $(LIBDIR)\POSIX.pm 1666 -del /f $(LIBDIR)\B.pm $(LIBDIR)\O.pm $(LIBDIR)\re.pm 1667 -del /f $(LIBDIR)\File\Glob.pm 1668 -del /f $(LIBDIR)\Sys\Hostname.pm 1669 -del /f $(LIBDIR)\Time\HiRes.pm 1670 -del /f $(LIBDIR)\Unicode\Normalize.pm 1671 -del /f $(LIBDIR)\Math\BigInt\FastCalc.pm 1672 -del /f $(LIBDIR)\Storable.pm $(LIBDIR)\Storable\Limit.pm 1673 -del /f $(LIBDIR)\Win32.pm 1674 -del /f $(LIBDIR)\Win32CORE.pm 1675 -del /f $(LIBDIR)\Win32API\File.pm 1676 -del /f $(LIBDIR)\Win32API\File\cFile.pc 1677 -del /f $(LIBDIR)\buildcustomize.pl 1678 -del /f $(DISTDIR)\XSLoader\XSLoader.pm 1679 -del /f *.def *.map 1680 -if exist $(LIBDIR)\Amiga rmdir /s /q $(LIBDIR)\Amiga 1681 -if exist $(LIBDIR)\App rmdir /s /q $(LIBDIR)\App 1682 -if exist $(LIBDIR)\Archive rmdir /s /q $(LIBDIR)\Archive 1683 -if exist $(LIBDIR)\Attribute rmdir /s /q $(LIBDIR)\Attribute 1684 -if exist $(LIBDIR)\autodie rmdir /s /q $(LIBDIR)\autodie 1685 -if exist $(LIBDIR)\Carp rmdir /s /q $(LIBDIR)\Carp 1686 -if exist $(LIBDIR)\Compress rmdir /s /q $(LIBDIR)\Compress 1687 -if exist $(LIBDIR)\Config\Perl rmdir /s /q $(LIBDIR)\Config\Perl 1688 -if exist $(LIBDIR)\CPAN rmdir /s /q $(LIBDIR)\CPAN 1689 -if exist $(LIBDIR)\Data rmdir /s /q $(LIBDIR)\Data 1690 -if exist $(LIBDIR)\Devel rmdir /s /q $(LIBDIR)\Devel 1691 -if exist $(LIBDIR)\Digest rmdir /s /q $(LIBDIR)\Digest 1692 -if exist $(LIBDIR)\Encode rmdir /s /q $(LIBDIR)\Encode 1693 -if exist $(LIBDIR)\encoding rmdir /s /q $(LIBDIR)\encoding 1694 -if exist $(LIBDIR)\Exporter rmdir /s /q $(LIBDIR)\Exporter 1695 -if exist $(LIBDIR)\ExtUtils\CBuilder rmdir /s /q $(LIBDIR)\ExtUtils\CBuilder 1696 -if exist $(LIBDIR)\ExtUtils\Command rmdir /s /q $(LIBDIR)\ExtUtils\Command 1697 -if exist $(LIBDIR)\ExtUtils\Constant rmdir /s /q $(LIBDIR)\ExtUtils\Constant 1698 -if exist $(LIBDIR)\ExtUtils\Liblist rmdir /s /q $(LIBDIR)\ExtUtils\Liblist 1699 -if exist $(LIBDIR)\ExtUtils\MakeMaker rmdir /s /q $(LIBDIR)\ExtUtils\MakeMaker 1700 -if exist $(LIBDIR)\ExtUtils\ParseXS rmdir /s /q $(LIBDIR)\ExtUtils\ParseXS 1701 -if exist $(LIBDIR)\ExtUtils\Typemaps rmdir /s /q $(LIBDIR)\ExtUtils\Typemaps 1702 -if exist $(LIBDIR)\File\Spec rmdir /s /q $(LIBDIR)\File\Spec 1703 -if exist $(LIBDIR)\Filter rmdir /s /q $(LIBDIR)\Filter 1704 -if exist $(LIBDIR)\Getopt\Long rmdir /s /q $(LIBDIR)\Getopt\Long 1705 -if exist $(LIBDIR)\Hash rmdir /s /q $(LIBDIR)\Hash 1706 -if exist $(LIBDIR)\HTTP rmdir /s /q $(LIBDIR)\HTTP 1707 -if exist $(LIBDIR)\I18N rmdir /s /q $(LIBDIR)\I18N 1708 -if exist $(LIBDIR)\inc rmdir /s /q $(LIBDIR)\inc 1709 -if exist $(LIBDIR)\IO rmdir /s /q $(LIBDIR)\IO 1710 -if exist $(LIBDIR)\IPC rmdir /s /q $(LIBDIR)\IPC 1711 -if exist $(LIBDIR)\JSON rmdir /s /q $(LIBDIR)\JSON 1712 -if exist $(LIBDIR)\List rmdir /s /q $(LIBDIR)\List 1713 -if exist $(LIBDIR)\Locale rmdir /s /q $(LIBDIR)\Locale 1714 -if exist $(LIBDIR)\Math rmdir /s /q $(LIBDIR)\Math 1715 -if exist $(LIBDIR)\Memoize rmdir /s /q $(LIBDIR)\Memoize 1716 -if exist $(LIBDIR)\MIME rmdir /s /q $(LIBDIR)\MIME 1717 -if exist $(LIBDIR)\Module rmdir /s /q $(LIBDIR)\Module 1718 -if exist $(LIBDIR)\Net\FTP rmdir /s /q $(LIBDIR)\Net\FTP 1719 -if exist $(LIBDIR)\OpenBSD rmdir /s /q $(LIBDIR)\OpenBSD 1720 -if exist $(LIBDIR)\Params rmdir /s /q $(LIBDIR)\Params 1721 -if exist $(LIBDIR)\Parse rmdir /s /q $(LIBDIR)\Parse 1722 -if exist $(LIBDIR)\Perl rmdir /s /q $(LIBDIR)\Perl 1723 -if exist $(LIBDIR)\PerlIO rmdir /s /q $(LIBDIR)\PerlIO 1724 -if exist $(LIBDIR)\Pod\Html rmdir /s /q $(LIBDIR)\Pod\Html 1725 -if exist $(LIBDIR)\Pod\Perldoc rmdir /s /q $(LIBDIR)\Pod\Perldoc 1726 -if exist $(LIBDIR)\Pod\Simple rmdir /s /q $(LIBDIR)\Pod\Simple 1727 -if exist $(LIBDIR)\Pod\Text rmdir /s /q $(LIBDIR)\Pod\Text 1728 -if exist $(LIBDIR)\Scalar rmdir /s /q $(LIBDIR)\Scalar 1729 -if exist $(LIBDIR)\Search rmdir /s /q $(LIBDIR)\Search 1730 -if exist $(LIBDIR)\Sub rmdir /s /q $(LIBDIR)\Sub 1731 -if exist $(LIBDIR)\Sys rmdir /s /q $(LIBDIR)\Sys 1732 -if exist $(LIBDIR)\TAP rmdir /s /q $(LIBDIR)\TAP 1733 -if exist $(LIBDIR)\Term rmdir /s /q $(LIBDIR)\Term 1734 -if exist $(LIBDIR)\Test rmdir /s /q $(LIBDIR)\Test 1735 -if exist $(LIBDIR)\Test2 rmdir /s /q $(LIBDIR)\Test2 1736 -if exist $(LIBDIR)\Text rmdir /s /q $(LIBDIR)\Text 1737 -if exist $(LIBDIR)\Thread rmdir /s /q $(LIBDIR)\Thread 1738 -if exist $(LIBDIR)\threads rmdir /s /q $(LIBDIR)\threads 1739 -if exist $(LIBDIR)\Tie\Hash rmdir /s /q $(LIBDIR)\Tie\Hash 1740 -if exist $(LIBDIR)\Unicode\Collate rmdir /s /q $(LIBDIR)\Unicode\Collate 1741 -if exist $(LIBDIR)\Unicode\Collate\Locale rmdir /s /q $(LIBDIR)\Unicode\Collate\Locale 1742 -if exist $(LIBDIR)\version rmdir /s /q $(LIBDIR)\version 1743 -if exist $(LIBDIR)\VMS rmdir /s /q $(LIBDIR)\VMS 1744 -if exist $(LIBDIR)\Win32API rmdir /s /q $(LIBDIR)\Win32API 1745 -if exist $(LIBDIR)\XS rmdir /s /q $(LIBDIR)\XS 1746 -cd $(PODDIR) && del /f *.html *.bat roffitall \ 1747 perl5401delta.pod perlaix.pod perlamiga.pod perlandroid.pod \ 1748 perlapi.pod perlbs2000.pod perlcn.pod perlcygwin.pod \ 1749 perlfreebsd.pod perlhaiku.pod perlhpux.pod perlhurd.pod \ 1750 perlintern.pod perlirix.pod perljp.pod perlko.pod perllinux.pod \ 1751 perlmacosx.pod perlmodlib.pod perlopenbsd.pod perlos2.pod \ 1752 perlos390.pod perlos400.pod perlplan9.pod perlqnx.pod \ 1753 perlriscos.pod perlsolaris.pod perlsynology.pod perltoc.pod \ 1754 perltru64.pod perltw.pod perlvos.pod perlwin32.pod 1755 -cd ..\utils && del /f h2ph splain perlbug pl2pm h2xs \ 1756 perldoc perlivp libnetcfg enc2xs encguess piconv cpan *.bat \ 1757 xsubpp pod2html instmodsh json_pp prove ptar ptardiff ptargrep shasum corelist zipdetails 1758 -del /f ..\config.sh perlmain.c dlutils.c config.h.new \ 1759 perlmainst.c 1760 -del /f $(CONFIGPM) 1761 -del /f ..\lib\Config_git.pl 1762 -del /f "bin\*.bat" 1763 -del /f perllibst.h 1764 -del /f $(PERLEXE_RES) perl.base 1765 -cd .. && del /s *$(a) *.map *.pdb *.ilk *.bs *$(o) .exists pm_to_blib ppport.h 1766 -cd $(EXTDIR) && del /s *.def Makefile Makefile.old 1767 -cd $(DISTDIR) && del /s *.def Makefile Makefile.old 1768 -cd $(CPANDIR) && del /s *.def Makefile Makefile.old 1769 -del /s ..\utils\Makefile 1770 -if exist $(AUTODIR) rmdir /s /q $(AUTODIR) 1771 -if exist $(COREDIR) rmdir /s /q $(COREDIR) 1772 -if exist pod2htmd.tmp del pod2htmd.tmp 1773 -if exist $(HTMLDIR) rmdir /s /q $(HTMLDIR) 1774 -del /f ..\t\test_state 1775 1776install : all installbare installhtml 1777 1778installbare : utils ..\pod\perltoc.pod 1779 $(PERLEXE) ..\installperl 1780 if exist $(WPERLEXE) $(XCOPY) $(WPERLEXE) $(INST_BIN)\$(NULL) 1781 if exist $(PERLEXESTATIC) $(XCOPY) $(PERLEXESTATIC) $(INST_BIN)\$(NULL) 1782 $(XCOPY) $(GLOBEXE) $(INST_BIN)\$(NULL) 1783 if exist ..\perl*.pdb $(XCOPY) ..\perl*.pdb $(INST_BIN)\$(NULL) 1784 $(XCOPY) "bin\*.bat" $(INST_SCRIPT)\$(NULL) 1785 1786installhtml : doc 1787 $(RCOPY) $(HTMLDIR)\*.* $(INST_HTML)\$(NULL) 1788 1789inst_lib : $(CONFIGPM) 1790 $(RCOPY) ..\lib $(INST_LIB)\$(NULL) 1791 1792$(UNIDATAFILES) : ..\pod\perluniprops.pod 1793 1794..\pod\perluniprops.pod: ..\lib\unicore\mktables $(CONFIGPM) 1795 $(MINIPERL) -I..\lib ..\lib\unicore\mktables -C ..\lib\unicore -P ..\pod -maketest -makelist -p 1796 1797minitest : $(HAVEMINIPERL) $(GLOBEXE) $(CONFIGPM) $(UNIDATAFILES) utils 1798 $(XCOPY) $(MINIPERL) ..\t\$(NULL) 1799 if exist ..\t\perl.exe del /f ..\t\perl.exe 1800 rename ..\t\miniperl.exe perl.exe 1801 $(XCOPY) $(GLOBEXE) ..\t\$(NULL) 1802 attrib -r "..\t\*.*" 1803 cd ..\t && \ 1804 $(MINIPERL) -I..\lib harness base/*.t comp/*.t cmd/*.t io/*.t opbasic/*.t op/*.t pragma/*.t 1805 1806test-prep : all utils ..\pod\perltoc.pod $(TESTPREPGCC) 1807 $(XCOPY) $(PERLEXE) ..\t\$(NULL) 1808 $(XCOPY) $(PERLDLL) ..\t\$(NULL) 1809 $(XCOPY) $(GLOBEXE) ..\t\$(NULL) 1810# If building with gcc versions 4.x.x or greater, then 1811# the GCC helper DLL will also need copied to the test directory. 1812# The name of the dll can change, depending upon which vendor has supplied 1813# your compiler, and upon the values of "x". 1814# libstdc++-6.dll is copied if it exists as it, too, may then be needed. 1815# Without this copying, the op/taint.t test script will fail. 1816 1817ifeq ($(CCTYPE),GCC) 1818 1819test-prep-gcc : 1820 if exist $(CCDLLDIR)\libgcc_s_seh-1.dll $(XCOPY) $(CCDLLDIR)\libgcc_s_seh-1.dll ..\t\$(NULL) 1821 if exist $(CCDLLDIR)\libgcc_s_sjlj-1.dll $(XCOPY) $(CCDLLDIR)\libgcc_s_sjlj-1.dll ..\t\$(NULL) 1822 if exist $(CCDLLDIR)\libgcc_s_dw2-1.dll $(XCOPY) $(CCDLLDIR)\libgcc_s_dw2-1.dll ..\t\$(NULL) 1823 if exist $(CCDLLDIR)\libstdc++-6.dll $(XCOPY) $(CCDLLDIR)\libstdc++-6.dll ..\t\$(NULL) 1824 if exist $(CCDLLDIR)\libwinpthread-1.dll $(XCOPY) $(CCDLLDIR)\libwinpthread-1.dll ..\t\$(NULL) 1825 if exist $(CCDLLDIR)\libquadmath-0.dll $(XCOPY) $(CCDLLDIR)\libquadmath-0.dll ..\t\$(NULL) 1826 if exist $(CCDLLDIR)\libmcfgthread-1.dll $(XCOPY) $(CCDLLDIR)\libmcfgthread-1.dll ..\t\$(NULL) 1827 1828endif 1829 1830test : test-prep 1831 set PERL_STATIC_EXT=$(STATIC_EXT) && \ 1832 cd ..\t && perl.exe harness $(TEST_ARGS) $(TEST_SWITCHES) $(TEST_FILES) 1833 1834test_porting : test-prep 1835 set PERL_STATIC_EXT=$(STATIC_EXT) && \ 1836 cd ..\t && perl.exe harness $(TEST_ARGS) $(TEST_SWITCHES) porting\*.t ..\lib\diagnostics.t 1837 1838test-reonly : reonly utils 1839 $(XCOPY) $(PERLEXE) ..\t\$(NULL) 1840 $(XCOPY) $(PERLDLL) ..\t\$(NULL) 1841 $(XCOPY) $(GLOBEXE) ..\t\$(NULL) 1842 cd ..\t && perl.exe harness $(OPT) -re \bpat\\/ $(EXTRA) 1843 1844regen : 1845 cd .. && regen.pl 1846 1847test-notty : test-prep 1848 set PERL_STATIC_EXT=$(STATIC_EXT) && \ 1849 set PERL_SKIP_TTY_TEST=1 && \ 1850 cd ..\t && perl.exe harness $(TEST_ARGS) $(TEST_SWITCHES) $(TEST_FILES) 1851 1852_test : 1853 $(XCOPY) $(PERLEXE) ..\t\$(NULL) 1854 $(XCOPY) $(PERLDLL) ..\t\$(NULL) 1855 $(XCOPY) $(GLOBEXE) ..\t\$(NULL) 1856 set PERL_STATIC_EXT=$(STATIC_EXT) && \ 1857 cd ..\t && perl.exe harness $(TEST_ARGS) $(TEST_SWITCHES) $(TEST_FILES) 1858 1859_clean : 1860 -@erase miniperlmain$(o) 1861 -@erase $(MINIPERL) 1862 -@erase perlglob$(o) 1863 -@erase perlmain$(o) 1864 -@erase perlmainst$(o) 1865 -@erase /f $(CONFIG_H) 1866 -if exist $(FULLDIR) rmdir /s /q $(FULLDIR) 1867 -@erase /f ..\git_version.h 1868 -@erase $(GLOBEXE) 1869 -@erase $(PERLEXE) 1870 -@erase $(WPERLEXE) 1871 -@erase $(PERLEXESTATIC) 1872 -@erase $(PERLSTATICLIB) 1873 -@erase $(PERLDLL) 1874 -@erase $(CORE_OBJ) 1875 -@erase $(GENUUDMAP) $(GENUUDMAP_OBJ) $(GENERATED_HEADERS) 1876 -@erase .coreheaders 1877 -if exist $(MINIDIR) rmdir /s /q $(MINIDIR) 1878 -if exist $(UNIDATADIR1) rmdir /s /q $(UNIDATADIR1) 1879 -if exist $(UNIDATADIR2) rmdir /s /q $(UNIDATADIR2) 1880 -@erase $(UNIDATAFILES) 1881 -@erase $(WIN32_OBJ) 1882 -@erase $(DLL_OBJ) 1883 -@erase ..\*$(o) ..\*$(a) ..\*.exp *$(o) *$(a) *.exp *.res 1884 -@erase ..\t\*.exe ..\t\*.dll ..\t\*.bat 1885 -@erase *.ilk 1886 -@erase *.pdb ..\*.pdb 1887 -@erase Extensions_static 1888 1889clean : Extensions_clean _clean 1890 1891realclean : Extensions_realclean _clean 1892 1893# Handy way to run perlbug -ok without having to install and run the 1894# installed perlbug. We don't re-run the tests here - we trust the user. 1895# Please *don't* use this unless all tests pass. 1896# If you want to report test failures, use "gmake nok" instead. 1897ok: utils $(PERLEXE) $(PERLDLL) Extensions_nonxs Extensions 1898 $(PERLEXE) ..\utils\perlbug -ok -s "(UNINSTALLED)" 1899 1900okfile: utils $(PERLEXE) $(PERLDLL) Extensions_nonxs Extensions 1901 $(PERLEXE) ..\utils\perlbug -ok -s "(UNINSTALLED)" -F perl.ok 1902 1903nok: utils $(PERLEXE) $(PERLDLL) Extensions_nonxs Extensions 1904 $(PERLEXE) ..\utils\perlbug -nok -s "(UNINSTALLED)" 1905 1906nokfile: utils $(PERLEXE) $(PERLDLL) Extensions_nonxs Extensions 1907 $(PERLEXE) ..\utils\perlbug -nok -s "(UNINSTALLED)" -F perl.nok 1908 1909# prevent implicit rule 1910%.c : %.y 1911