mirror of
https://github.com/python/cpython.git
synced 2025-08-04 00:48:58 +00:00
Changes for new BeOS port by Chris Herborth
This commit is contained in:
parent
476e49f055
commit
fc4966b7af
3 changed files with 75 additions and 150 deletions
112
BeOS/README
112
BeOS/README
|
@ -1,19 +1,12 @@
|
|||
Python 1.5.1 for BeOS
|
||||
Python 1.5.x (x > 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).
|
||||
ar-fake - A shell script used by the build process to emulate a "real"
|
||||
POSIX ar command; helps to build the Python shared library.
|
||||
|
||||
linkcc - A shell script used by the build process to build the Python
|
||||
shared library.
|
||||
|
@ -41,100 +34,59 @@ README.readline-2.2 - Instructions for compiling/installing GNU readline 2.2.
|
|||
|
||||
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:
|
||||
To compile your own version of Python 1.5.x for BeOS (with any luck,
|
||||
Python 1.5.2 and later will compile "out of the box" on BeOS), try this:
|
||||
|
||||
1) Get the Python 1.5.1 source code from ftp.python.org.
|
||||
1) Get the latest Python 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/...).
|
||||
2) Configure with:
|
||||
|
||||
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 \
|
||||
AR=$(pwd)/BeOS/ar-fake 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.
|
||||
3) Copy Modules/Setup.in to Modules/Setup.
|
||||
|
||||
5) Copy Modules/Setup.in to Modules/Setup.
|
||||
4) Edit Modules/Setup to turn on all the modules you want built.
|
||||
|
||||
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:
|
||||
If you want the modules to be built as shared libraries, instead of as
|
||||
part of the Python shared library, be sure to uncomment the #*shared*
|
||||
line.
|
||||
|
||||
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...).
|
||||
5) Make sure Modules/Makefile.pre has REALLIBRARY set to:
|
||||
|
||||
8) Test:
|
||||
REALLIBRARY=../libpython$(VERSION).so
|
||||
|
||||
make test
|
||||
6) Make:
|
||||
|
||||
make AR=$(pwd)/BeOS/ar-fake RANLIB=: OPT=-DUSE_DL_EXPORT \
|
||||
CCSHARED=-UUSE_DL_EXPORT
|
||||
|
||||
7) Test:
|
||||
|
||||
make AR=$(pwd)/BeOS/ar-fake RANLIB=: OPT=-DUSE_DL_EXPORT \
|
||||
CCSHARED=-UUSE_DL_EXPORT 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).
|
||||
sockets), or valid differences between systems.
|
||||
|
||||
9) Install:
|
||||
NOTE: On R4/x86, the pause() function is broken; expect the signal
|
||||
module test to crash Python!
|
||||
|
||||
make install
|
||||
8) Install:
|
||||
|
||||
10) Enjoy!
|
||||
make AR=$(pwd)/BeOS/ar-fake RANLIB=: OPT=-DUSE_DL_EXPORT \
|
||||
CCSHARED=-UUSE_DL_EXPORT install
|
||||
|
||||
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).
|
||||
9) Enjoy!
|
||||
|
||||
- Chris Herborth (chrish@qnx.com)
|
||||
April 25, 1998
|
||||
December 17, 1998
|
||||
|
|
56
BeOS/linkcc
56
BeOS/linkcc
|
@ -24,23 +24,20 @@
|
|||
# For BeOS we should set $(LINKCC) to this in configure (similar to the
|
||||
# AIX situation):
|
||||
#
|
||||
# $(srcdir)../BeOS/linkcc $(LIBRARY) $(PURIFY) $(CC) -nodup $(OPT)
|
||||
# $(srcdir)../BeOS/linkcc $(LIBRARY) $(PURIFY) $(CC) $(OPT)
|
||||
#
|
||||
# -L.. -lpython$(VERSION) will automagically pick up the shared library.
|
||||
|
||||
# Check to make sure we know what we're doing.
|
||||
system="`uname -m`"
|
||||
if [ "$system" != "BeMac" ] && [ "$system" != "BeBox" ] ; then
|
||||
echo "Sorry, BeOS Python doesn't support x86 yet."
|
||||
exit 1
|
||||
fi
|
||||
#
|
||||
# As of Python 1.5.2, this isn't strictly necessary, but it makes me
|
||||
# feel safer. It makes sure we've got all the BeOS-specific libraries,
|
||||
# and it creates the "lib" symlink that we'll need for chance of running
|
||||
# "make test" successfully.
|
||||
|
||||
LIBRARY="$1"; shift
|
||||
|
||||
# What we want to end up with.
|
||||
EXPORTS=${LIBRARY%.a}.exp
|
||||
DYNAMIC=${LIBRARY%.a}.so
|
||||
LINK_DYNAMIC="-l`echo ${DYNAMIC%.so} | sed -e s,\\\.\\\./,, -e s,lib,,`"
|
||||
LINK_DYNAMIC="-l$(basename ${DYNAMIC%.so} | sed -e s,lib,,)"
|
||||
|
||||
# Grab the rest of the args and build them into the command used to
|
||||
# link the python binary. Make sure we link against the shared lib
|
||||
|
@ -52,6 +49,7 @@ while [ "$#" != "0" ] ; do
|
|||
LINK_CMD="$LINK_CMD -L.. $LINK_DYNAMIC"
|
||||
shift
|
||||
;;
|
||||
|
||||
*)
|
||||
LINK_CMD="$LINK_CMD $1"
|
||||
shift
|
||||
|
@ -59,42 +57,12 @@ while [ "$#" != "0" ] ; do
|
|||
esac
|
||||
done
|
||||
|
||||
# The shared libraries and glue objects we need to link against.
|
||||
# The shared libraries and glue objects we need to link against; this is
|
||||
# a little overkill, but it'll be OK.
|
||||
LIBS="-lbe -lnet -lroot"
|
||||
GLUE="/boot/develop/lib/ppc/glue-noinit.a /boot/develop/lib/ppc/init_term_dyn.o"
|
||||
|
||||
# Unwanted symbols we need to eliminate; these are regular expressions
|
||||
# passed to egrep.
|
||||
SYMS="opterr optind optarg getopt __.* longjmp _.*_"
|
||||
|
||||
# Check to see if we've already got an exports file, and delete it if
|
||||
# it's older than the lib.
|
||||
if [ -e $EXPORTS ] && [ $LIBRARY -nt $EXPORTS ] ; then
|
||||
echo "Deleting old exports file for $DYNAMIC..."
|
||||
rm -f $EXPORTS
|
||||
fi
|
||||
|
||||
if [ ! -e $EXPORTS ] ; then
|
||||
# First link; create the exports file with the unwanted global symbols
|
||||
# in it. It's a pity we don't have "nm" or something like that...
|
||||
rm -f temp-exports.exp
|
||||
mwcc -xms -f temp-exports.exp -o $DYNAMIC $LIBRARY $GLUE $LIBS -nodup
|
||||
|
||||
# Now clean out those bad symbols.
|
||||
for sym in $SYMS ; do
|
||||
rm -f temp-exports.exp2
|
||||
egrep -v "^$sym$" < temp-exports.exp > temp-exports.exp2
|
||||
mv -f temp-exports.exp2 temp-exports.exp
|
||||
done
|
||||
|
||||
rm -f temp-exports.exp2
|
||||
mv -f temp-exports.exp $EXPORTS
|
||||
fi
|
||||
|
||||
# Now link against the clean exports file.
|
||||
mwcc -xms -f $EXPORTS -o $DYNAMIC $LIBRARY $GLUE $LIBS -nodup
|
||||
|
||||
# We'll need this or the python binary won't load libpython.so...
|
||||
# We'll need this or the python binary won't load libpython.so... handy
|
||||
# for testing.
|
||||
( cd .. ; ln -sf `pwd` lib )
|
||||
|
||||
# Now build the python binary.
|
||||
|
|
|
@ -4,12 +4,11 @@
|
|||
# Chris Herborth (chrish@qnx.com)
|
||||
#
|
||||
# This is covered by the same copyright/licensing terms as the rest of
|
||||
# Python
|
||||
# Python.
|
||||
#
|
||||
# Shell script to build shared library versions of the modules; the
|
||||
# idea is to build an export list containing only the init*() function
|
||||
# for the module. We _could_ assume for foomodule.o it was initfoo, but
|
||||
# that's asking for trouble... this is a little less efficient but correct.
|
||||
# Shell script to build shared library versions of the modules; since
|
||||
# the change to the *ahem* "proper" import/export mechanism, this script
|
||||
# is much simpler. It handles PowerPC and x86, too.
|
||||
#
|
||||
# This is called by the Modules/Makefile as $(LDSHARED):
|
||||
#
|
||||
|
@ -19,13 +18,8 @@
|
|||
#
|
||||
# $(LDSHARED) readline.o -L/boot/home/config/lib -lreadline -ltermcap \
|
||||
# -o readline$(SO)
|
||||
|
||||
# Check to make sure we know what we're doing.
|
||||
system="`uname -m`"
|
||||
if [ "$system" != "BeMac" ] && [ "$system" != "BeBox" ] ; then
|
||||
echo "Sorry, BeOS Python doesn't support x86 yet."
|
||||
exit 1
|
||||
fi
|
||||
#
|
||||
# so we need to preserve the arguments, sort of.
|
||||
|
||||
# Make sure we got reasonable arguments.
|
||||
TARGET=""
|
||||
|
@ -45,26 +39,37 @@ if [ "$TARGET" = "" ] ; then
|
|||
echo
|
||||
echo "Where:"
|
||||
echo
|
||||
echo " [args] normal mwcc arguments"
|
||||
echo " [args] normal compiler arguments"
|
||||
exit 1
|
||||
fi
|
||||
|
||||
EXPORTS=${TARGET%.so}.exp
|
||||
|
||||
# The shared libraries and glue objects we need to link against; these
|
||||
# libs are overkill for most of the standard modules, but it makes life
|
||||
# in this shell script easier.
|
||||
LIBS="-L.. -lpython1.5 -lbe -lnet -lroot"
|
||||
GLUE="/boot/develop/lib/ppc/glue-noinit.a /boot/develop/lib/ppc/init_term_dyn.o"
|
||||
|
||||
# Check to see if we've already got an exports file; we don't need to
|
||||
# update this once we've got it because we only ever want to export
|
||||
# one symbol.
|
||||
if [ ! -e $EXPORTS ] ; then
|
||||
# The init*() function has to be related to the module's .so name
|
||||
# for importdl to work.
|
||||
echo init${TARGET%.so} | sed -e s/module// > $EXPORTS
|
||||
fi
|
||||
case $BE_HOST_CPU in
|
||||
ppc)
|
||||
# Boy, do we need a lot of crap...
|
||||
GLUE_LOC=/boot/develop/lib/ppc
|
||||
GLUE="${GLUE_LOC}/glue-noinit.a ${GLUE_LOC}/init_term_dyn.o"
|
||||
CC="mwcc -xms -export pragma -nodup"
|
||||
;;
|
||||
|
||||
# Now link against the clean exports file.
|
||||
mwcc -xms -f $EXPORTS -o $TARGET $ARGS $GLUE $LIBS -nodup
|
||||
x86)
|
||||
# We don't need as much crap here...
|
||||
GLUE=""
|
||||
CC="gcc -nostart -Wl,-soname=${TARGET}"
|
||||
;;
|
||||
|
||||
*)
|
||||
# What the?!?
|
||||
echo "$0 doesn't support $BE_HOST_CPU systems..."
|
||||
echo "You're on your own... I'd be surprised if this works."
|
||||
GLUE=""
|
||||
CC="cc"
|
||||
;;
|
||||
esac
|
||||
|
||||
# Now link that shared lib...
|
||||
$CC -o $TARGET $ARGS $GLUE $LIBS
|
||||
|
|
Loading…
Add table
Add a link
Reference in a new issue