Python 1.5.1 for BeOS This directory contains several useful things to help you build your own version of Python for BeOS. At this time, Python only supports BeOS on the PowerPC platform; if you'd like to help me port it to the x86 platform, please let me know (I only have limited access to BeOS on an x86 system). If you'd like to lend me an x86 laptop running BeOS to do the port, _definitely_ let me know! :-) I'll even give it back when I'm done. What's Here? ar-1.1 - An "ar" command with a POSIX 1003.2 interface; you'll need this for building the Python libraries under BeOS (/bin/ar just won't cut it). linkcc - A shell script used by the build process to build the Python shared library. linkmodule - A shell script used by the build process to build the shared library versions of the standard modules; you'll probably need this if you want to build dynamically loaded modules from the Python archives. PyImport_BeImageID.html - Documentation for a function added to the Python interpreter under BeOS; not interesting unless you're writing your own BeOS-specific modules for dealing with dynamically-loaded Python modules. README - This file (obviously!). README.readline-2.2 - Instructions for compiling/installing GNU readline 2.2. You'll have to grab the GNU readline source code from prep.ai.mit.edu:/pub/GNU or any other GNU mirror. The Python interpreter is much nicer to work with interactively if you've got readline installed. Highly recommended. Compiling Your Own Version To compile your own version of Python 1.5.1 for BeOS (with any luck, Python 1.6 will compile "out of the box" on BeOS), try this: 1) Get the Python 1.5.1 source code from ftp.python.org. 2) Get the Python 1.5.1 diffs from my web pages (http://www.qnx.com/~chrish/Be/software/); if you can't get them through a web browser, send me email and I'll mail them back to you. These diffs should also be available at ftp.python.org along with the BeOS binary archive. Run autoconf. If you don't have autoconf, you can get a precompiled version from GeekGadgets (ftp://ftp.ninemoons.com/pub/geekgadgets/...). 3) Compile and install the POSIX ar from the ar-1.1 directory; see the README in there for details. 4) Configure with: AR=ar-posix RANLIB=: ./configure --verbose --without-gcc \ --prefix=/boot/home/config --with-thread The only strange thing that happens during the configure is that we fail the "genuine getopt()" test; this is odd because we've got a real live GNU getopt() in the system libs. Other packages built using configure (such as all of the goodies in GeekGadgets) suffer the same fate though, so it's not a Python problem. 5) Copy Modules/Setup.in to Modules/Setup. 6) Edit Modules/Setup to turn on all the modules you want built. I've personally built the following modules: array, audioop, binascii, cPickle, cStringIO, cmath, crypt, curses, errno, fcntl, gdbm, grp, imageop, math, md5, new, operator, parser, pcre, posix, pwd, readline, regex, reop, rgbimg, rotor, select, signal, socket, soundex, strop, struct, syslog, termios, thread, time, timing, zlib Newly compiled/tested with 1.5.1: _locale You can get precompiled gdbm, ncurses, and zlib libraries from the GeekGadgets repository (ftp://ftp.ninemoons.com/pub/geekgadgets/...). Make sure you use _socket instead of socket for the name of the socketmodule on BeOS. 7) Make: make or, if you feel the need for speed: make OPT="-O7 -opt schedule604" You can safely ignore any warnings you see during the build (and you'll see several if you use full warnings; I compiled the distribution with -w9 -ansi strict and cleaned up any errors...). 8) Test: make test Expect the following errors: test_builtin failed -- round(1000000000.0) test_fcntl skipped -- an optional feature could not be imported test_grp crashed -- exceptions.KeyError : getgrnam(): name not found test_pwd failed -- Writing: 'fakename', expected: 'caught e' test_socket crashed -- exceptions.AttributeError : SOCK_RAW These are all due to either partial support for certain things (like sockets), or valid differences between systems (like the round() error; different CPUs represent floating point numbers differently, which can cause minor rounding errors). 9) Install: make install 10) Enjoy! NOTE If you're going to build your own C/C++-based Python modules, link them against the libpython1.5.so shared library (in /boot/home/config/lib) instead of the libpython1.5.a (in /boot/home/config/lib/python1.5/config), unless you're building a statically-linked python interpreter (then you could try linking against _APP_ instead). Mixing modules linked against the shared library with a statically-linked interpreter is a bad idea (and it'll fail in _interesting_ ways). - Chris Herborth (chrish@qnx.com) April 25, 1998