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