Anonymous avatar Anonymous committed 03ed011

Update information pertaining to building external components, as well as notes on x64 builds. This file now accurately describes the build process as is; however, there's still a lot of room for improvement, especially with regards to how we build Tcl/Tk, Tix, and OpenSSL. Watch this space for further improvements.

Comments (0)

Files changed (1)

PCbuild/readme.txt

 Building Python using VC++ 9.0
 ------------------------------
 
-This directory is used to build Python for Win32 platforms, e.g. Windows
-2000, XP and Vista.  It requires Microsoft Visual C++ 9.0
-(a.k.a. Visual Studio .NET 2008).
-(For other Windows platforms and compilers, see ../PC/readme.txt.)
+This directory is used to build Python for Win32 and x64 platforms, e.g. 
+Windows 2000, XP, Vista and Windows Server 2008.  In order to build 32-bit
+debug and release executables, Microsoft Visual C++ 2008 Express Edition is
+required at the very least.  In order to build 64-bit debug and release
+executables, Visual Studio 2008 Standard Edition is required at the very
+least.  In order to build all of the above, as well as generate release builds
+that make use of Profile Guided Optimisation (PG0), Visual Studio 2008
+Professional Edition is required at the very least.  The official Python
+releases are built with this version of Visual Studio.
+
+For other Windows platforms and compilers, see ../PC/readme.txt.
 
 All you need to do is open the workspace "pcbuild.sln" in Visual Studio,
 select the desired combination of configuration and platform and eventually
 are linked to a CRT "side by side" assembly which must be present on the target
 machine.  This is avalible under the VC/Redist folder of your visual studio
 distribution. On XP and later operating systems that support
-side-by-side assemblies it is not enough to have the msvcrt80.dll present,
+side-by-side assemblies it is not enough to have the msvcrt90.dll present,
 it has to be there as a whole assembly, that is, a folder with the .dll
 and a .manifest.  Also, a check is made for the correct version.
 Therefore, one should distribute this assembly with the dlls, and keep
 winsound
     play sounds (typically .wav files) under Windows
 
-The following subprojects will generally NOT build out of the box. They
-wrap code Python doesn't control, and you'll need to download the base
-packages first and unpack them into siblings of PCbuilds's parent
-directory; for example, if your PCbuild is  ..\dist\py3k\PCbuild\,
-unpack into new subdirectories of ..\dist\.
-
+Python-controlled subprojects that wrap external projects:
+_bsddb
+    Wraps Berkeley DB 4.4.20, which is currently built by _bsddb44.vcproj.
+    project (see below).
+_sqlite3
+    Wraps SQLite 3.3.4, which is currently built by sqlite3.vcproj (see below).
 _tkinter
-    Python wrapper for the Tk windowing system.  Requires building
-    Tcl/Tk first.  Following are instructions for Tcl/Tk 8.4.16.
-    
-    NOTE: The 64 build builds must land in tcltk64 instead of tcltk.
-
-    Get source
-    ----------
-    In the dist directory, run
-    svn export http://svn.python.org/projects/external/tcl8.4.16
-    svn export http://svn.python.org/projects/external/tk8.4.16
-    svn export http://svn.python.org/projects/external/tix-8.4.0
-
-    Build with build_tkinter.py
-    ---------------------------
-    The PCbuild directory contains a Python script which automates all
-    steps. Run the script in a Visual Studio 2008 command prompt with 
-
-      python build_tkinter.py Win32
-
-    Use x64 instead of Win32 for the x64 platform.
-    
-    NOTE: Tcl/Tk 8.4 doesn't compile for x64.
-    
-    Build Tcl first 
-    ---------------
-    Use "Start -> All Programs -> Microsoft Visual Studio 2008
-         -> Visual Studio Tools -> Visual Studio 2008 Command Prompt"
-    to get a shell window with the correct environment settings
-    cd dist\tcl8.4.16\win
-    nmake -f makefile.vc
-    nmake -f makefile.vc INSTALLDIR=..\..\tcltk install
-
-    XXX Should we compile with OPTS=threads?
-
-    Optional:  run tests, via
-        nmake -f makefile.vc test
-
-        On WinXP Pro, wholly up to date as of 30-Aug-2004:
-        all.tcl:        Total   10678   Passed  9969    Skipped 709     Failed  0
-        Sourced 129 Test Files.
-
-    Build Tk
-    --------
-    cd dist\tk8.4.16\win
-    nmake -f makefile.vc TCLDIR=..\..\tcl8.4.16
-    nmake -f makefile.vc TCLDIR=..\..\tcl8.4.16 INSTALLDIR=..\..\tcltk install
-
-    XXX Should we compile with OPTS=threads?
-
-    XXX Our installer copies a lot of stuff out of the Tcl/Tk install
-    XXX directory.  Is all of that really needed for Python use of Tcl/Tk?
-
-    Optional:  run tests, via
-        nmake -f makefile.vc TCLDIR=..\..\tcl8.4.16 test
-
-        On WinXP Pro, wholly up to date as of 30-Aug-2004:
-        all.tcl:        Total   8420    Passed  6826    Skipped 1581    Failed  13
-        Sourced 91 Test Files.
-        Files with failing tests: canvImg.test scrollbar.test textWind.test winWm.test
-
-   Built Tix
-   ---------
-   cd dist\tix-8.4.0\win
-   nmake -f python9.mak
-   nmake -f python9.mak install
-
+    Wraps the Tk windowing system.  Unlike _bsddb and _sqlite3, there's no
+    corresponding tcltk.vcproj-type project that builds Tcl/Tk from vcproj's
+    within our pcbuild.sln, which means this module expects to find a
+    pre-built Tcl/Tk in either ..\..\tcltk for 32-bit or ..\..\tcltk64 for
+    64-bit (relative to this directory).  See below for instructions to build
+    Tcl/Tk. 
 bz2
     Python wrapper for the libbz2 compression library.  Homepage
         http://sources.redhat.com/bzip2/
 
     svn export http://svn.python.org/projects/external/bzip2-1.0.3
 
+    ** NOTE: if you use the Tools\buildbot\external(-amd64).bat approach for
+    obtaining external sources then you don't need to manually get the source
+    above via subversion. **
+
     A custom pre-link step in the bz2 project settings should manage to
     build bzip2-1.0.3\libbz2.lib by magic before bz2.pyd (or bz2_d.pyd) is
     linked in PCbuild\.
     All of this managed to build libbz2.lib in 
     bzip2-1.0.3\$platform-$configuration\, which the Python project links in.
 
-
-_bsddb
-    To use the version of bsddb that Python is built with by default, invoke
-    (in the dist directory)
-
-      svn export http://svn.python.org/projects/external/db-4.4.20
-
-    Next open the solution file db-4.4.20\build_win32\Berkeley_DB.sln with
-    Visual Studio and convert the projects to the new format. VS 2008 
-    builds the necessary libraries in a pre-link step of _bsddb. You
-    have to add "$(VCInstallDir)vcpackages" to the search path first
-    (Tools -> Options -> Projects and Solutions -> VC++ Directories,
-     Platform: Win32, Show directories for: Executable files).
-    
-    The _bsddb subprojects depends only on the db_static project of 
-    Berkeley DB. You have to choose either "Release", "Release AMD64", "Debug"
-    or "Debug AMD64" as configuration. For the AND64 builds, you need to
-    create the "x64" platform first (in Solution Platforms\Configuration
-    Manager...)
-
-    Alternatively, if you want to start with the original sources,
-    go to Sleepycat's download page:
-        http://www.sleepycat.com/downloads/releasehistorybdb.html
-
-    and download version 4.4.20.
-
-    With or without strong cryptography? You can choose either with or
-    without strong cryptography, as per the instructions below.  By
-    default, Python is built and distributed WITHOUT strong crypto.
-
-    Unpack the sources; if you downloaded the non-crypto version, rename
-    the directory from db-4.4.20.NC to db-4.4.20.
-
-    Now apply any patches that apply to your version.
-
-    Open
-        db-4.4.20\docs\ref\build_win\intro.html
-
-    and follow the "Windows->Building Berkeley DB with Visual C++ .NET"
-    instructions for building the Sleepycat
-    software.  Note that Berkeley_DB.dsw is in the build_win32 subdirectory.
-    Build the "db_static" project, for "Release" mode.
-
-    To run extensive tests, pass "-u bsddb" to regrtest.py.  test_bsddb3.py
-    is then enabled.  Running in verbose mode may be helpful.
-
-_sqlite3
-    Python wrapper for SQLite library.
-    
-    Get the source code through
-    
-    svn export http://svn.python.org/projects/external/sqlite-source-3.3.4
-    
-    To use the extension module in a Python build tree, copy sqlite3.dll into
-    the PCbuild folder. The source directory in svn also contains a .def file
-    from the binary release of sqlite3.
-
 _ssl
     Python wrapper for the secure sockets library.
 
 
     svn export http://svn.python.org/projects/external/openssl-0.9.8g
 
+    ** NOTE: if you use the Tools\buildbot\external(-amd64).bat approach for
+    obtaining external sources then you don't need to manually get the source
+    above via subversion. **
+
     Alternatively, get the latest version from http://www.openssl.org.
     You can (theoretically) use any version of OpenSSL you like - the
     build process will automatically select the latest version.
     build_ssl.py/MSVC isn't clever enough to clean OpenSSL - you must do
     this by hand.
 
+The subprojects above wrap external projects Python doesn't control, and as
+such, a little more work is required in order to download the relevant source 
+files for each project before they can be built.  The buildbots do this each
+time they're built, so the easiest approach is to run either external.bat or 
+external-amd64.bat in the ..\Tools\buildbot directory from ..\, i.e.:
+
+    C:\..\svn.python.org\projects\python\trunk\PCbuild>cd ..
+    C:\..\svn.python.org\projects\python\trunk>Tools\buildbot\external.bat
+
+This extracts all the external subprojects from http://svn.python.org/external
+via Subversion (so you'll need an svn.exe on your PATH) and places them in 
+..\.. (relative to this directory).  The external(-amd64).bat scripts will
+also build a debug build of Tcl/Tk; there aren't any equivalent batch files
+for building release versions of Tcl/Tk lying around in the Tools\buildbot
+directory.  If you need to build a release version of Tcl/Tk it isn't hard
+though, take a look at the relevant external(-amd64).bat file and find the
+two nmake lines, then call each one without the 'DEBUG=1' parameter, i.e.:
+
+The external-amd64.bat file contains this for tcl:
+    nmake -f makefile.vc COMPILERFLAGS=-DWINVER=0x0500 DEBUG=1 MACHINE=AMD64 INSTALLDIR=..\..\tcltk64 clean all install
+
+So for a release build, you'd call it as:
+    nmake -f makefile.vc COMPILERFLAGS=-DWINVER=0x0500 MACHINE=AMD64 INSTALLDIR=..\..\tcltk64 clean all install
+
+    XXX Should we compile with OPTS=threads?
+    XXX Our installer copies a lot of stuff out of the Tcl/Tk install
+    XXX directory.  Is all of that really needed for Python use of Tcl/Tk?
+
+This will be cleaned up in the future; ideally Tcl/Tk will be brought into our
+pcbuild.sln as custom .vcproj files, just as we've recently done with the
+_bsddb44.vcproj and sqlite3.vcproj files, which will remove the need for
+Tcl/Tk to be built separately via a batch file.
+
+XXX trent.nelson 02-Apr-08:
+    Having the external subprojects in ..\.. relative to this directory is a
+    bit of a nuisance when you're working on py3k and trunk in parallel and
+    your directory layout mimics that of Python's subversion layout, e.g.:
+
+        C:\..\svn.python.org\projects\python\trunk
+        C:\..\svn.python.org\projects\python\branches\py3k
+        C:\..\svn.python.org\projects\python\branches\release25-maint
+
+    I'd like to change things so that external subprojects are fetched from
+    ..\external instead of ..\.., then provide some helper scripts or batch
+    files that would set up a new ..\external directory with svn checkouts of
+    the relevant branches in http://svn.python.org/projects/external/, or
+    alternatively, use junctions to link ..\external with a pre-existing
+    externals directory being used by another branch.  i.e. if I'm usually
+    working on trunk (and have previously created trunk\external via the
+    provided batch file), and want to do some work on py3k, I'd set up a
+    junction as follows (using the directory structure above as an example):
+
+        C:\..\python\trunk\external <- already exists and has built versions
+                                       of the external subprojects 
+
+        C:\..\python\branches\py3k>linkd.exe external ..\..\trunk\external
+        Link created at: external
+
+    Only a slight tweak would be needed to the buildbots such that bots
+    building trunk and py3k could make use of the same facility.  (2.5.x
+    builds need to be kept separate as they're using Visual Studio 7.1.)
+/XXX trent.nelson 02-Apr-08
+
 Building for Itanium
 --------------------
 
Tip: Filter by directory path e.g. /media app.js to search for public/media/app.js.
Tip: Use camelCasing e.g. ProjME to search for ProjectModifiedEvent.java.
Tip: Filter by extension type e.g. /repo .js to search for all .js files in the /repo directory.
Tip: Separate your search with spaces e.g. /ssh pom.xml to search for src/ssh/pom.xml.
Tip: Use ↑ and ↓ arrow keys to navigate and return to view the file.
Tip: You can also navigate files with Ctrl+j (next) and Ctrl+k (previous) and view the file with Ctrl+o.
Tip: You can also navigate files with Alt+j (next) and Alt+k (previous) and view the file with Alt+o.