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