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.

EXCEPTIONS: on SVR4 derived systems, you need to pass the configure
script the option --with-svr4.  See below for more options you can
pass to the configure script.

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.

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 "CC=cc" (or whatever the name of the proper C
compiler is) in the environment.

- On System V, Release 4 derived systems (e.g. SOLARIS 2, but not
IRIX 5) you need to call the configure script with the option
--with-svr4.  This is needed so the libraries -lnsl and -lsocket are
found.  (On some other systems, e.g. IRIX 5, these libraries exist but
are incompatible with other system libraries such as X11 and GL.)

- 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:

    - 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
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>
