Misc/NEWS entries for issue 7117.
[python.git] / PC / VS7.1 / readme.txt
blobfdd305021390bbae815514ec8ba9dd18d667eefa
1 Building Python using VC++ 7.1
2 -------------------------------------
3 This directory is used to build Python for Win32 platforms, e.g. Windows
4 95, 98 and NT.  It requires Microsoft Visual C++ 7.1
5 (a.k.a. Visual Studio .NET 2003).
6 (For other Windows platforms and compilers, see ../PC/readme.txt.)
8 All you need to do is open the workspace "pcbuild.sln" in MSVC++, select
9 the Debug or Release setting (using "Solution Configuration" from
10 the "Standard" toolbar"), and build the projects.
12 The proper order to build subprojects:
14 1) pythoncore (this builds the main Python DLL and library files,
15                python27.{dll, lib} in Release mode)
16               NOTE:  in previous releases, this subproject was
17               named after the release number, e.g. python20.
19 2) python (this builds the main Python executable,
20            python.exe in Release mode)
22 3) the other subprojects, as desired or needed (note:  you probably don't
23    want to build most of the other subprojects, unless you're building an
24    entire Python distribution from scratch, or specifically making changes
25    to the subsystems they implement, or are running a Python core buildbot
26    test slave; see SUBPROJECTS below)
28 When using the Debug setting, the output files have a _d added to
29 their name:  python27_d.dll, python_d.exe, parser_d.pyd, and so on.
31 SUBPROJECTS
32 -----------
33 These subprojects should build out of the box.  Subprojects other than the
34 main ones (pythoncore, python, pythonw) generally build a DLL (renamed to
35 .pyd) from a specific module so that users don't have to load the code
36 supporting that module unless they import the module.
38 pythoncore
39     .dll and .lib
40 python
41     .exe
42 pythonw
43     pythonw.exe, a variant of python.exe that doesn't pop up a DOS box
44 _socket
45     socketmodule.c
46 _testcapi
47     tests of the Python C API, run via Lib/test/test_capi.py, and
48     implemented by module Modules/_testcapimodule.c
49 pyexpat
50     Python wrapper for accelerated XML parsing, which incorporates stable
51     code from the Expat project:  http://sourceforge.net/projects/expat/
52 select
53     selectmodule.c
54 unicodedata
55     large tables of Unicode data
56 winsound
57     play sounds (typically .wav files) under Windows
59 The following subprojects will generally NOT build out of the box.  They
60 wrap code Python doesn't control, and you'll need to download the base
61 packages first and unpack them into siblings of PC's parent
62 directory; for example, if this directory is ....\dist\trunk\PC\VS7.1,
63 unpack into new subdirectories of dist\.
65 _tkinter
66     Python wrapper for the Tk windowing system.  Requires building
67     Tcl/Tk first.  Following are instructions for Tcl/Tk 8.4.12.
69     Get source
70     ----------
71     In the dist directory, run
72     svn export http://svn.python.org/projects/external/tcl8.4.12
73     svn export http://svn.python.org/projects/external/tk8.4.12
74     svn export http://svn.python.org/projects/external/tix-8.4.0
76     Build Tcl first (done here w/ MSVC 7.1 on Windows XP)
77     ---------------
78     Use "Start -> All Programs -> Microsoft Visual Studio .NET 2003
79          -> Visual Studio .NET Tools -> Visual Studio .NET 2003 Command Prompt"
80     to get a shell window with the correct environment settings
81     cd dist\tcl8.4.12\win
82     nmake -f makefile.vc
83     nmake -f makefile.vc INSTALLDIR=..\..\tcltk install
85     XXX Should we compile with OPTS=threads?
87     Optional:  run tests, via
88         nmake -f makefile.vc test
90         On WinXP Pro, wholly up to date as of 30-Aug-2004:
91         all.tcl:        Total   10678   Passed  9969    Skipped 709     Failed  0
92         Sourced 129 Test Files.
94     Build Tk
95     --------
96     cd dist\tk8.4.12\win
97     nmake -f makefile.vc TCLDIR=..\..\tcl8.4.12
98     nmake -f makefile.vc TCLDIR=..\..\tcl8.4.12 INSTALLDIR=..\..\tcltk install
100     XXX Should we compile with OPTS=threads?
102     XXX Our installer copies a lot of stuff out of the Tcl/Tk install
103     XXX directory.  Is all of that really needed for Python use of Tcl/Tk?
105     Optional:  run tests, via
106         nmake -f makefile.vc TCLDIR=..\..\tcl8.4.12 test
108         On WinXP Pro, wholly up to date as of 30-Aug-2004:
109         all.tcl:        Total   8420    Passed  6826    Skipped 1581    Failed  13
110         Sourced 91 Test Files.
111         Files with failing tests: canvImg.test scrollbar.test textWind.test winWm.test
113    Built Tix
114    ---------
115    cd dist\tix-8.4.0\win
116    nmake -f python.mak
117    nmake -f python.mak install
120     Python wrapper for the libbz2 compression library.  Homepage
121         http://sources.redhat.com/bzip2/
122     Download the source from the python.org copy into the dist
123     directory:
125     svn export http://svn.python.org/projects/external/bzip2-1.0.3
127     A custom pre-link step in the bz2 project settings should manage to
128     build bzip2-1.0.3\libbz2.lib by magic before bz2.pyd (or bz2_d.pyd) is
129     linked in VS7.1\.
130     However, the bz2 project is not smart enough to remove anything under
131     bzip2-1.0.3\ when you do a clean, so if you want to rebuild bzip2.lib
132     you need to clean up bzip2-1.0.3\ by hand.
134     The build step shouldn't yield any warnings or errors, and should end
135     by displaying 6 blocks each terminated with
136         FC: no differences encountered
138     All of this managed to build bzip2-1.0.3\libbz2.lib, which the Python
139     project links in.
142 _bsddb
143     To use the version of bsddb that Python is built with by default, invoke
144     (in the dist directory)
146      svn export http://svn.python.org/projects/external/db-4.4.20
149     Then open a VS.NET 2003 shell, and invoke:
151        devenv db-4.4.20\build_win32\Berkeley_DB.sln /build Release /project db_static
153     and do that a second time for a Debug build too:
155        devenv db-4.4.20\build_win32\Berkeley_DB.sln /build Debug /project db_static
157     Alternatively, if you want to start with the original sources,
158     go to Sleepycat's download page:
159         http://www.sleepycat.com/downloads/releasehistorybdb.html
161     and download version 4.4.20.
163     With or without strong cryptography? You can choose either with or
164     without strong cryptography, as per the instructions below.  By
165     default, Python is built and distributed WITHOUT strong crypto.
167     Unpack the sources; if you downloaded the non-crypto version, rename
168     the directory from db-4.4.20.NC to db-4.4.20.
170     Now apply any patches that apply to your version.
172     Open
173         dist\db-4.4.20\docs\index.html
175     and follow the "Windows->Building Berkeley DB with Visual C++ .NET"
176     instructions for building the Sleepycat
177     software.  Note that Berkeley_DB.dsw is in the build_win32 subdirectory.
178     Build the "db_static" project, for "Release" mode.
180     To run extensive tests, pass "-u bsddb" to regrtest.py.  test_bsddb3.py
181     is then enabled.  Running in verbose mode may be helpful.
183     XXX The test_bsddb3 tests don't always pass, on Windows (according to
184     XXX me) or on Linux (according to Barry).  (I had much better luck
185     XXX on Win2K than on Win98SE.)  The common failure mode across platforms
186     XXX is
187     XXX     DBAgainError: (11, 'Resource temporarily unavailable -- unable
188     XXX                         to join the environment')
189     XXX
190     XXX and it appears timing-dependent.  On Win2K I also saw this once:
191     XXX
192     XXX test02_SimpleLocks (bsddb.test.test_thread.HashSimpleThreaded) ...
193     XXX Exception in thread reader 1:
194     XXX Traceback (most recent call last):
195     XXX File "C:\Code\python\lib\threading.py", line 411, in __bootstrap
196     XXX    self.run()
197     XXX File "C:\Code\python\lib\threading.py", line 399, in run
198     XXX    apply(self.__target, self.__args, self.__kwargs)
199     XXX File "C:\Code\python\lib\bsddb\test\test_thread.py", line 268, in
200     XXX                  readerThread
201     XXX    rec = c.next()
202     XXX DBLockDeadlockError: (-30996, 'DB_LOCK_DEADLOCK: Locker killed
203     XXX                                to resolve a deadlock')
204     XXX
205     XXX I'm told that DBLockDeadlockError is expected at times.  It
206     XXX doesn't cause a test to fail when it happens (exceptions in
207     XXX threads are invisible to unittest).
209     Building for Win64:
210     - open a VS.NET 2003 command prompt
211     - run the SDK setenv.cmd script, passing /RETAIL and the target
212       architecture (/SRV64 for Itanium, /X64 for AMD64)
213     - build BerkeleyDB with the solution configuration matching the
214       target ("Release IA64" for Itanium, "Release AMD64" for AMD64), e.g.
215     devenv db-4.4.20\build_win32\Berkeley_DB.sln /build "Release AMD64" /project db_static /useenv
217 _sqlite3
218     Python wrapper for SQLite library.
219     
220     Get the source code through
221     
222     svn export http://svn.python.org/projects/external/sqlite-source-3.3.4
223     
224     To use the extension module in a Python build tree, copy sqlite3.dll into
225     the VS7.1 folder.
227 _ssl
228     Python wrapper for the secure sockets library.
230     Get the source code through
232     svn export http://svn.python.org/projects/external/openssl-0.9.8a
234     Alternatively, get the latest version from http://www.openssl.org.
235     You can (theoretically) use any version of OpenSSL you like - the
236     build process will automatically select the latest version.
238     You must also install ActivePerl from
239         http://www.activestate.com/Products/ActivePerl/
240     as this is used by the OpenSSL build process.  Complain to them <wink>.
242     The MSVC project simply invokes build_ssl.py to perform
243     the build.  This Python script locates and builds your OpenSSL
244     installation, then invokes a simple makefile to build the final .pyd.
246     build_ssl.py attempts to catch the most common errors (such as not
247     being able to find OpenSSL sources, or not being able to find a Perl
248     that works with OpenSSL) and give a reasonable error message.
249     If you have a problem that doesn't seem to be handled correctly
250     (eg, you know you have ActivePerl but we can't find it), please take
251     a peek at build_ssl.py and suggest patches.  Note that build_ssl.py
252     should be able to be run directly from the command-line.
254     build_ssl.py/MSVC isn't clever enough to clean OpenSSL - you must do
255     this by hand.
257 Building for Itanium
258 --------------------
260 The project files support a ReleaseItanium configuration which creates
261 Win64/Itanium binaries. For this to work, you need to install the Platform
262 SDK, in particular the 64-bit support. This includes an Itanium compiler
263 (future releases of the SDK likely include an AMD64 compiler as well).
264 In addition, you need the Visual Studio plugin for external C compilers,
265 from http://sf.net/projects/vsextcomp. The plugin will wrap cl.exe, to
266 locate the proper target compiler, and convert compiler options
267 accordingly. The project files require atleast version 0.9.
269 Building for AMD64
270 ------------------
272 The build process for the ReleaseAMD64 configuration is very similar
273 to the Itanium configuration; make sure you use the latest version of
274 vsextcomp.
276 Building Python Using the free MS Toolkit Compiler
277 --------------------------------------------------
279 The build process for Visual C++ can be used almost unchanged with the free MS
280 Toolkit Compiler. This provides a way of building Python using freely
281 available software.
283 Note that Microsoft have withdrawn the free MS Toolkit Compiler, so this can
284 no longer be considered a supported option. The instructions are still
285 correct, but you need to already have a copy of the compiler in order to use
286 them. Microsoft now supply Visual C++ 2008 Express Edition for free, but this
287 is NOT compatible with Visual C++ 7.1 (it uses a different C runtime), and so
288 cannot be used to build a version of Python compatible with the standard
289 python.org build. If you are interested in using Visual C++ 2008 Express
290 Edition, however, you should look at the PCBuild directory.
292 Requirements
294     To build Python, the following tools are required:
296     * The Visual C++ Toolkit Compiler
297         no longer available for download - see above
298     * A recent Platform SDK
299         from http://www.microsoft.com/downloads/details.aspx?FamilyID=484269e2-3b89-47e3-8eb7-1f2be6d7123a
300     * The .NET 1.1 SDK
301         from http://www.microsoft.com/downloads/details.aspx?FamilyID=9b3a2ca6-3647-4070-9f41-a333c6b9181d
303     [Does anyone have better URLs for the last 2 of these?]
305     The toolkit compiler is needed as it is an optimising compiler (the
306     compiler supplied with the .NET SDK is a non-optimising version). The
307     platform SDK is needed to provide the Windows header files and libraries
308     (the Windows 2003 Server SP1 edition, typical install, is known to work -
309     other configurations or versions are probably fine as well). The .NET 1.1
310     SDK is needed because it contains a version of msvcrt.dll which links to
311     the msvcr71.dll CRT. Note that the .NET 2.0 SDK is NOT acceptable, as it
312     references msvcr80.dll.
314     All of the above items should be installed as normal.
316     If you intend to build the openssl (needed for the _ssl extension) you
317     will need the C runtime sources installed as part of the platform SDK.
319     In addition, you will need Nant, available from
320     http://nant.sourceforge.net. The 0.85 release candidate 3 version is known
321     to work. This is the latest released version at the time of writing. Later
322     "nightly build" versions are known NOT to work - it is not clear at
323     present whether future released versions will work.
325 Setting up the environment
327     Start a platform SDK "build environment window" from the start menu. The
328     "Windows XP 32-bit retail" version is known to work.
330     Add the following directories to your PATH:
331         * The toolkit compiler directory
332         * The SDK "Win64" binaries directory
333         * The Nant directory
334     Add to your INCLUDE environment variable:
335         * The toolkit compiler INCLUDE directory
336     Add to your LIB environment variable:
337         * The toolkit compiler LIB directory
338         * The .NET SDK Visual Studio 2003 VC7\lib directory
340     The following commands should set things up as you need them:
342         rem Set these values according to where you installed the software
343         set TOOLKIT=C:\Program Files\Microsoft Visual C++ Toolkit 2003
344         set SDK=C:\Program Files\Microsoft Platform SDK
345         set NET=C:\Program Files\Microsoft Visual Studio .NET 2003
346         set NANT=C:\Utils\Nant
348         set PATH=%TOOLKIT%\bin;%PATH%;%SDK%\Bin\win64;%NANT%\bin
349         set INCLUDE=%TOOLKIT%\include;%INCLUDE%
350         set LIB=%TOOLKIT%\lib;%NET%\VC7\lib;%LIB%
352     The "win64" directory from the SDK is added to supply executables such as
353     "cvtres" and "lib", which are not available elsewhere. The versions in the
354     "win64" directory are 32-bit programs, so they are fine to use here.
356     That's it. To build Python (the core only, no binary extensions which
357     depend on external libraries) you just need to issue the command
359         nant -buildfile:python.build all
361     from within the VS7.1 directory.
363 Extension modules
365     To build those extension modules which require external libraries
366     (_tkinter, bz2, _bsddb, _sqlite3, _ssl) you can follow the instructions
367     for the Visual Studio build above, with a few minor modifications. These
368     instructions have only been tested using the sources in the Python
369     subversion repository - building from original sources should work, but
370     has not been tested.
372     For each extension module you wish to build, you should remove the
373     associated include line from the excludeprojects section of pc.build.
375     The changes required are:
377     _tkinter
378         The tix makefile (tix-8.4.0\win\makefile.vc) must be modified to
379         remove references to TOOLS32. The relevant lines should be changed to
380         read:
381             cc32 = cl.exe
382             link32 = link.exe
383             include32 = 
384         The remainder of the build instructions will work as given.
386     bz2
387         No changes are needed
389     _bsddb
390         The file db.build should be copied from the Python PCBuild directory
391         to the directory db-4.4.20\build_win32.
393         The file db_static.vcproj in db-4.4.20\build_win32 should be edited to
394         remove the string "$(SolutionDir)" - this occurs in 2 places, only
395         relevant for 64-bit builds. (The edit is required as otherwise, nant
396         wants to read the solution file, which is not in a suitable form).
398         The bsddb library can then be build with the command
399             nant -buildfile:db.build all
400         run from the db-4.4.20\build_win32 directory.
402     _sqlite3
403         No changes are needed. However, in order for the tests to succeed, a
404         copy of sqlite3.dll must be downloaded, and placed alongside
405         python.exe.
407     _ssl
408         The documented build process works as written. However, it needs a
409         copy of the file setargv.obj, which is not supplied in the platform
410         SDK. However, the sources are available (in the crt source code). To
411         build setargv.obj, proceed as follows:
413         Copy setargv.c, cruntime.h and internal.h from %SDK%\src\crt to a
414         temporary directory.
415         Compile using "cl /c /I. /MD /D_CRTBLD setargv.c"
416         Copy the resulting setargv.obj to somewhere on your LIB environment
417         (%SDK%\lib is a reasonable place).
419         With setargv.obj in place, the standard build process should work
420         fine.
422 YOUR OWN EXTENSION DLLs
423 -----------------------
424 If you want to create your own extension module DLL, there's an example
425 with easy-to-follow instructions in ../PC/example/; read the file
426 readme.txt there first.