BUILDING PYTHON 1.2 FOR THE MACINTOSH
*************************************

Python can be built on the Mac using either THINK C 6.0 (or 7.0), or
CodeWarrior 5.0 (for 68K and PPC).  In the past it has also been compiled
with earlier versions of Think, but no guarantees are made that the
source is still compatible with those versions.  (Think C 5.0 appears
to be OK.)  Likewise, new compiler versions may effectively change the
language accepted (or the library provided!)  and thus cause problems.

MPW is a special case -- it used to be possible to build Python as
an MPW tool using MPW 3.2, and this may still work, but I haven't
tried this lately.  What I have tried, however, is building Python
as a shared library for CFM-68K, using the Symantec C compiler for MPW.
See subdirectory MPW and the README file there for more info.


1. Using Think C 6.0 (or 7.0)
=============================

1.1 The directory structure
---------------------------

I duplicate the UNIX directory structure from the distribution.  The
subdirectories needed to compile are: Mac, Include, Parser, Python,
Objects, Modules.  (Don't bother with Grammar and the parser
generator, nor with the Doc subdirectory.)

For running and testing, you also need Lib and its subdirectories test
and stdwin.  You could also copy some things from the Demo/stdwin
directory (unfortunately most other demos are UNIX specific and even
many stdwin demos are).

Make sure there is no config.c file in the Modules subdirectory (if
you copy from a directory where you have done a UNIX build this might
occur).  Also don't use the config.h generated on UNIX.

1.2 The project file
--------------------

I put all source files in one project, which I place in the parent
directory of the source directories.

1.2.1 Project type

(This is the Set Project Type... dialog in the Project menu.)

Set the creator to PYTH; turn on "far data"; leave "far code" and
"separate strs" unchecked (they just serve to bloat the application).
A partition size of 1000K should be enough to run the standard test
suite (which requires a lot of memory because it stress tests the
parser quite a bit) and most demos or medium-size applications.  The
interpreter will do basic things in as little at 500K but this may
prevent parsing larger modules.

1.2.2 Compiler options

(This is the Options -> THINK C ... dialog in the Edit menu.)

	- Start with Factory Settings.

	- In the Prefix, remove #include <MacHeaders> and add
		#define HAVE_CONFIG_H

	- Choose any optimizer and debugger settings you like.  - You
	can choose 4-byte ints if you want.  This requires that you
	rebuild the ANSI and unix libraries with 4-bytes ints as well
	(better make copies with names like ANSI 32 bit).  With 4-byte
	ints the interpreter is marginally bigger and somewhat (~10%)
	slower, but Python programs can use strings and lists with
	more than 32000 items (with 2-byte ints these can cause
	crashes).  The range of Python integers is not affected (these
	are always represented as longs).  In fact, nowadays I always
	use 4-byte integers, since it is actually rather annoying that
	strings >= 64K cause crashes.

1.2.3 Files to add

(This is the Add Files... dialog in the Source menu.)

The following source files must be added to the project.  I use a
separate segment for each begin letter -- this avoids segment
overflow, except for 'c', where you have to put either ceval.c or
compile.c in a separate segment.  You could also group them by
subdirectory or function, but you may still have to split segments
arbitrarily because of the 32000 bytes restriction.

	- From Mac: all .c files.

	- From Parser: acceler.c, grammar1.c,
	myreadline.c, node.c, parser.c, parsetok.c, tokenizer.c.

	- From Python: bltinmodule.c, ceval.c, cgensupport.c,
	compile.c, errors.c, getargs.c getopt.c, graminit.c, import.c,
	importdl.c, marshal.c, modsupport.c, mystrtoul.c,
	pythonmain.c, pythonrun.c, sigcheck.c, structmember.c,
	sysmodule.c, traceback.c (i.e. all .c files except dup2.c,
	fmod.c, frozenmain.c, getcwd.c, getmtime.c, memmove.c,
	sigcheck.c, strerror.c, strtod.c, thread.c)

	- From Objects: all .c files except xxobject.c.

	- From Modules: all the modules listed in config.c (in the Mac
	subdirectory) in the initializer for inittab[], before
	"ADDMODULE MARKER 2".  Also add md5c.c if you add md5module.c,
	and regexpr.c if you add regexmodule.c.  (You'll find
	macmodule.c in the Mac subdirectory, so it should already have
	been added in a previous step.)  Note that for most modules,
	the source file is called <name>module.c, but for a few long
	module names it is just <module>.c.  Don't add stdwinmodule.c
	yet,

The following THINK C libraries must be added: from Standard
Libraries, ANSI and unix; from Mac Libraries, MacTraps.  I put each
library in a separate segment.  Also see my earlier remark on 4-byte
ints.

1.4 Adding STDWIN
-----------------

STDWIN is built in two separate projects: stdwin.pi contains the core
STDWIN implementation from Ports/mac, textedit.pi contains the files
from Packs/textedit.  Use the same compiler options as for Python and
the same general source setup (in a sister directory of the toplevel
Python directory).  Put all sources in the same segment.  To
stdwin.pi, also add Tools/strdup.c and Gen/wtextbreak.c.

The two projects can now be added as libraries to the Python project.
You must also add stdwinmodule.c and add "#define USE_STDWIN" to the
Prefix in the compiler options dialog (this only affects macmain.c and
config.c).

Note that stdwinmodule.c contains an #include statement that
references "stdwin.h" by relative path name -- if the stdwin toplevel
directory is not a sibling of the python toplevel directory, you may
have to adjust the number of colons in the pathname.

1.5 Resources
-------------

Since I created them with ResEdit I have no text source of the
resources needed to give the application an icon etc...  You can copy
the size, bundle, file reference and icon resources from the
distributed Python application with ResEdit.  THINK C automatically
copies resources into the application file from a file
<projectname>.rsrc.

1.6 Think C 5.0
---------------

Tim Gilbert adds one note that will be helpful to future Think C 5.0
users: When you have a really big project like python, and you want to
compile and run it, if you just hit Command-R, often Think C will
compile the remaining files, think for a moment, and then give you a
warning "internal error(ZREF)--please remove objects."  Don't listen
to it.  It is lying.  What you should do instead is "Check Link..."
and _then_ hit Run.  Why?  Ask Symantec.


2. Using MicroWerks CodeWarrior 5.0
===================================

Essentially, follow the instructions for Think C.

XXX Should at least list the project options.


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