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