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