blob: bfd8a7049a2fa9b4e5ba8d85e5ce2cd04bae752d [file] [log] [blame]
Christian Heimes5b5e81c2007-12-31 16:14:33 +00001Building Python using VC++ 7.1
2-------------------------------------
3This directory is used to build Python for Win32 platforms, e.g. Windows
495, 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
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,
Georg Brandlfa2c61a2011-02-20 10:41:31 +000015 python33.{dll, lib} in Release mode)
Christian Heimes5b5e81c2007-12-31 16:14:33 +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
28When using the Debug setting, the output files have a _d added to
Georg Brandlfa2c61a2011-02-20 10:41:31 +000029their name: python33_d.dll, python_d.exe, parser_d.pyd, and so on.
Christian Heimes5b5e81c2007-12-31 16:14:33 +000030
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
40python
41 .exe
42pythonw
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
49pyexpat
50 Python wrapper for accelerated XML parsing, which incorporates stable
51 code from the Expat project: http://sourceforge.net/projects/expat/
52select
53 selectmodule.c
54unicodedata
55 large tables of Unicode data
56winsound
57 play sounds (typically .wav files) under Windows
58
59The following subprojects will generally NOT build out of the box. They
60wrap code Python doesn't control, and you'll need to download the base
Amaury Forgeot d'Arcebad7f02008-09-02 23:08:07 +000061packages first and unpack them into siblings of PC's parent
62directory; for example, if this directory is ....\dist\trunk\PC\VS7.1,
Christian Heimes5b5e81c2007-12-31 16:14:33 +000063unpack 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
119bz2
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
Amaury Forgeot d'Arcebad7f02008-09-02 23:08:07 +0000129 linked in VS7.1\.
Christian Heimes5b5e81c2007-12-31 16:14:33 +0000130 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
Christian Heimes5b5e81c2007-12-31 16:14:33 +0000141_sqlite3
142 Python wrapper for SQLite library.
143
144 Get the source code through
145
146 svn export http://svn.python.org/projects/external/sqlite-source-3.3.4
147
148 To use the extension module in a Python build tree, copy sqlite3.dll into
Amaury Forgeot d'Arcebad7f02008-09-02 23:08:07 +0000149 the VS7.1 folder.
Christian Heimes5b5e81c2007-12-31 16:14:33 +0000150
151_ssl
152 Python wrapper for the secure sockets library.
153
154 Get the source code through
155
156 svn export http://svn.python.org/projects/external/openssl-0.9.8a
157
158 Alternatively, get the latest version from http://www.openssl.org.
159 You can (theoretically) use any version of OpenSSL you like - the
160 build process will automatically select the latest version.
161
162 You must also install ActivePerl from
163 http://www.activestate.com/Products/ActivePerl/
164 as this is used by the OpenSSL build process. Complain to them <wink>.
165
Amaury Forgeot d'Arcebad7f02008-09-02 23:08:07 +0000166 The MSVC project simply invokes build_ssl.py to perform
Christian Heimes5b5e81c2007-12-31 16:14:33 +0000167 the build. This Python script locates and builds your OpenSSL
168 installation, then invokes a simple makefile to build the final .pyd.
169
170 build_ssl.py attempts to catch the most common errors (such as not
171 being able to find OpenSSL sources, or not being able to find a Perl
172 that works with OpenSSL) and give a reasonable error message.
173 If you have a problem that doesn't seem to be handled correctly
174 (eg, you know you have ActivePerl but we can't find it), please take
175 a peek at build_ssl.py and suggest patches. Note that build_ssl.py
176 should be able to be run directly from the command-line.
177
178 build_ssl.py/MSVC isn't clever enough to clean OpenSSL - you must do
179 this by hand.
180
181Building for Itanium
182--------------------
183
184The project files support a ReleaseItanium configuration which creates
185Win64/Itanium binaries. For this to work, you need to install the Platform
186SDK, in particular the 64-bit support. This includes an Itanium compiler
187(future releases of the SDK likely include an AMD64 compiler as well).
188In addition, you need the Visual Studio plugin for external C compilers,
189from http://sf.net/projects/vsextcomp. The plugin will wrap cl.exe, to
190locate the proper target compiler, and convert compiler options
191accordingly. The project files require atleast version 0.9.
192
193Building for AMD64
194------------------
195
196The build process for the ReleaseAMD64 configuration is very similar
197to the Itanium configuration; make sure you use the latest version of
198vsextcomp.
199
200Building Python Using the free MS Toolkit Compiler
201--------------------------------------------------
202
203The build process for Visual C++ can be used almost unchanged with the free MS
204Toolkit Compiler. This provides a way of building Python using freely
205available software.
206
207Note that Microsoft have withdrawn the free MS Toolkit Compiler, so this can
208no longer be considered a supported option. The instructions are still
209correct, but you need to already have a copy of the compiler in order to use
Amaury Forgeot d'Arcebad7f02008-09-02 23:08:07 +0000210them. Microsoft now supply Visual C++ 2008 Express Edition for free, but this
Christian Heimes5b5e81c2007-12-31 16:14:33 +0000211is NOT compatible with Visual C++ 7.1 (it uses a different C runtime), and so
212cannot be used to build a version of Python compatible with the standard
Amaury Forgeot d'Arcebad7f02008-09-02 23:08:07 +0000213python.org build. If you are interested in using Visual C++ 2008 Express
214Edition, however, you should look at the PCBuild directory.
Christian Heimes5b5e81c2007-12-31 16:14:33 +0000215
216Requirements
217
218 To build Python, the following tools are required:
219
220 * The Visual C++ Toolkit Compiler
221 no longer available for download - see above
222 * A recent Platform SDK
223 from http://www.microsoft.com/downloads/details.aspx?FamilyID=484269e2-3b89-47e3-8eb7-1f2be6d7123a
224 * The .NET 1.1 SDK
225 from http://www.microsoft.com/downloads/details.aspx?FamilyID=9b3a2ca6-3647-4070-9f41-a333c6b9181d
226
227 [Does anyone have better URLs for the last 2 of these?]
228
229 The toolkit compiler is needed as it is an optimising compiler (the
230 compiler supplied with the .NET SDK is a non-optimising version). The
231 platform SDK is needed to provide the Windows header files and libraries
232 (the Windows 2003 Server SP1 edition, typical install, is known to work -
233 other configurations or versions are probably fine as well). The .NET 1.1
234 SDK is needed because it contains a version of msvcrt.dll which links to
235 the msvcr71.dll CRT. Note that the .NET 2.0 SDK is NOT acceptable, as it
236 references msvcr80.dll.
237
238 All of the above items should be installed as normal.
239
240 If you intend to build the openssl (needed for the _ssl extension) you
241 will need the C runtime sources installed as part of the platform SDK.
242
243 In addition, you will need Nant, available from
244 http://nant.sourceforge.net. The 0.85 release candidate 3 version is known
245 to work. This is the latest released version at the time of writing. Later
246 "nightly build" versions are known NOT to work - it is not clear at
247 present whether future released versions will work.
248
249Setting up the environment
250
251 Start a platform SDK "build environment window" from the start menu. The
252 "Windows XP 32-bit retail" version is known to work.
253
254 Add the following directories to your PATH:
255 * The toolkit compiler directory
256 * The SDK "Win64" binaries directory
257 * The Nant directory
258 Add to your INCLUDE environment variable:
259 * The toolkit compiler INCLUDE directory
260 Add to your LIB environment variable:
261 * The toolkit compiler LIB directory
262 * The .NET SDK Visual Studio 2003 VC7\lib directory
263
264 The following commands should set things up as you need them:
265
266 rem Set these values according to where you installed the software
267 set TOOLKIT=C:\Program Files\Microsoft Visual C++ Toolkit 2003
268 set SDK=C:\Program Files\Microsoft Platform SDK
269 set NET=C:\Program Files\Microsoft Visual Studio .NET 2003
270 set NANT=C:\Utils\Nant
271
272 set PATH=%TOOLKIT%\bin;%PATH%;%SDK%\Bin\win64;%NANT%\bin
273 set INCLUDE=%TOOLKIT%\include;%INCLUDE%
274 set LIB=%TOOLKIT%\lib;%NET%\VC7\lib;%LIB%
275
276 The "win64" directory from the SDK is added to supply executables such as
277 "cvtres" and "lib", which are not available elsewhere. The versions in the
278 "win64" directory are 32-bit programs, so they are fine to use here.
279
280 That's it. To build Python (the core only, no binary extensions which
281 depend on external libraries) you just need to issue the command
282
283 nant -buildfile:python.build all
284
Amaury Forgeot d'Arcebad7f02008-09-02 23:08:07 +0000285 from within the VS7.1 directory.
Christian Heimes5b5e81c2007-12-31 16:14:33 +0000286
287Extension modules
288
289 To build those extension modules which require external libraries
Georg Brandl1158a332009-06-04 09:30:30 +0000290 (_tkinter, bz2, _sqlite3, _ssl) you can follow the instructions
Christian Heimes5b5e81c2007-12-31 16:14:33 +0000291 for the Visual Studio build above, with a few minor modifications. These
292 instructions have only been tested using the sources in the Python
293 subversion repository - building from original sources should work, but
294 has not been tested.
295
296 For each extension module you wish to build, you should remove the
297 associated include line from the excludeprojects section of pc.build.
298
299 The changes required are:
300
301 _tkinter
302 The tix makefile (tix-8.4.0\win\makefile.vc) must be modified to
303 remove references to TOOLS32. The relevant lines should be changed to
304 read:
305 cc32 = cl.exe
306 link32 = link.exe
307 include32 =
308 The remainder of the build instructions will work as given.
309
310 bz2
311 No changes are needed
312
Christian Heimes5b5e81c2007-12-31 16:14:33 +0000313 _sqlite3
314 No changes are needed. However, in order for the tests to succeed, a
315 copy of sqlite3.dll must be downloaded, and placed alongside
316 python.exe.
317
318 _ssl
319 The documented build process works as written. However, it needs a
320 copy of the file setargv.obj, which is not supplied in the platform
321 SDK. However, the sources are available (in the crt source code). To
322 build setargv.obj, proceed as follows:
323
324 Copy setargv.c, cruntime.h and internal.h from %SDK%\src\crt to a
325 temporary directory.
326 Compile using "cl /c /I. /MD /D_CRTBLD setargv.c"
327 Copy the resulting setargv.obj to somewhere on your LIB environment
328 (%SDK%\lib is a reasonable place).
329
330 With setargv.obj in place, the standard build process should work
331 fine.
332
333YOUR OWN EXTENSION DLLs
334-----------------------
335If you want to create your own extension module DLL, there's an example
336with easy-to-follow instructions in ../PC/example/; read the file
337readme.txt there first.