Python release 1.1
==================

==> This is Python version 1.1.  

==> Python 1.1 contains many improvements over 1.0.3, but is almost
    backward compatible (though the magic number for .pyc file has
    changed).  It comes with build instructions for many more non-UNIX
    platforms.

==> 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: 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.  [XXX 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.


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.

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.  (There are some example Setup files which you may
copy to Setup for specific systems; have a look at Setup.*.)

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

- 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
no longer distributed with Python; you can ftp them from any GNU
mirror site, or from its home site:
ftp://slc2.ins.cwru.edu/pub/dist/readline-2.0.tar.gz (or a higher
version number -- using version 1.x is not recommended).  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
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 (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 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.


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.

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
	[...]
	$

To use the readline library in this case, you will have to create a
subdirectory of your build directory called readline, copy
readline/Makefile into it, edit the Makefile to contain a proper VPATH
line (and possibly edit the compiler flags set in the Makefile), and
pass the configure script a --with-readline=DIRECTORY option giving it
the absolute (!) pathname of the readline build directory.

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
ftp://ftp.cwi.nl/pub/python/python<version>.tar.gz.  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, 1992, 1993, 1994 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>
