Building Python using VC++ 6.0 or 5.0
-------------------------------------
This directory is used to build Python for Win32 platforms, e.g. Windows
95, 98 and NT.  It requires Microsoft Visual C++ 6.x or 5.x.
(For other Windows platforms and compilers, see ../PC/readme.txt.)

All you need to do is open the workspace "pcbuild.dsw" in MSVC++, select
the Debug or Release setting (using Build -> Set Active Configuration...),
and build the projects.

The proper order to build subprojects:

1) pythoncore (this builds the main Python DLL and library files,
               python21.{dll, lib} in Release mode)
              NOTE:  in previous releases, this subproject was
              named after the release number, e.g. python20.

2) python (this builds the main Python executable,
           python.exe in Release mode)

3) the other subprojects, as desired or needed (note:  you probably don't
   want to build most of the other subprojects, unless you're building an
   entire Python distribution from scratch, or specifically making changes
   to the subsystems they implement; see SUBPROJECTS below)

When using the Debug setting, the output files have a _d added to
their name:  python21_d.dll, python_d.exe, parser_d.pyd, and so on.

SUBPROJECTS
-----------
These subprojects should build out of the box.  Subprojects other than the
main ones (pythoncore, python, pythonw) generally build a DLL (renamed to
.pyd) from a specific module so that users don't have to load the code
supporting that module unless they import the module.

pythoncore
    .dll and .lib
python
    .exe
pythonw
    pythonw.exe, a variant of python.exe that doesn't pop up a DOS box
_socket
    socketmodule.c
_sre
    Unicode-aware regular expression engine
_symtable
    the _symtable module, symtablemodule.c
_testcapi
    tests of the Python C API, run via Lib/test/test_capi.py, and
    implemented by module Modules/_testcapimodule.c
datetime
    datetimemodule.c
mmap
    mmapmodule.c
parser
    the parser module
pyexpat
    Python wrapper for accelerated XML parsing, which incorporates stable
    code from the Expat project:  http://sourceforge.net/projects/expat/
select
    selectmodule.c
unicodedata
    large tables of Unicode data
winreg
    Windows registry API
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\src\PCbuild\,
unpack into new subdirectories of dist\.

_tkinter
    Python wrapper for the Tk windowing system.  Requires building
    Tcl/Tk first.  Following are instructions for Tcl/Tk 8.4.1:

    Get source
    ----------
    Go to
        http://prdownloads.sourceforge.net/tcl/
    and download
        tcl841-src.zip
        tk841-src.zip
    Unzip into
        dist\tcl8.4.1\
        dist\tk8.4.1\
    respectively.

    Build Tcl first (done here w/ MSVC 6 on Win2K; also Win98SE)
    ---------------
    cd dist\tcl8.4.1\win
    run vcvars32.bat [necessary even on Win2K]
    nmake -f makefile.vc
    nmake -f makefile.vc INSTALLDIR=..\..\tcl84 install

    XXX Should we compile with OPTS=threads?

    XXX Some tests failed in "nmake -f makefile.vc test".

    Build Tk
    --------
    cd dist\tk8.4.1\win
    nmake -f makefile.vc TCLDIR=..\..\tcl8.4.1
    nmake -f makefile.vc TCLDIR=..\..\tcl8.4.1 INSTALLDIR=..\..\tcl84 install

    XXX Should we compile with OPTS=threads?

    XXX Some tests failed in "nmake -f makefile.vc test".

    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?

    Make sure the installer matches
    -------------------------------
    Ensure that the Wise compiler vrbl _TCLDIR_ is set to the name of
    the common Tcl/Tk installation directory (tcl84 for the instructions
    above).  This is needed so the installer can copy various Tcl/Tk
    files into the Python distribution.


zlib
    Python wrapper for the zlib compression library.  Get the source code
    for version 1.1.4 from a convenient mirror at:
        http://www.gzip.org/zlib/
    Unpack into dist\zlib-1.1.4.
    A custom pre-link step in the zlib project settings should manage to
    build zlib-1.1.4\zlib.lib by magic before zlib.pyd (or zlib_d.pyd) is
    linked in PCbuild\.
    However, the zlib project is not smart enough to remove anything under
    zlib-1.1.4\ when you do a clean, so if you want to rebuild zlib.lib
    you need to clean up zlib-1.1.4\ by hand.

bz2
    Python wrapper for the libbz2 compression library.  Homepage
        http://sources.redhat.com/bzip2/
    Download the source tarball, bzip2-1.0.2.tar.gz.
    Unpack into dist\bzip2-1.0.2.  WARNING:  If you're using WinZip, you
    must disable its "TAR file smart CR/LF conversion" feature (under
    Options -> Configuration -> Miscellaneous -> Other) for the duration.

    Don't bother trying to use libbz2.dsp with MSVC.  After 10 minutes
    of fiddling, I couldn't get it to work.  Perhaps it works with
    MSVC 5 (I used MSVC 6).  It's better to run the by-hand makefile
    anyway, because it runs a helpful test step at the end.

    cd into dist\bzip2-1.0.2, and run
        nmake -f makefile.msc
    [Note that if you're running Win9X, you'll need to run vcvars32.bat
     before running nmake (this batch file is in your MSVC installation).
     TODO:  make this work like zlib (in particular, MSVC runs the prelink
     step in an enviroment that already has the correct envars set up).
    ]
    The make step shouldn't yield any warnings or errors, and should end
    by displaying 6 blocks each terminated with
        FC: no differences encountered
    If FC finds differences, see the warning abou WinZip above (when I
    first tried it, sample3.ref failed due to CRLF conversion).

    All of this managed to build bzip2-1.0.2\libbz2.lib, which the Python
    project links in.


_bsddb
    Go to Sleepycat's download page:
        http://www.sleepycat.com/download/

    and download version 4.1.25.  The file name is db-4.1.25.NC.zip.
    XXX with or without strong cryptography?  I picked "without".

    Unpack into
        dist\db-4.1.25

    [If using WinZip to unpack the db-4.1.25.NC distro, that requires
     renaming the directory (to remove ".NC") after unpacking.
    ]

    Open
        dist\db-4.1.25\docs\index.html

    and follow the Windows instructions for building the Sleepycat
    software.  Note that Berkeley_DB.dsw is in the build_win32 subdirectory.
    Build the Release version ("build_all -- Win32 Release").

    XXX We're actually linking against Release_static\libdb41s.lib.
    XXX This yields the following warnings:
"""
Compiling...
_bsddb.c
Linking...
   Creating library ./_bsddb.lib and object ./_bsddb.exp
LINK : warning LNK4049: locally defined symbol "_malloc" imported
LINK : warning LNK4049: locally defined symbol "_free" imported
LINK : warning LNK4049: locally defined symbol "_fclose" imported
LINK : warning LNK4049: locally defined symbol "_fopen" imported
_bsddb.pyd - 0 error(s), 4 warning(s)
"""
    XXX This isn't encouraging, but I don't know what to do about it.

    To run extensive tests, pass "-u bsddb" to regrtest.py.  test_bsddb3.py
    is then enabled.  Running in verbose mode may be helpful.

    XXX The test_bsddb3 tests don't always pass, on Windows (according to
    XXX me) or on Linux (according to Barry).  I had much better luck
    XXX on Win2K than on Win98SE.  The common failure mode across platforms
    XXX is
    XXX     DBAgainError: (11, 'Resource temporarily unavailable -- unable
    XXX                         to join the environment')
    XXX
    XXX and it appears timing-dependent.  On Win2K I also saw this once:
    XXX
    XXX test02_SimpleLocks (bsddb.test.test_thread.HashSimpleThreaded) ...
    XXX Exception in thread reader 1:
    XXX Traceback (most recent call last):
    XXX File "C:\Code\python\lib\threading.py", line 411, in __bootstrap
    XXX    self.run()
    XXX File "C:\Code\python\lib\threading.py", line 399, in run
    XXX    apply(self.__target, self.__args, self.__kwargs)
    XXX File "C:\Code\python\lib\bsddb\test\test_thread.py", line 268, in
    XXX                  readerThread
    XXX    rec = c.next()
    XXX DBLockDeadlockError: (-30996, 'DB_LOCK_DEADLOCK: Locker killed
    XXX                                to resolve a deadlock')
    XXX
    XXX I'm told that DBLockDeadlockError is expected at times.  It
    XXX doesn't cause a test to fail when it happens (exceptions in
    XXX threads are invisible to unittest).


_ssl
    Python wrapper for the secure sockets library.

    Get the latest source code for OpenSSL from
        http://www.openssl.org

    You (probably) don't want the "engine" code.  For example, get
        openssl-0.9.6g.tar.gz
    not
        openssl-engine-0.9.6g.tar.gz

    Unpack into the "dist" directory, retaining the folder name from
    the archive - for example, the latest stable OpenSSL will install as
        dist/openssl-0.9.6g

    You can (theoretically) use any version of OpenSSL you like - the
    build process will automatically select the latest version.

    You must also install ActivePerl from
        http://www.activestate.com/Products/ActivePerl/
    as this is used by the OpenSSL build process.  Complain to them <wink>.

    The MSVC project simply invokes PCBuild/build_ssl.py to perform
    the build.  This Python script locates and builds your OpenSSL
    installation, then invokes a simple makefile to build the final .pyd.

    Win9x users:  see "Win9x note" below.

    build_ssl.py attempts to catch the most common errors (such as not
    being able to find OpenSSL sources, or not being able to find a Perl
    that works with OpenSSL) and give a reasonable error message.
    If you have a problem that doesn't seem to be handled correctly
    (eg, you know you have ActivePerl but we can't find it), please take
    a peek at build_ssl.py and suggest patches.  Note that build_ssl.py
    should be able to be run directly from the command-line.

    build_ssl.py/MSVC isn't clever enough to clean OpenSSL - you must do
    this by hand.

    Win9x note:  If, near the start of the build process, you see
    something like

        C:\Code\openssl-0.9.6g>set OPTS=no-asm
        Out of environment space

    then you're in trouble, and will probably also see these errors near
    the end of the process:

        NMAKE : fatal error U1073: don't know how to make
            'crypto\md5\asm\m5_win32.asm'
        Stop.
        NMAKE : fatal error U1073: don't know how to make
            'C:\Code\openssl-0.9.6g/out32/libeay32.lib'
        Stop.

    You need more environment space.  Win9x only has room for 256 bytes
    by default, and especially after installing ActivePerl (which fiddles
    the PATH envar), you're likely to run out.  KB Q230205

        http://support.microsoft.com/default.aspx?scid=KB;en-us;q230205

    explains how to edit CONFIG.SYS to cure this.


YOUR OWN EXTENSION DLLs
-----------------------
If you want to create your own extension module DLL, there's an example
with easy-to-follow instructions in ../PC/example/; read the file
readme.txt there first.
