blob: f8257e394de3848bd7f32973ab0253d9e1cd7783 [file] [log] [blame]
Martin v. Löwisb38b0192004-01-02 21:13:28 +00001Building Python using VC++ 7.1
Guido van Rossuma29b3602000-03-29 01:51:37 +00002-------------------------------------
Tim Peters4b5fb072000-07-01 00:03:43 +00003This directory is used to build Python for Win32 platforms, e.g. Windows
Martin v. Löwisb38b0192004-01-02 21:13:28 +0000495, 98 and NT. It requires Microsoft Visual C++ 7.1
5(a.k.a. Visual Studio .NET 2003).
Guido van Rossum15b239f1998-05-26 14:16:23 +00006(For other Windows platforms and compilers, see ../PC/readme.txt.)
7
Martin v. Löwisb38b0192004-01-02 21:13:28 +00008All 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.
Guido van Rossum15b239f1998-05-26 14:16:23 +000011
Tim Petersbefc97c2001-01-18 19:01:39 +000012The proper order to build subprojects:
Guido van Rossum15b239f1998-05-26 14:16:23 +000013
Tim Peters97c96402001-01-17 23:23:13 +0000141) pythoncore (this builds the main Python DLL and library files,
Tim Petersbefc97c2001-01-18 19:01:39 +000015 python21.{dll, lib} in Release mode)
16 NOTE: in previous releases, this subproject was
17 named after the release number, e.g. python20.
Guido van Rossum15b239f1998-05-26 14:16:23 +000018
Tim Petersbefc97c2001-01-18 19:01:39 +0000192) python (this builds the main Python executable,
20 python.exe in Release mode)
Tim Peters4b5fb072000-07-01 00:03:43 +000021
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; see SUBPROJECTS below)
Guido van Rossum15b239f1998-05-26 14:16:23 +000026
27When using the Debug setting, the output files have a _d added to
Martin v. Löwisb38b0192004-01-02 21:13:28 +000028their name: python24_d.dll, python_d.exe, parser_d.pyd, and so on.
Guido van Rossume79cf321998-07-07 22:35:03 +000029
Tim Peters4b5fb072000-07-01 00:03:43 +000030SUBPROJECTS
31-----------
Tim Peters610a8272000-07-01 02:51:23 +000032These subprojects should build out of the box. Subprojects other than the
Tim Petersbefc97c2001-01-18 19:01:39 +000033main ones (pythoncore, python, pythonw) generally build a DLL (renamed to
Tim Peters610a8272000-07-01 02:51:23 +000034.pyd) from a specific module so that users don't have to load the code
Tim Peters4b5fb072000-07-01 00:03:43 +000035supporting that module unless they import the module.
Guido van Rossume79cf321998-07-07 22:35:03 +000036
Tim Peters97c96402001-01-17 23:23:13 +000037pythoncore
Tim Peters4b5fb072000-07-01 00:03:43 +000038 .dll and .lib
39python
40 .exe
41pythonw
42 pythonw.exe, a variant of python.exe that doesn't pop up a DOS box
43_socket
44 socketmodule.c
Tim Petersd66595f2001-02-04 03:09:53 +000045_testcapi
Tim Petersb16c56f2001-02-02 21:24:51 +000046 tests of the Python C API, run via Lib/test/test_capi.py, and
Tim Petersd66595f2001-02-04 03:09:53 +000047 implemented by module Modules/_testcapimodule.c
Tim Petersb012a152002-02-13 23:56:46 +000048pyexpat
49 Python wrapper for accelerated XML parsing, which incorporates stable
50 code from the Expat project: http://sourceforge.net/projects/expat/
Tim Peters4b5fb072000-07-01 00:03:43 +000051select
52 selectmodule.c
Tim Peters19f52c22001-01-24 10:07:22 +000053unicodedata
Tim Peters4b5fb072000-07-01 00:03:43 +000054 large tables of Unicode data
Tim Peters4b5fb072000-07-01 00:03:43 +000055winsound
56 play sounds (typically .wav files) under Windows
57
58The following subprojects will generally NOT build out of the box. They
59wrap code Python doesn't control, and you'll need to download the base
Tim Petersaff12842000-08-25 06:52:44 +000060packages first and unpack them into siblings of PCbuilds's parent
61directory; for example, if your PCbuild is .......\dist\src\PCbuild\,
62unpack into new subdirectories of dist\.
Tim Peters4b5fb072000-07-01 00:03:43 +000063
64_tkinter
Tim Peters077736b2002-11-14 23:24:40 +000065 Python wrapper for the Tk windowing system. Requires building
Guido van Rossumd54357d2004-03-20 21:00:26 +000066 Tcl/Tk first. Following are instructions for Tcl/Tk 8.4.5; these
67 should work for version 8.4.6 too, with suitable substitutions:
Tim Peters077736b2002-11-14 23:24:40 +000068
69 Get source
70 ----------
71 Go to
72 http://prdownloads.sourceforge.net/tcl/
73 and download
Martin v. Löwisb38b0192004-01-02 21:13:28 +000074 tcl845-src.zip
75 tk845-src.zip
Tim Peters077736b2002-11-14 23:24:40 +000076 Unzip into
Martin v. Löwisb38b0192004-01-02 21:13:28 +000077 dist\tcl8.4.5\
78 dist\tk8.4.5\
Tim Peters077736b2002-11-14 23:24:40 +000079 respectively.
80
Guido van Rossumd54357d2004-03-20 21:00:26 +000081 Build Tcl first (done here w/ MSVC 7.1 on Windows XP)
Tim Peters6c629952002-11-15 18:36:11 +000082 ---------------
Guido van Rossumd54357d2004-03-20 21:00:26 +000083 Use "Start -> All Programs -> Microsoft Visual Studio .NET 2003
84 -> Visual Studio .NET Tools -> Visual Studio .NET 2003 Command Prompt"
85 to get a shell window with the correct environment settings
Martin v. Löwisb38b0192004-01-02 21:13:28 +000086 cd dist\tcl8.4.5\win
Tim Peters077736b2002-11-14 23:24:40 +000087 nmake -f makefile.vc
88 nmake -f makefile.vc INSTALLDIR=..\..\tcl84 install
89
90 XXX Should we compile with OPTS=threads?
91
Tim Peters011de6cc2004-04-11 17:29:12 +000092 Optional: run tests, via
93 nmake -f makefile.vc test
94
95 On WinXP Pro, wholly up to date as of 11-Apr-2004:
96 all.tcl: Total 10564 Passed 9855 Skipped 708 Failed 1
97 Sourced 129 Test Files.
98 Files with failing tests: httpold.test
Tim Peters077736b2002-11-14 23:24:40 +000099
Tim Peters077736b2002-11-14 23:24:40 +0000100 Build Tk
Tim Peters6c629952002-11-15 18:36:11 +0000101 --------
Martin v. Löwisb38b0192004-01-02 21:13:28 +0000102 cd dist\tk8.4.5\win
103 nmake -f makefile.vc TCLDIR=..\..\tcl8.4.5
104 nmake -f makefile.vc TCLDIR=..\..\tcl8.4.5 INSTALLDIR=..\..\tcl84 install
Tim Peters077736b2002-11-14 23:24:40 +0000105
106 XXX Should we compile with OPTS=threads?
107
Tim Peters077736b2002-11-14 23:24:40 +0000108 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
Tim Peters011de6cc2004-04-11 17:29:12 +0000111 Optional: run tests, via
112 nmake -f makefile.vc TCLDIR=..\..\tcl8.4.5 test
113
114 On WinXP Pro, wholly up to date as of 11-Apr-2004:
115 all.tcl: Total 8327 Passed 6717 Skipped 1579 Failed 31
116 Sourced 182 Test Files.
117 Files with failing tests: canvImg.test scale.test scrollbar.test textWind.test winWm.test
118
119
Tim Petersa406b582002-11-19 17:38:27 +0000120 Make sure the installer matches
121 -------------------------------
122 Ensure that the Wise compiler vrbl _TCLDIR_ is set to the name of
123 the common Tcl/Tk installation directory (tcl84 for the instructions
124 above). This is needed so the installer can copy various Tcl/Tk
125 files into the Python distribution.
126
Tim Peters4b5fb072000-07-01 00:03:43 +0000127
128zlib
Tim Petersee826f82001-01-31 19:39:44 +0000129 Python wrapper for the zlib compression library. Get the source code
Jeremy Hylton73b3df92004-01-09 16:05:07 +0000130 for version 1.2.1 from a convenient mirror at:
Tim Peters6077f642002-03-13 21:51:55 +0000131 http://www.gzip.org/zlib/
Jeremy Hylton73b3df92004-01-09 16:05:07 +0000132 Unpack into dist\zlib-1.2.1.
Tim Petersee826f82001-01-31 19:39:44 +0000133 A custom pre-link step in the zlib project settings should manage to
Jeremy Hylton73b3df92004-01-09 16:05:07 +0000134 build zlib-1.2.1\zlib.lib by magic before zlib.pyd (or zlib_d.pyd) is
Tim Petersee826f82001-01-31 19:39:44 +0000135 linked in PCbuild\.
136 However, the zlib project is not smart enough to remove anything under
Jeremy Hylton73b3df92004-01-09 16:05:07 +0000137 zlib-1.2.1\ when you do a clean, so if you want to rebuild zlib.lib
138 you need to clean up zlib-1.2.1\ by hand.
Tim Peters4b5fb072000-07-01 00:03:43 +0000139
Tim Petersb0ead4e2002-11-09 04:48:58 +0000140bz2
141 Python wrapper for the libbz2 compression library. Homepage
142 http://sources.redhat.com/bzip2/
143 Download the source tarball, bzip2-1.0.2.tar.gz.
Tim Peters077736b2002-11-14 23:24:40 +0000144 Unpack into dist\bzip2-1.0.2. WARNING: If you're using WinZip, you
Tim Petersb0ead4e2002-11-09 04:48:58 +0000145 must disable its "TAR file smart CR/LF conversion" feature (under
146 Options -> Configuration -> Miscellaneous -> Other) for the duration.
Tim Peters077736b2002-11-14 23:24:40 +0000147
Thomas Heller46a007e2003-08-20 18:27:36 +0000148 A custom pre-link step in the bz2 project settings should manage to
149 build bzip2-1.0.2\libbz2.lib by magic before bz2.pyd (or bz2_d.pyd) is
150 linked in PCbuild\.
151 However, the bz2 project is not smart enough to remove anything under
152 bzip2-1.0.2\ when you do a clean, so if you want to rebuild bzip2.lib
153 you need to clean up bzip2-1.0.2\ by hand.
Tim Peters077736b2002-11-14 23:24:40 +0000154
Thomas Heller46a007e2003-08-20 18:27:36 +0000155 The build step shouldn't yield any warnings or errors, and should end
Tim Petersb0ead4e2002-11-09 04:48:58 +0000156 by displaying 6 blocks each terminated with
157 FC: no differences encountered
158 If FC finds differences, see the warning abou WinZip above (when I
159 first tried it, sample3.ref failed due to CRLF conversion).
Tim Peterscaba60a2004-01-04 02:04:35 +0000160
Tim Petersb0ead4e2002-11-09 04:48:58 +0000161 All of this managed to build bzip2-1.0.2\libbz2.lib, which the Python
162 project links in.
163
164
Tim Peters78e35f92002-11-22 20:00:34 +0000165_bsddb
Tim Peters00640262003-01-24 15:31:31 +0000166 Go to Sleepycat's download page:
167 http://www.sleepycat.com/download/
Tim Petersb0ead4e2002-11-09 04:48:58 +0000168
Mark Hammond2362da82004-01-06 04:04:01 +0000169 and download version 4.2.52.
Tim Peters011de6cc2004-04-11 17:29:12 +0000170
171 With or without strong cryptography? You can choose either with or
172 without strong cryptography, as per the instructions below. By
Thomas Heller81391402004-07-02 08:58:46 +0000173 default, Python is built and distributed WITHOUT strong crypto.
Tim Peters011de6cc2004-04-11 17:29:12 +0000174
Mark Hammond2362da82004-01-06 04:04:01 +0000175 Unpack into the dist\. directory, ensuring you expand with folder names.
Tim Peters011de6cc2004-04-11 17:29:12 +0000176
Mark Hammond2362da82004-01-06 04:04:01 +0000177 If you downloaded with strong crypto, this will create a dist\db-4.2.52
178 directory, and is ready to use.
Tim Peters011de6cc2004-04-11 17:29:12 +0000179
180 If you downloaded WITHOUT strong crypto, this will create a
Mark Hammond2362da82004-01-06 04:04:01 +0000181 dist\db-4.2.52.NC directory - this directory should be renamed to
182 dist\db-4.2.52 before use.
Tim Peters011de6cc2004-04-11 17:29:12 +0000183
Tim Petersa0d781a2004-04-11 18:23:06 +0000184 As of 11-Apr-2004, you also need to download and manually apply two
185 patches before proceeding (and the sleepycat download page tells you
186 about this). Cygwin patch worked for me. cd to dist\db-4.2.52 and
187 use "patch -p0 < patchfile" once for each downloaded patchfile.
188
Tim Peters00640262003-01-24 15:31:31 +0000189 Open
Martin v. Löwisb38b0192004-01-02 21:13:28 +0000190 dist\db-4.2.52\docs\index.html
Tim Peters00640262003-01-24 15:31:31 +0000191
Mark Hammond2362da82004-01-06 04:04:01 +0000192 and follow the "Windows->Building Berkeley DB with Visual C++ .NET"
193 instructions for building the Sleepycat
Tim Peters00640262003-01-24 15:31:31 +0000194 software. Note that Berkeley_DB.dsw is in the build_win32 subdirectory.
Guido van Rossumd54357d2004-03-20 21:00:26 +0000195 Build the "Release Static" version.
Tim Peters00640262003-01-24 15:31:31 +0000196
Guido van Rossumd54357d2004-03-20 21:00:26 +0000197 XXX We're linking against Release_static\libdb42s.lib.
Tim Peters84c7a3f2002-11-23 18:48:06 +0000198 XXX This yields the following warnings:
199"""
200Compiling...
201_bsddb.c
202Linking...
203 Creating library ./_bsddb.lib and object ./_bsddb.exp
Martin v. Löwisb38b0192004-01-02 21:13:28 +0000204_bsddb.obj : warning LNK4217: locally defined symbol _malloc imported in function __db_associateCallback
205_bsddb.obj : warning LNK4217: locally defined symbol _free imported in function __DB_consume
206_bsddb.obj : warning LNK4217: locally defined symbol _fclose imported in function _DB_verify
207_bsddb.obj : warning LNK4217: locally defined symbol _fopen imported in function _DB_verify
208_bsddb.obj : warning LNK4217: locally defined symbol _strncpy imported in function _init_pybsddb
209__bsddb - 0 error(s), 5 warning(s)
Tim Peters84c7a3f2002-11-23 18:48:06 +0000210"""
211 XXX This isn't encouraging, but I don't know what to do about it.
Tim Peters78e35f92002-11-22 20:00:34 +0000212
Tim Peters00640262003-01-24 15:31:31 +0000213 To run extensive tests, pass "-u bsddb" to regrtest.py. test_bsddb3.py
214 is then enabled. Running in verbose mode may be helpful.
215
216 XXX The test_bsddb3 tests don't always pass, on Windows (according to
Guido van Rossumd54357d2004-03-20 21:00:26 +0000217 XXX me) or on Linux (according to Barry). (I had much better luck
218 XXX on Win2K than on Win98SE.) The common failure mode across platforms
Tim Peters00640262003-01-24 15:31:31 +0000219 XXX is
220 XXX DBAgainError: (11, 'Resource temporarily unavailable -- unable
221 XXX to join the environment')
222 XXX
223 XXX and it appears timing-dependent. On Win2K I also saw this once:
224 XXX
225 XXX test02_SimpleLocks (bsddb.test.test_thread.HashSimpleThreaded) ...
226 XXX Exception in thread reader 1:
227 XXX Traceback (most recent call last):
228 XXX File "C:\Code\python\lib\threading.py", line 411, in __bootstrap
229 XXX self.run()
230 XXX File "C:\Code\python\lib\threading.py", line 399, in run
231 XXX apply(self.__target, self.__args, self.__kwargs)
232 XXX File "C:\Code\python\lib\bsddb\test\test_thread.py", line 268, in
233 XXX readerThread
234 XXX rec = c.next()
235 XXX DBLockDeadlockError: (-30996, 'DB_LOCK_DEADLOCK: Locker killed
236 XXX to resolve a deadlock')
Tim Petersad8605d2003-01-29 00:38:42 +0000237 XXX
238 XXX I'm told that DBLockDeadlockError is expected at times. It
239 XXX doesn't cause a test to fail when it happens (exceptions in
240 XXX threads are invisible to unittest).
Tim Peters00640262003-01-24 15:31:31 +0000241
Tim Peters71b24112004-04-11 19:02:59 +0000242 XXX 11-Apr-2004 tim
243 XXX On WinXP Pro, I got one failure from test_bsddb3:
244 XXX
245 XXX ERROR: test04_n_flag (bsddb.test.test_compat.CompatibilityTestCase)
246 XXX Traceback (most recent call last):
247 XXX File "C:\Code\python\lib\bsddb\test\test_compat.py", line 86, in test04_n_flag
248 XXX f = hashopen(self.filename, 'n')
249 XXX File "C:\Code\python\lib\bsddb\__init__.py", line 293, in hashopen
250 XXX d.open(file, db.DB_HASH, flags, mode)
251 XXX DBInvalidArgError: (22, 'Invalid argument -- DB_TRUNCATE illegal with locking specified')
Tim Peterse8bcb252002-12-04 02:39:52 +0000252
Mark Hammondf229f9f2002-12-03 05:47:26 +0000253_ssl
Tim Peterse8bcb252002-12-04 02:39:52 +0000254 Python wrapper for the secure sockets library.
Tim Peters4b5fb072000-07-01 00:03:43 +0000255
Mark Hammondf229f9f2002-12-03 05:47:26 +0000256 Get the latest source code for OpenSSL from
257 http://www.openssl.org
258
Tim Peterse8bcb252002-12-04 02:39:52 +0000259 You (probably) don't want the "engine" code. For example, get
Tim Petersa0d781a2004-04-11 18:23:06 +0000260 openssl-0.9.7d.tar.gz
Tim Peterse8bcb252002-12-04 02:39:52 +0000261 not
Tim Petersa0d781a2004-04-11 18:23:06 +0000262 openssl-engine-0.9.7d.tar.gz
Tim Peterse8bcb252002-12-04 02:39:52 +0000263
Mark Hammondf229f9f2002-12-03 05:47:26 +0000264 Unpack into the "dist" directory, retaining the folder name from
265 the archive - for example, the latest stable OpenSSL will install as
Thomas Heller81391402004-07-02 08:58:46 +0000266 dist/openssl-0.9.7d
Mark Hammondf229f9f2002-12-03 05:47:26 +0000267
268 You can (theoretically) use any version of OpenSSL you like - the
269 build process will automatically select the latest version.
270
271 You must also install ActivePerl from
272 http://www.activestate.com/Products/ActivePerl/
Tim Peterse8bcb252002-12-04 02:39:52 +0000273 as this is used by the OpenSSL build process. Complain to them <wink>.
Mark Hammondf229f9f2002-12-03 05:47:26 +0000274
275 The MSVC project simply invokes PCBuild/build_ssl.py to perform
Tim Peterse8bcb252002-12-04 02:39:52 +0000276 the build. This Python script locates and builds your OpenSSL
Mark Hammondf229f9f2002-12-03 05:47:26 +0000277 installation, then invokes a simple makefile to build the final .pyd.
278
279 build_ssl.py attempts to catch the most common errors (such as not
280 being able to find OpenSSL sources, or not being able to find a Perl
281 that works with OpenSSL) and give a reasonable error message.
282 If you have a problem that doesn't seem to be handled correctly
283 (eg, you know you have ActivePerl but we can't find it), please take
284 a peek at build_ssl.py and suggest patches. Note that build_ssl.py
285 should be able to be run directly from the command-line.
286
Tim Peterse8bcb252002-12-04 02:39:52 +0000287 build_ssl.py/MSVC isn't clever enough to clean OpenSSL - you must do
288 this by hand.
Tim Peters4b5fb072000-07-01 00:03:43 +0000289
Tim Peters6ee68d22002-12-04 03:16:37 +0000290
Tim Petersf9a4a6e2000-07-01 20:38:27 +0000291YOUR OWN EXTENSION DLLs
Tim Peters4b5fb072000-07-01 00:03:43 +0000292-----------------------
293If you want to create your own extension module DLL, there's an example
294with easy-to-follow instructions in ../PC/example/; read the file
295readme.txt there first.