Python for BeOS R5

This directory contains several useful things to help you build your own
version of Python for BeOS.

What's Here?

ar-fake - A shell script that copies around .o files, for the as much
              of the general effect of ar as we need but more fool-proof.
              It also has an "so" command to build the shared library
              that we actually install and use.

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.

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.

To build,

   1)  ./configure --prefix=/boot/home/config

   2)  edit Modules/Setup
          comment out grp and mmap, and pwd on 4.5 or earlier
          uncomment any modules you want to include in python
          (you can also add them later as shared libraries.)
   3)  make

Test:

   make test

   [Chris Herborth writes:]
   test_popen2 will probably hang; it's deadlocked on a semaphore.  I should
   probably disable popen2 support... it uses fork(), and fork() doesn't mix
   with threads on BeOS.  In *THEORY* you could use it in a single-threaded
   program, but I haven't tried.

   If test_popen2 does hang, you can find the semaphore it's hung on via the
   "ps" command.  Look for python and you'll find something like this:

./python -tt ../src/Lib/test/regrtest.py (team 26922) (uid 0) (gid 0)
  39472               python  sem  10    3785    1500 piperd(360526)
./python -tt ../src/Lib/test/regrtest.py (team 26923) (uid 0) (gid 0)
  39477               python  sem  10      25       4 python lock (1)(360022)
                                                                      ^^^^^^
   That last number is the semaphore the fork()'d python is stuck on
   (see how it's helpfully called "python lock (1)"? :-).  You can unblock
   that semaphore to let the tests continue using the "release" command
   with that semaphore number.  Be _very_ careful with "release" though,
   releasing the wrong semaphore can be hazardous.

   Expect the following errors:

   test * skipped -- an optional feature could not be imported (you'll see
                     quite a few of these, based on what optional modules
                     you've included)

   test test_fork1 skipped -- can't mix os.fork with  threads on BeOS

   test test_select crashed -- select.error : (-2147459072, 'Bad file
                               descriptor')

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

   test test_pickle crashed.  This is apparently a serious problem,
                     "complex" number objects reconstructed from a
                     pickle don't compare equal to their ancestors.
                     But it happens on BeOS PPC only, not Intel.

Install:

   make install

Enjoy!

- Chris Herborth (chrish@pobox.com)
  July 21, 2000

- Donn Cave (donn@oz.net)
  October 4, 2000
