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