Python for BeOS R5

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


Using GNU readline:

   The Python interpreter is much nicer to work with interactively if
   you've got readline installed.  Highly recommended.

   You can get the original GNU readline 2.2 source code from your
   favourite GNU software repository, such as
   ftp://prep.ai.mit.edu/pub/gnu/.

   You can get the only-slightly-modified-for-BeOS version of GNU
   readline 2.2 from the GeekGadgets repository;
   ftp://ftp.ninemoons.com/pub/geekgadgets/.
 

Building libreadline for BeOS hosts:

  Note that we don't build a shared library version of libreadline and
  libhistory.  That's left as an exercise for the reader.

  You won't be able to link against libreadline.a using the limited
  linker.

   1) If you're on a PowerPC system, install the POSIX ar from 
      http://www.qnx.com/~chrish/Be/software/index.html#programming
      (note that it's currently packaged with Python, in the BeOS/ar-1.1
      directory).
   
      If you're on an x86 system, you can leave out the "AR=ar-posix"
      part of the following instructions.  In fact, you'll have to...

   2) For PowerPC, configure with:

      CC=mwcc CFLAGS="-O7 -i- -I." AR=ar-posix RANLIB=: ./configure --verbose \
      --without-gcc --prefix=/boot/home/config powerpc-*-beos

      For x86, configure with:
      
      CC=mwcc CFLAGS="-O2 -i- -I." RANLIB=: ./configure --verbose \
      --without-gcc --prefix=/boot/home/config x86-*-beos

      Don't worry about the warnings/errors configure spews for
      powerpc-*-beos or x86-*-beos; readline doesn't actually use this host 
      information    for anything, although configure will die if you don't 
      specify it.

   3) Edit config.h to comment out "#define HAVE_SELECT 1"; select() on
      BeOS doesn't work on file descriptors (such as stdin).

   4) For PowerPC, make with:

      make AR=ar-posix 

      For x86, make with:
      
      make

   5) Install with:

      make install

Enjoy!

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

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