Python release 1.2
==================

==> This version provides new functionality as well as bug fixes.
    Everyone should upgrade.  For a description of what's changed, see
    Misc/NEWS.

==> If you don't know yet what Python is: it's an interpreted,
    extensible, embeddable, interactive, object-oriented programming
    language.  For a quick summary of what Python can mean for a
    UNIX/C programmer, read Misc/BLURB.LUTZ.

==> If you want to start compiling right away (on UNIX): just type
    "./configure" in the current directory and when it finishes, type
    "make".  See the section Build Instructions below for more
    details.

==> All documentation is in the subdirectory Doc in the form of LaTeX
    files.  In order of importance for new users: Tutorial (tut),
    Library Reference (lib), Language Reference (ref), Extending
    (ext).  Note that especially the Library Reference is of immense
    value since much of Python's power (including the built-in data
    types and functions!) is described there.  [NB The ext document
    has not been updated to reflect this release yet.]

==> Python is COPYRIGHTED but free to use for all.  See the copyright
    notice at the end of this file.  Moreover, the Python distribution
    is not affected by the GNU Public Licence (GPL).  There is support
    for interfaces to some GNU code but this is entirely optional and
    no GNU code is distributed with Python.  For all these packages,
    GPL-free public domain versions also exist.


Build instructions
------------------

Before you start building Python, you must first configure it.  This
entails (at least) running the script "./configure", which figures out
your system configuration and creates several Makefiles.  (This will
take a minute or two -- please be patient!)  When it is done, you are
ready to run make.  Typing "make" in the toplevel directory will
recursively run make in each of the subdirectories Parser, Objects,
Python and Modules, creating a library file in each one.  The
executable of the interpreter is built in the Modules subdirectory but
moved up here when it is built.  If you want or need to, you can also
chdir into each subdirectory in turn and run make there manually
(do the Modules subdirectory last!).  If you run into trouble, first
see the section Troubleshooting later in this file.

AIX users: read the file Misc/AIX-NOTES before trying to build.

HP-UX users: read the file Misc/HPUX-NOTES if you want to be able to
use shared libraries for dynamically loaded modules.

DEC Alpha users: unless you like debugging GCC, pass "--without-gcc"
to the configure script.

Minix users: when using ack, use "CC=cc AR=aal RANLIB=: ./configure"!

You can configure the interpreter to contain fewer or more built-in
modules by editing the file Modules/Setup.  This file is initially
copied (when the toplevel Makefile makes Modules/Makefile for the
first time) from Setup.in; if it does not exist yet, make a copy
yourself.  Never edit Setup.in -- always edit Setup.  Read the
comments in the file for information on what kind of edits you can
make.  When you have edited Setup, Makefile and config.c in Modules
will automatically be rebuilt the next time you run make in the
toplevel directory.

If you want to change the optimization level of the build, assign to
the OPT variable on the toplevel make command; e.g. "make OPT=-g" will
build a debugging version of Python on most platforms.  The default is
OPT=-O; a value for OPT in the environment when the configure script
is run overrides this default (likewise for CC; and the initial value
for LIBS is used as the base set of libraries to link with).

To test the interpreter that you have just built, type "make test".
This runs the test set silently, twice (once with no compiled files,
once with the compiled files left by the previous test run).  Each
test run should print "All tests OK." and nothing more.  (The test set
does not test the built-in modules, but will find most other problems
with the interpreter.)

To install the interpreter as /usr/local/bin/python, type "make
install".  To install the library as /usr/local/lib/python, type "make
libinstall".  To install the manual page as
/usr/local/man/man1/python.1, type "make maninstall".  To install the
Emacs editing mode for python, manually copy the file
Misc/python-mode.el to your local Emacs lisp directory.  The directory
/usr/local can be overridden at configuration time by passing
--prefix=DIRECTORY to the configure script, or at make time by passing
"prefix=DIRECTORY" to make.  See below for more information on --prefix.

If you plan to do development of extension modules or to embed Python
in another application and don't want to reference the original source
tree, you can type "make inclinstall" and "make libainstall" to
install the include files and lib*.a files, respectively, as
/usr/local/include/Py/*.h and /usr/local/lib/python/lib/lib*.a.  The
make libainstall target also installs copies of several other files
used or produced during the build process which are needed to build
extensions or to generate their Makefiles.

To print the documentation, cd into the Doc subdirectory, type "make"
(let's hope you have LaTeX installed!), and send the four resulting
PostScript files (tut.ps, lib.ps, ref.ps, and ext.ps) to the printer.
See the README file there; you can also build a texinfo version of the
library manual and from that construct an Emacs info version (the
hypertext format used by the Emacs "info" command) and an HTML version
(the hypertext format used by the World Wide Web distributed
information initiative).  You don't need to have LaTeX installed for
this.  Note that the Python archive sites also carry the resulting
PostScript files, in case you have a PostScript printer but not LaTeX.

Some special cases are handled by passing environment variables or
options to the configure script:

- The configure script uses gcc (the GNU C compiler) if it finds it.
If you don't want this, or if this compiler is installed but broken on
your platform, pass the option --without-gcc.  You can also pass
"CC=cc" (or whatever the name of the proper C compiler is) in the
environment, but the advantage of using --without-gcc is that this
option is remembered by the config.status script for its --recheck
option.

- On SCO, a number of notes apply:

	1) Everything works much better if you add -U__STDC__ to the
	defs.  This is because all the SCO header files are broken.
	Anything that isn't mentioned in the C standard it's
	conditionally excluded when __STDC__ is defined.

	2) Due to the U.S. export restrictions, SCO broke the crypt
	stuff out into a separate library, libcrypt_i.a so the LIBS
	needed be set to:

		LIBS=' -lsocket -lcrypt_i'


- If you want to install the binaries and the Python library somewhere
else than in /usr/local/{bin,lib}, you can pass the option
--prefix=DIRECTORY; the interpreter binary will be installed as
DIRECTORY/bin/python and the library files as DIRECTORY/lib/python/*.
If you pass --exec-prefix=DIRECTORY (as well) this overrides the
installation prefix for architecture-dependent files (like the
interpreter binary).  Note that --prefix=DIRECTORY also affects the
default module search path (sys.path), when Modules/config.c is
compiled.  Passing make the option prefix=DIRECTORY (and/or
exec_prefix=DIRECTORY) overrides the prefix set at configuration time;
this may be more convenient than re-running the configure script if
you change your mind about the install prefix...

- You can use the GNU readline library to improve the interactive user
interface: this gives you line editing and command history when
calling python interactively.  You need to configure build the GNU
readline library before running the configure script.  Its sources are
not distributed with Python; you can ftp them from any GNU mirror
site, or from its home site:
<URL:ftp://slc2.ins.cwru.edu/pub/dist/readline-2.0.tar.gz> (or a
higher version number -- using version 1.x is not recommended).

A GPL-free version was posted to comp.sources.misc in volume 31 and is
widely available from FTP archive sites, e.g.
<URL:ftp://gatekeeper.dec.com/.b/usenet/comp.sources.misc/volume31/editline/part01.Z>

Pass the Python configure script the option --with-readline=DIRECTORY
where DIRECTORY is the absolute pathname of the directory where you've
built the readline library.  Some hints on building and using the
readline library:

    - If you have already built Python without readline and then
    decide to add it, you have to rerun configure adding the
    --with-readline flag, AND you have to remove the object file
    Modules/myreadline.o (same if you go the other way)

    - On SGI IRIX 5, you may have to add the following
    to rldefs.h:

	#ifndef sigmask
	#define sigmask(sig)	(1L << ((sig)-1))
	#endif

    - On most systems, you will have to add #include "rldefs.h" to the
    top of several source files, and if you use the VPATH feature, you
    will have to add dependencies of the form foo.o: foo.c to the
    Makefile for several values of foo.

    - The readline library requires use of the termcap library.  A
    known problem with this is that it contains entry points which
    cause conflicts with the STDWIN and SGI GL libraries.  The stdwin
    conflict can be solved (and will be, in the next release of
    stdwin) by adding a line saying '#define werase w_erase' to the
    stdwin.h file (in the stdwin distribution, subdirectory H).  The
    GL conflict has been solved in the Python configure script by a
    hack that forces use of the static version of the termcap library.

    - Check the newsgroup gnu.bash.bugs for specific problems with the
    readline library (I don't get this group here but I've been told
    that it is the place for readline bugs.)

- On SGI IRIX, and on Sun SOLARIS 2, you can use multiple threads.  To
enable this, pass --with-thread.  In the Modules/Setup file, enable
the thread module.  (Threads aren't enabled automatically because
there are run-time penalties when support for them is compiled in even
if you don't use them.)

- On SGI IRIX, there are modules that interface to many SGI specific
system libraries, e.g. the GL library and the audio hardware.  To
enable these modules, you must edit the Modules/Setup file (or copy the
Setup.irix4 file to it).

- On SGI IRIX 4, dynamic loading of extension modules is supported by
the "dl" library by Jack Jansen, which is ftp'able from
<URL:ftp://ftp.cwi.nl/pub/dynload/dl-1.6.tar.Z>.  This is enabled
(after you've ftp'ed and compiled the dl library!) by passing
--with-sgi-dl=DIRECTORY where DIRECTORY is the absolute pathname of
the dl library.  (Don't bother on IRIX 5, it already has dynamic
linking using SunOS style shared libraries.)  Support for this feature
is deprecated.

- Dynamic loading of modules is rumoured to be supported on some other
systems: VAX (Ultrix), Sun3 (SunOS 3.4), Sequent Symmetry (Dynix), and
Atari ST.  This is done using a combination of the GNU dynamic loading
package (<URL:ftp://ftp.cwi.nl/pub/dynload/dl-dld-1.1.tar.Z>) and an
emulation of the SGI dl library mentioned above (the emulation can be
found at <URL:ftp://ftp.cwi.nl/pub/dynload/dld-3.2.3.tar.Z>).  To enable
this, ftp and compile both libraries, then call the configure passing
it the option --with-dl-dld=DL_DIRECTORY,DLD_DIRECTORY where
DL_DIRECTORY is the absolute pathname of the dl emulation library and
DLD_DIRECTORY is the absolute pathname of the GNU dld library.  (Don't
bother on SunOS 4 or 5, they already have dynamic linking using shared
libraries.)  Support for this feature is deprecated.

- It is possible to specify alternative versions for the Math library
(default -lm) and the C library (default the empty string) using the
options --with-libm=STRING and --with-libc=STRING, respectively.  E.g.
if your system requires that you pass -lc_s to the C compiler to use
the shared C library, you can pass --with-libc=-lc_s.  These libraries
are passed after all other libraries, the C library last.

You can also build an "extended" interpreter, using modules that are
not contained in the Modules directory.  Extensions are distributed as
a separate tar file (currently extensions.tar.Z).  See the README file
there.


The Tk extension
----------------

Tk (the user interface component of John Ousterhout's Tcl language) is
also usable from Python.  Since this requires that you first build and
install Tcl/Tk, the Tk interface is not enabled by default.  It
requires Tcl 7.3 and Tk 3.6.  For more info about Tk, including
pointers to the source, see John Ousterhout's home page at
<URL:http://playground.sun.com/~ouster/>.

To enable the Python/Tk interface, once you've built and installed
Tcl/Tk, all you need to do is edit two lines in Modules/Setup; search
for the string "Tk".  Un-comment one (normally the first) of the lines
beginning with "#tkinter" and un-comment the line beginning with
"#TKPATH".  (If you have installed Tcl/Tk in unusual places you will
have to edit the first line as well to fix the -I and -L options.)
See the Build Instructions above for more details.

There is little documentation.  Begin with fetching the "Tk Lifesaver"
document, e.g. <URL:ftp://ftp.cwi.nl/pub/python/tkinter-doc.tar.gz> (a
gzipped tar file containing a PostScript file).  There are demos in
the Demo/tkinter directory, in the subdirectories guido, matt and www.

Note that there's a Python module called "Tkinter" (capital T) which
lives in Lib/tkinter/Tkinter.py, and a C module called "tkinter"
(lower case t) which lives in Modules/tkintermodule.c.  Demos and
normal Tk applications only import the Python Tkinter module -- only
the latter uses the C tkinter module directly.  In order to find the C
tkinter module, it must be compiled and linked into the Python
interpreter -- the tkinter line in the Setup file does this.  In order
to find the Python Tkinter module, sys.path must be set correctly --
the TKPATH assignment in the Setup file takes care of this, but only
if you install Python properly ("make install libinstall").  (You can
also use dynamic loading for the C tkinter module, in which case you
must manually fix up sys.path or set $PYTHONPATH for the Python
Tkinter module.)


Building for multiple architectures (using the VPATH feature)
-------------------------------------------------------------

If your file system is shared between multiple architectures, it
usually is not necessary to make copies of the sources for each
architecture you want to support.  If the make program supports the
VPATH feature, you can create an empty build directory for each
architecture, and in each directory run the configure script (on the
appropriate machine with the appropriate options).  This creates the
necessary subdirectories and the Makefiles therein.  The Makefiles
contain a line VPATH=... which points to directory containing the
actual sources.  (On SGI systems, use "smake" instead of "make" if you
use VPATH -- don't try gnumake.)

For example, the following is all you need to build a minimal Python
in /usr/tmp/python (assuming ~guido/src/python is the toplevel
directory and you want to build in /usr/tmp/python):

	$ mkdir /usr/tmp/python
	$ cd /usr/tmp/python
	$ ~guido/src/python/configure
	[...]
	$ make
	[...]
	$

Note that Modules/Makefile copies the original Setup file to the build
directory if it finds no Setup file there.  This means that you can
edit the Setup file for each architecture independently.  For this
reason, subsequent changes to the original Setup file are not tracked
automatically, as they might overwrite local changes.  To force a copy
of a changed original Setup file, delete the target Setup file.  (The
makesetup script supports multiple input files, so if you want to be
fancy you can change the rules to create an empty Setup.local if it
doesn't exist and run it with arguments $(srcdir)/Setup Setup.local;
however this assumes that you only need to add modules.)


Troubleshooting
---------------

See section 3 of the FAQ (in subdirectory Misc of the distribution)
for hints on what can go wrong, and how to fix it.


Building on non-UNIX systems
----------------------------

On non-UNIX systems, you will have to fake the effect of running the
configure script manually.  A good start is to copy the file
config.h.in to config.h and edit the latter to reflect the actual
configuration of your system.  Most symbols must simply be defined as
1 only if the corresponding feature is present and can be left alone
otherwise; however RETSIGTYPE must always be defined, either as int or
as void, and the *_t type symbols must be defined as some variant of
int if they need to be defined at all. Then arrange that the symbol
HAVE_CONFIG_H is defined during compilation (usually by passing an
argument of the form `-DHAVE_CONFIG_H' to the compiler, but this is
necessarily system-dependent).

I have tried to collect instructions, Makefiles and additional sources
for various platforms in this release.  The following directories
exist:

Mac/		Apple Macintosh, using THINK C 6.0 or MPW 3.2.
Dos/		MS-DOS and Windows 3.1, using Microsoft C.
Nt/		Windows NT, using Microsoft Visual C/C++.
Os2/		OS/2.

Most of these instructions were last tested with a previous Python
release, so you may still experience occasional problems.  If you have
fixes or suggestions, please let me know and I'll try to incorporate
them in the next release.


Distribution structure
----------------------

Most subdirectories have their own README file.  Most files have
comments.

ChangeLog	A raw list of changes since the first 1.0.0 BETA release
Demo/		Demonstration scripts, modules and programs
Doc/		Documentation (in LaTeX)
Extensions/	Extension modules (distributed separately)
Grammar/	Input for the parser generator
Include/	Public header files
Lib/		Python library modules
Makefile	Rules for building the distribution
Misc/		Miscellaneous files
Modules/	Implementation of most built-in modules
Objects/	Implementation of most built-in object types
Parser/		The parser and tokenizer and their input handling
Python/		The "compiler" and interpreter
README		The file you're reading now
Tools/		Some useful programs written in Python
acconfig.h	Additional input for the autoheader program
config.h	Configuration header (generated)
config.h.in	Source from which config.status creates config.h
config.status	status from last run of configure script (generated)
configure	Configuration shell script (GNU autoconf output)
configure.in	Configuration specification (GNU autoconf input)
tags, TAGS	Tags files for vi and Emacs (generated)
python		The executable interpreter (generated)


Ftp access
----------

The latest Python source distribution can be ftp'ed from
<URL:ftp://ftp.cwi.nl/pub/python/>.  See the INDEX or index.html file
for more information.  You can also find PostScript of the main Python
documentation there, Macintosh and PC binaries, and the latest STDWIN
source distribution (in directory /pub/stdwin).  oFr mirror sites, see
the list in the FAQ (Misc/FAQ this directory).


Mailing list and Newsgroup
--------------------------

There are a mailing list and a newsgroup devoted to Python
programming, design and bugs.  The newsgroup, comp.lang.python,
contains exactly the same messages as the mailing list.  To subscribe
to the mailing list, send mail containing your real name and e-mail
address in Internet form to "python-list-request@cwi.nl".


Author
------

Guido van Rossum
CWI, dept. CST
P.O. Box 94079
1090 GB  Amsterdam
The Netherlands

E-mail: Guido.van.Rossum@cwi.nl


Copyright Notice
----------------

The Python source is copyrighted, but you can freely use and copy it
as long as you don't change or remove the copyright:

Copyright 1991-1995 by Stichting Mathematisch Centrum, Amsterdam,
The Netherlands.

                        All Rights Reserved

Permission to use, copy, modify, and distribute this software and its
documentation for any purpose and without fee is hereby granted,
provided that the above copyright notice appear in all copies and that
both that copyright notice and this permission notice appear in
supporting documentation, and that the names of Stichting Mathematisch
Centrum or CWI not be used in advertising or publicity pertaining to
distribution of the software without specific, written prior permission.

STICHTING MATHEMATISCH CENTRUM DISCLAIMS ALL WARRANTIES WITH REGARD TO
THIS SOFTWARE, INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY AND
FITNESS, IN NO EVENT SHALL STICHTING MATHEMATISCH CENTRUM BE LIABLE
FOR ANY SPECIAL, INDIRECT OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES
WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN
ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT
OF OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE.


Signature
---------

--Guido van Rossum, CWI, Amsterdam <Guido.van.Rossum@cwi.nl>
<URL:http://www.cwi.nl/cwi/people/Guido.van.Rossum.html>
