This is a live mirror of the Perl 5 development currently hosted at https://github.com/perl/perl5
regcomp.c: Replace invalid assertion
[perl5.git] / win32 / makefile.mk
index b60e02d..2403aa7 100644 (file)
@@ -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.3
+#INST_VER      *= \5.23.8
 
 #
 # Comment this out if you DON'T want your perl installation to have
@@ -108,6 +108,13 @@ USE_LARGE_FILES    *= define
 #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)
@@ -310,6 +317,7 @@ USE_IMP_SYS *= undef
 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
@@ -343,6 +351,10 @@ BUILDOPT   += -DPERL_IMPLICIT_CONTEXT
 BUILDOPT       += -DPERL_IMPLICIT_SYS
 .ENDIF
 
+.IF "$(USE_NO_REGISTRY)" != "undef"
+BUILDOPT       += -DWIN32_NO_REGISTRY
+.ENDIF
+
 PROCESSOR_ARCHITECTURE *= x86
 
 .IF "$(WIN64)" == "undef"
@@ -486,11 +498,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
@@ -524,7 +534,16 @@ TESTPREPGCC        = test-prep-gcc
 # 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
@@ -622,11 +641,10 @@ 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
 
 # Avoid __intel_new_proc_init link error for libircmt.
 # libmmd is /MD equivelent, other variants exist.
@@ -670,7 +688,7 @@ 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
@@ -687,10 +705,9 @@ 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)
@@ -805,7 +822,7 @@ UTILS               =                       \
                ..\utils\perlivp        \
                ..\utils\libnetcfg      \
                ..\utils\enc2xs         \
-               ..\utils\encguess               \
+               ..\utils\encguess       \
                ..\utils\piconv         \
                ..\utils\corelist       \
                ..\utils\cpan           \
@@ -829,7 +846,7 @@ UTILS               =                       \
 
 CFGSH_TMPL     = config.gc
 CFGH_TMPL      = config_H.gc
-PERLIMPLIB     = ..\libperl523$(a)
+PERLIMPLIB     = $(COREDIR)\libperl523$(a)
 PERLSTATICLIB  = ..\libperl523s$(a)
 INT64          = long long
 
@@ -843,8 +860,8 @@ 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)
-PERLEXPLIB     *= ..\perl523.exp
+PERLIMPLIB     *= $(COREDIR)\perl523$(a)
+PERLEXPLIB     *= $(COREDIR)\perl523.exp
 PERLSTATICLIB  *= ..\perl523s$(a)
 PERLDLL                = ..\perl523.dll
 
@@ -972,7 +989,6 @@ GENERATED_HEADERS = $(UUDMAP_H) $(BITCOUNT_H) $(MG_DATA_H)
 #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))
@@ -1046,7 +1062,7 @@ CFG_VARS  =                                       \
 # Top targets
 #
 
-all : CHECKDMAKE  rebasePE $(UNIDATAFILES) Extensions_nonxs $(PERLSTATIC)
+all : CHECKDMAKE rebasePE Extensions_nonxs $(PERLSTATIC)
 
 ..\regcomp$(o) : ..\regnodes.h ..\regcharclass.h
 
@@ -1067,28 +1083,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
-
 ..\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.
@@ -1102,13 +1113,10 @@ regen_config_h:
        -$(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"
@@ -1116,7 +1124,7 @@ $(CONFIGPM): ..\config.sh config_h.PL
            $(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 ..
@@ -1137,7 +1145,6 @@ $(MINIDIR)\.exists : $(CFGH_TMPL)
 #
 # 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_&& \
@@ -1332,32 +1339,17 @@ 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
 
-$(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 \
@@ -1387,32 +1379,26 @@ $(MINIDIR)\globals$(o) : $(GENERATED_HEADERS)
 
 $(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"
@@ -1442,7 +1428,10 @@ $(PERLEXESTATIC): $(PERLSTATICLIB) $(CONFIGPM) $(PERLEXEST_OBJ) $(PERLEXE_RES)
 
 #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
@@ -1468,9 +1457,9 @@ Extensions_realclean :
 # 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)
 
@@ -1522,12 +1511,12 @@ utils: $(HAVEMINIPERL) ..\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\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
@@ -1618,7 +1607,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 \
-           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 \
@@ -1666,9 +1655,8 @@ installhtml : doc
 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)
@@ -1735,7 +1723,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)
@@ -1758,8 +1745,6 @@ _clean :
        -@erase *.pdb ..\*.pdb
        -@erase Extensions_static
 
-
-
 clean : Extensions_clean _clean
 
 realclean : Extensions_realclean _clean
@@ -1768,14 +1753,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
+