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