blob: 7021537640092a4fa5e0f0f4fd33b6d6b1391b6f [file] [log] [blame]
Jack Jansen8f2d8021996-08-05 15:34:45 +00001<HTML>
2<HEAD>
3<TITLE>Building Mac Python from source</TITLE>
4</HEAD>
5<BODY>
6<H1>Building Mac Python from source</H1>
7<HR>
Jack Jansen8f2d8021996-08-05 15:34:45 +00008
Jack Jansen4c1e56c1996-08-06 16:16:20 +00009This document explains how to build MacPython from source. This is
10necessary if you want to write extension modules for 68K Python, and
11currently also probably the easiest way to build PPC extension
12modules. Building Python is not something to be undertaken lightly,
13the process is not very streamlined so you need a reasonable working
14knowledge of the CodeWarrior development environment, a good net
15connection and probably quite some time too. <p>
Jack Jansen8f2d8021996-08-05 15:34:45 +000016
Jack Jansen4c1e56c1996-08-06 16:16:20 +000017The information density in this file is high, so you should probably
18print it and read it at your leasure. Most things are explained only
19once (and probably in the wrong place:-). <p>
20
21I am very interested in feedback on this document, contact me at <A
22HREF="mailto:jack@cwi.nl">&lt;jack@cwi.nl&gt;</A> or send your
23comments to the <A
24HREF="http://www.python.org/sigs/pythonmac-sig/">Mac Python Special
25Interest Group</A>.
Jack Jansen8f2d8021996-08-05 15:34:45 +000026
27<H2>What you need.</H2>
28
29The following things you definitely need:
30
31<UL>
Jack Jansen8f2d8021996-08-05 15:34:45 +000032
Jack Jansen4c1e56c1996-08-06 16:16:20 +000033<LI> You need a MacPython source distribution, of course. You can
34obtain one from <A
Jack Jansen1473af71997-05-07 15:43:38 +000035HREF="ftp://ftp.cwi.nl/pub/jack/python/mac">ftp://ftp.cwi.nl/pub/jack/python/mac</A>
36or from the companion webpage at <A HREF="http://www.cwi.nl/~jack/macpython.html">
37http://www.cwi.nl/~jack/macpython.html</A> (which has up-to-date links to the other
38packages needed too)
Jack Jansen4c1e56c1996-08-06 16:16:20 +000039and possibly also from the standard <A
40HREF="ftp://ftp.python.org/pub/python/mac">python.org ftp
41site</A>. Everything you need is also included in the standard Python
42source distribution, but the organization is different. Look in
43directory <code>Mac/mwerks/projects</code> for the project files and
44related stuff.
Jack Jansen8f2d8021996-08-05 15:34:45 +000045
Jack Jansen4c1e56c1996-08-06 16:16:20 +000046<LI> You need MetroWerks CodeWarrior. The current distribution has
Jack Jansen1473af71997-05-07 15:43:38 +000047been built with version 11 of CodeWarrior. Ordering information is
Jack Jansen4c1e56c1996-08-06 16:16:20 +000048available on the <A HREF="http://www.metrowerks.com/">MetroWerks
49homepage</A>. You might still be able to build Python with MPW or
50Think/Symantec C but you are basically on your own.
51
52<LI> You need GUSI, the Grand Unified Socket Interface, by Matthias
Jack Jansen1473af71997-05-07 15:43:38 +000053Neeracher. The original CWGUSI is
Jack Jansen4c1e56c1996-08-06 16:16:20 +000054obtainable from <A
Jack Jansenf3dd5aa1996-12-23 17:29:51 +000055HREF="ftp://sunsite.cnlab-switch.ch/software/platform/macos/src">
Jack Jansen1473af71997-05-07 15:43:38 +000056ftp://sunsite.cnlab-switch.ch/software/platform/macos/src</A>,
57but at the moment Python is built with a rather hacked-up version of GUSI,
58available from Jack's Python webpage and ftp-directory referenced above.
59It is also possible to build a non-GUSI Python, see below.
Jack Jansen4c1e56c1996-08-06 16:16:20 +000060
Jack Jansen8f2d8021996-08-05 15:34:45 +000061</UL>
62
Jack Jansen4c1e56c1996-08-06 16:16:20 +000063<A NAME="optional">The MacPython project files are configured to
64include a plethora of optional modules</A>, and these modules need a
65number extra packages. To use the project files as-is you have to
Jack Jansen27b10ec1996-08-23 15:44:18 +000066download these packages too. PPC and CFM68K Python have all such modules as
Jack Jansen4c1e56c1996-08-06 16:16:20 +000067dynamically loaded modules, so if you don't need a certain package it
Jack Jansen27b10ec1996-08-23 15:44:18 +000068suffices to just refrain from builing the extension module. For static 68K
Jack Jansen4c1e56c1996-08-06 16:16:20 +000069Python things are a bit more complicated: you have to edit the
70interpreter project file to remove the reference to the module (and
Jack Jansen27b10ec1996-08-23 15:44:18 +000071the libraries it uses), and edit the <code>Mac:mwerks:mwerks_nonshared_config.h</code>
72file to remove the <code>USE_...</code> line. Here are the locations for the various things
Jack Jansen4c1e56c1996-08-06 16:16:20 +000073you need:
Jack Jansen8f2d8021996-08-05 15:34:45 +000074
75<UL>
Jack Jansen8f2d8021996-08-05 15:34:45 +000076
Jack Jansen4c1e56c1996-08-06 16:16:20 +000077<LI> Tcl and Tk can be obtained from <A
78HREF="ftp://ftp.smli.com/pub/tcl/mac/">ftp://ftp.smli.com/pub/tcl/mac/</A>.
Jack Jansenf3dd5aa1996-12-23 17:29:51 +000079The current distributions, Tcl 7.6 and Tk 4.2 need a bit of work,
Jack Jansen4c1e56c1996-08-06 16:16:20 +000080see the section on <A HREF="#tcltk">building Tcl/Tk Python</A>
81below. Get the "full source" distribution, which includes MoreFiles.
Jack Jansen8f2d8021996-08-05 15:34:45 +000082
Jack Jansen4c1e56c1996-08-06 16:16:20 +000083<LI> Waste, a TextEdit replacement written by Marco Piovanelli, <A
84HREF="mailto:piovanel@kagi.com">&lt;piovanel@kagi.com&gt;</A>. Python
85was built using version 1.2, which you can obtain from <A
86HREF="ftp://rhino.harvard.edu/pub/dan/WASTE">&lt;ftp://rhino.harvard.edu/pub/dan/WASTE&gt;</A>
87and various other places.
Jack Jansen8f2d8021996-08-05 15:34:45 +000088
Jack Jansen1473af71997-05-07 15:43:38 +000089<LI> Gdbm library for the Mac. Available from Jack's Mac software page at
90<A HREF="http://www.cwi.nl/~jack/macsoftware.html">
91http://www.cwi.nl/~jack/macsoftware.html</A> and <A HREF="ftp://ftp.cwi.nl/pub/jack/mac">
92ftp://ftp.cwi.nl/pub/jack/mac</A>.
93
94<LI> JPEG library by the Independent JPEG Group. A version including
95Mac projects can be found at Jack's page mentioned above.
96The most recent JPEG library can always be obtained from <A
Jack Jansen4c1e56c1996-08-06 16:16:20 +000097HREF="ftp://ftp.uu.net/graphics/jpeg/">ftp://ftp.uu.net/graphics/jpeg/</A>.
98
Jack Jansen1473af71997-05-07 15:43:38 +000099<LI> The netpbm/pbmplus, libtiff, zlib and png libraries. The netpbm distribution
Jack Jansen4c1e56c1996-08-06 16:16:20 +0000100(which includes libtiff) is generally available on Internet ftp
101servers. For Python pbmplus, an older incarnation of netpbm, is
102functionally identical to netpbm, since Python only uses the library
103and not the complete applications. A distribution with correct
Jack Jansen1473af71997-05-07 15:43:38 +0000104projects and library source only is available from, you guessed it, Jack's Mac software
105page mentioned above.
Jack Jansen4c1e56c1996-08-06 16:16:20 +0000106
Jack Jansen8f2d8021996-08-05 15:34:45 +0000107</UL>
108
109<H2>Setting Up</H2>
110
Jack Jansen4c1e56c1996-08-06 16:16:20 +0000111Now that you have collected everything you should start with building
Jack Jansen1473af71997-05-07 15:43:38 +0000112the various parts. If you don't want to fix
Jack Jansen4c1e56c1996-08-06 16:16:20 +0000113access paths try to set things up as follows:
114
Jack Jansen8f2d8021996-08-05 15:34:45 +0000115<PRE>
116Top-level-folder:
Jack Jansen4c1e56c1996-08-06 16:16:20 +0000117 CWGUSI
Jack Jansen8f2d8021996-08-05 15:34:45 +0000118 imglibs
119 libjpeg
120 pbmplus
Jack Jansen1473af71997-05-07 15:43:38 +0000121 libtiff
122 zlib
123 libpng
124 gdbm
Jack Jansenf3dd5aa1996-12-23 17:29:51 +0000125 MoreFiles 1.4.3 (not needed by Python, only by tcl/tk)
Jack Jansen8f2d8021996-08-05 15:34:45 +0000126 Python
Jack Jansenf3dd5aa1996-12-23 17:29:51 +0000127 Tcl 7.6
128 Tk 4.2
Jack Jansen4c1e56c1996-08-06 16:16:20 +0000129 Waste 1.2 distribution (if you want waste)
Jack Jansen8f2d8021996-08-05 15:34:45 +0000130</PRE>
131
Jack Jansen1473af71997-05-07 15:43:38 +0000132First build GUSI. If you didn't get the python-specific GUSI you have to
133move the files from the "CWGUSI-mods" to the right
Jack Jansen16e99c01996-09-07 17:11:26 +0000134place in the CWGUSI distribution folder, and build the
Jack Jansenabc2db71996-11-09 18:48:49 +0000135projects <code>GUSI.68K.µ</code>, <code>GUSI.CFM68K.µ</code> and
136<code>GUSI.PPC.µ</code>.
137Two notes:
138<ul>
139<li> The projects as distributed have a slightly incorrect access path, due
140to which they cannot find their <code>GUSICWFile.???</code> files. Change
141the access path to <code>{project folder}::</code> to fix this.
142<li> The Gusi CFM68K project is
143distributed without "far data": you should set this option before building.
144</ul>
Jack Jansen319f1a21996-10-16 15:28:30 +0000145If you have a CWGUSI version more recent than
Jack Jansenabc2db71996-11-09 18:48:49 +00001461.8 it could be that the fixes are already included, check it. Alternatively,
Jack Jansen16e99c01996-09-07 17:11:26 +0000147you can forget about the fixes and remove the one reference to GUSILoadPreferences
148in the Python sources. This will disable the "default file creator/type" and
149"Delay Sioux window" preferences in Python.
150
151Next, in
Jack Jansen1473af71997-05-07 15:43:38 +0000152<code>MoreFiles</code>, <code>libjpeg</code>, <code>pbmplus</code>,
153<code>zlib</code>, <code>libpng</code>, <code>gdbm</code>,
154and<code>libtiff</code> you build all projects. Sometimes the projects are in "mac"
155subfolders, sometimes they are in the main folder. Tcl/tk is a special
Jack Jansen27b10ec1996-08-23 15:44:18 +0000156case, see below. Of course, if you are only interested in one of
157static 68K, CFM68K or PPC you can skip building the other libraries.
Jack Jansen8f2d8021996-08-05 15:34:45 +0000158
159<H2><A NAME="tcltk">Building Tcl/Tk</H2>
160
Jack Jansen4c1e56c1996-08-06 16:16:20 +0000161You need to make a minor organizational change to the Tcl/Tk
162distribution. The current instructions are for the
Jack Jansenf3dd5aa1996-12-23 17:29:51 +0000163<code>tcl7.6</code> and <code>tk4.2</code> distribution:
Jack Jansen4c1e56c1996-08-06 16:16:20 +0000164
Jack Jansen8f2d8021996-08-05 15:34:45 +0000165<UL>
Jack Jansen8f2d8021996-08-05 15:34:45 +0000166
Jack Jansen4c1e56c1996-08-06 16:16:20 +0000167<LI> Rename the <code>compat</code> folders to <code>(compat)</code>
168in both the Tcl and Tk folders.
Jack Jansen8f2d8021996-08-05 15:34:45 +0000169
Jack Jansen4c1e56c1996-08-06 16:16:20 +0000170<LI> In the Tcl folder, move <code>strncasecmp.c</code> and
171<code>tclErrno.h</code> from <code>(compat)</code> to the main Tcl
172folder.
Jack Jansen8f2d8021996-08-05 15:34:45 +0000173
Jack Jansen4c1e56c1996-08-06 16:16:20 +0000174<LI> Fix <code>dnr.c</code> as provided by MetroWerks by inserting
175<pre><code> #pragma ANSI_strict off </code></pre> at the
176beginning. The tcl library is built with strict ANSI on, and this file
177uses C++ style comments.
Jack Jansen8f2d8021996-08-05 15:34:45 +0000178
Jack Jansen4c1e56c1996-08-06 16:16:20 +0000179<LI> If you want to build <code>SimpleTcl</code> and
Jack Jansenf3dd5aa1996-12-23 17:29:51 +0000180<code>SimpleTk</code> you may have to remove the references
181to <code>libmoto</code> from the project, not everyone has this library.
Jack Jansen4c1e56c1996-08-06 16:16:20 +0000182
Jack Jansenf3dd5aa1996-12-23 17:29:51 +0000183<LI> If you want to build for CFM68K you have to create the projects
184for the libraries yourself. Take the 68K library projects, set the C++ header
185file to "MW_TclHeaderCFM68K", the project type to "cfm68K library" and the
186filename to "Tcl-CFM68K.Lib" (and similarly for Tk).
187You may also have to modify <code>TclMacNotify.c</code>
Jack Jansen27b10ec1996-08-23 15:44:18 +0000188because there is an error in the Apple Universal headers (sic!). Read the
189comments at the beginning of <code>Mac:Python:macglue.c</code> and copy the
190code to <code>TclMacNotify.c</code>. If you get linker errors on <code>GetEvQHdr</code>
Jack Jansenf3dd5aa1996-12-23 17:29:51 +0000191you have not done this correctly. <em>XXXX Is this still needed?</em>
192
193<LI> Note that if you use a different release of Tcl and Tk than the ones
194I have used you may have to adapt the Python <code>tkresources.rsrc</code> file.
195This is easiest done by building <code>SimpleTk</code> and copying the TEXT, ICON
196and CRSR resources from it to <code>tkresources.rsrc</code>. This allows
197the <code>_tkinter</code> module to work without an installed Tk/Tcl on your
198machine.
Jack Jansen27b10ec1996-08-23 15:44:18 +0000199
Jack Jansen1473af71997-05-07 15:43:38 +0000200<LI> You have to adapt the projects to use the MSL libraries. This is important.
201
Jack Jansen8f2d8021996-08-05 15:34:45 +0000202</UL>
203
Jack Jansenf3dd5aa1996-12-23 17:29:51 +0000204Build first the Tcl library, then
Jack Jansen4c1e56c1996-08-06 16:16:20 +0000205SimpleTcl (test it by typing <code>ls -l</code> in the window you get)
206then the Tk library, then SimpleTk (which can again be tested with
207<code>ls -l</code>). If this all worked you are all set to try
Jack Jansen8f2d8021996-08-05 15:34:45 +0000208building Python.
209
Jack Jansen4c1e56c1996-08-06 16:16:20 +0000210<H2>Building Waste</H2>
211
212You do not need to build the Waste libraries, as Python includes the
213source modules themselves. You have to make one modification,
214though. In file <code>ICCFMGlue.c</code> in folder <code>Minimal IC
215APIs</code>, add the following lines:
216
217<blockquote><pre><code>
218#include <Gestalt.h>
219#include <Errors.h>
220</code></pre></blockquote>
221
Jack Jansen8f2d8021996-08-05 15:34:45 +0000222<H2>The organization of the Python source tree</H2>
223
Jack Jansen4c1e56c1996-08-06 16:16:20 +0000224Time for a short break, while we have a look at the organization of
225the Python source tree. At the top level, we find the following
226folders:
Jack Jansen8f2d8021996-08-05 15:34:45 +0000227
228<DL>
229<DT> build.mac68k.stand
Jack Jansen1473af71997-05-07 15:43:38 +0000230<DD> This is where you build static 68K interpreters.
Jack Jansen27b10ec1996-08-23 15:44:18 +0000231
232<DT> build.mac68k.shared
233<DD> This is where you build the CFM68K shared library, interpreter
234and applet framework.
Jack Jansen8f2d8021996-08-05 15:34:45 +0000235
236<DT> build.macppc.shared
Jack Jansen4c1e56c1996-08-06 16:16:20 +0000237<DD> This is where you build the PPC shared library, interpreter and
Jack Jansen27b10ec1996-08-23 15:44:18 +0000238applet framework. You can also build the fat applet framework here.
Jack Jansen8f2d8021996-08-05 15:34:45 +0000239
240<DT> build.macppc.stand
241<DD> This is where you build a nonshared PPC interpreter (optional).
242
243<DT> Demo
Jack Jansen4c1e56c1996-08-06 16:16:20 +0000244<DD> Demo programs that are not Mac-specific. Some of these may not
245work, the file <code>README-Mac</code> has some details.
Jack Jansen8f2d8021996-08-05 15:34:45 +0000246
247<DT> Extensions
Jack Jansen4c1e56c1996-08-06 16:16:20 +0000248<DD> Extensions to the interpreter that are not Mac-specific. Contains
249only the <code>img</code> extension in this distribution. Extensions
250are <em>not</em> built here, as they are on Unix, but incorporated in
251the core interpreter or built as plugin modules.
Jack Jansen8f2d8021996-08-05 15:34:45 +0000252
253<DT> Grammar
Jack Jansen4c1e56c1996-08-06 16:16:20 +0000254<DD> The Python grammar. Included for reference only, you cannot build
255the parser on a Mac.
Jack Jansen8f2d8021996-08-05 15:34:45 +0000256
257<DT> Include
258<DD> Machine-independent header files.
259
260<DT> Modules
Jack Jansen4c1e56c1996-08-06 16:16:20 +0000261<DD> Machine-independent optional modules. Not all of these will work
262on the Mac.
Jack Jansen8f2d8021996-08-05 15:34:45 +0000263
264<DT> Objects
Jack Jansen4c1e56c1996-08-06 16:16:20 +0000265<DD> Machine-independent code for various objects. Most of these are
266not really optional: the interpreter will not function without them.
Jack Jansen8f2d8021996-08-05 15:34:45 +0000267
268<DT> Parser
269<DD> The Python parser (machine-independent).
270
271<DT> PlugIns
Jack Jansen27b10ec1996-08-23 15:44:18 +0000272<DD> This is where you build the PPC and CFM68K dynamically-loaded plugin modules.
Jack Jansen8f2d8021996-08-05 15:34:45 +0000273
274<DT> Python
Jack Jansen4c1e56c1996-08-06 16:16:20 +0000275<DD> The core interpreter. Most files are machine-independent, some
276are unix-specific and not used on the Mac.
Jack Jansen8f2d8021996-08-05 15:34:45 +0000277
278<DT> Tools
Jack Jansen4c1e56c1996-08-06 16:16:20 +0000279<DD> Tools for python developers. Contains <code>modulator</code>
280which builds skeleton C extension modules and <code>bgen</code> which
281generates complete interface modules from information in C header
282files. There are some readme files, but more documentation is sorely
283needed.
284
Jack Jansen8f2d8021996-08-05 15:34:45 +0000285</DL>
286
287All the mac-specific stuff lives in the <code>Mac</code> folder:
288<DL>
289
290<DT> Compat
Jack Jansen4c1e56c1996-08-06 16:16:20 +0000291<DD> Unix-compatability routines. Some of these are not used anymore,
292since CWGUSI provides a rather complete emulation, but you may need
293these if you are trying to build a non-GUSI python.
Jack Jansen8f2d8021996-08-05 15:34:45 +0000294
295<DT> Demo
296<DD> Mac-specific demo programs, some of them annotated.
297
298<DT> Include
299<DD> Mac-specific but compiler-independent include files.
300
301<DT> Lib
Jack Jansen4c1e56c1996-08-06 16:16:20 +0000302<DD> Mac-specific standard modules. The <code>toolbox</code> folder
303contains modules specifically needed with various MacOS toolbox
304interface modules.
Jack Jansen8f2d8021996-08-05 15:34:45 +0000305
306<DT> Modules
Jack Jansen4c1e56c1996-08-06 16:16:20 +0000307<DD> Mac-specific builtin modules. Theoretically these are all
308optional, but some are rather essential (like
309<code>macmodule</code>). A lot of these modules are generated with
310<code>bgen</code>, in which case the bgen input files are included so
311you can attempt to regenerate them or extend them.
Jack Jansen8f2d8021996-08-05 15:34:45 +0000312
313<DT> MPW
Jack Jansen4c1e56c1996-08-06 16:16:20 +0000314<DD> MPW-specific files. These have not been used or kept up-to-date
315for a long time, so use at your own risk.
Jack Jansen8f2d8021996-08-05 15:34:45 +0000316
317<DT> mwerks
Jack Jansen4c1e56c1996-08-06 16:16:20 +0000318<DD> Mwerks-specific sources and headers. Contains glue code for
319Pythons shared-library architecture, a replacement for
320<code>malloc</code> and a directory with various projects for building
321variations on the Python interpreter. The <code>mwerks_*.h</code>
322files here are the option-setting files for the various interpreters
323and such, comparable to the unix command-line <code>-D</code> options
324to the compiler. Each project uses the correct option file as its
325"prefix file" in the "C/C++ language" settings. Disabling optional
326modules (for the 68K interpreter), building non-GUSI interpreters and
327various other things are accomplished by modifying these files (and
328possibly changing the list of files included in the project window, of
329course).
Jack Jansen8f2d8021996-08-05 15:34:45 +0000330
331<DT> Python
332<DD> Mac-specific parts of the core interpreter.
333
334<DT> Resources
335<DD> Resource files needed to build the interpreter.
336
337<DT> Scripts
Jack Jansen4c1e56c1996-08-06 16:16:20 +0000338<DD> A collection of various mac-specific Python scripts. Some are
339essential, some are useful but few are documented, so you will have to
340use your imagination to work them out.
Jack Jansen8f2d8021996-08-05 15:34:45 +0000341
342<DT> Unsupported
343<DD> Modules that are not supported any longer but may still work with a little effort.
344</DL>
345
346<H2>Building the 68K interpreter</H2>
347
Jack Jansen4c1e56c1996-08-06 16:16:20 +0000348If you have all the optional libraries mentioned <A
349HREF="#optional">above</A> loaded buildin Python for 68K macs is a
350breeze: open the project in the folder <code>build.mac68k.stand</code>
351and build it. Do <em>not</em> run it yet, this will possibly result
352in a garbled preferences file. <p>
Jack Jansen8f2d8021996-08-05 15:34:45 +0000353
Jack Jansen4c1e56c1996-08-06 16:16:20 +0000354First remove the <code>Python preferences</code> file from your
355preference folder, only if you had an older version of Python
356installed. (this is also what you do if you did not heed the last
357sentence of the preceeding paragraph). Next, move the interpreter to
358the main Python folder (up one level) and run it there. This will
359create a correct initial preferences file. You are now all set, and
360your tree should be completely compatible with a binary-only
361distribution. Read the release notes
362(<code>Relnotes-somethingorother</code>) and
363<code>ReadMeOrSuffer</code> in the <code>Mac</code> folder.
Jack Jansen8f2d8021996-08-05 15:34:45 +0000364
Jack Jansen27b10ec1996-08-23 15:44:18 +0000365<H2>Building the CFM68K interpreter</H2>
366
367Building the CFM68K interpreter is as almost exactly the same as building
368the PPC interpreter, with the exception that you should read "CFM68K"
369for "PPC" every time. Continue reading with the next section.
370
Jack Jansen8f2d8021996-08-05 15:34:45 +0000371<H2>Building the PPC interpreter</H2>
372
Jack Jansen4c1e56c1996-08-06 16:16:20 +0000373First you build the interpreter, core library and applet skeleton in
374folder <code>build.macppc.stand</code>. The order to build things is
375the following:
Jack Jansen8f2d8021996-08-05 15:34:45 +0000376
377<DL>
Jack Jansen8f2d8021996-08-05 15:34:45 +0000378
Jack Jansen27b10ec1996-08-23 15:44:18 +0000379<DT> PythonCorePPC
Jack Jansen4c1e56c1996-08-06 16:16:20 +0000380<DD> The shared library that contains the bulk of the interpreter and
381its resources. It is a good idea to immedeately put an alias to this
382shared library in the <code>Extensions</code> folder of your system
383folder. Do exactly that: put an <em>alias</em> there, copying or
384moving the file will cause you grief later.
Jack Jansen8f2d8021996-08-05 15:34:45 +0000385
386<DT> PythonPPC
Jack Jansen4c1e56c1996-08-06 16:16:20 +0000387<DD> The interpreter. This is basically a routine to call out to the
Jack Jansen1473af71997-05-07 15:43:38 +0000388shared library. Do
Jack Jansen4c1e56c1996-08-06 16:16:20 +0000389<em>not</em> run it yet, this will possibly result in a garbled
Jack Jansen1473af71997-05-07 15:43:38 +0000390preferences file. See the section below on rebuilding .exp files if you
391get funny linker errors. <p>
Jack Jansen8f2d8021996-08-05 15:34:45 +0000392
Jack Jansen061ac501996-10-22 15:27:56 +0000393<DT> PythonAppletPPC
Jack Jansen4c1e56c1996-08-06 16:16:20 +0000394<DD> The applet skeleton application. Very similar to
395<code>PythonPPC</code>, but it calls to a different entrypoint in the
396core library. The <code>mkapplet</code> script will copy this complete
397file, and add a <code>'PYC '</code> with the module to generate an
398applet. <p>
399
Jack Jansen8f2d8021996-08-05 15:34:45 +0000400</DL>
401
Jack Jansen061ac501996-10-22 15:27:56 +0000402After creating the alias to <code>PythonCorePPC</code> you should move
403<code>PythonPPC</code> to the main Python folder. Next you remove any old
404<code>Python XXX Preferences</code> file from the <code>Preferences</code> folder
405(if you had python installed on your system before) and run the interpreter once
406to create the correct preferences file. You should also make an alias
407<code>PythonApplet</code> pointing to <code>PythonAppletPPC</code> in the main
408Python folder. (again: making an alias is preferrable to copying or moving the
409file, since this will cause the correct file to be used if you ever rebuild
410PythonAppletPPC). <p>
Jack Jansen8f2d8021996-08-05 15:34:45 +0000411
Jack Jansen4c1e56c1996-08-06 16:16:20 +0000412Next, you have to build the extension modules in the
Jack Jansen27b10ec1996-08-23 15:44:18 +0000413<code>PlugIns</code> folder. Open each project with <code>.ppc</code> in the
414name and build it. After all
Jack Jansen4c1e56c1996-08-06 16:16:20 +0000415the dynamically loaded modules are built you have to create a number
416of aliases: some modules live together in a single dynamic
Jack Jansen27b10ec1996-08-23 15:44:18 +0000417library. Run the <code>MkPluginAliases.py</code> script from
418<code>Mac:scripts</code> to create the aliases. <p>
Jack Jansen8f2d8021996-08-05 15:34:45 +0000419
Jack Jansen4c1e56c1996-08-06 16:16:20 +0000420Finally, you must build the standard applets:
421<code>EditPythonPrefs</code>, <code>mkapplet</code>, etc. This is
422easiest done with the <code>fullbuild</code> script from
423<code>Mac:scripts</code>. Answer <em>no</em> to all questions except
424when it asks whether to build the applets. <p>
Jack Jansen8f2d8021996-08-05 15:34:45 +0000425
426<BLOCKQUOTE>
Jack Jansen4c1e56c1996-08-06 16:16:20 +0000427Actually, the <code>fullbuild</code> script can be used to build
428everything, but you need a fully-functional interpreter before you can
429use it (and one that isn't rebuilt in the process: you cannot rebuild
430a running program). You could copy the 68K interpreter to a different
431place and use that to run fullbuild, or use the standalone PPC python
432for this. I tend to keep a standalone interpreter in a safe place for
433this use only.
Jack Jansen8f2d8021996-08-05 15:34:45 +0000434</BLOCKQUOTE>
435
Jack Jansen4c1e56c1996-08-06 16:16:20 +0000436You are all set now, and should read the release notes and
437<code>ReadMeOrSuffer</code> file from the <code>Mac</code> folder.
Jack Jansen8f2d8021996-08-05 15:34:45 +0000438
Jack Jansen27b10ec1996-08-23 15:44:18 +0000439<H2>Rebuilding <code>.exp</code> files for PPC and CFM68K</H2>
440
441Occasionally it may be necessary to rebuild your PythonCore <code>.exp</code>
442file, a file that controls which symbols are exported by your PythonCore
443shared library. Rebuild it if you get unexpected undefined symbols when you
444are building a plugin module. <p>
445
446Rebuilding the .exp file is done by first removing the file and removing the
447reference to it in the project (in the "config" section). Next, build PythonCore.
448This will create a new .exp file. Edit this file to remove the references to
449the symbols <code>__initialize</code>, <code>__terminate</code>, <code>setjmp</code>,
Jack Jansen1473af71997-05-07 15:43:38 +0000450<code>longjmp</code>, <code>main</code> and (for PPC) <code>__ptmf_null</code> or (for
451CFM68K) <code>__start</code> and <code>dummy_init_routine</code>.
452Next, add the .exp file to the project
Jack Jansen27b10ec1996-08-23 15:44:18 +0000453again and rebuild PythonCore. <p>
454
455This rather convoluted procedure is needed to ensure that plugin modules don't
456accidentally link with those entrypoints from PythonCore, which will not work because
457those routines have to be in the same code fragment as they are used from.
458
Jack Jansen8f2d8021996-08-05 15:34:45 +0000459<H2>Odds and ends</H2>
460
461Some remarks that I could not fit in elsewhere:
462
463<UL>
Jack Jansen8f2d8021996-08-05 15:34:45 +0000464
Jack Jansen4c1e56c1996-08-06 16:16:20 +0000465<LI> It may be possible to use the <code>PythonCore</code> shared
466library to embed Python in another program, if your program can live
Jack Jansen1473af71997-05-07 15:43:38 +0000467with using GUSI for I/O. Use PythonCore in stead of your MSL C library
Jack Jansen4c1e56c1996-08-06 16:16:20 +0000468(or, at the very least, link it before the normal C library). Let me
469know whether this works.
470
471<LI> It is possible to build PPC extension modules without building a
472complete Python. Take the binary distribution, add folders
473<code>Include</code>, <code>Mac:Include</code> and
474<code>Mac:mwerks</code> from the source distribution and you should be
475all set. A template for a dynamic module can be found in
Jack Jansen27b10ec1996-08-23 15:44:18 +0000476<code>xx.ppc.µ</code> or <code>xx.CFM68K.µ</code>.
477
478<LI> The Python shared library architecture is a variant of the architecture
479described as "application with shared libraries and dropins" in the MetroWerks
480"Targeting MacOS" documentation. The Python Application and applet-template use
Jack Jansen1473af71997-05-07 15:43:38 +0000481the <code>MSL AppRuntime.Lib</code> runtime library (with properly set CFM
482initialization and termination routines). PythonCore uses <code>MSL Runtime.Lib</code>,
483which is really intended for standalone programs but which we fool into working by
484providing a dummy main program.
Jack Jansen27b10ec1996-08-23 15:44:18 +0000485It is linked statically into PythonCore (and exported to the applications and plugins)
486so we do not have to distribute yet another shared library. Plugin modules use
Jack Jansen1473af71997-05-07 15:43:38 +0000487<code>MSL ShlibRuntime.Lib</code> (not the dropin runtime: modules are never unloaded)
488and obtain the rest from PythonCore. PythonCore uses a
Jack Jansen27b10ec1996-08-23 15:44:18 +0000489non-standard initialization entry point, <code>__initialize_with_resources</code>, to
Jack Jansen1473af71997-05-07 15:43:38 +0000490be able to obtain resources from the library file later on. Plugins can do the same
491(_tkinter does) or use the standard <code>__initialize</code> entry point.
Jack Jansen8f2d8021996-08-05 15:34:45 +0000492
493
Jack Jansen6ad8d131997-01-15 16:53:37 +0000494</UL>
Jack Jansen8f2d8021996-08-05 15:34:45 +0000495</BODY>
496</HTML>