Make building perl on Win32 with the free VC++ toolkit easier
Steve Hay [Fri, 30 Sep 2005 15:52:30 +0000 (15:52 +0000)]
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
win32/Makefile
win32/makefile.mk

index f825577..0397d79 100644 (file)
@@ -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<DELAYLOAD = ...> 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<DELAYLOAD = ...> 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
index a5bba57..e66ef74 100644 (file)
@@ -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)"             \
index 7ab4755..a08afe1 100644 (file)
@@ -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)" \