| Christian Heimes | 5b5e81c | 2007-12-31 16:14:33 +0000 | [diff] [blame] | 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 | 
| Amaury Forgeot d'Arc | ebad7f0 | 2008-09-02 23:08:07 +0000 | [diff] [blame] | 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, | 
| Christian Heimes | 5b5e81c | 2007-12-31 16:14:33 +0000 | [diff] [blame] | 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 | 
| Amaury Forgeot d'Arc | ebad7f0 | 2008-09-02 23:08:07 +0000 | [diff] [blame] | 129 |     linked in VS7.1\. | 
| Christian Heimes | 5b5e81c | 2007-12-31 16:14:33 +0000 | [diff] [blame] | 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 |  | 
| Christian Heimes | 5b5e81c | 2007-12-31 16:14:33 +0000 | [diff] [blame] | 141 | _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'Arc | ebad7f0 | 2008-09-02 23:08:07 +0000 | [diff] [blame] | 149 |     the VS7.1 folder. | 
| Christian Heimes | 5b5e81c | 2007-12-31 16:14:33 +0000 | [diff] [blame] | 150 |  | 
 | 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'Arc | ebad7f0 | 2008-09-02 23:08:07 +0000 | [diff] [blame] | 166 |     The MSVC project simply invokes build_ssl.py to perform | 
| Christian Heimes | 5b5e81c | 2007-12-31 16:14:33 +0000 | [diff] [blame] | 167 |     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 |  | 
 | 181 | Building for Itanium | 
 | 182 | -------------------- | 
 | 183 |  | 
 | 184 | The project files support a ReleaseItanium configuration which creates | 
 | 185 | Win64/Itanium binaries. For this to work, you need to install the Platform | 
 | 186 | SDK, in particular the 64-bit support. This includes an Itanium compiler | 
 | 187 | (future releases of the SDK likely include an AMD64 compiler as well). | 
 | 188 | In addition, you need the Visual Studio plugin for external C compilers, | 
 | 189 | from http://sf.net/projects/vsextcomp. The plugin will wrap cl.exe, to | 
 | 190 | locate the proper target compiler, and convert compiler options | 
 | 191 | accordingly. The project files require atleast version 0.9. | 
 | 192 |  | 
 | 193 | Building for AMD64 | 
 | 194 | ------------------ | 
 | 195 |  | 
 | 196 | The build process for the ReleaseAMD64 configuration is very similar | 
 | 197 | to the Itanium configuration; make sure you use the latest version of | 
 | 198 | vsextcomp. | 
 | 199 |  | 
 | 200 | Building Python Using the free MS Toolkit Compiler | 
 | 201 | -------------------------------------------------- | 
 | 202 |  | 
 | 203 | The build process for Visual C++ can be used almost unchanged with the free MS | 
 | 204 | Toolkit Compiler. This provides a way of building Python using freely | 
 | 205 | available software. | 
 | 206 |  | 
 | 207 | Note that Microsoft have withdrawn the free MS Toolkit Compiler, so this can | 
 | 208 | no longer be considered a supported option. The instructions are still | 
 | 209 | correct, but you need to already have a copy of the compiler in order to use | 
| Amaury Forgeot d'Arc | ebad7f0 | 2008-09-02 23:08:07 +0000 | [diff] [blame] | 210 | them. Microsoft now supply Visual C++ 2008 Express Edition for free, but this | 
| Christian Heimes | 5b5e81c | 2007-12-31 16:14:33 +0000 | [diff] [blame] | 211 | is NOT compatible with Visual C++ 7.1 (it uses a different C runtime), and so | 
 | 212 | cannot be used to build a version of Python compatible with the standard | 
| Amaury Forgeot d'Arc | ebad7f0 | 2008-09-02 23:08:07 +0000 | [diff] [blame] | 213 | python.org build. If you are interested in using Visual C++ 2008 Express | 
 | 214 | Edition, however, you should look at the PCBuild directory. | 
| Christian Heimes | 5b5e81c | 2007-12-31 16:14:33 +0000 | [diff] [blame] | 215 |  | 
 | 216 | Requirements | 
 | 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 |  | 
 | 249 | Setting 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'Arc | ebad7f0 | 2008-09-02 23:08:07 +0000 | [diff] [blame] | 285 |     from within the VS7.1 directory. | 
| Christian Heimes | 5b5e81c | 2007-12-31 16:14:33 +0000 | [diff] [blame] | 286 |  | 
 | 287 | Extension modules | 
 | 288 |  | 
 | 289 |     To build those extension modules which require external libraries | 
| Georg Brandl | 1158a33 | 2009-06-04 09:30:30 +0000 | [diff] [blame] | 290 |     (_tkinter, bz2, _sqlite3, _ssl) you can follow the instructions | 
| Christian Heimes | 5b5e81c | 2007-12-31 16:14:33 +0000 | [diff] [blame] | 291 |     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 Heimes | 5b5e81c | 2007-12-31 16:14:33 +0000 | [diff] [blame] | 313 |     _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 |  | 
 | 333 | YOUR OWN EXTENSION DLLs | 
 | 334 | ----------------------- | 
 | 335 | If you want to create your own extension module DLL, there's an example | 
 | 336 | with easy-to-follow instructions in ../PC/example/; read the file | 
 | 337 | readme.txt there first. |