1Building 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, 15 python27.{dll, lib} in Release mode) 16 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 29their name: python27_d.dll, python_d.exe, parser_d.pyd, and so on. 30 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 61packages first and unpack them into siblings of PC's parent 62directory; for example, if this directory is ....\dist\trunk\PC\VS7.1, 63unpack 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 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 257Building for Itanium 258-------------------- 259 260The project files support a ReleaseItanium configuration which creates 261Win64/Itanium binaries. For this to work, you need to install the Platform 262SDK, in particular the 64-bit support. This includes an Itanium compiler 263(future releases of the SDK likely include an AMD64 compiler as well). 264In addition, you need the Visual Studio plugin for external C compilers, 265from http://sf.net/projects/vsextcomp. The plugin will wrap cl.exe, to 266locate the proper target compiler, and convert compiler options 267accordingly. The project files require atleast version 0.9. 268 269Building for AMD64 270------------------ 271 272The build process for the ReleaseAMD64 configuration is very similar 273to the Itanium configuration; make sure you use the latest version of 274vsextcomp. 275 276Building Python Using the free MS Toolkit Compiler 277-------------------------------------------------- 278 279The build process for Visual C++ can be used almost unchanged with the free MS 280Toolkit Compiler. This provides a way of building Python using freely 281available software. 282 283Note that Microsoft have withdrawn the free MS Toolkit Compiler, so this can 284no longer be considered a supported option. The instructions are still 285correct, but you need to already have a copy of the compiler in order to use 286them. Microsoft now supply Visual C++ 2008 Express Edition for free, but this 287is NOT compatible with Visual C++ 7.1 (it uses a different C runtime), and so 288cannot be used to build a version of Python compatible with the standard 289python.org build. If you are interested in using Visual C++ 2008 Express 290Edition, however, you should look at the PCBuild directory. 291 292Requirements 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 325Setting 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 363Extension 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 422YOUR OWN EXTENSION DLLs 423----------------------- 424If you want to create your own extension module DLL, there's an example 425with easy-to-follow instructions in ../PC/example/; read the file 426readme.txt there first. 427