X-Git-Url: https://perl5.git.perl.org/perl5.git/blobdiff_plain/cf73cedaf40b99f39f3b4c5d0fa1aa0f125c73e3..16279618f4fddf32c6336e8b43059c0392284359:/win32/makefile.mk diff --git a/win32/makefile.mk b/win32/makefile.mk index f41871e..de670b5 100644 --- a/win32/makefile.mk +++ b/win32/makefile.mk @@ -6,7 +6,7 @@ # Windows SDK 64-bit compiler and tools # # This is set up to build a perl.exe that runs off a shared library -# (perl523.dll). Also makes individual DLLs for the XS extensions. +# (perl527.dll). Also makes individual DLLs for the XS extensions. # ## @@ -44,7 +44,7 @@ INST_TOP *= $(INST_DRV)\perl # versioned installation can be obtained by setting INST_TOP above to a # path that includes an arbitrary version string. # -#INST_VER *= \5.23.1 +#INST_VER *= \5.27.0 # # Comment this out if you DON'T want your perl installation to have @@ -108,38 +108,55 @@ USE_LARGE_FILES *= define #USE_LONG_DOUBLE *=define # +# Comment this out if you want the legacy default behavior of including '.' at +# the end of @INC. +# +DEFAULT_INC_EXCLUDES_DOT *= define + +# +# Uncomment this if you want to disable looking up values from +# HKEY_CURRENT_USER\Software\Perl and HKEY_LOCAL_MACHINE\Software\Perl in +# the Registry. +# +#USE_NO_REGISTRY *=define + +# # uncomment exactly one of the following # -# Visual C++ 6.x (aka Visual C++ 98) +# Visual C++ 6.0 (aka Visual C++ 98) #CCTYPE *= MSVC60 -# Visual C++ .NET 2002/2003 (aka Visual C++ 7.x) (full version) +# Visual C++ .NET 2002/2003 (aka Visual C++ 7.0/7.1) (full version) #CCTYPE *= MSVC70 -# Visual C++ Toolkit 2003 (aka Visual C++ 7.x) (free command-line tools) +# Visual C++ Toolkit 2003 (aka Visual C++ 7.1) (free command-line tools) #CCTYPE *= MSVC70FREE # Windows Server 2003 SP1 Platform SDK (April 2005) #CCTYPE = SDK2003SP1 -# Visual C++ 2005 (aka Visual C++ 8.x) (full version) +# Visual C++ 2005 (aka Visual C++ 8.0) (full version) #CCTYPE *= MSVC80 -# Visual C++ 2005 Express Edition (aka Visual C++ 8.x) (free version) +# Visual C++ 2005 Express Edition (aka Visual C++ 8.0) (free version) #CCTYPE *= MSVC80FREE -# Visual C++ 2008 (aka Visual C++ 9.x) (full version) +# Visual C++ 2008 (aka Visual C++ 9.0) (full version) #CCTYPE *= MSVC90 -# Visual C++ 2008 Express Edition (aka Visual C++ 9.x) (free version) +# Visual C++ 2008 Express Edition (aka Visual C++ 9.0) (free version) #CCTYPE *= MSVC90FREE -# Visual C++ 2010 (aka Visual C++ 10.x) (full version) +# Visual C++ 2010 (aka Visual C++ 10.0) (full version) #CCTYPE = MSVC100 -# Visual C++ 2010 Express Edition (aka Visual C++ 10.x) (free version) +# Visual C++ 2010 Express Edition (aka Visual C++ 10.0) (free version) #CCTYPE = MSVC100FREE -# Visual C++ 2012 (aka Visual C++ 11.x) (full version) +# Visual C++ 2012 (aka Visual C++ 11.0) (full version) #CCTYPE = MSVC110 -# Visual C++ 2012 Express Edition (aka Visual C++ 11.x) (free version) +# Visual C++ 2012 Express Edition (aka Visual C++ 11.0) (free version) #CCTYPE = MSVC110FREE -# Visual C++ 2013 (aka Visual C++ 12.x) (full version) +# Visual C++ 2013 (aka Visual C++ 12.0) (full version) #CCTYPE = MSVC120 -# Visual C++ 2013 Express Edition (aka Visual C++ 12.x) (free version) +# Visual C++ 2013 Express Edition (aka Visual C++ 12.0) (free version) #CCTYPE = MSVC120FREE +# Visual C++ 2015 (aka Visual C++ 14.0) (full version) +#CCTYPE = MSVC140 +# Visual C++ 2015 Express Edition (aka Visual C++ 14.0) (free version) +#CCTYPE = MSVC140FREE # MinGW or mingw-w64 with gcc-3.4.5 or later -CCTYPE *= GCC +#CCTYPE = GCC # # If you are using GCC, 4.3 or later by default we add the -fwrapv option. @@ -205,7 +222,7 @@ CCTYPE *= GCC # set this to additionally provide a statically linked perl-static.exe. # Note that dynamic loading will not work with this perl, so you must # include required modules statically using the STATIC_EXT or ALL_STATIC -# variables below. A static library perl523s.lib will also be created. +# variables below. A static library perl527s.lib will also be created. # Ordinary perl.exe is not affected by this option. # #BUILD_STATIC *= define @@ -226,11 +243,8 @@ CCTYPE *= GCC # so you may have to set CCHOME explicitly (spaces in the path name should # not be quoted) # -.IF "$(CCTYPE)" == "GCC" -CCHOME *= C:\MinGW -.ELSE -CCHOME *= $(MSVCDIR) -.ENDIF + +#CCHOME *= C:\MinGW # # uncomment this if you are using x86_64-w64-mingw32 cross-compiler @@ -240,20 +254,6 @@ CCHOME *= $(MSVCDIR) #GCCCROSS *= define # -# Following sets $Config{incpath} and $Config{libpth} -# - -.IF "$(GCCCROSS)" == "define" -CCINCDIR *= $(CCHOME)\x86_64-w64-mingw32\include -CCLIBDIR *= $(CCHOME)\x86_64-w64-mingw32\lib -CCDLLDIR *= $(CCLIBDIR) -.ELSE -CCINCDIR *= $(CCHOME)\include -CCLIBDIR *= $(CCHOME)\lib -CCDLLDIR *= $(CCHOME)\bin -.ENDIF - -# # Additional compiler flags can be specified here. # BUILDOPT *= $(BUILDOPTEXTRA) @@ -310,6 +310,9 @@ USE_IMP_SYS *= undef USE_LARGE_FILES *= undef USE_64_BIT_INT *= undef USE_LONG_DOUBLE *= undef +DEFAULT_INC_EXCLUDES_DOT *= undef +USE_NO_REGISTRY *= undef + .IF "$(USE_IMP_SYS)" == "define" PERL_MALLOC = undef @@ -343,8 +346,53 @@ BUILDOPT += -DPERL_IMPLICIT_CONTEXT BUILDOPT += -DPERL_IMPLICIT_SYS .ENDIF +.IF "$(USE_NO_REGISTRY)" != "undef" +BUILDOPT += -DWIN32_NO_REGISTRY +.ENDIF + +#no explicit CCTYPE given, do auto detection +.IF "$(CCTYPE)" == "" +GCCTARGET *= $(shell gcc -dumpmachine 2>NUL & exit /b 0) +#do we have a GCC? +.IF "$(GCCTARGET)" != "" +CCTYPE = GCC +.ELSE +#use var to capture 1st line only, not 8th token of lines 2 & 3 in cl.exe output +MSVCVER := $(shell (set MSVCVER=) & (for /f "tokens=8 delims=.^ " \ + %i in ('cl ^2^>^&1') do @if not defined MSVCVER set /A "MSVCVER=%i-6")) +CCTYPE := MSVC$(MSVCVER)0 +.ENDIF +.ENDIF + + +.IF "$(CCHOME)" == "" +.IF "$(CCTYPE)" == "GCC" +CCHOME *= C:\MinGW +.ELSE +CCHOME *= $(MSVCDIR) +.ENDIF +.ENDIF + +# +# Following sets $Config{incpath} and $Config{libpth} +# + +.IF "$(GCCCROSS)" == "define" +CCINCDIR *= $(CCHOME)\x86_64-w64-mingw32\include +CCLIBDIR *= $(CCHOME)\x86_64-w64-mingw32\lib +CCDLLDIR *= $(CCLIBDIR) +.ELSE +CCINCDIR *= $(CCHOME)\include +CCLIBDIR *= $(CCHOME)\lib +CCDLLDIR *= $(CCHOME)\bin +.ENDIF + PROCESSOR_ARCHITECTURE *= x86 +.IF "$(WIN64)" == "undef" +PROCESSOR_ARCHITECTURE = x86 +.ENDIF + .IF "$(WIN64)" == "" # When we are running from a 32bit cmd.exe on AMD64 then # PROCESSOR_ARCHITECTURE is set to x86 and PROCESSOR_ARCHITEW6432 @@ -468,7 +516,7 @@ a = .a # Options # -INCLUDES = -I.\include -I. -I.. -I$(COREDIR) +INCLUDES = -I.\include -I. -I.. DEFINES = -DWIN32 .IF "$(WIN64)" == "define" DEFINES += -DWIN64 -DCONSERVATIVE @@ -482,11 +530,9 @@ LIBC = #LIBC = -lmsvcrt # same libs as MSVC -LIBFILES = $(LIBC) \ - -lmoldname -lkernel32 -luser32 -lgdi32 \ - -lwinspool -lcomdlg32 -ladvapi32 -lshell32 -lole32 \ - -loleaut32 -lnetapi32 -luuid -lws2_32 -lmpr \ - -lwinmm -lversion -lodbc32 -lodbccp32 -lcomctl32 +LIBFILES = $(LIBC) -lmoldname -lkernel32 -luser32 -lgdi32 -lwinspool \ + -lcomdlg32 -ladvapi32 -lshell32 -lole32 -loleaut32 -lnetapi32 \ + -luuid -lws2_32 -lmpr -lwinmm -lversion -lodbc32 -lodbccp32 -lcomctl32 .IF "$(CFG)" == "Debug" OPTIMIZE = -g -O2 -DDEBUGGING @@ -508,6 +554,7 @@ LINK_FLAGS = $(LINK_DBG) -L"$(INST_COREDIR)" -L"$(CCLIBDIR)" OBJOUT_FLAG = -o EXEOUT_FLAG = -o LIBOUT_FLAG = +PDBOUT = BUILDOPT += -fno-strict-aliasing -mms-bitfields MINIBUILDOPT += -fno-strict-aliasing @@ -516,13 +563,22 @@ TESTPREPGCC = test-prep-gcc .ELSE -# All but the free version of VC++ 7.x can load DLLs on demand. Makes the test +# All but the free version of VC++ 7.1 can load DLLs on demand. Makes the test # suite run in about 10% less time. .IF "$(CCTYPE)" != "MSVC70FREE" +# If no registry, advapi32 is only used for Perl_pp_getlogin/getlogin/GetUserNameA +# which is rare to execute +.IF "$(USE_NO_REGISTRY)" != "undef" +DELAYLOAD = -DELAYLOAD:ws2_32.dll -DELAYLOAD:advapi32.dll delayimp.lib +MINIDELAYLOAD = +.ELSE DELAYLOAD = -DELAYLOAD:ws2_32.dll delayimp.lib +#miniperl never does any registry lookups +MINIDELAYLOAD = -DELAYLOAD:advapi32.dll +.ENDIF .ENDIF -# Visual C++ 2005 and 2008 (VC++ 8.x and 9.x) create manifest files for EXEs and +# Visual C++ 2005 and 2008 (VC++ 8.0 and 9.0) create manifest files for EXEs and # DLLs. These either need copying everywhere with the binaries, or else need # embedding in them otherwise MSVCR80.dll or MSVCR90.dll won't be found. For # simplicity, embed them if they exist (and delete them afterwards so that they @@ -555,13 +611,17 @@ RSC = rc # Options # -INCLUDES = -I$(COREDIR) -I.\include -I. -I.. +INCLUDES = -I.\include -I. -I.. #PCHFLAGS = -Fpc:\temp\vcmoduls.pch -YX DEFINES = -DWIN32 -D_CONSOLE -DNO_STRICT LOCDEFS = -DPERLDLL -DPERL_CORE CXX_FLAG = -TP -EHsc +.IF "$(CCTYPE)" == "MSVC140" || "$(CCTYPE)" == "MSVC140FREE" +LIBC = ucrt.lib +.ELSE LIBC = msvcrt.lib +.ENDIF .IF "$(CFG)" == "Debug" OPTIMIZE = -Od -MD -Zi -DDEBUGGING @@ -570,7 +630,11 @@ LINK_DBG = -debug OPTIMIZE = -Od -MD -Zi LINK_DBG = -debug .ELIF "$(CFG)" == "DebugFull" +.IF "$(CCTYPE)" == "MSVC140" || "$(CCTYPE)" == "MSVC140FREE" +LIBC = ucrtd.lib +.ELSE LIBC = msvcrtd.lib +.ENDIF OPTIMIZE = -Od -MDd -Zi -D_DEBUG -DDEBUGGING LINK_DBG = -debug .ELSE @@ -597,12 +661,17 @@ DEFINES += -DWIN64 -DCONSERVATIVE OPTIMIZE += -fp:precise .ENDIF -# For now, silence warnings from VC++ 8.x onwards about "unsafe" CRT functions +# For now, silence warnings from VC++ 8.0 onwards about "unsafe" CRT functions # and POSIX CRT function names being deprecated. .IF "$(PREMSVC80)" == "undef" DEFINES += -D_CRT_SECURE_NO_DEPRECATE -D_CRT_NONSTDC_NO_DEPRECATE .ENDIF +# Likewise for deprecated Winsock APIs in VC++ 14.0 for now. +.IF "$(CCTYPE)" == "MSVC140" || "$(CCTYPE)" == "MSVC140FREE" +DEFINES = $(DEFINES) -D_WINSOCK_DEPRECATED_NO_WARNINGS +.ENDIF + # In VS 2005 (VC++ 8.0) Microsoft changes time_t from 32-bit to # 64-bit, even in 32-bit mode. It also provides the _USE_32BIT_TIME_T # preprocessor option to revert back to the old functionality for @@ -617,11 +686,18 @@ BUILDOPT += -D_USE_32BIT_TIME_T .ENDIF .ENDIF -LIBBASEFILES = \ - oldnames.lib kernel32.lib user32.lib gdi32.lib winspool.lib \ - comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib \ - netapi32.lib uuid.lib ws2_32.lib mpr.lib winmm.lib \ - version.lib odbc32.lib odbccp32.lib comctl32.lib +LIBBASEFILES = oldnames.lib kernel32.lib user32.lib gdi32.lib winspool.lib \ + comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib \ + netapi32.lib uuid.lib ws2_32.lib mpr.lib winmm.lib version.lib \ + odbc32.lib odbccp32.lib comctl32.lib + +.IF "$(CCTYPE)" == "MSVC140" || "$(CCTYPE)" == "MSVC140FREE" +.IF "$(CFG)" == "DebugFull" +LIBBASEFILES += msvcrtd.lib vcruntimed.lib +.ELSE +LIBBASEFILES += msvcrt.lib vcruntime.lib +.ENDIF +.ENDIF # Avoid __intel_new_proc_init link error for libircmt. # libmmd is /MD equivelent, other variants exist. @@ -653,11 +729,11 @@ CFLAGS = $(EXTRACFLAGS) $(INCLUDES) $(DEFINES) $(LOCDEFS) \ LINK_FLAGS = -nologo -nodefaultlib $(LINK_DBG) \ -libpath:"$(INST_COREDIR)" \ -machine:$(PROCESSOR_ARCHITECTURE) -LIB_FLAGS = $(LIB_FLAGS) -nologo +LIB_FLAGS += -nologo OBJOUT_FLAG = -Fo EXEOUT_FLAG = -Fe LIBOUT_FLAG = /out: - +PDBOUT = -Fd$*.pdb TESTPREPGCC = .ENDIF @@ -665,27 +741,26 @@ TESTPREPGCC = CFLAGS_O = $(CFLAGS) $(BUILDOPT) .IF "$(PREMSVC80)" == "undef" -LINK_FLAGS += "/manifestdependency:type='Win32' name='Microsoft.Windows.Common-Controls' version='6.0.0.0' processorArchitecture='*' publicKeyToken='6595b64144ccf1df' language='*'" +PRIV_LINK_FLAGS += "/manifestdependency:type='Win32' name='Microsoft.Windows.Common-Controls' version='6.0.0.0' processorArchitecture='*' publicKeyToken='6595b64144ccf1df' language='*'" .ELSE RSC_FLAGS = -DINCLUDE_MANIFEST .ENDIF -# For XP support in >= 2013, subsystem is always in Config.pm LINK_FLAGS -# else subsystem is only needed for EXE building, not XS DLL building +# For XP support in >= VS 2013 (VC++ 12.0), subsystem is always in Config.pm +# LINK_FLAGS else subsystem is only needed for EXE building, not XS DLL building # Console vs GUI makes no difference for DLLs, so use default for cleaner # building cmd lines .IF "$(CCTYPE)" == "MSVC120" || "$(CCTYPE)" == "MSVC120FREE" \ - || "$(CCTYPE)" == "MSVC150" || "$(CCTYPE)" == "MSVC150FREE" + || "$(CCTYPE)" == "MSVC140" || "$(CCTYPE)" == "MSVC140FREE" .IF "$(WIN64)" == "define" LINK_FLAGS += -subsystem:console,"5.02" .ELSE LINK_FLAGS += -subsystem:console,"5.01" .ENDIF -PRIV_LINK_FLAGS = .ELIF "$(CCTYPE)" != "GCC" -PRIV_LINK_FLAGS = -subsystem:console +PRIV_LINK_FLAGS += -subsystem:console .ENDIF BLINK_FLAGS = $(PRIV_LINK_FLAGS) $(LINK_FLAGS) @@ -717,7 +792,7 @@ LKPOST = ) .SUFFIXES : .c .i $(o) .dll $(a) .exe .rc .res .c$(o): - $(CC) -c $(null,$(<:d) $(NULL) -I$(<:d)) $(CFLAGS_O) $(OBJOUT_FLAG)$@ $< + $(CC) -c $(null,$(<:d) $(NULL) -I$(<:d)) $(CFLAGS_O) $(OBJOUT_FLAG)$@ $(PDBOUT) $< .c.i: $(CC) -c $(null,$(<:d) $(NULL) -I$(<:d)) $(CFLAGS_O) -E $< >$@ @@ -744,14 +819,19 @@ $(o).dll: # # various targets + +#do not put $(MINIPERL) as a dep/prereq in a rule, instead put $(HAVEMINIPERL) +#$(MINIPERL) is not a buildable target, use "dmake mp" if you want to just build +#miniperl alone MINIPERL = ..\miniperl.exe +HAVEMINIPERL = ..\lib\buildcustomize.pl MINIDIR = .\mini PERLEXE = ..\perl.exe WPERLEXE = ..\wperl.exe PERLEXESTATIC = ..\perl-static.exe STATICDIR = .\static.tmp GLOBEXE = ..\perlglob.exe -CONFIGPM = ..\lib\Config.pm ..\lib\Config_heavy.pl +CONFIGPM = ..\lib\Config.pm GENUUDMAP = ..\generate_uudmap.exe .IF "$(BUILD_STATIC)" == "define" || "$(ALL_STATIC)" == "define" PERLSTATIC = static @@ -778,7 +858,7 @@ PERLDLL_RES = # This used to be $(PERLEXE), but at worst it is the .dll that they depend # on and really only the interface - i.e. the .def file used to export symbols # from the .dll -PERLDEP = perldll.def +PERLDEP = $(PERLIMPLIB) PL2BAT = bin\pl2bat.pl @@ -788,14 +868,12 @@ UTILS = \ ..\utils\splain \ ..\utils\perlbug \ ..\utils\pl2pm \ - ..\utils\c2ph \ - ..\utils\pstruct \ ..\utils\h2xs \ ..\utils\perldoc \ ..\utils\perlivp \ ..\utils\libnetcfg \ ..\utils\enc2xs \ - ..\utils\encguess \ + ..\utils\encguess \ ..\utils\piconv \ ..\utils\corelist \ ..\utils\cpan \ @@ -819,8 +897,8 @@ UTILS = \ CFGSH_TMPL = config.gc CFGH_TMPL = config_H.gc -PERLIMPLIB = ..\libperl523$(a) -PERLSTATICLIB = ..\libperl523s$(a) +PERLIMPLIB = $(COREDIR)\libperl527$(a) +PERLSTATICLIB = ..\libperl527s$(a) INT64 = long long .ELSE @@ -833,51 +911,67 @@ INT64 = __int64 # makedef.pl must be updated if this changes, and this should normally # only change when there is an incompatible revision of the public API. -PERLIMPLIB *= ..\perl523$(a) -PERLSTATICLIB *= ..\perl523s$(a) -PERLDLL = ..\perl523.dll +PERLIMPLIB *= $(COREDIR)\perl527$(a) +PERLEXPLIB *= $(COREDIR)\perl527.exp +PERLSTATICLIB *= ..\perl527s$(a) +PERLDLL = ..\perl527.dll + +#EUMM on Win32 isn't ready for parallel make, so only allow this file to be parallel +#$(MAKE) will contain the -P that this makefile was called with, which is bad for +#make_ext.pl since upto jobs*jobs processes will run instead of jobs +#also any recipie containing $(MAKE) is special cased by dmake to execute recipes +#containing $(MAKE) when "dmake -n" is executed, which causes recursive calls +#to dmake, which means "dmake -n" is then broken as a diagnostic tool since +#"dmake -n" will invoke all the make_ext.pl scripts build things instead of +#showing what to build since $(MAKE) is an arg to make_ext.pl, not an invocation +#of the dmake process +PLMAKE = dmake XCOPY = xcopy /f /r /i /d /y RCOPY = xcopy /f /r /i /e /d /y NOOP = @rem +#first ones are arrange in compile time order for faster parallel building +#see #123867 for details MICROCORE_SRC = \ + ..\toke.c \ + ..\regcomp.c \ + ..\regexec.c \ + ..\op.c \ + ..\sv.c \ + ..\pp.c \ + ..\pp_ctl.c \ + ..\pp_sys.c \ + ..\pp_pack.c \ + ..\pp_hot.c \ + ..\gv.c \ + ..\perl.c \ + ..\utf8.c \ + ..\dump.c \ + ..\hv.c \ ..\av.c \ ..\caretx.c \ ..\deb.c \ ..\doio.c \ ..\doop.c \ - ..\dump.c \ + ..\dquote.c \ ..\globals.c \ - ..\gv.c \ ..\mro_core.c \ - ..\hv.c \ ..\locale.c \ ..\keywords.c \ ..\mathoms.c \ ..\mg.c \ ..\numeric.c \ - ..\op.c \ ..\pad.c \ - ..\perl.c \ ..\perlapi.c \ ..\perly.c \ - ..\pp.c \ - ..\pp_ctl.c \ - ..\pp_hot.c \ - ..\pp_pack.c \ ..\pp_sort.c \ - ..\pp_sys.c \ ..\reentr.c \ - ..\regcomp.c \ - ..\regexec.c \ ..\run.c \ ..\scope.c \ - ..\sv.c \ ..\taint.c \ - ..\toke.c \ + ..\time64.c \ ..\universal.c \ - ..\utf8.c \ ..\util.c EXTRACORE_SRC += perllib.c @@ -943,6 +1037,8 @@ BITCOUNT_H = ..\bitcount.h MG_DATA_H = ..\mg_data.h GENERATED_HEADERS = $(UUDMAP_H) $(BITCOUNT_H) $(MG_DATA_H) +HAVE_COREDIR = .\.coreheaders + MICROCORE_OBJ = $(MICROCORE_SRC:db:+$(o)) CORE_OBJ = $(MICROCORE_OBJ) $(EXTRACORE_SRC:db:+$(o)) WIN32_OBJ = $(WIN32_SRC:db:+$(o)) @@ -950,7 +1046,6 @@ MINICORE_OBJ = $(MINIDIR)\{$(MICROCORE_OBJ:f) miniperlmain$(o) perlio$(o)} MINIWIN32_OBJ = $(MINIDIR)\{$(WIN32_OBJ:f)} MINI_OBJ = $(MINICORE_OBJ) $(MINIWIN32_OBJ) DLL_OBJ = $(DYNALOADER) -GENUUDMAP_OBJ = $(GENUUDMAP:db:+$(o)) PERLDLL_OBJ = $(CORE_OBJ) PERLEXE_OBJ = perlmain$(o) @@ -995,7 +1090,7 @@ CFG_VARS = \ libperl=$(PERLIMPLIB:f) ~ \ libpth=$(CCLIBDIR);$(EXTRALIBDIRS) ~ \ libc=$(LIBC) ~ \ - make=dmake ~ \ + make=$(PLMAKE) ~ \ _o=$(o) ~ \ obj_ext=$(o) ~ \ _a=$(a) ~ \ @@ -1008,6 +1103,7 @@ CFG_VARS = \ uselongdouble=$(USE_LONG_DOUBLE) ~ \ uselargefiles=$(USE_LARGE_FILES) ~ \ usesitecustomize=$(USE_SITECUST) ~ \ + default_inc_excludes_dot=$(DEFAULT_INC_EXCLUDES_DOT) ~ \ LINK_FLAGS=$(LINK_FLAGS) ~ \ optimize=$(OPTIMIZE) ~ \ ARCHPREFIX=$(ARCHPREFIX) ~ \ @@ -1017,19 +1113,13 @@ CFG_VARS = \ # Top targets # -all : CHECKDMAKE .\config.h ..\git_version.h $(GLOBEXE) $(MINIPERL) \ - $(CONFIGPM) $(UNIDATAFILES) MakePPPort \ - $(PERLEXE) Extensions Extensions_nonxs $(PERLSTATIC) - -regnodes : ..\regnodes.h +all : CHECKDMAKE rebasePE Extensions_nonxs $(PERLSTATIC) ..\regcomp$(o) : ..\regnodes.h ..\regcharclass.h ..\regexec$(o) : ..\regnodes.h ..\regcharclass.h -reonly : regnodes .\config.h ..\git_version.h $(GLOBEXE) $(MINIPERL) \ - $(CONFIGPM) $(UNIDATAFILES) $(PERLEXE) \ - Extensions_reonly +reonly : ..\regnodes.h $(UNIDATAFILES) Extensions_reonly static: $(PERLEXESTATIC) @@ -1044,193 +1134,23 @@ CHECKDMAKE : @exit 1 .ENDIF -$(GLOBEXE) : perlglob$(o) +$(GLOBEXE) : perlglob.c .IF "$(CCTYPE)" == "GCC" - $(LINK32) $(BLINK_FLAGS) -mconsole -o $@ perlglob$(o) $(LIBFILES) + $(LINK32) $(OPTIMIZE) $(BLINK_FLAGS) -mconsole -o $@ perlglob.c $(LIBFILES) .ELSE - $(LINK32) $(BLINK_FLAGS) $(LIBFILES) -out:$@ perlglob$(o) setargv$(o) - $(EMBED_EXE_MANI) + $(CC) $(OPTIMIZE) $(PDBOUT) -Fe$@ perlglob.c -link $(BLINK_FLAGS) \ + setargv$(o) $(LIBFILES) && $(EMBED_EXE_MANI) .ENDIF -perlglob$(o) : perlglob.c - -config.w32 : $(CFGSH_TMPL) - copy $(CFGSH_TMPL) config.w32 - -# -# Copy the template config.h and set configurables at the end of it -# as per the options chosen and compiler used. -# Note: This config.h is only used to build miniperl.exe anyway, but -# it's as well to have its options correct to be sure that it builds -# and so that it's "-V" options are correct for use by makedef.pl. The -# real config.h used to build perl.exe is generated from the top-level -# config_h.SH by config_h.PL (run by miniperl.exe). -# -.\config.h : $(CFGH_TMPL) $(CORE_NOCFG_H) - -del /f config.h - copy $(CFGH_TMPL) config.h - @echo.>>$@ - @echo #ifndef _config_h_footer_>>$@ - @echo #define _config_h_footer_>>$@ - @echo #undef Off_t>>$@ - @echo #undef LSEEKSIZE>>$@ - @echo #undef Off_t_size>>$@ - @echo #undef PTRSIZE>>$@ - @echo #undef SSize_t>>$@ - @echo #undef HAS_ATOLL>>$@ - @echo #undef HAS_STRTOLL>>$@ - @echo #undef HAS_STRTOULL>>$@ - @echo #undef Size_t_size>>$@ - @echo #undef IVTYPE>>$@ - @echo #undef UVTYPE>>$@ - @echo #undef IVSIZE>>$@ - @echo #undef UVSIZE>>$@ - @echo #undef NV_PRESERVES_UV>>$@ - @echo #undef NV_PRESERVES_UV_BITS>>$@ - @echo #undef IVdf>>$@ - @echo #undef UVuf>>$@ - @echo #undef UVof>>$@ - @echo #undef UVxf>>$@ - @echo #undef UVXf>>$@ - @echo #undef USE_64_BIT_INT>>$@ - @echo #undef Gconvert>>$@ - @echo #undef HAS_FREXPL>>$@ - @echo #undef HAS_ISNANL>>$@ - @echo #undef HAS_MODFL>>$@ - @echo #undef HAS_MODFL_PROTO>>$@ - @echo #undef HAS_SQRTL>>$@ - @echo #undef HAS_STRTOLD>>$@ - @echo #undef PERL_PRIfldbl>>$@ - @echo #undef PERL_PRIgldbl>>$@ - @echo #undef PERL_PRIeldbl>>$@ - @echo #undef PERL_SCNfldbl>>$@ - @echo #undef NVTYPE>>$@ - @echo #undef NVSIZE>>$@ - @echo #undef LONG_DOUBLESIZE>>$@ - @echo #undef NV_OVERFLOWS_INTEGERS_AT>>$@ - @echo #undef NVef>>$@ - @echo #undef NVff>>$@ - @echo #undef NVgf>>$@ - @echo #undef USE_LONG_DOUBLE>>$@ - @echo #undef USE_CPLUSPLUS>>$@ -.IF "$(USE_LARGE_FILES)"=="define" - @echo #define Off_t $(INT64)>>$@ - @echo #define LSEEKSIZE ^8>>$@ - @echo #define Off_t_size ^8>>$@ -.ELSE - @echo #define Off_t long>>$@ - @echo #define LSEEKSIZE ^4>>$@ - @echo #define Off_t_size ^4>>$@ -.ENDIF -.IF "$(WIN64)"=="define" - @echo #define PTRSIZE ^8>>$@ - @echo #define SSize_t $(INT64)>>$@ - @echo #define HAS_ATOLL>>$@ - @echo #define HAS_STRTOLL>>$@ - @echo #define HAS_STRTOULL>>$@ - @echo #define Size_t_size ^8>>$@ -.ELSE - @echo #define PTRSIZE ^4>>$@ - @echo #define SSize_t int>>$@ - @echo #undef HAS_ATOLL>>$@ - @echo #undef HAS_STRTOLL>>$@ - @echo #undef HAS_STRTOULL>>$@ - @echo #define Size_t_size ^4>>$@ -.ENDIF -.IF "$(USE_64_BIT_INT)"=="define" - @echo #define IVTYPE $(INT64)>>$@ - @echo #define UVTYPE unsigned $(INT64)>>$@ - @echo #define IVSIZE ^8>>$@ - @echo #define UVSIZE ^8>>$@ -.IF "$(USE_LONG_DOUBLE)"=="define" - @echo #define NV_PRESERVES_UV>>$@ - @echo #define NV_PRESERVES_UV_BITS 64>>$@ -.ELSE - @echo #undef NV_PRESERVES_UV>>$@ - @echo #define NV_PRESERVES_UV_BITS 53>>$@ -.ENDIF - @echo #define IVdf "I64d">>$@ - @echo #define UVuf "I64u">>$@ - @echo #define UVof "I64o">>$@ - @echo #define UVxf "I64x">>$@ - @echo #define UVXf "I64X">>$@ - @echo #define USE_64_BIT_INT>>$@ -.ELSE - @echo #define IVTYPE long>>$@ - @echo #define UVTYPE unsigned long>>$@ - @echo #define IVSIZE ^4>>$@ - @echo #define UVSIZE ^4>>$@ - @echo #define NV_PRESERVES_UV>>$@ - @echo #define NV_PRESERVES_UV_BITS 32>>$@ - @echo #define IVdf "ld">>$@ - @echo #define UVuf "lu">>$@ - @echo #define UVof "lo">>$@ - @echo #define UVxf "lx">>$@ - @echo #define UVXf "lX">>$@ - @echo #undef USE_64_BIT_INT>>$@ -.ENDIF -.IF "$(USE_LONG_DOUBLE)"=="define" - @echo #define Gconvert(x,n,t,b) sprintf((b),"%.*""Lg",(n),(x))>>$@ - @echo #define HAS_FREXPL>>$@ - @echo #define HAS_ISNANL>>$@ - @echo #define HAS_MODFL>>$@ - @echo #define HAS_MODFL_PROTO>>$@ - @echo #define HAS_SQRTL>>$@ - @echo #define HAS_STRTOLD>>$@ - @echo #define PERL_PRIfldbl "Lf">>$@ - @echo #define PERL_PRIgldbl "Lg">>$@ - @echo #define PERL_PRIeldbl "Le">>$@ - @echo #define PERL_SCNfldbl "Lf">>$@ - @echo #define NVTYPE long double>>$@ -.IF "$(WIN64)"=="define" - @echo #define NVSIZE ^16>>$@ - @echo #define LONG_DOUBLESIZE ^16>>$@ -.ELSE - @echo #define NVSIZE ^12>>$@ - @echo #define LONG_DOUBLESIZE ^12>>$@ -.ENDIF - @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>>$@ - @echo #define NVef "Le">>$@ - @echo #define NVff "Lf">>$@ - @echo #define NVgf "Lg">>$@ - @echo #define USE_LONG_DOUBLE>>$@ -.ELSE - @echo #define Gconvert(x,n,t,b) sprintf((b),"%.*g",(n),(x))>>$@ - @echo #undef HAS_FREXPL>>$@ - @echo #undef HAS_ISNANL>>$@ - @echo #undef HAS_MODFL>>$@ - @echo #undef HAS_MODFL_PROTO>>$@ - @echo #undef HAS_SQRTL>>$@ - @echo #undef HAS_STRTOLD>>$@ - @echo #undef PERL_PRIfldbl>>$@ - @echo #undef PERL_PRIgldbl>>$@ - @echo #undef PERL_PRIeldbl>>$@ - @echo #undef PERL_SCNfldbl>>$@ - @echo #define NVTYPE double>>$@ - @echo #define NVSIZE ^8>>$@ - @echo #define LONG_DOUBLESIZE ^8>>$@ - @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>>$@ - @echo #define NVef "e">>$@ - @echo #define NVff "f">>$@ - @echo #define NVgf "g">>$@ - @echo #undef USE_LONG_DOUBLE>>$@ -.ENDIF -.IF "$(USE_CPLUSPLUS)"=="define" - @echo #define USE_CPLUSPLUS>>$@ -.ELSE - @echo #undef USE_CPLUSPLUS>>$@ -.ENDIF - @echo #endif>>$@ - -..\git_version.h : $(MINIPERL) ..\make_patchnum.pl - cd .. && miniperl -Ilib make_patchnum.pl +..\git_version.h : $(HAVEMINIPERL) ..\make_patchnum.pl + $(MINIPERL) -I..\lib ..\make_patchnum.pl # make sure that we recompile perl.c if the git version changes ..\perl$(o) : ..\git_version.h -..\config.sh : config.w32 $(MINIPERL) config_sh.PL FindExt.pm +..\config.sh : $(CFGSH_TMPL) config_sh.PL FindExt.pm $(HAVEMINIPERL) $(MINIPERL) -I..\lib config_sh.PL --cfgsh-option-file \ - $(mktmp $(CFG_VARS)) config.w32 > ..\config.sh + $(mktmp $(CFG_VARS)) $(CFGSH_TMPL) > ..\config.sh # This target is for when changes to the main config.sh happen. # Edit config.gc, then make perl using GCC in a minimal configuration (i.e. @@ -1244,53 +1164,228 @@ regen_config_h: -$(MINIPERL) -I..\lib config_h.PL "ARCHPREFIX=$(ARCHPREFIX)" rename config.h $(CFGH_TMPL) -$(CONFIGPM) : $(MINIPERL) ..\config.sh config_h.PL +$(CONFIGPM) .\config.h .UPDATEALL: ..\config.sh config_h.PL $(MINIPERL) -I..\lib ..\configpm --chdir=.. - $(XCOPY) ..\*.h $(COREDIR)\*.* - $(XCOPY) *.h $(COREDIR)\*.* - $(RCOPY) include $(COREDIR)\*.* - $(MINIPERL) -I..\lib config_h.PL "ARCHPREFIX=$(ARCHPREFIX)" \ - || $(MAKE) $(MAKEMACROS) $(CONFIGPM) $(MAKEFILE) + -$(MINIPERL) -I..\lib config_h.PL "ARCHPREFIX=$(ARCHPREFIX)" # See the comment in Makefile.SH explaining this seemingly cranky ordering -$(MINIPERL) : ..\lib\buildcustomize.pl - -..\lib\buildcustomize.pl : $(MINIDIR) $(MINI_OBJ) $(CRTIPMLIBS) ..\write_buildcustomize.pl +..\lib\buildcustomize.pl : $(MINI_OBJ) ..\write_buildcustomize.pl .IF "$(CCTYPE)" == "GCC" $(LINK32) -v -mconsole -o $(MINIPERL) $(BLINK_FLAGS) \ $(mktmp $(LKPRE) $(MINI_OBJ) $(LIBFILES) $(LKPOST)) .ELSE $(LINK32) -out:$(MINIPERL) $(BLINK_FLAGS) \ - @$(mktmp $(DELAYLOAD) $(LIBFILES) $(MINI_OBJ)) + @$(mktmp $(DELAYLOAD) $(MINIDELAYLOAD) $(LIBFILES) $(MINI_OBJ)) $(EMBED_EXE_MANI:s/$@/$(MINIPERL)/) .ENDIF $(MINIPERL) -I..\lib -f ..\write_buildcustomize.pl .. -$(MINIDIR) : +#convinence target, get a working miniperl +mp : $(CONFIGPM) + +$(MINIDIR)\.exists : $(CFGH_TMPL) if not exist "$(MINIDIR)" mkdir "$(MINIDIR)" +# +# Copy the template config.h and set configurables at the end of it +# as per the options chosen and compiler used. +# Note: This config.h is only used to build miniperl.exe anyway, but +# it's as well to have its options correct to be sure that it builds +# and so that it's "-V" options are correct for use by makedef.pl. The +# real config.h used to build perl.exe is generated from the top-level +# config_h.SH by config_h.PL (run by miniperl.exe). +# +# MINIDIR generates config.h so miniperl.exe is not rebuilt when the 2nd +# config.h is generated in CONFIGPM target, see also the comments for $(MINI_OBJ). + copy $(CFGH_TMPL) config.h + @(echo.&& \ + echo #ifndef _config_h_footer_&& \ + echo #define _config_h_footer_&& \ + echo #undef Off_t&& \ + echo #undef LSEEKSIZE&& \ + echo #undef Off_t_size&& \ + echo #undef PTRSIZE&& \ + echo #undef SSize_t&& \ + echo #undef HAS_ATOLL&& \ + echo #undef HAS_STRTOLL&& \ + echo #undef HAS_STRTOULL&& \ + echo #undef Size_t_size&& \ + echo #undef IVTYPE&& \ + echo #undef UVTYPE&& \ + echo #undef IVSIZE&& \ + echo #undef UVSIZE&& \ + echo #undef NV_PRESERVES_UV&& \ + echo #undef NV_PRESERVES_UV_BITS&& \ + echo #undef IVdf&& \ + echo #undef UVuf&& \ + echo #undef UVof&& \ + echo #undef UVxf&& \ + echo #undef UVXf&& \ + echo #undef USE_64_BIT_INT&& \ + echo #undef Gconvert&& \ + echo #undef HAS_FREXPL&& \ + echo #undef HAS_ISNANL&& \ + echo #undef HAS_MODFL&& \ + echo #undef HAS_MODFL_PROTO&& \ + echo #undef HAS_SQRTL&& \ + echo #undef HAS_STRTOLD&& \ + echo #undef PERL_PRIfldbl&& \ + echo #undef PERL_PRIgldbl&& \ + echo #undef PERL_PRIeldbl&& \ + echo #undef PERL_SCNfldbl&& \ + echo #undef NVTYPE&& \ + echo #undef NVSIZE&& \ + echo #undef LONG_DOUBLESIZE&& \ + echo #undef NV_OVERFLOWS_INTEGERS_AT&& \ + echo #undef NVef&& \ + echo #undef NVff&& \ + echo #undef NVgf&& \ + echo #undef USE_LONG_DOUBLE&& \ + echo #undef USE_CPLUSPLUS)>> config.h +.IF "$(CCTYPE)" == "MSVC140" || "$(CCTYPE)" == "MSVC140FREE" + @(echo #undef FILE_ptr&& \ + echo #undef FILE_cnt&& \ + echo #undef FILE_base&& \ + echo #undef FILE_bufsiz&& \ + echo #define FILE_ptr(fp) PERLIO_FILE_ptr(fp)&& \ + echo #define FILE_cnt(fp) PERLIO_FILE_cnt(fp)&& \ + echo #define FILE_base(fp) PERLIO_FILE_base(fp)&& \ + echo #define FILE_bufsiz(fp) (PERLIO_FILE_cnt(fp) + PERLIO_FILE_ptr(fp) - PERLIO_FILE_base(fp))&& \ + echo #define I_STDBOOL)>> config.h +.ENDIF +.IF "$(USE_LARGE_FILES)"=="define" + @(echo #define Off_t $(INT64)&& \ + echo #define LSEEKSIZE ^8&& \ + echo #define Off_t_size ^8)>> config.h +.ELSE + @(echo #define Off_t long&& \ + echo #define LSEEKSIZE ^4&& \ + echo #define Off_t_size ^4)>> config.h +.ENDIF +.IF "$(WIN64)"=="define" + @(echo #define PTRSIZE ^8&& \ + echo #define SSize_t $(INT64)&& \ + echo #define HAS_ATOLL&& \ + echo #define HAS_STRTOLL&& \ + echo #define HAS_STRTOULL&& \ + echo #define Size_t_size ^8)>> config.h +.ELSE + @(echo #define PTRSIZE ^4&& \ + echo #define SSize_t int&& \ + echo #undef HAS_ATOLL&& \ + echo #undef HAS_STRTOLL&& \ + echo #undef HAS_STRTOULL&& \ + echo #define Size_t_size ^4)>> config.h +.ENDIF +.IF "$(USE_64_BIT_INT)"=="define" + @(echo #define IVTYPE $(INT64)&& \ + echo #define UVTYPE unsigned $(INT64)&& \ + echo #define IVSIZE ^8&& \ + echo #define UVSIZE ^8)>> config.h +.IF "$(USE_LONG_DOUBLE)"=="define" + @(echo #define NV_PRESERVES_UV&& \ + echo #define NV_PRESERVES_UV_BITS 64)>> config.h +.ELSE + @(echo #undef NV_PRESERVES_UV&& \ + echo #define NV_PRESERVES_UV_BITS 53)>> config.h +.ENDIF + @(echo #define IVdf "I64d"&& \ + echo #define UVuf "I64u"&& \ + echo #define UVof "I64o"&& \ + echo #define UVxf "I64x"&& \ + echo #define UVXf "I64X"&& \ + echo #define USE_64_BIT_INT)>> config.h +.ELSE + @(echo #define IVTYPE long&& \ + echo #define UVTYPE unsigned long&& \ + echo #define IVSIZE ^4&& \ + echo #define UVSIZE ^4&& \ + echo #define NV_PRESERVES_UV&& \ + echo #define NV_PRESERVES_UV_BITS 32&& \ + echo #define IVdf "ld"&& \ + echo #define UVuf "lu"&& \ + echo #define UVof "lo"&& \ + echo #define UVxf "lx"&& \ + echo #define UVXf "lX"&& \ + echo #undef USE_64_BIT_INT)>> config.h +.ENDIF +.IF "$(USE_LONG_DOUBLE)"=="define" + @(echo #define Gconvert^(x,n,t,b^) sprintf^(^(b^),"%.*""Lg",^(n^),^(x^)^)&& \ + echo #define HAS_FREXPL&& \ + echo #define HAS_ISNANL&& \ + echo #define HAS_MODFL&& \ + echo #define HAS_MODFL_PROTO&& \ + echo #define HAS_SQRTL&& \ + echo #define HAS_STRTOLD&& \ + echo #define PERL_PRIfldbl "Lf"&& \ + echo #define PERL_PRIgldbl "Lg"&& \ + echo #define PERL_PRIeldbl "Le"&& \ + echo #define PERL_SCNfldbl "Lf"&& \ + echo #define NVTYPE long double)>> config.h +.IF "$(WIN64)"=="define" + @(echo #define NVSIZE ^16&& \ + echo #define LONG_DOUBLESIZE ^16)>> config.h +.ELSE + @(echo #define NVSIZE ^12&& \ + echo #define LONG_DOUBLESIZE ^12)>> config.h +.ENDIF + @(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&& \ + echo #define NVef "Le"&& \ + echo #define NVff "Lf"&& \ + echo #define NVgf "Lg"&& \ + echo #define USE_LONG_DOUBLE)>> config.h +.ELSE + @(echo #define Gconvert^(x,n,t,b^) sprintf^(^(b^),"%.*g",^(n^),^(x^)^)&& \ + echo #undef HAS_FREXPL&& \ + echo #undef HAS_ISNANL&& \ + echo #undef HAS_MODFL&& \ + echo #undef HAS_MODFL_PROTO&& \ + echo #undef HAS_SQRTL&& \ + echo #undef HAS_STRTOLD&& \ + echo #undef PERL_PRIfldbl&& \ + echo #undef PERL_PRIgldbl&& \ + echo #undef PERL_PRIeldbl&& \ + echo #undef PERL_SCNfldbl&& \ + echo #define NVTYPE double&& \ + echo #define NVSIZE ^8&& \ + echo #define LONG_DOUBLESIZE ^8&& \ + 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&& \ + echo #define NVef "e"&& \ + echo #define NVff "f"&& \ + echo #define NVgf "g"&& \ + echo #undef USE_LONG_DOUBLE)>> config.h +.ENDIF +.IF "$(USE_CPLUSPLUS)"=="define" + @(echo #define USE_CPLUSPLUS&& \ + echo #endif)>> config.h +.ELSE + @(echo #undef USE_CPLUSPLUS&& \ + echo #endif)>> config.h +.ENDIF +#separate line since this is sentinal that this target is done + rem. > $(MINIDIR)\.exists $(MINICORE_OBJ) : $(CORE_NOCFG_H) - $(CC) -c $(CFLAGS) $(MINIBUILDOPT) -DPERL_EXTERNAL_GLOB -DPERL_IS_MINIPERL $(OBJOUT_FLAG)$@ ..\$(*B).c + $(CC) -c $(CFLAGS) $(MINIBUILDOPT) -DPERL_EXTERNAL_GLOB -DPERL_IS_MINIPERL $(OBJOUT_FLAG)$@ $(PDBOUT) ..\$(*B).c $(MINIWIN32_OBJ) : $(CORE_NOCFG_H) - $(CC) -c $(CFLAGS) $(MINIBUILDOPT) -DPERL_IS_MINIPERL $(OBJOUT_FLAG)$@ $(*B).c + $(CC) -c $(CFLAGS) $(MINIBUILDOPT) -DPERL_IS_MINIPERL $(OBJOUT_FLAG)$@ $(PDBOUT) $(*B).c # -DPERL_IMPLICIT_SYS needs C++ for perllib.c # rules wrapped in .IFs break Win9X build (we end up with unbalanced []s unless # unless the .IF is true), so instead we use a .ELSE with the default. # This is the only file that depends on perlhost.h, vmem.h, and vdir.h -perllib$(o) : perllib.c .\perlhost.h .\vdir.h .\vmem.h +perllib$(o) : perllib.c perllibst.h .\perlhost.h .\vdir.h .\vmem.h .IF "$(USE_IMP_SYS)" == "define" - $(CC) -c -I. $(CFLAGS_O) $(CXX_FLAG) $(OBJOUT_FLAG)$@ perllib.c + $(CC) -c -I. $(CFLAGS_O) $(CXX_FLAG) $(OBJOUT_FLAG)$@ $(PDBOUT) perllib.c .ELSE - $(CC) -c -I. $(CFLAGS_O) $(OBJOUT_FLAG)$@ perllib.c + $(CC) -c -I. $(CFLAGS_O) $(OBJOUT_FLAG)$@ $(PDBOUT) perllib.c .ENDIF # 1. we don't want to rebuild miniperl.exe when config.h changes # 2. we don't want to rebuild miniperl.exe with non-default config.h # 3. we can't have miniperl.exe depend on git_version.h, as miniperl creates it -$(MINI_OBJ) : $(CORE_NOCFG_H) +$(MINI_OBJ) : $(MINIDIR)\.exists $(CORE_NOCFG_H) $(WIN32_OBJ) : $(CORE_H) @@ -1298,34 +1393,32 @@ $(CORE_OBJ) : $(CORE_H) $(DLL_OBJ) : $(CORE_H) -perldll.def : $(MINIPERL) $(CONFIGPM) ..\embed.fnc ..\makedef.pl create_perllibst_h.pl + +perllibst.h : $(HAVEMINIPERL) $(CONFIGPM) create_perllibst_h.pl $(MINIPERL) -I..\lib create_perllibst_h.pl + +perldll.def : $(HAVEMINIPERL) $(CONFIGPM) ..\embed.fnc ..\makedef.pl $(MINIPERL) -I..\lib -w ..\makedef.pl PLATFORM=win32 $(OPTIMIZE) $(DEFINES) \ $(BUILDOPT) CCTYPE=$(CCTYPE) TARG_DIR=..\ > perldll.def -$(PERLDLL): perldll.def $(PERLDLL_OBJ) $(PERLDLL_RES) Extensions_static +$(PERLEXPLIB) $(PERLIMPLIB) .UPDATEALL : perldll.def +.IF "$(CCTYPE)" == "GCC" + $(IMPLIB) -k -d perldll.def -l $(PERLIMPLIB) -e $(PERLEXPLIB) +.ELSE #VC family + lib -def:perldll.def -machine:$(ARCHITECTURE) /OUT:$(PERLIMPLIB) +.ENDIF + +$(PERLDLL): $(PERLEXPLIB) $(PERLDLL_OBJ) $(PERLDLL_RES) Extensions_static .IF "$(CCTYPE)" == "GCC" - $(LINK32) -mdll -o $@ -Wl,--base-file -Wl,perl.base $(BLINK_FLAGS) \ - $(mktmp $(LKPRE) $(PERLDLL_OBJ) \ - $(shell @type Extensions_static) \ - $(LIBFILES) $(LKPOST)) - $(IMPLIB) --output-lib $(PERLIMPLIB) \ - --dllname $(PERLDLL:b).dll \ - --def perldll.def \ - --base-file perl.base \ - --output-exp perl.exp $(LINK32) -mdll -o $@ $(BLINK_FLAGS) \ - $(mktmp $(LKPRE) $(PERLDLL_OBJ) \ - $(shell @type Extensions_static) \ - $(LIBFILES) perl.exp $(LKPOST)) + $(PERLDLL_OBJ) $(shell @type Extensions_static) $(LIBFILES) $(PERLEXPLIB) .ELSE - $(LINK32) -dll -def:perldll.def -out:$@ $(BLINK_FLAGS) \ + $(LINK32) -dll -out:$@ $(BLINK_FLAGS) \ @Extensions_static \ @$(mktmp -base:0x28000000 $(DELAYLOAD) $(LIBFILES) \ - $(PERLDLL_RES) $(PERLDLL_OBJ)) + $(PERLDLL_RES) $(PERLDLL_OBJ) $(PERLEXPLIB)) $(EMBED_DLL_MANI) .ENDIF - $(XCOPY) $(PERLIMPLIB) $(COREDIR) $(PERLSTATICLIB): $(PERLDLL_OBJ) Extensions_static .IF "$(CCTYPE)" == "GCC" @@ -1340,41 +1433,37 @@ $(PERLSTATICLIB): $(PERLDLL_OBJ) Extensions_static $(LIB32) $(LIB_FLAGS) -out:$@ @Extensions_static \ @$(mktmp $(PERLDLL_OBJ)) .ENDIF - $(XCOPY) $(PERLSTATICLIB) $(COREDIR) + $(XCOPY) $(PERLSTATICLIB) $(COREDIR)\$(NULL) $(PERLEXE_RES): perlexe.rc $(PERLEXE_MANIFEST) $(PERLEXE_ICO) $(MINIDIR)\globals$(o) : $(GENERATED_HEADERS) -$(UUDMAP_H) $(MG_DATA_H) : $(BITCOUNT_H) - -$(BITCOUNT_H) : $(GENUUDMAP) - $(GENUUDMAP) $(GENERATED_HEADERS) - -$(GENUUDMAP_OBJ) : ..\mg_raw.h - -$(GENUUDMAP) : $(GENUUDMAP_OBJ) +$(GENUUDMAP) $(GENERATED_HEADERS) .UPDATEALL : ..\mg_raw.h .IF "$(CCTYPE)" == "GCC" - $(LINK32) -v -o $@ $(BLINK_FLAGS) \ - $(mktmp $(LKPRE) $(GENUUDMAP_OBJ) $(LIBFILES) $(LKPOST)) + $(LINK32) $(CFLAGS_O) -o..\generate_uudmap.exe ..\generate_uudmap.c \ + $(BLINK_FLAGS) -x $(mktmp $(LKPRE) $(LIBFILES) $(LKPOST)) .ELSE - $(LINK32) -out:$@ $(BLINK_FLAGS) @$(mktmp $(LIBFILES) $(GENUUDMAP_OBJ)) - $(EMBED_EXE_MANI) + $(CC) $(CFLAGS_O) $(PDBOUT) -Fe..\generate_uudmap.exe ..\generate_uudmap.c @$(mktmp -link $(LIBFILES)) -link $(BLINK_FLAGS) + $(EMBED_EXE_MANI:s/$@/..\generate_uudmap.exe/) .ENDIF + $(GENUUDMAP) $(GENERATED_HEADERS) -perlmain.c : runperl.c - copy runperl.c perlmain.c +MakePPPort : $(HAVEMINIPERL) $(CONFIGPM) + $(MINIPERL) -I..\lib ..\mkppport -perlmain$(o) : perlmain.c - $(CC) $(CFLAGS_O:s,-DPERLDLL,-UPERLDLL,) $(OBJOUT_FLAG)$@ -c perlmain.c +# also known as $(HAVE_COREDIR) +.\.coreheaders : $(CORE_H) + $(XCOPY) *.h $(COREDIR)\*.* && $(RCOPY) include $(COREDIR)\*.* && $(XCOPY) ..\*.h $(COREDIR)\*.* + rem. > $@ -perlmainst.c : runperl.c - copy runperl.c perlmainst.c +perlmain$(o) : runperl.c $(CONFIGPM) + $(CC) $(CFLAGS_O:s,-DPERLDLL,-UPERLDLL,) $(OBJOUT_FLAG)$@ $(PDBOUT) -c runperl.c -perlmainst$(o) : perlmainst.c - $(CC) $(CFLAGS_O) $(OBJOUT_FLAG)$@ -c perlmainst.c +perlmainst$(o) : runperl.c $(CONFIGPM) + $(CC) $(CFLAGS_O) $(OBJOUT_FLAG)$@ $(PDBOUT) -c runperl.c -$(PERLEXE): $(PERLDLL) $(CONFIGPM) $(PERLEXE_OBJ) $(PERLEXE_RES) +$(PERLEXE): $(CONFIGPM) $(PERLEXE_OBJ) $(PERLEXE_RES) $(PERLIMPLIB) .IF "$(CCTYPE)" == "GCC" $(LINK32) -mconsole -o $@ $(BLINK_FLAGS) \ $(PERLEXE_OBJ) $(PERLEXE_RES) $(PERLIMPLIB) $(LIBFILES) @@ -1396,43 +1485,51 @@ $(PERLEXESTATIC): $(PERLSTATICLIB) $(CONFIGPM) $(PERLEXEST_OBJ) $(PERLEXE_RES) $(EMBED_EXE_MANI) .ENDIF -MakePPPort: $(MINIPERL) $(CONFIGPM) Extensions_nonxs - $(MINIPERL) -I..\lib ..\mkppport - #------------------------------------------------------------------------------- # There's no direct way to mark a dependency on # DynaLoader.pm, so this will have to do -Extensions : ..\make_ext.pl ..\lib\buildcustomize.pl $(PERLDEP) $(CONFIGPM) $(DYNALOADER) - $(XCOPY) ..\*.h $(COREDIR)\*.* - $(MINIPERL) -I..\lib ..\make_ext.pl "MAKE=$(MAKE)" --dir=$(CPANDIR) --dir=$(DISTDIR) --dir=$(EXTDIR) --dynamic -Extensions_reonly : ..\make_ext.pl ..\lib\buildcustomize.pl $(PERLDEP) $(CONFIGPM) $(DYNALOADER) - $(XCOPY) ..\*.h $(COREDIR)\*.* - $(MINIPERL) -I..\lib ..\make_ext.pl "MAKE=$(MAKE)" --dir=$(CPANDIR) --dir=$(DISTDIR) --dir=$(EXTDIR) --dynamic +re +#most of deps of this target are in DYNALOADER and therefore omitted here +Extensions : $(PERLDEP) $(DYNALOADER) $(GLOBEXE) MakePPPort + $(MINIPERL) -I..\lib ..\make_ext.pl "MAKE=$(PLMAKE)" --dir=$(CPANDIR) --dir=$(DISTDIR) --dir=$(EXTDIR) --dynamic !Unicode/Normalize -Extensions_static : ..\make_ext.pl ..\lib\buildcustomize.pl list_static_libs.pl $(PERLDEP) $(CONFIGPM) Extensions_nonxs - $(XCOPY) ..\*.h $(COREDIR)\*.* - $(MINIPERL) -I..\lib ..\make_ext.pl "MAKE=$(MAKE)" --dir=$(CPANDIR) --dir=$(DISTDIR) --dir=$(EXTDIR) --static +Extensions_normalize : $(PERLDEP) $(DYNALOADER) $(GLOBEXE) $(UNIDATAFILES) + $(MINIPERL) -I..\lib ..\make_ext.pl "MAKE=$(PLMAKE)" --dir=$(CPANDIR) --dir=$(DISTDIR) --dir=$(EXTDIR) --dynamic +Unicode/Normalize + +Extensions_reonly : $(PERLDEP) $(DYNALOADER) + $(MINIPERL) -I..\lib ..\make_ext.pl "MAKE=$(PLMAKE)" --dir=$(CPANDIR) --dir=$(DISTDIR) --dir=$(EXTDIR) --dynamic +re + +Extensions_static : ..\make_ext.pl list_static_libs.pl $(CONFIGPM) $(GLOBEXE) $(HAVE_COREDIR) MakePPPort + $(MINIPERL) -I..\lib ..\make_ext.pl "MAKE=$(PLMAKE)" --dir=$(CPANDIR) --dir=$(DISTDIR) --dir=$(EXTDIR) --static $(MINIPERL) -I..\lib list_static_libs.pl > Extensions_static -Extensions_nonxs : ..\make_ext.pl ..\lib\buildcustomize.pl $(PERLDEP) $(CONFIGPM) ..\pod\perlfunc.pod - $(XCOPY) ..\*.h $(COREDIR)\*.* - $(MINIPERL) -I..\lib ..\make_ext.pl "MAKE=$(MAKE)" --dir=$(CPANDIR) --dir=$(DISTDIR) --dir=$(EXTDIR) --nonxs +Extensions_nonxs : ..\make_ext.pl ..\pod\perlfunc.pod $(CONFIGPM) $(GLOBEXE) + $(MINIPERL) -I..\lib ..\make_ext.pl "MAKE=$(PLMAKE)" --dir=$(CPANDIR) --dir=$(DISTDIR) --dir=$(EXTDIR) --nonxs !libs -$(DYNALOADER) : ..\make_ext.pl ..\lib\buildcustomize.pl $(PERLDEP) $(CONFIGPM) Extensions_nonxs - $(XCOPY) ..\*.h $(COREDIR)\*.* - $(MINIPERL) -I..\lib ..\make_ext.pl "MAKE=$(MAKE)" --dir=$(EXTDIR) --dynaloader +#lib must be built, it can't be buildcustomize.pl-ed, and is required for XS building +$(DYNALOADER) : ..\make_ext.pl $(CONFIGPM) $(HAVE_COREDIR) + $(MINIPERL) -I..\lib ..\make_ext.pl "MAKE=$(PLMAKE)" --dir=$(EXTDIR) --dir=$(DISTDIR) --dynaloader lib Extensions_clean : - -if exist $(MINIPERL) $(MINIPERL) -I..\lib ..\make_ext.pl "MAKE=$(MAKE)" --dir=$(CPANDIR) --dir=$(DISTDIR) --dir=$(EXTDIR) --all --target=clean + -if exist $(MINIPERL) $(MINIPERL) -I..\lib ..\make_ext.pl "MAKE=$(PLMAKE)" --dir=$(CPANDIR) --dir=$(DISTDIR) --dir=$(EXTDIR) --all --target=clean Extensions_realclean : - -if exist $(MINIPERL) $(MINIPERL) -I..\lib ..\make_ext.pl "MAKE=$(MAKE)" --dir=$(CPANDIR) --dir=$(DISTDIR) --dir=$(EXTDIR) --all --target=realclean + -if exist $(MINIPERL) $(MINIPERL) -I..\lib ..\make_ext.pl "MAKE=$(PLMAKE)" --dir=$(CPANDIR) --dir=$(DISTDIR) --dir=$(EXTDIR) --all --target=realclean + +# all PE files need to be built by the time this target runs, PP files can still +# be running in parallel like UNIDATAFILES, this target a placeholder for the +# future +.IF "$(BUILD_STATIC)"=="define" +rebasePE : Extensions $(PERLDLL) Extensions_normalize $(PERLEXE) $(PERLEXESTATIC) +.ELSE +rebasePE : Extensions $(PERLDLL) Extensions_normalize $(PERLEXE) +.ENDIF + $(NOOP) #------------------------------------------------------------------------------- -doc: $(PERLEXE) ..\pod\perltoc.pod +doc: $(PERLEXE) $(PERLDLL) ..\pod\perltoc.pod $(PERLEXE) ..\installhtml --podroot=.. --htmldir=$(HTMLDIR) \ --podpath=pod:lib:utils --htmlroot="file://$(INST_HTML:s,:,|,)"\ --recurse @@ -1442,8 +1539,8 @@ doc: $(PERLEXE) ..\pod\perltoc.pod # Note that this next section is parsed (and regenerated) by pod/buildtoc # so please check that script before making structural changes here -utils: $(PERLEXE) ..\utils\Makefile - cd ..\utils && $(MAKE) PERL=$(MINIPERL) +utils: $(HAVEMINIPERL) ..\utils\Makefile + cd ..\utils && $(PLMAKE) PERL=$(MINIPERL) copy ..\README.aix ..\pod\perlaix.pod copy ..\README.amiga ..\pod\perlamiga.pod copy ..\README.android ..\pod\perlandroid.pod @@ -1477,12 +1574,12 @@ utils: $(PERLEXE) ..\utils\Makefile copy ..\README.tw ..\pod\perltw.pod copy ..\README.vos ..\pod\perlvos.pod copy ..\README.win32 ..\pod\perlwin32.pod - copy ..\pod\perldelta.pod ..\pod\perl5232delta.pod - $(PERLEXE) $(PL2BAT) $(UTILS) + copy ..\pod\perldelta.pod ..\pod\perl5271delta.pod + $(MINIPERL) -I..\lib $(PL2BAT) $(UTILS) $(MINIPERL) -I..\lib ..\autodoc.pl .. $(MINIPERL) -I..\lib ..\pod\perlmodlib.PL -q .. -..\pod\perltoc.pod: $(PERLEXE) Extensions Extensions_nonxs +..\pod\perltoc.pod: $(PERLEXE) $(PERLDLL) Extensions Extensions_nonxs Extensions_normalize utils $(PERLEXE) -f ..\pod\buildtoc -q # Note that the pod cleanup in this next section is parsed (and regenerated @@ -1511,6 +1608,7 @@ distclean: realclean -del /f $(LIBDIR)\buildcustomize.pl -del /f $(DISTDIR)\XSLoader\XSLoader.pm -del /f *.def *.map + -if exist $(LIBDIR)\Amiga rmdir /s /q $(LIBDIR)\Amiga -if exist $(LIBDIR)\App rmdir /s /q $(LIBDIR)\App -if exist $(LIBDIR)\Archive rmdir /s /q $(LIBDIR)\Archive -if exist $(LIBDIR)\Attribute rmdir /s /q $(LIBDIR)\Attribute @@ -1537,6 +1635,7 @@ distclean: realclean -if exist $(LIBDIR)\Hash rmdir /s /q $(LIBDIR)\Hash -if exist $(LIBDIR)\HTTP rmdir /s /q $(LIBDIR)\HTTP -if exist $(LIBDIR)\I18N rmdir /s /q $(LIBDIR)\I18N + -if exist $(LIBDIR)\inc rmdir /s /q $(LIBDIR)\inc -if exist $(LIBDIR)\IO rmdir /s /q $(LIBDIR)\IO -if exist $(LIBDIR)\IPC rmdir /s /q $(LIBDIR)\IPC -if exist $(LIBDIR)\JSON rmdir /s /q $(LIBDIR)\JSON @@ -1561,6 +1660,7 @@ distclean: realclean -if exist $(LIBDIR)\TAP rmdir /s /q $(LIBDIR)\TAP -if exist $(LIBDIR)\Term rmdir /s /q $(LIBDIR)\Term -if exist $(LIBDIR)\Test rmdir /s /q $(LIBDIR)\Test + -if exist $(LIBDIR)\Test2 rmdir /s /q $(LIBDIR)\Test2 -if exist $(LIBDIR)\Text rmdir /s /q $(LIBDIR)\Text -if exist $(LIBDIR)\Thread rmdir /s /q $(LIBDIR)\Thread -if exist $(LIBDIR)\threads rmdir /s /q $(LIBDIR)\threads @@ -1572,7 +1672,7 @@ distclean: realclean -if exist $(LIBDIR)\Win32API rmdir /s /q $(LIBDIR)\Win32API -if exist $(LIBDIR)\XS rmdir /s /q $(LIBDIR)\XS -cd $(PODDIR) && del /f *.html *.bat roffitall \ - perl5232delta.pod perlaix.pod perlamiga.pod perlandroid.pod \ + perl5271delta.pod perlaix.pod perlamiga.pod perlandroid.pod \ perlapi.pod perlbs2000.pod perlce.pod perlcn.pod perlcygwin.pod \ perldos.pod perlfreebsd.pod perlhaiku.pod perlhpux.pod \ perlhurd.pod perlintern.pod perlirix.pod perljp.pod perlko.pod \ @@ -1582,7 +1682,7 @@ distclean: realclean perlsolaris.pod perlsymbian.pod perlsynology.pod perltoc.pod \ perltru64.pod perltw.pod perluniprops.pod perlvos.pod \ perlwin32.pod - -cd ..\utils && del /f h2ph splain perlbug pl2pm c2ph pstruct h2xs \ + -cd ..\utils && del /f h2ph splain perlbug pl2pm h2xs \ perldoc perlivp libnetcfg enc2xs encguess piconv cpan *.bat \ xsubpp pod2html instmodsh json_pp prove ptar ptardiff ptargrep shasum corelist zipdetails -del /f ..\config.sh perlmain.c dlutils.c config.h.new \ @@ -1619,11 +1719,10 @@ installhtml : doc inst_lib : $(CONFIGPM) $(RCOPY) ..\lib $(INST_LIB)\*.* -$(UNIDATAFILES) ..\pod\perluniprops.pod .UPDATEALL : $(MINIPERL) $(CONFIGPM) ..\lib\unicore\mktables Extensions_nonxs - cd ..\lib\unicore && \ - ..\$(MINIPERL) -I.. mktables -P ..\..\pod -maketest -makelist -p +$(UNIDATAFILES) ..\pod\perluniprops.pod .UPDATEALL : ..\lib\unicore\mktables $(CONFIGPM) + $(MINIPERL) -I..\lib ..\lib\unicore\mktables -C ..\lib\unicore -P ..\pod -maketest -makelist -p -minitest : .\config.h $(MINIPERL) ..\git_version.h $(GLOBEXE) $(CONFIGPM) $(UNIDATAFILES) $(TESTPREPGCC) +minitest : .\config.h $(HAVEMINIPERL) ..\git_version.h $(GLOBEXE) $(CONFIGPM) $(UNIDATAFILES) $(TESTPREPGCC) $(XCOPY) $(MINIPERL) ..\t\$(NULL) if exist ..\t\perl.exe del /f ..\t\perl.exe rename ..\t\miniperl.exe perl.exe @@ -1632,9 +1731,8 @@ minitest : .\config.h $(MINIPERL) ..\git_version.h $(GLOBEXE) $(CONFIGPM) $(UNID 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 test-prep : all utils ..\pod\perltoc.pod $(TESTPREPGCC) - $(XCOPY) $(PERLEXE) ..\t\$(NULL) - $(XCOPY) $(PERLDLL) ..\t\$(NULL) - $(XCOPY) $(GLOBEXE) ..\t\$(NULL) + $(XCOPY) $(PERLEXE) ..\t\$(NULL) && $(XCOPY) $(PERLDLL) ..\t\$(NULL) \ + && $(XCOPY) $(GLOBEXE) ..\t\$(NULL) # If building with gcc versions 4.x.x or greater, then # the GCC helper DLL will also need copied to the test directory. @@ -1689,7 +1787,6 @@ _clean : -@erase perlglob$(o) -@erase perlmain$(o) -@erase perlmainst$(o) - -@erase config.w32 -@erase /f config.h -@erase /f ..\git_version.h -@erase $(GLOBEXE) @@ -1700,6 +1797,7 @@ _clean : -@erase $(PERLDLL) -@erase $(CORE_OBJ) -@erase $(GENUUDMAP) $(GENUUDMAP_OBJ) $(GENERATED_HEADERS) + -@erase .coreheaders -if exist $(MINIDIR) rmdir /s /q $(MINIDIR) -if exist $(UNIDATADIR1) rmdir /s /q $(UNIDATADIR1) -if exist $(UNIDATADIR2) rmdir /s /q $(UNIDATADIR2) @@ -1709,11 +1807,9 @@ _clean : -@erase ..\*$(o) ..\*$(a) ..\*.exp *$(o) *$(a) *.exp *.res -@erase ..\t\*.exe ..\t\*.dll ..\t\*.bat -@erase *.ilk - -@erase *.pdb + -@erase *.pdb ..\*.pdb -@erase Extensions_static - - clean : Extensions_clean _clean realclean : Extensions_realclean _clean @@ -1722,14 +1818,15 @@ realclean : Extensions_realclean _clean # installed perlbug. We don't re-run the tests here - we trust the user. # Please *don't* use this unless all tests pass. # If you want to report test failures, use "dmake nok" instead. -ok: utils +ok: utils $(PERLEXE) $(PERLDLL) Extensions_nonxs Extensions $(PERLEXE) ..\utils\perlbug -ok -s "(UNINSTALLED)" -okfile: utils +okfile: utils $(PERLEXE) $(PERLDLL) Extensions_nonxs Extensions $(PERLEXE) ..\utils\perlbug -ok -s "(UNINSTALLED)" -F perl.ok -nok: utils +nok: utils $(PERLEXE) $(PERLDLL) Extensions_nonxs Extensions $(PERLEXE) ..\utils\perlbug -nok -s "(UNINSTALLED)" -nokfile: utils +nokfile: utils $(PERLEXE) $(PERLDLL) Extensions_nonxs Extensions $(PERLEXE) ..\utils\perlbug -nok -s "(UNINSTALLED)" -F perl.nok +