From da2c7419592ee13d34c9a88fe64f2dedaca9f99e Mon Sep 17 00:00:00 2001 From: Steve Hay Date: Fri, 30 Sep 2005 15:52:30 +0000 Subject: [PATCH] Make building perl on Win32 with the free VC++ toolkit easier Introduce new CCTYPE's MSVC70FREE and MSVC70 for the free and the full versions of MS VC++ 7.x respectively. Perl can now be built with the free VC++ toolkit simply by running "nmake CCTYPE=MSVC70FREE" with no hacking of the win32/Makefile required. Update README.win32 with these changes. Also add the CCTYPE MSVC to win32/Makefile. This is already supported in win32/makefile.mk and is useful for avoiding the use of -DELAYLOAD for MS VC++ 3.x through 5.x. Update README.win32 for this too. p4raw-id: //depot/perl@25672 --- README.win32 | 21 ++++++++++----------- win32/Makefile | 34 ++++++++++++++++++++++++---------- win32/makefile.mk | 38 +++++++++++++++++++++----------------- 3 files changed, 55 insertions(+), 38 deletions(-) diff --git a/README.win32 b/README.win32 index f825577..0397d79 100644 --- a/README.win32 +++ b/README.win32 @@ -42,7 +42,7 @@ system). Currently, this port is capable of using one of the following compilers on the Intel x86 architecture: Borland C++ version 5.02 or later - Microsoft Visual C++ version 4.2 or later + Microsoft Visual C++ version 2.0 or later MinGW with gcc gcc version 2.95.2 or later The last of these is a high quality freeware compiler. Use version @@ -223,11 +223,11 @@ from win32/Makefile and setargv.obj won't be required anyway. =back Perl should now build using the win32/Makefile. You will need to edit that -file to comment-out CCTYPE = MSVC60 (since that enables delay-loading of the -Winsock DLL which the free toolkit does not support) and to set CCHOME, -CCINCDIR and CCLIBDIR as per the environment setup above. You may also want to -change both mentions of the compiler's "-Gf" switch to "-GF" since the former -is deprecated in VC7 and will be removed from future versions. +file to set + + CCTYPE = MSVC70FREE + +and to set CCHOME, CCINCDIR and CCLIBDIR as per the environment setup above. =item Microsoft Platform SDK 64-bit Compiler @@ -317,10 +317,9 @@ The default value for CCHOME in the makefiles for Visual C++ may not be correct for some versions. Make sure the default exists and is valid. -You may also need to comment out a line C in the -makefile, in case you're using an older version of the Visual C++ compiler -(e.g. 6.0 without service packs) and if the linker reports an internal -error. +You may also need to comment out the C line in the +Makefile if you're using VC++ 6.0 without the latest service pack and +the linker reports an internal error. If you have either the source or a library that contains des_fcrypt(), enable the appropriate option in the makefile. A ready-to-use version @@ -908,6 +907,6 @@ Win9x support was added in 5.6 (Benjamin Stuhl). Support for 64-bit Windows added in 5.8 (ActiveState Corp). -Last updated: 16 June 2005 +Last updated: 30 September 2005 =cut diff --git a/win32/Makefile b/win32/Makefile index a5bba57..e66ef74 100644 --- a/win32/Makefile +++ b/win32/Makefile @@ -1,7 +1,7 @@ # # Makefile to build perl on Windows NT using Microsoft NMAKE. # Supported compilers: -# Visual C++ 2.0 through 6.0 (and possibly newer versions) +# Visual C++ 2.0 through 7.0 (and possibly newer versions) # MS Platform SDK 64-bit compiler and tools **experimental** # # This is set up to build a perl.exe that runs off a shared library @@ -88,11 +88,18 @@ USE_PERLIO = define USE_LARGE_FILES = define # -# uncomment one of the following lines if you are using either -# Visual C++ 2.x or Visual C++ 6.x (aka Visual Studio 98) +# uncomment exactly one of the following # +# Visual C++ 2.x #CCTYPE = MSVC20 +# Visual C++ > 2.x and < 6.x +#CCTYPE = MSVC +# Visual C++ 6.x (aka Visual Studio 98) CCTYPE = MSVC60 +# Visual C++ Toolkit 2003 (free version of Visual C++ 7.x command-line tools) +#CCTYPE = MSVC70FREE +# Visual C++ 7.x (aka Visual Studio .NET 2003) (full version) +#CCTYPE = MSVC70 # # uncomment next line if you want debug version of perl (big,slow) @@ -327,11 +334,10 @@ BUILDOPT = $(BUILDOPT) -DUSE_PERLIO ARCHNAME = $(ARCHNAME)-thread !ENDIF -# Visual Studio 98 specific -!IF "$(CCTYPE)" == "MSVC60" - -# VC 6.0 can load the socket dll on demand. Makes the test suite -# run in about 10% less time. +# Visual Studio 98 and .NET 2003 specific +# VC++ 6.x and 7.x can load DLL's on demand. Makes the test suite run in +# about 10% less time. (The free version of 7.x can't do this, however.) +!IF "$(CCTYPE)" == "MSVC60" || "$(CCTYPE)" == "MSVC70" DELAYLOAD = -DELAYLOAD:ws2_32.dll -DELAYLOAD:shell32.dll delayimp.lib !ENDIF @@ -411,6 +417,14 @@ DEFINES = $(DEFINES) -DWIN64 -DCONSERVATIVE OPTIMIZE = $(OPTIMIZE) -Wp64 -Op !ENDIF +# the string-pooling option -Gf is deprecated in VC++ 7.x and will be removed +# in later versions, so use read-only string-pooling (-GF) instead +!IF "$(CCTYPE)" == "MSVC70FREE" || "$(CCTYPE)" == "MSVC70" +STRPOOL = -GF +!ELSE +STRPOOL = -Gf +!ENDIF + !IF "$(USE_PERLCRT)" != "define" BUILDOPT = $(BUILDOPT) -DPERL_MSVCRT_READFIX !ENDIF @@ -429,7 +443,7 @@ LIBBASEFILES = $(LIBBASEFILES) 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) \ +CFLAGS = -nologo $(STRPOOL) -W3 $(INCLUDES) $(DEFINES) $(LOCDEFS) \ $(PCHFLAGS) $(OPTIMIZE) LINK_FLAGS = -nologo -nodefaultlib $(LINK_DBG) \ -libpath:"$(INST_COREDIR)" \ @@ -850,7 +864,7 @@ CFG_VARS = \ "archname=$(ARCHNAME)" \ "cc=$(CC)" \ "ld=$(LINK32)" \ - "ccflags=-nologo -Gf -W3 $(OPTIMIZE:"=\") $(DEFINES) $(BUILDOPT)" \ + "ccflags=-nologo $(STRPOOL) -W3 $(OPTIMIZE:"=\") $(DEFINES) $(BUILDOPT)" \ "cf_email=$(EMAIL)" \ "d_crypt=$(D_CRYPT)" \ "d_mymalloc=$(PERL_MALLOC)" \ diff --git a/win32/makefile.mk b/win32/makefile.mk index 7ab4755..a08afe1 100644 --- a/win32/makefile.mk +++ b/win32/makefile.mk @@ -1,9 +1,9 @@ # # Makefile to build perl on Windows NT using DMAKE. # Supported compilers: -# Visual C++ 2.0 through 6.0 (and possibly newer versions) -# Borland C++ 5.02 -# Mingw32 with gcc-2.95.2 or better **experimental** +# Visual C++ 2.0 through 7.0 (and possibly newer versions) +# Borland C++ 5.02 or better +# Mingw32 with gcc-2.95.2 or better # MS Platform SDK 64-bit compiler and tools **experimental** # # This is set up to build a perl.exe that runs off a shared library @@ -96,8 +96,12 @@ USE_LARGE_FILES *= define #CCTYPE *= MSVC20 # Visual C++ > 2.x and < 6.x #CCTYPE *= MSVC -# Visual C++ >= 6.x +# Visual C++ 6.x (aka Visual Studio 98) #CCTYPE *= MSVC60 +# Visual C++ Toolkit 2003 (free version of Visual C++ 7.x command-line tools) +#CCTYPE *= MSVC70FREE +# Visual C++ 7.x (aka Visual Studio .NET 2003) (full version) +#CCTYPE *= MSVC70 # Borland 5.02 or later #CCTYPE *= BORLAND # MinGW with gcc-2.95.2 or later @@ -330,19 +334,11 @@ ARCHNAME = MSWin32-$(PROCESSOR_ARCHITECTURE) ARCHNAME !:= $(ARCHNAME)-thread .ENDIF -# Visual Studio 98 specific -.IF "$(CCTYPE)" == "MSVC60" - -# VC 6.0 can load the socket dll on demand. Makes the test suite -# run in about 10% less time. +# Visual Studio 98 and .NET 2003 specific +# VC++ 6.x and 7.x can load DLL's on demand. Makes the test suite run in +# about 10% less time. (The free version of 7.x can't do this, however.) +.IF "$(CCTYPE)" == "MSVC60" || "$(CCTYPE)" == "MSVC70" DELAYLOAD *= -DELAYLOAD:ws2_32.dll -DELAYLOAD:shell32.dll delayimp.lib - -.IF "$(CFG)" == "Debug" -.ELSE -# VC 6.0 seems capable of compiling perl correctly with optimizations -# enabled. Anything earlier fails tests. -CFG *= Optimize -.ENDIF .ENDIF ARCHDIR = ..\lib\$(ARCHNAME) @@ -530,6 +526,14 @@ DEFINES += -DWIN64 -DCONSERVATIVE OPTIMIZE += -Wp64 -Op .ENDIF +# the string-pooling option -Gf is deprecated in VC++ 7.x and will be removed +# in later versions, so use read-only string-pooling (-GF) instead +.IF "$(CCTYPE)" == "MSVC70FREE" || "$(CCTYPE)" == "MSVC70" +STRPOOL = -GF +.ELSE +STRPOOL = -Gf +.ENDIF + .IF "$(USE_PERLCRT)" != "define" BUILDOPT += -DPERL_MSVCRT_READFIX .ENDIF @@ -548,7 +552,7 @@ LIBBASEFILES += 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) \ +CFLAGS = -nologo $(STRPOOL) -W3 $(INCLUDES) $(DEFINES) $(LOCDEFS) \ $(PCHFLAGS) $(OPTIMIZE) LINK_FLAGS = -nologo -nodefaultlib $(LINK_DBG) \ -libpath:"$(INST_COREDIR)" \ -- 2.7.4