X-Git-Url: http://git.shadowcat.co.uk/gitweb/gitweb.cgi?a=blobdiff_plain;f=win32%2Fmakefile.mk;h=a786a61c0542646e460c8f3a3a28cd01741e4442;hb=74b823207289f92d7c8d9c4e8b92d40463f43d48;hp=7e145467d4579298956bcdfd8e1723840ce3e99c;hpb=37c1c645f47f43d51a421958e27fa24bbc2407bc;p=p5sagit%2Fp5-mst-13.2.git diff --git a/win32/makefile.mk b/win32/makefile.mk index 7e14546..a786a61 100644 --- a/win32/makefile.mk +++ b/win32/makefile.mk @@ -1,26 +1,44 @@ # -# Makefile to build perl on Windowns NT using DMAKE. +# Makefile to build perl on Windows NT using DMAKE. # Supported compilers: # Visual C++ 2.0 thro 5.0 # Borland C++ 5.02 -# Mingw32-0.1.4 with gcc-2.7.2 +# Mingw32 with gcc-2.8.1 or egcs-1.0.2 **experimental** # # This is set up to build a perl.exe that runs off a shared library # (perl.dll). Also makes individual DLLs for the XS extensions. # +## +## Build configuration. Edit the values below to suit your needs. +## + # # Set these to wherever you want "nmake install" to put your # newly built perl. +# INST_DRV *= c: -INST_TOP *= $(INST_DRV)\perl5004.5x +INST_TOP *= $(INST_DRV)\perl + +# +# Comment this out if you DON'T want your perl installation to be versioned. +# This means that the new installation will overwrite any files from the +# old installation at the same INST_TOP location. Leaving it enabled is +# the safest route, as perl adds the extra version directory to all the +# locations it installs files to. If you disable it, an alternative +# versioned installation can be obtained by setting INST_TOP above to a +# path that includes an arbitrary version string. +# +INST_VER *= \5.00551 # # uncomment to enable threads-capabilities +# #USE_THREADS *= define # # uncomment one +# #CCTYPE *= MSVC20 #CCTYPE *= MSVC CCTYPE *= BORLAND @@ -28,31 +46,60 @@ CCTYPE *= BORLAND # # uncomment next line if you want to use the perl object -OBJECT *= -DPERL_OBJECT +# Currently, this cannot be enabled if you ask for threads above, or +# if you are using GCC or EGCS. +# +#OBJECT *= -DPERL_OBJECT # # uncomment next line if you want debug version of perl (big,slow) +# #CFG *= Debug # +# uncomment to enable use of PerlCRT.DLL when using the Visual C compiler. +# Highly recommended. It has patches that fix known bugs in MSVCRT.DLL. +# This currently requires VC 5.0 with Service Pack 3. +# Get it from CPAN at http://www.perl.com/CPAN/authors/id/D/DO/DOUGL/ +# and follow the directions in the package to install. +# +#USE_PERLCRT *= define + +# +# uncomment to enable linking with setargv.obj under the Visual C +# compiler. Setting this options enables perl to expand wildcards in +# arguments, but it may be harder to use alternate methods like +# File::DosGlob that are more powerful. This option is supported only with +# Visual C. +# +#USE_SETARGV *= define + +# # if you have the source for des_fcrypt(), uncomment this and make sure the -# file exists (see README.win32) -#CRYPT_SRC *= des_fcrypt.c +# file exists (see README.win32). File should be located in the same +# directory as this file. +# +#CRYPT_SRC *= fcrypt.c # # if you didn't set CRYPT_SRC and if you have des_fcrypt() available in a # library, uncomment this, and make sure the library exists (see README.win32) -#CRYPT_LIB *= des_fcrypt.lib +# Specify the full pathname of the library. +# +#CRYPT_LIB *= fcrypt.lib # # set this if you wish to use perl's malloc # WARNING: Turning this on/off WILL break binary compatibility with extensions -# you may have compiled with/without it. Be prepared to recompile all extensions -# if you change the default. +# you may have compiled with/without it. Be prepared to recompile all +# extensions if you change the default. Currently, this cannot be enabled +# if you ask for PERL_OBJECT above. +# #PERL_MALLOC *= define # # set the install locations of the compiler include/libraries +# #CCHOME *= f:\msdev\vc CCHOME *= C:\bc5 #CCHOME *= D:\packages\mingw32 @@ -60,15 +107,26 @@ CCINCDIR *= $(CCHOME)\include CCLIBDIR *= $(CCHOME)\lib # +# specify space-separated list of extra directories to look for libraries +# +EXTRALIBDIRS *= + +# # set this to point to cmd.exe (only needed if you use some # alternate shell that doesn't grok cmd.exe style commands) +# #SHELL *= g:\winnt\system32\cmd.exe # # set this to your email address (perl will guess a value from # from your loginname and your hostname, which may not be right) +# #EMAIL *= +## +## Build configuration ends. +## + ##################### CHANGE THESE ONLY IF YOU MUST ##################### .IF "$(CRYPT_SRC)$(CRYPT_LIB)" == "" @@ -94,7 +152,9 @@ USE_THREADS *= undef PROCESSOR_ARCHITECTURE *= x86 -.IF "$(USE_THREADS)" == "define" +.IF "$(OBJECT)" != "" +ARCHNAME = MSWin32-$(PROCESSOR_ARCHITECTURE)-object +.ELIF "$(USE_THREADS)" == "define" ARCHNAME = MSWin32-$(PROCESSOR_ARCHITECTURE)-thread .ELSE ARCHNAME = MSWin32-$(PROCESSOR_ARCHITECTURE) @@ -114,14 +174,14 @@ AUTODIR = ..\lib\auto CC = bcc32 LINK32 = tlink32 -LIB32 = tlib +LIB32 = tlib /P128 IMPLIB = implib -c # # Options # RUNTIME = -D_RTLDLL -INCLUDES = -I.\include -I. -I.. -I$(CCINCDIR) +INCLUDES = -I$(COREDIR) -I.\include -I. -I.. -I$(CCINCDIR) #PCHFLAGS = -H -Hc -H=c:\temp\bcmoduls.pch DEFINES = -DWIN32 $(BUILDOPT) $(CRYPT_FLAG) LOCDEFS = -DPERLDLL -DPERL_CORE @@ -135,38 +195,40 @@ LIBFILES = $(CRYPT_LIB) import32.lib $(LIBC) odbc32.lib odbccp32.lib OPTIMIZE = -v $(RUNTIME) -DDEBUGGING LINK_DBG = -v .ELSE -OPTIMIZE = -5 -O2 $(RUNTIME) +OPTIMIZE = -O2 $(RUNTIME) LINK_DBG = .ENDIF -CFLAGS = -w -d -tWM -tWD $(INCLUDES) $(DEFINES) $(LOCDEFS) \ +CFLAGS = -w -g0 -d -tWM -tWD $(INCLUDES) $(DEFINES) $(LOCDEFS) \ $(PCHFLAGS) $(OPTIMIZE) -LINK_FLAGS = $(LINK_DBG) -L$(CCLIBDIR) +LINK_FLAGS = $(LINK_DBG) -L$(CCLIBDIR) $(EXTRALIBDIRS:^"-L") OBJOUT_FLAG = -o EXEOUT_FLAG = -e +LIBOUT_FLAG = .ELIF "$(CCTYPE)" == "GCC" -CC = gcc -pipe -LINK32 = gcc -pipe -LIB32 = ar +CC = gcc +LINK32 = gcc +LIB32 = ar rc IMPLIB = dlltool o = .o +a = .a # # Options # RUNTIME = -INCLUDES = -I.\include -I. -I.. +INCLUDES = -I$(COREDIR) -I.\include -I. -I.. DEFINES = -DWIN32 $(BUILDOPT) $(CRYPT_FLAG) LOCDEFS = -DPERLDLL -DPERL_CORE SUBSYS = console CXX_FLAG = -xc++ LIBC = -lcrtdll -LIBFILES = $(CRYPT_LIB) -ladvapi32 -luser32 -lwsock32 -lmingw32 -lgcc \ - -lmoldname $(LIBC) -lkernel32 +LIBFILES = $(CRYPT_LIB) -ladvapi32 -luser32 -lnetapi32 -lwsock32 \ + -lmingw32 -lgcc -lmoldname $(LIBC) -lkernel32 .IF "$(CFG)" == "Debug" OPTIMIZE = -g -O2 $(RUNTIME) -DDEBUGGING @@ -177,9 +239,10 @@ LINK_DBG = .ENDIF CFLAGS = $(INCLUDES) $(DEFINES) $(LOCDEFS) $(OPTIMIZE) -LINK_FLAGS = $(LINK_DBG) -L$(CCLIBDIR) +LINK_FLAGS = $(LINK_DBG) -L$(CCLIBDIR) $(EXTRALIBDIRS:^"-L") OBJOUT_FLAG = -o EXEOUT_FLAG = -o +LIBOUT_FLAG = .ELSE @@ -190,24 +253,31 @@ LIB32 = $(LINK32) -lib # # Options # -.IF "$(OBJECT)" == "-DPERL_OBJECT" -RUNTIME = -MT -# XXX building with -MD fails many tests, but cannot investigate -# because building with debug crashes compiler :-( GSAR )-: -#RUNTIME = -MD -.ELSE -RUNTIME = -MD -.ENDIF -INCLUDES = -I.\include -I. -I.. +RUNTIME = -MD +INCLUDES = -I$(COREDIR) -I.\include -I. -I.. #PCHFLAGS = -Fpc:\temp\vcmoduls.pch -YX -DEFINES = -DWIN32 -D_CONSOLE $(BUILDOPT) $(CRYPT_FLAG) +DEFINES = -DWIN32 -D_CONSOLE -DNO_STRICT $(BUILDOPT) $(CRYPT_FLAG) LOCDEFS = -DPERLDLL -DPERL_CORE SUBSYS = console CXX_FLAG = -TP -GX +.IF "$(USE_PERLCRT)" == "" +.IF "$(CFG)" == "Debug" +PERLCRTLIBC = msvcrtd.lib +.ELSE +PERLCRTLIBC = msvcrt.lib +.ENDIF +.ELSE +.IF "$(CFG)" == "Debug" +PERLCRTLIBC = PerlCRTD.lib +.ELSE +PERLCRTLIBC = PerlCRT.lib +.ENDIF +.ENDIF + .IF "$(RUNTIME)" == "-MD" -LIBC = msvcrt.lib +LIBC = $(PERLCRTLIBC) .ELSE LIBC = libcmt.lib .ENDIF @@ -216,7 +286,7 @@ LIBC = libcmt.lib .IF "$(CCTYPE)" == "MSVC20" OPTIMIZE = -Od $(RUNTIME) -Z7 -D_DEBUG -DDEBUGGING .ELSE -OPTIMIZE = -Od $(RUNTIME)d -Z7 -D_DEBUG -DDEBUGGING +OPTIMIZE = -Od $(RUNTIME)d -Zi -D_DEBUG -DDEBUGGING .ENDIF LINK_DBG = -debug -pdb:none .ELSE @@ -228,17 +298,20 @@ OPTIMIZE = -Od $(RUNTIME) -DNDEBUG LINK_DBG = -release .ENDIF -# we don't add LIBC here, the compiler does it based on -MD/-MT -LIBFILES = $(CRYPT_LIB) oldnames.lib kernel32.lib user32.lib gdi32.lib \ +LIBBASEFILES = $(CRYPT_LIB) oldnames.lib kernel32.lib user32.lib gdi32.lib \ winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib \ oleaut32.lib netapi32.lib uuid.lib wsock32.lib mpr.lib winmm.lib \ version.lib odbc32.lib odbccp32.lib +# we add LIBC here, since we may be using PerlCRT.dll +LIBFILES = $(LIBBASEFILES) $(LIBC) + CFLAGS = -nologo -Gf -W3 $(INCLUDES) $(DEFINES) $(LOCDEFS) \ $(PCHFLAGS) $(OPTIMIZE) -LINK_FLAGS = -nologo $(LINK_DBG) -machine:$(PROCESSOR_ARCHITECTURE) +LINK_FLAGS = -nologo -nodefaultlib $(LINK_DBG) -machine:$(PROCESSOR_ARCHITECTURE) OBJOUT_FLAG = -Fo EXEOUT_FLAG = -Fe +LIBOUT_FLAG = /out: .ENDIF @@ -252,6 +325,7 @@ CFLAGS_O = $(CFLAGS) $(OBJECT) ############# NO USER-SERVICEABLE PARTS BEYOND THIS POINT ############## o *= .obj +a *= .lib LKPRE = INPUT ( LKPOST = ) @@ -260,7 +334,7 @@ LKPOST = ) # Rules # -.SUFFIXES : .c $(o) .dll .lib .exe .a +.SUFFIXES : .c $(o) .dll $(a) .exe .c$(o): $(CC) -c $(null,$(<:d) $(NULL) -I$(<:d)) $(CFLAGS_O) $(OBJOUT_FLAG)$@ $< @@ -274,15 +348,16 @@ $(o).dll: $(IMPLIB) $(*B).lib $@ .ELIF "$(CCTYPE)" == "GCC" $(LINK32) -o $@ $(LINK_FLAGS) $< $(LIBFILES) - $(IMPLIB) -def $(*B).def $(*B).lib $@ + $(IMPLIB) -def $(*B).def $(*B).a $@ .ELSE $(LINK32) -dll -subsystem:windows -implib:$(*B).lib -def:$(*B).def \ -out:$@ $(LINK_FLAGS) $(LIBFILES) $< $(LIBPERL) .ENDIF # -INST_BIN = $(INST_TOP)\bin -INST_LIB = $(INST_TOP)\lib +INST_BIN = $(INST_TOP)$(INST_VER)\bin\$(ARCHNAME) +INST_SCRIPT = $(INST_TOP)$(INST_VER)\bin +INST_LIB = $(INST_TOP)$(INST_VER)\lib INST_POD = $(INST_LIB)\pod INST_HTML = $(INST_POD)\html LIBDIR = ..\lib @@ -292,14 +367,6 @@ EXTUTILSDIR = $(LIBDIR)\extutils # # various targets -.IF "$(OBJECT)" == "-DPERL_OBJECT" -PERLIMPLIB = ..\perlcore.lib -PERLDLL = ..\perlcore.dll -.ELSE -PERLIMPLIB = ..\perl.lib -PERLDLL = ..\perl.dll -.ENDIF - MINIPERL = ..\miniperl.exe MINIDIR = .\mini PERLEXE = ..\perl.exe @@ -311,6 +378,29 @@ X2P = ..\x2p\a2p.exe PL2BAT = bin\pl2bat.pl GLOBBAT = bin\perlglob.bat +UTILS = \ + ..\utils\h2ph \ + ..\utils\splain \ + ..\utils\perlbug \ + ..\utils\pl2pm \ + ..\utils\c2ph \ + ..\utils\h2xs \ + ..\utils\perldoc \ + ..\utils\pstruct \ + ..\utils\perlcc \ + ..\pod\checkpods \ + ..\pod\pod2html \ + ..\pod\pod2latex \ + ..\pod\pod2man \ + ..\pod\pod2text \ + ..\x2p\find2perl \ + ..\x2p\s2p \ + bin\www.pl \ + bin\runperl.pl \ + bin\pl2bat.pl \ + bin\perlglob.pl \ + bin\search.pl + .IF "$(CCTYPE)" == "BORLAND" CFGSH_TMPL = config.bc @@ -320,25 +410,43 @@ CFGH_TMPL = config_H.bc CFGSH_TMPL = config.gc CFGH_TMPL = config_H.gc +.IF "$(OBJECT)" == "-DPERL_OBJECT" +PERLIMPLIB = ..\libperlcore$(a) +.ELSE +PERLIMPLIB = ..\libperl$(a) +.ENDIF .ELSE CFGSH_TMPL = config.vc CFGH_TMPL = config_H.vc +.IF "$(USE_PERLCRT)" == "" PERL95EXE = ..\perl95.exe +.ENDIF .ENDIF +.IF "$(OBJECT)" == "-DPERL_OBJECT" +PERLIMPLIB *= ..\perlcore$(a) +PERLDLL = ..\perlcore.dll +CAPILIB = $(COREDIR)\perlCAPI$(a) +.ELSE +PERLIMPLIB *= ..\perl$(a) +PERLDLL = ..\perl.dll +CAPILIB = +.ENDIF + XCOPY = xcopy /f /r /i /d RCOPY = xcopy /f /r /i /e /d NOOP = @echo +# # filenames given to xsubpp must have forward slashes (since it puts # full pathnames in #line strings) XSUBPP = ..\$(MINIPERL) -I..\..\lib ..\$(EXTUTILSDIR)\xsubpp \ -C++ -prototypes -CORE_SRC = \ +MICROCORE_SRC = \ ..\av.c \ ..\byterun.c \ ..\deb.c \ @@ -364,24 +472,27 @@ CORE_SRC = \ ..\taint.c \ ..\toke.c \ ..\universal.c \ + ..\utf8.c \ ..\util.c -CORE_SRC += $(CRYPT_SRC) - .IF "$(PERL_MALLOC)" == "define" -CORE_SRC += ..\malloc.c +EXTRACORE_SRC += ..\malloc.c .ENDIF .IF "$(OBJECT)" == "" -CORE_SRC += ..\perlio.c +EXTRACORE_SRC += ..\perlio.c .ENDIF WIN32_SRC = \ .\win32.c \ .\win32sck.c -.IF "$(USE_THREADS)" == "define" || "$(OBJECT)" == "" -WIN32_SRC += .\win32thread.c +.IF "$(USE_THREADS)" == "define" +WIN32_SRC += .\win32thread.c +.ENDIF + +.IF "$(CRYPT_SRC)" != "" +WIN32_SRC += .\$(CRYPT_SRC) .ENDIF PERL95_SRC = \ @@ -389,6 +500,10 @@ PERL95_SRC = \ win32mt.c \ win32sckmt.c +.IF "$(CRYPT_SRC)" != "" +PERL95_SRC += .\$(CRYPT_SRC) +.ENDIF + DLL_SRC = $(DYNALOADER).c @@ -403,7 +518,7 @@ X2P_SRC = \ ..\x2p\util.c \ ..\x2p\walk.c -CORE_H = \ +CORE_NOCFG_H = \ ..\av.h \ ..\byterun.h \ ..\bytecode.h \ @@ -415,12 +530,12 @@ CORE_H = \ ..\gv.h \ ..\handy.h \ ..\hv.h \ + ..\iperlsys.h \ ..\mg.h \ ..\nostdio.h \ ..\op.h \ ..\opcode.h \ ..\perl.h \ - ..\perlio.h \ ..\perlsdio.h \ ..\perlsfio.h \ ..\perly.h \ @@ -431,9 +546,10 @@ CORE_H = \ ..\sv.h \ ..\thread.h \ ..\unixish.h \ + ..\utf8.h \ ..\util.h \ + ..\warning.h \ ..\XSUB.h \ - .\config.h \ ..\EXTERN.h \ ..\perlvars.h \ ..\intrpvar.h \ @@ -443,12 +559,15 @@ CORE_H = \ .\include\sys\socket.h \ .\win32.h -CORE_OBJ = $(CORE_SRC:db:+$(o)) +CORE_H = $(CORE_NOCFG_H) .\config.h + +MICROCORE_OBJ = $(MICROCORE_SRC:db:+$(o)) +CORE_OBJ = $(MICROCORE_OBJ) $(EXTRACORE_SRC:db:+$(o)) WIN32_OBJ = $(WIN32_SRC:db:+$(o)) -MINICORE_OBJ = $(MINIDIR)\{$(CORE_OBJ:f) perlio$(o) miniperlmain$(o)} +MINICORE_OBJ = $(MINIDIR)\{$(MICROCORE_OBJ:f) miniperlmain$(o) perlio$(o)} MINIWIN32_OBJ = $(MINIDIR)\{$(WIN32_OBJ:f)} MINI_OBJ = $(MINICORE_OBJ) $(MINIWIN32_OBJ) -PERL95_OBJ = $(PERL95_SRC:db:+$(o)) DynaLoadmt$(o) +PERL95_OBJ = $(PERL95_SRC:db:+$(o)) DLL_OBJ = $(DLL_SRC:db:+$(o)) X2P_OBJ = $(X2P_SRC:db:+$(o)) @@ -459,10 +578,17 @@ PERLEXE_OBJ = perlmain$(o) PERLDLL_OBJ += $(WIN32_OBJ) $(DLL_OBJ) .ELSE PERLEXE_OBJ += $(WIN32_OBJ) $(DLL_OBJ) +PERL95_OBJ += DynaLoadmt$(o) +.ENDIF + +.IF "$(USE_SETARGV)" != "" +SETARGV_OBJ = setargv$(o) .ENDIF -DYNAMIC_EXT = Socket IO Fcntl Opcode SDBM_File attrs Thread B +DYNAMIC_EXT = Socket IO Fcntl Opcode SDBM_File POSIX attrs Thread B re \ + Data/Dumper STATIC_EXT = DynaLoader +NONXS_EXT = Errno DYNALOADER = $(EXTDIR)\DynaLoader\DynaLoader SOCKET = $(EXTDIR)\Socket\Socket @@ -470,18 +596,27 @@ FCNTL = $(EXTDIR)\Fcntl\Fcntl OPCODE = $(EXTDIR)\Opcode\Opcode SDBM_FILE = $(EXTDIR)\SDBM_File\SDBM_File IO = $(EXTDIR)\IO\IO +POSIX = $(EXTDIR)\POSIX\POSIX ATTRS = $(EXTDIR)\attrs\attrs THREAD = $(EXTDIR)\Thread\Thread B = $(EXTDIR)\B\B +RE = $(EXTDIR)\re\re +DUMPER = $(EXTDIR)\Data\Dumper\Dumper +ERRNO = $(EXTDIR)\Errno\Errno SOCKET_DLL = $(AUTODIR)\Socket\Socket.dll FCNTL_DLL = $(AUTODIR)\Fcntl\Fcntl.dll OPCODE_DLL = $(AUTODIR)\Opcode\Opcode.dll SDBM_FILE_DLL = $(AUTODIR)\SDBM_File\SDBM_File.dll IO_DLL = $(AUTODIR)\IO\IO.dll +POSIX_DLL = $(AUTODIR)\POSIX\POSIX.dll ATTRS_DLL = $(AUTODIR)\attrs\attrs.dll THREAD_DLL = $(AUTODIR)\Thread\Thread.dll B_DLL = $(AUTODIR)\B\B.dll +DUMPER_DLL = $(AUTODIR)\Data\Dumper\Dumper.dll +RE_DLL = $(AUTODIR)\re\re.dll + +ERRNO_PM = $(LIBDIR)\Errno.pm EXTENSION_C = \ $(SOCKET).c \ @@ -489,8 +624,11 @@ EXTENSION_C = \ $(OPCODE).c \ $(SDBM_FILE).c \ $(IO).c \ + $(POSIX).c \ $(ATTRS).c \ $(THREAD).c \ + $(RE).c \ + $(DUMPER).c \ $(B).c EXTENSION_DLL = \ @@ -499,9 +637,20 @@ EXTENSION_DLL = \ $(OPCODE_DLL) \ $(SDBM_FILE_DLL)\ $(IO_DLL) \ - $(ATTRS_DLL) -# $(THREAD_DLL) \ -# $(B_DLL) + $(POSIX_DLL) \ + $(ATTRS_DLL) \ + $(DUMPER_DLL) \ + $(B_DLL) + +EXTENSION_PM = \ + $(ERRNO_PM) + +# re.dll doesn't build with PERL_OBJECT yet +.IF "$(OBJECT)" == "" +EXTENSION_DLL += \ + $(THREAD_DLL) \ + $(RE_DLL) +.ENDIF POD2HTML = $(PODDIR)\pod2html POD2MAN = $(PODDIR)\pod2man @@ -511,6 +660,7 @@ POD2TEXT = $(PODDIR)\pod2text CFG_VARS = \ "INST_DRV=$(INST_DRV)" \ "INST_TOP=$(INST_TOP)" \ + "INST_VER=$(INST_VER)" \ "archname=$(ARCHNAME)" \ "cc=$(CC)" \ "ccflags=$(OPTIMIZE) $(DEFINES) $(OBJECT)" \ @@ -519,12 +669,15 @@ CFG_VARS = \ "d_mymalloc=$(PERL_MALLOC)" \ "libs=$(LIBFILES:f)" \ "incpath=$(CCINCDIR)" \ - "libperl=$(PERLIMPLIB)" \ - "libpth=$(strip $(CCLIBDIR) $(LIBFILES:d))" \ + "libperl=$(PERLIMPLIB:f)" \ + "libpth=$(strip $(CCLIBDIR) $(EXTRALIBDIRS) $(LIBFILES:d))" \ "libc=$(LIBC)" \ "make=dmake" \ + "_o=$(o)" "obj_ext=$(o)" \ + "_a=$(a)" "lib_ext=$(a)" \ "static_ext=$(STATIC_EXT)" \ "dynamic_ext=$(DYNAMIC_EXT)" \ + "nonxs_ext=$(NONXS_EXT)" \ "usethreads=$(USE_THREADS)" \ "LINK_FLAGS=$(LINK_FLAGS)" \ "optimize=$(OPTIMIZE)" @@ -533,8 +686,8 @@ CFG_VARS = \ # Top targets # -all : $(GLOBEXE) $(MINIMOD) $(CONFIGPM) $(PERLEXE) $(PERL95EXE) $(X2P) \ - $(EXTENSION_DLL) +all : .\config.h $(GLOBEXE) $(MINIMOD) $(CONFIGPM) $(PERLEXE) $(PERL95EXE) \ + $(CAPILIB) $(X2P) $(EXTENSION_DLL) $(EXTENSION_PM) $(DYNALOADER)$(o) : $(DYNALOADER).c $(CORE_H) $(EXTDIR)\DynaLoader\dlutils.c @@ -557,7 +710,7 @@ perlglob$(o) : perlglob.c config.w32 : $(CFGSH_TMPL) copy $(CFGSH_TMPL) config.w32 -.\config.h : $(CFGH_TMPL) +.\config.h : $(CFGH_TMPL) $(CORE_NOCFG_H) -del /f config.h copy $(CFGH_TMPL) config.h @@ -573,7 +726,7 @@ regen_config_h: cd .. && perl configpm -del /f $(CFGH_TMPL) -mkdir ..\lib\CORE - -perl -I..\lib config_h.PL + -perl -I..\lib config_h.PL "INST_VER=$(INST_VER)" rename config.h $(CFGH_TMPL) $(CONFIGPM) : $(MINIPERL) ..\config.sh config_h.PL ..\minimod.pl @@ -581,8 +734,10 @@ $(CONFIGPM) : $(MINIPERL) ..\config.sh config_h.PL ..\minimod.pl if exist lib\* $(RCOPY) lib\*.* ..\lib\$(NULL) $(XCOPY) ..\*.h $(COREDIR)\*.* $(XCOPY) *.h $(COREDIR)\*.* + $(XCOPY) ..\ext\re\re.pm $(LIBDIR)\*.* $(RCOPY) include $(COREDIR)\*.* - $(MINIPERL) -I..\lib config_h.PL || $(MAKE) $(MAKEMACROS) $(CONFIGPM) + $(MINIPERL) -I..\lib config_h.PL "INST_VER=$(INST_VER)" \ + || $(MAKE) $(MAKEMACROS) $(CONFIGPM) $(MINIPERL) : $(MINIDIR) $(MINI_OBJ) .IF "$(CCTYPE)" == "BORLAND" @@ -599,15 +754,18 @@ $(MINIPERL) : $(MINIDIR) $(MINI_OBJ) $(MINIDIR) : if not exist "$(MINIDIR)" mkdir "$(MINIDIR)" -$(MINICORE_OBJ) : $(CORE_H) +$(MINICORE_OBJ) : $(CORE_NOCFG_H) $(CC) -c $(CFLAGS) $(OBJOUT_FLAG)$@ ..\$(*B).c -$(MINIWIN32_OBJ) : $(CORE_H) +$(MINIWIN32_OBJ) : $(CORE_NOCFG_H) $(CC) -c $(CFLAGS) $(OBJOUT_FLAG)$@ $(*B).c +# 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 +$(MINI_OBJ) : $(CORE_NOCFG_H) + $(WIN32_OBJ) : $(CORE_H) $(CORE_OBJ) : $(CORE_H) -$(MINI_OBJ) : $(CORE_H) $(DLL_OBJ) : $(CORE_H) $(PERL95_OBJ) : $(CORE_H) $(X2P_OBJ) : $(CORE_H) @@ -680,26 +838,27 @@ perlmain.c : runperl.c copy runperl.c perlmain.c perlmain$(o) : perlmain.c - $(CC) $(CFLAGS_O) -UPERLDLL $(EXEOUT_FLAG)$@ -c perlmain.c + $(CC) $(CFLAGS_O) -UPERLDLL $(OBJOUT_FLAG)$@ -c perlmain.c $(PERLEXE): $(PERLDLL) $(CONFIGPM) $(PERLEXE_OBJ) .IF "$(CCTYPE)" == "BORLAND" $(LINK32) -Tpe -ap $(LINK_FLAGS) \ - @$(mktmp c0x32$(o) $(PERLEXE_OBJ)\n \ - $@,\n \ + @$(mktmp c0x32$(o) $(PERLEXE_OBJ:s,\,\\)\n \ + $(@:s,\,\\),\n \ $(PERLIMPLIB) $(LIBFILES)\n) .ELIF "$(CCTYPE)" == "GCC" $(LINK32) -o $@ $(LINK_FLAGS) \ $(PERLEXE_OBJ) $(PERLIMPLIB) $(LIBFILES) .ELSE $(LINK32) -subsystem:console -out:$@ $(LINK_FLAGS) $(LIBFILES) \ - $(PERLEXE_OBJ) $(PERLIMPLIB) + $(PERLEXE_OBJ) $(SETARGV_OBJ) $(PERLIMPLIB) .ENDIF copy splittree.pl .. $(MINIPERL) -I..\lib ..\splittree.pl "../LIB" $(AUTODIR) .IF "$(CCTYPE)" != "BORLAND" .IF "$(CCTYPE)" != "GCC" +.IF "$(USE_PERLCRT)" == "" perl95.c : runperl.c copy runperl.c perl95.c @@ -721,20 +880,57 @@ DynaLoadmt$(o) : $(DYNALOADER).c $(PERL95EXE): $(PERLDLL) $(CONFIGPM) $(PERL95_OBJ) $(LINK32) -subsystem:console -nodefaultlib -out:$@ $(LINK_FLAGS) \ - $(LIBFILES) $(PERL95_OBJ) $(PERLIMPLIB) libcmt.lib + $(LIBBASEFILES) $(PERL95_OBJ) $(SETARGV_OBJ) $(PERLIMPLIB) \ + libcmt.lib .ENDIF .ENDIF +.ENDIF $(DYNALOADER).c: $(MINIPERL) $(EXTDIR)\DynaLoader\dl_win32.xs $(CONFIGPM) if not exist $(AUTODIR) mkdir $(AUTODIR) + cd $(EXTDIR)\$(*B) && ..\$(MINIPERL) -I..\..\lib $(*B)_pm.PL $(XCOPY) $(EXTDIR)\$(*B)\$(*B).pm $(LIBDIR)\$(NULL) cd $(EXTDIR)\$(*B) && $(XSUBPP) dl_win32.xs > $(*B).c $(XCOPY) $(EXTDIR)\$(*B)\dlutils.c . +.IF "$(OBJECT)" == "-DPERL_OBJECT" + +perlCAPI.cpp : $(MINIPERL) + $(MINIPERL) GenCAPI.pl $(COREDIR) + +perlCAPI$(o) : perlCAPI.cpp +.IF "$(CCTYPE)" == "BORLAND" + $(CC) $(CFLAGS_O) -c $(OBJOUT_FLAG)perlCAPI$(o) perlCAPI.cpp +.ELIF "$(CCTYPE)" == "GCC" + $(CC) $(CFLAGS_O) -c $(OBJOUT_FLAG)perlCAPI$(o) perlCAPI.cpp +.ELSE + $(CC) $(CFLAGS_O) $(RUNTIME) -UPERLDLL -c \ + $(OBJOUT_FLAG)perlCAPI$(o) perlCAPI.cpp +.ENDIF + +$(CAPILIB) : perlCAPI.cpp perlCAPI$(o) +.IF "$(CCTYPE)" == "BORLAND" + $(LIB32) $(LIBOUT_FLAG)$(CAPILIB) +perlCAPI$(o) +.ELSE + $(LIB32) $(LIBOUT_FLAG)$(CAPILIB) perlCAPI$(o) +.ENDIF + +.ENDIF + $(EXTDIR)\DynaLoader\dl_win32.xs: dl_win32.xs copy dl_win32.xs $(EXTDIR)\DynaLoader\dl_win32.xs +$(DUMPER_DLL): $(PERLEXE) $(DUMPER).xs + cd $(EXTDIR)\Data\$(*B) && \ + ..\..\..\miniperl -I..\..\..\lib Makefile.PL INSTALLDIRS=perl + cd $(EXTDIR)\Data\$(*B) && $(MAKE) + +$(RE_DLL): $(PERLEXE) $(RE).xs + cd $(EXTDIR)\$(*B) && \ + ..\..\miniperl -I..\..\lib Makefile.PL INSTALLDIRS=perl + cd $(EXTDIR)\$(*B) && $(MAKE) + $(B_DLL): $(PERLEXE) $(B).xs cd $(EXTDIR)\$(*B) && \ ..\..\miniperl -I..\..\lib Makefile.PL INSTALLDIRS=perl @@ -750,6 +946,11 @@ $(ATTRS_DLL): $(PERLEXE) $(ATTRS).xs ..\..\miniperl -I..\..\lib Makefile.PL INSTALLDIRS=perl cd $(EXTDIR)\$(*B) && $(MAKE) +$(POSIX_DLL): $(PERLEXE) $(POSIX).xs + cd $(EXTDIR)\$(*B) && \ + ..\..\miniperl -I..\..\lib Makefile.PL INSTALLDIRS=perl + cd $(EXTDIR)\$(*B) && $(MAKE) + $(IO_DLL): $(PERLEXE) $(IO).xs cd $(EXTDIR)\$(*B) && \ ..\..\miniperl -I..\..\lib Makefile.PL INSTALLDIRS=perl @@ -775,50 +976,65 @@ $(SOCKET_DLL): $(PERLEXE) $(SOCKET).xs ..\..\miniperl -I..\..\lib Makefile.PL INSTALLDIRS=perl cd $(EXTDIR)\$(*B) && $(MAKE) +$(ERRNO_PM): $(PERLEXE) $(ERRNO)_pm.PL + cd $(EXTDIR)\$(*B) && \ + ..\..\miniperl -I..\..\lib Makefile.PL INSTALLDIRS=perl + cd $(EXTDIR)\$(*B) && $(MAKE) + doc: $(PERLEXE) - cd ..\pod && $(MAKE) -f ..\win32\pod.mak checkpods \ - pod2html pod2latex pod2man pod2text - cd ..\pod && $(XCOPY) *.bat ..\win32\bin\*.* - copy ..\README.win32 ..\pod\perlwin32.pod $(PERLEXE) -I..\lib ..\installhtml --podroot=.. --htmldir=./html \ --podpath=pod:lib:ext:utils --htmlroot="file://$(INST_HTML:s,:,|,)"\ --libpod=perlfunc:perlguts:perlvar:perlrun:perlop --recurse -utils: $(PERLEXE) - cd ..\utils && $(MAKE) PERL=$(PERLEXE) - cd ..\utils && $(PERLEXE) ..\win32\$(PL2BAT) h2ph splain perlbug \ - pl2pm c2ph h2xs perldoc pstruct - $(XCOPY) ..\utils\*.bat bin\*.* - $(PERLEXE) -I..\lib $(PL2BAT) bin\network.pl bin\www.pl bin\runperl.pl \ - bin\pl2bat.pl bin\perlglob.pl +utils: $(PERLEXE) $(X2P) + cd ..\utils && $(MAKE) PERL=$(MINIPERL) + copy ..\README.win32 ..\pod\perlwin32.pod + cd ..\pod && $(MAKE) -f ..\win32\pod.mak converters + $(PERLEXE) $(PL2BAT) $(UTILS) distclean: clean -del /f $(MINIPERL) $(PERLEXE) $(PERL95EXE) $(PERLDLL) $(GLOBEXE) \ - $(PERLIMPLIB) ..\miniperl.lib $(MINIMOD) + $(PERLIMPLIB) ..\miniperl$(a) $(MINIMOD) -del /f *.def *.map - -del /f $(EXTENSION_DLL) - -del /f $(EXTENSION_C) + -del /f $(EXTENSION_DLL) $(EXTENSION_PM) + -del /f $(EXTENSION_C) $(DYNALOADER).c $(ERRNO).pm + -del /f $(EXTDIR)\DynaLoader\dl_win32.xs + -del /f $(LIBDIR)\.exists $(LIBDIR)\attrs.pm $(LIBDIR)\DynaLoader.pm + -del /f $(LIBDIR)\Fcntl.pm $(LIBDIR)\IO.pm $(LIBDIR)\Opcode.pm + -del /f $(LIBDIR)\ops.pm $(LIBDIR)\Safe.pm $(LIBDIR)\Thread.pm + -del /f $(LIBDIR)\SDBM_File.pm $(LIBDIR)\Socket.pm $(LIBDIR)\POSIX.pm + -del /f $(LIBDIR)\B.pm $(LIBDIR)\O.pm $(LIBDIR)\re.pm + -del /f $(LIBDIR)\Data\Dumper.pm + -rmdir /s /q $(LIBDIR)\IO || rmdir /s $(LIBDIR)\IO + -rmdir /s /q $(LIBDIR)\Thread || rmdir /s $(LIBDIR)\Thread + -rmdir /s /q $(LIBDIR)\B || rmdir /s $(LIBDIR)\B + -rmdir /s /q $(LIBDIR)\Data || rmdir /s $(LIBDIR)\Data -del /f $(PODDIR)\*.html -del /f $(PODDIR)\*.bat + -cd ..\utils && del /f h2ph splain perlbug pl2pm c2ph h2xs perldoc pstruct *.bat + -cd ..\x2p && del /f find2perl s2p *.bat -del /f ..\config.sh ..\splittree.pl perlmain.c dlutils.c config.h.new - -del /f ..\lib\Config.pm + -del /f $(CONFIGPM) .IF "$(PERL95EXE)" != "" -del /f perl95.c .ENDIF -del /f bin\*.bat - -cd $(EXTDIR) && del /s *.lib *.def *.map *.bs Makefile *$(o) pm_to_blib + -cd $(EXTDIR) && del /s *$(a) *.def *.map *.bs Makefile *$(o) pm_to_blib -rmdir /s /q $(AUTODIR) || rmdir /s $(AUTODIR) -rmdir /s /q $(COREDIR) || rmdir /s $(COREDIR) - -rmdir /s /q $(MINIDIR) || rmdir /s $(MINIDIR) -install : all doc utils +install : all installbare installhtml + +installbare : utils $(PERLEXE) ..\installperl .IF "$(PERL95EXE)" != "" $(XCOPY) $(PERL95EXE) $(INST_BIN)\*.* .ENDIF $(XCOPY) $(GLOBEXE) $(INST_BIN)\*.* - $(XCOPY) bin\*.bat $(INST_BIN)\*.* - $(XCOPY) ..\pod\*.bat $(INST_BIN)\*.* + $(XCOPY) bin\*.bat $(INST_SCRIPT)\*.* + $(XCOPY) bin\network.pl $(INST_LIB)\*.* + +installhtml : doc $(RCOPY) html\*.* $(INST_HTML)\*.* inst_lib : $(CONFIGPM) @@ -859,17 +1075,18 @@ clean : -@erase $(MINIPERL) -@erase perlglob$(o) -@erase perlmain$(o) + -@erase perlCAPI.cpp -@erase config.w32 -@erase /f config.h -@erase $(GLOBEXE) -@erase $(PERLEXE) -@erase $(PERLDLL) -@erase $(CORE_OBJ) - -rmdir /s /q "$(MINIDIR)" + -rmdir /s /q $(MINIDIR) || rmdir /s $(MINIDIR) -@erase $(WIN32_OBJ) -@erase $(DLL_OBJ) -@erase $(X2P_OBJ) - -@erase ..\*$(o) ..\*.lib ..\*.exp *$(o) *.lib *.exp + -@erase ..\*$(o) ..\*$(a) ..\*.exp *$(o) *$(a) *.exp -@erase ..\t\*.exe ..\t\*.dll ..\t\*.bat -@erase ..\x2p\*.exe ..\x2p\*.bat -@erase *.ilk