# versioned installation can be obtained by setting INST_TOP above to a
# path that includes an arbitrary version string.
#
-#INST_VER *= \5.23.3
+#INST_VER *= \5.23.8
#
# Comment this out if you DON'T want your perl installation to have
#USE_LONG_DOUBLE *=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.0 (aka Visual C++ 98)
USE_LARGE_FILES *= undef
USE_64_BIT_INT *= undef
USE_LONG_DOUBLE *= undef
+USE_NO_REGISTRY *= undef
.IF "$(USE_IMP_SYS)" == "define"
PERL_MALLOC = undef
BUILDOPT += -DPERL_IMPLICIT_SYS
.ENDIF
+.IF "$(USE_NO_REGISTRY)" != "undef"
+BUILDOPT += -DWIN32_NO_REGISTRY
+.ENDIF
+
PROCESSOR_ARCHITECTURE *= x86
.IF "$(WIN64)" == "undef"
#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
# 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.0 and 9.0) create manifest files for EXEs and
.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
# Avoid __intel_new_proc_init link error for libircmt.
# libmmd is /MD equivelent, other variants exist.
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
.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)
..\utils\perlivp \
..\utils\libnetcfg \
..\utils\enc2xs \
- ..\utils\encguess \
+ ..\utils\encguess \
..\utils\piconv \
..\utils\corelist \
..\utils\cpan \
CFGSH_TMPL = config.gc
CFGH_TMPL = config_H.gc
-PERLIMPLIB = ..\libperl523$(a)
+PERLIMPLIB = $(COREDIR)\libperl523$(a)
PERLSTATICLIB = ..\libperl523s$(a)
INT64 = long long
# 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)
-PERLEXPLIB *= ..\perl523.exp
+PERLIMPLIB *= $(COREDIR)\perl523$(a)
+PERLEXPLIB *= $(COREDIR)\perl523.exp
PERLSTATICLIB *= ..\perl523s$(a)
PERLDLL = ..\perl523.dll
#work, so this target also represents creating the COREDIR and filling it
HAVE_COREDIR = $(COREDIR)\ppport.h
-
MICROCORE_OBJ = $(MICROCORE_SRC:db:+$(o))
CORE_OBJ = $(MICROCORE_OBJ) $(EXTRACORE_SRC:db:+$(o))
WIN32_OBJ = $(WIN32_SRC:db:+$(o))
# Top targets
#
-all : CHECKDMAKE rebasePE $(UNIDATAFILES) Extensions_nonxs $(PERLSTATIC)
+all : CHECKDMAKE rebasePE Extensions_nonxs $(PERLSTATIC)
..\regcomp$(o) : ..\regnodes.h ..\regcharclass.h
@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
-
..\git_version.h : $(HAVEMINIPERL) ..\make_patchnum.pl
- cd .. && miniperl -Ilib 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 $(HAVEMINIPERL) 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.
-$(MINIPERL) -I..\lib config_h.PL "ARCHPREFIX=$(ARCHPREFIX)"
rename config.h $(CFGH_TMPL)
-$(CONFIGPM): ..\config.sh config_h.PL
+$(CONFIGPM) .\config.h .UPDATEALL: ..\config.sh config_h.PL
$(MINIPERL) -I..\lib ..\configpm --chdir=..
- $(XCOPY) config.h $(COREDIR)\*.*
-$(MINIPERL) -I..\lib config_h.PL "ARCHPREFIX=$(ARCHPREFIX)"
-.\config.h : $(CONFIGPM)
-
# See the comment in Makefile.SH explaining this seemingly cranky ordering
..\lib\buildcustomize.pl : $(MINI_OBJ) ..\write_buildcustomize.pl
.IF "$(CCTYPE)" == "GCC"
$(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 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).
- -if exist config.h del /f config.h
copy $(CFGH_TMPL) config.h
@(echo.&& \
echo #ifndef _config_h_footer_&& \
$(MINIPERL) -I..\lib -w ..\makedef.pl PLATFORM=win32 $(OPTIMIZE) $(DEFINES) \
$(BUILDOPT) CCTYPE=$(CCTYPE) TARG_DIR=..\ > perldll.def
-$(PERLIMPLIB) : perldll.def
+$(PERLEXPLIB) $(PERLIMPLIB) .UPDATEALL : perldll.def
.IF "$(CCTYPE)" == "GCC"
- $(IMPLIB) -k -d perldll.def -l $(PERLIMPLIB)
+ $(IMPLIB) -k -d perldll.def -l $(PERLIMPLIB) -e $(PERLEXPLIB)
.ELSE #VC family
lib -def:perldll.def -machine:$(ARCHITECTURE) /OUT:$(PERLIMPLIB)
.ENDIF
- $(XCOPY) $(PERLIMPLIB) $(COREDIR)
-
-#PERLEXPLIB is built in PERLIMPLIB
-$(PERLEXPLIB): $(PERLIMPLIB)
$(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 -out:$@ $(BLINK_FLAGS) \
@Extensions_static \
$(GENUUDMAP) $(GENERATED_HEADERS) .UPDATEALL : ..\mg_raw.h
.IF "$(CCTYPE)" == "GCC"
- $(LINK32) $(CFLAGS_O) -o..\generate_uudmap.exe ..\generate_uudmap.c $(BLINK_FLAGS) \
- $(mktmp $(LKPRE) $(LIBFILES) $(LKPOST))
+ $(LINK32) $(CFLAGS_O) -o..\generate_uudmap.exe ..\generate_uudmap.c \
+ $(BLINK_FLAGS) -x $(mktmp $(LKPRE) $(LIBFILES) $(LKPOST))
.ELSE
- $(CC) $(CFLAGS_O) -Fe..\generate_uudmap.exe ..\generate_uudmap.c @$(mktmp -link $(LIBFILES)) -link $(BLINK_FLAGS)
+ $(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)
#This generates a stub ppport.h & creates & fills /lib/CORE to allow for XS
-#building .c->.obj wise (linking is a different thing). This taget is AKA
+#building .c->.obj wise (linking is a different thing). This target is AKA
#$(HAVE_COREDIR).
$(COREDIR)\ppport.h : $(CORE_H)
$(XCOPY) *.h $(COREDIR)\*.* && $(RCOPY) include $(COREDIR)\*.* && $(XCOPY) ..\*.h $(COREDIR)\*.*
rem. > $@
-perlmain.c : runperl.c
- copy runperl.c perlmain.c
-
-perlmain$(o) : $(CONFIGPM) perlmain.c
- $(CC) $(CFLAGS_O:s,-DPERLDLL,-UPERLDLL,) $(OBJOUT_FLAG)$@ $(PDBOUT) -c perlmain.c
-
-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) : $(CONFIGPM) perlmainst.c
- $(CC) $(CFLAGS_O) $(OBJOUT_FLAG)$@ $(PDBOUT) -c perlmainst.c
+perlmainst$(o) : runperl.c $(CONFIGPM)
+ $(CC) $(CFLAGS_O) $(OBJOUT_FLAG)$@ $(PDBOUT) -c runperl.c
$(PERLEXE): $(CONFIGPM) $(PERLEXE_OBJ) $(PERLEXE_RES) $(PERLIMPLIB)
.IF "$(CCTYPE)" == "GCC"
#most of deps of this target are in DYNALOADER and therefore omitted here
Extensions : $(PERLDEP) $(DYNALOADER) $(GLOBEXE)
- $(MINIPERL) -I..\lib ..\make_ext.pl "MAKE=$(PLMAKE)" --dir=$(CPANDIR) --dir=$(DISTDIR) --dir=$(EXTDIR) --dynamic
+ $(MINIPERL) -I..\lib ..\make_ext.pl "MAKE=$(PLMAKE)" --dir=$(CPANDIR) --dir=$(DISTDIR) --dir=$(EXTDIR) --dynamic !Unicode/Normalize
+
+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
# be running in parallel like UNIDATAFILES, this target a placeholder for the
# future
.IF "$(BUILD_STATIC)"=="define"
-rebasePE : Extensions $(PERLDLL) $(PERLEXE) $(GLOBEXE) $(PERLEXESTATIC)
+rebasePE : Extensions $(PERLDLL) Extensions_normalize $(PERLEXE) $(PERLEXESTATIC)
.ELSE
-rebasePE : Extensions $(PERLDLL) $(PERLEXE) $(GLOBEXE)
+rebasePE : Extensions $(PERLDLL) Extensions_normalize $(PERLEXE)
.ENDIF
$(NOOP)
copy ..\README.tw ..\pod\perltw.pod
copy ..\README.vos ..\pod\perlvos.pod
copy ..\README.win32 ..\pod\perlwin32.pod
- copy ..\pod\perldelta.pod ..\pod\perl5234delta.pod
+ copy ..\pod\perldelta.pod ..\pod\perl5238delta.pod
$(MINIPERL) -I..\lib $(PL2BAT) $(UTILS)
$(MINIPERL) -I..\lib ..\autodoc.pl ..
$(MINIPERL) -I..\lib ..\pod\perlmodlib.PL -q ..
-..\pod\perltoc.pod: $(PERLEXE) $(PERLDLL) Extensions Extensions_nonxs ..\pod\perluniprops.pod utils
+..\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
-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 \
- perl5234delta.pod perlaix.pod perlamiga.pod perlandroid.pod \
+ perl5238delta.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 \
inst_lib : $(CONFIGPM)
$(RCOPY) ..\lib $(INST_LIB)\*.*
-$(UNIDATAFILES) ..\pod\perluniprops.pod .UPDATEALL : $(CONFIGPM) ..\lib\unicore\mktables
- 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 $(HAVEMINIPERL) ..\git_version.h $(GLOBEXE) $(CONFIGPM) $(UNIDATAFILES) $(TESTPREPGCC)
$(XCOPY) $(MINIPERL) ..\t\$(NULL)
-@erase perlglob$(o)
-@erase perlmain$(o)
-@erase perlmainst$(o)
- -@erase config.w32
-@erase /f config.h
-@erase /f ..\git_version.h
-@erase $(GLOBEXE)
-@erase *.pdb ..\*.pdb
-@erase Extensions_static
-
-
clean : Extensions_clean _clean
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
+