From: Steve Hay Date: Tue, 10 Oct 2006 10:25:06 +0000 (+0000) Subject: Updates for building on Win32 with Visual C++ 2005 Express Edition X-Git-Url: http://git.shadowcat.co.uk/gitweb/gitweb.cgi?a=commitdiff_plain;h=1c847d4b24b4811e0a135df4f0a725e3a5ccb70b;p=p5sagit%2Fp5-mst-13.2.git Updates for building on Win32 with Visual C++ 2005 Express Edition 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 --- diff --git a/README.win32 b/README.win32 index 066a6dc..4d7e2c9 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 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 + +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: diff --git a/win32/Makefile b/win32/Makefile index d65a9fc..b788667 100644 --- a/win32/Makefile +++ b/win32/Makefile @@ -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 diff --git a/win32/makefile.mk b/win32/makefile.mk index 5239ef9..a96625f 100644 --- a/win32/makefile.mk +++ b/win32/makefile.mk @@ -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