| BUILDING PYTHON 1.2 FOR THE MACINTOSH |
| ************************************* |
| |
| Python can be built on the Mac using either THINK C 6.0 (or 7.0), MPW |
| 3.2, or CodeWarrior 5.0. In the past it has also been compiled with |
| earlier versions of Think and MPW, 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. |
| |
| |
| 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 MPW 3.2 |
| ================ |
| |
| The subdirectory MPW contains a README.MPW file, a buildall script and |
| several Makefiles, kindly contributed by Richard Walker of Island |
| Software. Move these files to the corresponding locations relative to |
| the Python root directory (where Mac-Makefile should become Makefile |
| in the Mac subdirectory, etc.), and run the buildall script. The |
| README.MPW file contains more instructions and caveats (I've added |
| some remarks of my own at the end). |
| |
| Some notes: |
| |
| - The MPW and THINK C ports share all source files, including config.c |
| and config.h -- all differentiation is done based on #ifdef THINK_C |
| or #ifdef MPW (#ifdef macintosh is used for code that should be seen |
| by all Mac compilers). |
| |
| - The dynload subdirectory contains an attempt to create dynamically |
| loadable modules from CODE segments. This was not very successful |
| due to the restrictions on CODE segments (no global variables, no |
| calls to external functions). Maybe Apple's new shared library |
| manager will be a better starting point. |
| |
| - I haven't tried building STDWIN with MPW recently. There is MPW |
| specific code all over the STDWIN source but it is for a much older |
| version of the compiler and library. |
| |
| |
| 3. 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> |