Welcome to the "PC" subdirectory of the Python distribution!
************************************************************


This "PC" subdirectory contains complete project files to make
several PC ports of Python, as well as all the PC-specific
Python source files.  It should be located in the root of the
Python distribution, and there should be directories "Modules",
"Objects", "Python", etc. in the parent directory of this "PC"
subdirectory.  Be sure to read the documentation in the Python
distribution.

Python requires library files such as string.py to be available in
one or more library directories.  The search path of libraries is
set up when Python starts.  To see the current Python library search
path, start Python and enter "import sys" and "print sys.path".

All PC ports except Windows 95/NT use this scheme to try to set up
a search path:
  1) If the Python executable (for example, py_dos.exe) is located
     in a subdirectory of the Python root (..), then those library
     files are used (../Lib) to generate the path.
  2) Otherwise the environment variable PYTHONPATH is the search path.
  3) Otherwise the directory "lib" in the directory of the executable
     file is used to generate the path.
  4) Otherwise, the current directory is used (not useful).

The best installation strategy (except NT) is to put the Python
executable in some convenient directory such as C:/python, and
copy all library files and subdirectories (using XCOPY) to C:/python/lib.
Then you don't need to set PYTHONPATH.  Otherwise, set the environment
variable PYTHONPATH to your Python search path.  For example,
   set PYTHONPATH=.;d:\python\lib;d:\python\lib\win;d:\python\lib\dos_8x3

Python for Windows 95/NT uses the same PYTHONPATH environment variable, plus
the Python path recorded in the registry.

There are several add-in modules to build Python programs which use
the native Windows operating environment.  The ports here just make
"QuickWin" and DOS Python versions which support a character-mode
(console) environment.  Look in www.python.org for Tkinter, PythonWin,
WPY and wxPython.

To make a Python port, start the Integrated Development Environment
(IDE) of your compiler, and read in the native "project file"
(or makefile) provided.  This will enable you to change any source
files or build settings so you can make custom builds.

config.h    An important configuration file specific to PC's.

config.c    The list of C modules to include in the Python PC
            version.  Manually edit this file to add or
            remove Python modules.

testpy.py   A Python test program.  Run this to test your
            Python port.  It should say "all tests OK".

src         A subdirectory used only for VC++ version 1.5 Python
            source files.  See below.  The other compilers do not
            use it.  They reference the actual distribution
            directories instead.


Microsoft Visual C++ Version 4.x (32-bit Windows)
=================================================

(For historic reasons this uses the filename "vc40"; it has been tested
most recently with VC 4.2.  VC 5.x should be able to convert it.)

The distributed Makefile is vc40.mak.  This file is distributed with
CRLF line separators, otherwise Developer Studio won't like it.  It
will NOT work from this PC directory.  To use it, first copy it to the
Python distribution directory, e.g. with this command:
    copy vc40.mak ..
To convert the Makefile into a project file, start Developer Studio,
choose Open Workspace, change the file name pattern to *.mak, find and
select the file vc40.mak, and click OK.  Developer Studio will create
additional project files vc40.ncb and vc40.mdp when you use the
project.  The project contains six targets, which should be built in
this order:

python15    The Python core as a DLL, named python15.dll.

python      The Python main program, named python.exe.  This should
            work as a console program under Windows 95 or NT, as well
            as under Windows 3.1(1) when using win32s.  It uses
            python15.dll.

_tkinter    The optional _tkinter extension, _tkinter.dll; see below.

All end products of the compilation are placed in the subdirectory
vc40 (which Developer Studio creates); object files are placed in
vc40/tmp.  There are no separate Release and Debug project variants.
Note that the python and _tkinter projects require that the
python15.lib file exists in the vc40 subdirectory before they can be
built.

*** How to build the _tkinter extension ***

This assumes that you have installed the Tcl/Tk binary distribution for
Windows 95/NT with version numbers 7.5p1/4.1p1, in the default
installation location (C:\tcl).  (Ftp to ftp.sunlabs.com in /pub/tcl,
file win41p1.exe.)  You must also fetch and unpack the zip file
vclibs41.zip which contains the files tcl75.lib and tk41.lib, and place
those files in the PC subdirectory.  In order to use _tkinter, the
Tkinter.py module must be on PYTHONPATH.  It is found in the
Lib\tkinter subdirectory.


Additional files and subdirectories for 32-bit Windows
======================================================

python_nt.def  Exports definition file for python15.dll.

python_nt.rc   Resource compiler input for python15.dll.

dl_nt.c, getpath_nt.c, import_nt.c
               Additional sources used for 32-bit Windows features.

main_nt.c      Source for python.exe.

dllbase_nt.txt A (manually maintained) list of base addresses for
               various DLLs, to avoid run-time relocation.

_tkinter.def   The export definitions file for _tkinter.dll.

make_nt.in     Include file for nmake-based builds (unsupported).

example_nt     A subdirectory showing how to build an extension as a
               DLL.

setup_nt       A subdirectory containing an experimental installer
               using Python only.


Microsoft Visual C++ Version 1.5 (16-bit Windows)
=================================================

Since VC++1.5 does not handle long file names, it is necessary
to run the "makesrc.exe" program in this directory to copy
Python files from the distribution to the directory "src"
with shortened names.  Included file names are shortened too.
Do this before you attempt to build Python.

The "makesrc.exe" program is a native NT program, and you must
have NT, Windows 95 or Win32s to run it.  Otherwise you will need
to copy distribution files to src yourself.

The makefiles are named *.mak and are located in directories
starting with "vc15_".  NOTE:  When dependencies are scanned
VC++ will create dependencies for directories which are not
used because it fails to evaluate "#define" properly.  You
must manaully edit makefiles (*.mak) to remove references to
"sys/" and other bad directories.

vc15_lib    A static Python library.  Create this first because is
            is required for vc15_w31.

vc15_w31    A Windows 3.1x Python QuickWin (console-mode)
            Python including sockets.  Requires vc15_lib.


Watcom C++ Version 10.6
=======================

The project file for the Watcom compiler is ./python.wpj.
It will build Watcom versions in the directories wat_*.

wat_dos     A 32-bit extended DOS Python (console-mode) using the
            dos4gw DOS extender.  Sockets are not included.

wat_os2     A 32-bit OS/2 Python (console-mode).
            Sockets are not included.
