Updates for building on Win32 with Visual C++ 2005 Express Edition
Steve Hay [Tue, 10 Oct 2006 10:25:06 +0000 (10:25 +0000)]
Add some instructions in README.win32, clarify macro comments and add
missing macros to makefile.mk, and drop the GLOBEXEBUILD macro from
Makefile--the Express Edition of Visual C++ 2005 is free and includes
setargv.obj, so there is no need to support the .NET 2.0 SDK compiler
which didn't include it.

Unfortunately, the build still doesn't work yet--my attempt got as far
as building extensions, but miniperl.exe crashed.  Hopefully this can
be sorted out soon.

p4raw-id: //depot/perl@28978

README.win32
win32/Makefile
win32/makefile.mk

index 066a6dc..4d7e2c9 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 2.0 or later
+      Microsoft Visual C++  version 2.0 through 7.0 (and possibly later)
       MinGW with gcc        gcc version 2.95.2 or later
 
 The last of these is a high quality freeware compiler.  Use version
@@ -52,10 +52,11 @@ The Borland C++ and Microsoft Visual C++ compilers are also now being given
 away free.  The Borland compiler is available as "Borland C++ Compiler Free
 Command Line Tools" and is the same compiler that ships with the full
 "Borland C++ Builder" product.  The Microsoft compiler is available as
-"Visual C++ Toolkit 2003", and also as part of the ".NET Framework SDK", and
-is the same compiler that ships with "Visual Studio .NET 2003 Professional".
-Currently, Perl cannot be compiled with Visual C++ 8.0, which is part of the
-.NET 2.0 Framework SDK and Visual Studio 2005.  
+"Visual C++ Toolkit 2003" or "Visual C++ 2005 Express Edition" (and also as
+part of the ".NET Framework SDK") and is the same compiler that ships with
+"Visual C++ .NET 2003 Professional" or "Visual C++ 2005 Professional"
+respectively.  Currently, Perl cannot be compiled with Visual C++ 2005 (aka
+Visual C++ 8.x).
 
 This port can also be built on the Intel IA64 using:
 
@@ -135,10 +136,54 @@ and edit win32/config.vc to change "make=nmake" into "make=dmake".  The
 latter step is only essential if you want to use dmake as your default
 make for building extensions using MakeMaker.
 
+=item Microsoft Visual C++ 2005 Express Edition
+
+B<NOTE: While these instructions are in theory correct, Perl currently cannot
+be compiled with Visual C++ 2005.>
+
+This free version of Visual C++ 2005 Professional contains the same compiler
+and linker that ship with the full version, but doesn't contain everything
+necessary to build Perl.
+
+You will also need to download the "Platform SDK" (the "Core SDK" and "MDAC
+SDK" components are required) for more header files and libraries.
+
+These packages can both be downloaded by searching in the Download Center at
+http://www.microsoft.com/downloads/search.aspx?displaylang=en.  (Providing exact
+links to these packages has proven a pointless task because the links keep on
+changing so often.)
+
+Try to obtain the latest version of the Platform SDK.  Sometimes these packages
+contain a particular Windows OS version in their name, but actually work on
+other OS versions too.  For example, the "Windows Server 2003 R2 Platform SDK"
+also runs on Windows XP SP2 and Windows 2000.
+
+According to the download pages these packages are only supported on Windows
+2000/XP/2003, so trying to use these tools on Windows 95/98/ME and even Windows
+NT probably won't work.
+
+Install Visual C++ 2005 first, then the Platform SDK.  Setup your environment
+as follows (assuming default installation locations were chosen):
+
+       SET PATH=%SystemRoot%\system32;%SystemRoot%;C:\Program Files\Microsoft Visual Studio 8\Common7\IDE;C:\Program Files\Microsoft Visual Studio 8\VC\BIN;C:\Program Files\Microsoft Visual Studio 8\Common7\Tools;C:\Program Files\Microsoft Visual Studio 8\SDK\v2.0\bin;C:\WINDOWS\Microsoft.NET\Framework\v2.0.50727;C:\Program Files\Microsoft Visual Studio 8\VC\VCPackages;C:\Program Files\Microsoft Platform SDK\Bin
+
+       SET INCLUDE=C:\Program Files\Microsoft Visual Studio 8\VC\INCLUDE;C:\Program Files\Microsoft Platform SDK\include
+
+       SET LIB=C:\Program Files\Microsoft Visual Studio 8\VC\LIB;C:\Program Files\Microsoft Visual Studio 8\SDK\v2.0\lib;C:\Program Files\Microsoft Platform SDK\lib
+
+       SET LIBPATH=C:\WINDOWS\Microsoft.NET\Framework\v2.0.50727
+
+Perl should now build using the win32/Makefile.  You will need to edit that
+file to set
+
+       CCTYPE = MSVC80FREE
+
+and to set CCHOME, CCINCDIR and CCLIBDIR as per the environment setup above.
+
 =item Microsoft Visual C++ Toolkit 2003
 
 This free toolkit contains the same compiler and linker that ship with
-Visual Studio .NET 2003 Professional, but doesn't contain everything
+Visual C++ .NET 2003 Professional, but doesn't contain everything
 necessary to build Perl.
 
 You will also need to download the "Platform SDK" (the "Core SDK" and "MDAC
@@ -155,19 +200,21 @@ changing so often.)
 
 Try to obtain the latest version of the Platform SDK.  Sometimes these packages
 contain a particular Windows OS version in their name, but actually work on
-other OS versions too.  For example, the "Windows Server 2003 SP1 Platform SDK"
+other OS versions too.  For example, the "Windows Server 2003 R2 Platform SDK"
 also runs on Windows XP SP2 and Windows 2000.
 
-According to the download pages the Toolkit and the .NET Framework SDK are only
-supported on Windows 2000/XP/2003, so trying to use these tools on Windows
-95/98/ME and even Windows NT probably won't work.
+According to the download pages these packages are only supported on Windows
+2000/XP/2003, so trying to use these tools on Windows 95/98/ME and even Windows
+NT probably won't work.
 
 Install the Toolkit first, then the Platform SDK, then the .NET Framework SDK.
 Setup your environment as follows (assuming default installation locations
 were chosen):
 
        SET PATH=%SystemRoot%\system32;%SystemRoot%;C:\Program Files\Microsoft Visual C++ Toolkit 2003\bin;C:\Program Files\Microsoft SDK\Bin;C:\Program Files\Microsoft.NET\SDK\v1.1\Bin
+
        SET INCLUDE=C:\Program Files\Microsoft Visual C++ Toolkit 2003\include;C:\Program Files\Microsoft SDK\include;C:\Program Files\Microsoft Visual Studio .NET 2003\Vc7\include
+
        SET LIB=C:\Program Files\Microsoft Visual C++ Toolkit 2003\lib;C:\Program Files\Microsoft SDK\lib;C:\Program Files\Microsoft Visual Studio .NET 2003\Vc7\lib
 
 Several required files will still be missing:
index d65a9fc..b788667 100644 (file)
@@ -94,15 +94,15 @@ USE_LARGE_FILES     = define
 #CCTYPE                = MSVC20
 # Visual C++ > 2.x and < 6.x
 #CCTYPE                = MSVC
-# Visual C++ 6.x (aka Visual Studio 98)
+# Visual C++ 6.x (aka Visual C++ 98)
 CCTYPE         = MSVC60
-# Visual C++ Toolkit 2003 (free version of Visual C++ 7.x command-line tools)
+# Visual C++ Toolkit 2003 (aka Visual C++ 7.x) (free command-line tools)
 #CCTYPE                = MSVC70FREE
-# Visual C++ 7.x (aka Visual Studio .NET 2003) (full version)
+# Visual C++ .NET 2003 (aka Visual C++ 7.x) (full version)
 #CCTYPE                = MSVC70
-# Visual C++ Toolkit 2005 (free version of Visual C++ 8.x command-line tools)
+# Visual C++ 2005 Express Edition (aka Visual C++ 8.x) (free version)
 #CCTYPE                = MSVC80FREE
-# Visual C++ 8.x (aka Visual Studio 2005) (full version)
+# Visual C++ 2005 (aka Visual C++ 8.x) (full version)
 #CCTYPE                = MSVC80
 
 #
@@ -349,11 +349,12 @@ BUILDOPT  = $(BUILDOPT) -DUSE_PERLIO
 ARCHNAME       = $(ARCHNAME)-thread
 !ENDIF
 
-# 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.)
-# The addition of VC++ 8.x is currently an educated guess.
-!IF "$(CCTYPE)" == "MSVC60" || "$(CCTYPE)" == "MSVC70" || "$(CCTYPE)" == "MSVC80"
+# Visual C++ 98, .NET 2003 and 2005 specific.
+# VC++ 6.x, 7.x and 8.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, but the free
+# version of 8.x can.)
+!IF "$(CCTYPE)" == "MSVC60" || "$(CCTYPE)" == "MSVC70" || \
+    "$(CCTYPE)" == "MSVC80" || "$(CCTYPE)" == "MSVC80FREE"
 DELAYLOAD      = -DELAYLOAD:ws2_32.dll -DELAYLOAD:shell32.dll delayimp.lib
 !ENDIF
 
@@ -507,12 +508,6 @@ CONFIGPM   = ..\lib\Config.pm ..\lib\Config_heavy.pl
 MINIMOD                = ..\lib\ExtUtils\Miniperl.pm
 X2P            = ..\x2p\a2p.exe
   
-# With the .NET 2.0 SDK, setargs.obj is not available with the .NET SDK.  It
-# only comes with Visual Studio 2005.
-!IF "$(CCTYPE)" != "MSVC80FREE"
-GLOBEXEBUILD         = 
-!ENDIF
-
 # Unicode data files generated by mktables
 FIRSTUNIFILE     = ..\lib\unicore\Canonical.pl
 UNIDATAFILES    = ..\lib\unicore\Canonical.pl ..\lib\unicore\Exact.pl \
@@ -931,12 +926,8 @@ $(DYNALOADER)$(o) : $(DYNALOADER).c $(CORE_H) $(EXTDIR)\DynaLoader\dlutils.c
 #------------------------------------------------------------
 
 $(GLOBEXE) : perlglob$(o)
-!ifdef GLOBEXEBUILD
        $(LINK32) $(LINK_FLAGS) $(LIBFILES) -out:$@ -subsystem:$(SUBSYS) \
            perlglob$(o) setargv$(o)
-!else
-       echo Skipping $(GLOBEXE)
-!endif
 
 perlglob$(o)  : perlglob.c
 
index 5239ef9..a96625f 100644 (file)
@@ -3,7 +3,7 @@
 # Supported compilers:
 #      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
+#      MinGW 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,12 +96,16 @@ USE_LARGE_FILES     *= define
 #CCTYPE                *= MSVC20
 # Visual C++ > 2.x and < 6.x
 #CCTYPE                *= MSVC
-# Visual C++ 6.x (aka Visual Studio 98)
+# Visual C++ 6.x (aka Visual C++ 98)
 #CCTYPE                *= MSVC60
-# Visual C++ Toolkit 2003 (free version of Visual C++ 7.x command-line tools)
+# Visual C++ Toolkit 2003 (aka Visual C++ 7.x) (free command-line tools)
 #CCTYPE                *= MSVC70FREE
-# Visual C++ 7.x (aka Visual Studio .NET 2003) (full version)
+# Visual C++ .NET 2003 (aka Visual C++ 7.x) (full version)
 #CCTYPE                *= MSVC70
+# Visual C++ 2005 Express Edition (aka Visual C++ 8.x) (free version)
+#CCTYPE                *= MSVC80FREE
+# Visual C++ 2005 (aka Visual C++ 8.x) (full version)
+#CCTYPE                *= MSVC80
 # Borland 5.02 or later
 #CCTYPE                *= BORLAND
 # MinGW with gcc-2.95.2 or later
@@ -344,10 +348,12 @@ ARCHNAME  = MSWin32-$(ARCHITECTURE)
 ARCHNAME       !:= $(ARCHNAME)-thread
 .ENDIF
 
-# 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"
+# Visual C++ 98, .NET 2003 and 2005 specific.
+# VC++ 6.x, 7.x and 8.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, but the free
+# version of 8.x can.)
+.IF "$(CCTYPE)" == "MSVC60" || "$(CCTYPE)" == "MSVC70" \
+    "$(CCTYPE)" == "MSVC80" || "$(CCTYPE)" == "MSVC80FREE"
 DELAYLOAD      *= -DELAYLOAD:ws2_32.dll -DELAYLOAD:shell32.dll delayimp.lib
 .ENDIF