#! /bin/sh
#
# linkmodule for Python
# Chris Herborth (chrish@qnx.com)
#
# This is covered by the same copyright/licensing terms as the rest of
# Python.
#
# 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):
#
# $(LDSHARED) foomodule.o -o foomodule$(SO)
#
# Could also be called as:
#
# $(LDSHARED)  readline.o  -L/boot/home/config/lib -lreadline -ltermcap \
# -o readline$(SO)
#
# so we need to preserve the arguments, sort of.

# Make sure we got reasonable arguments.
TARGET=""
ARGS=""
VERSION=2.0

while [ "$#" != "0" ]; do
	case "$1" in
		-o)	TARGET="$2"; shift; shift;;
		*)	ARGS="$ARGS $1"; shift;;
	esac
done

if [ "$TARGET" = "" ] ; then
	echo "Usage:"
	echo
	echo "	$0 [args] -o foomodule.so [args] foomodule.o [args]"
	echo
	echo "Where:"
	echo
	echo "	[args]	normal compiler arguments"
	exit 1
fi

# 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.. -lpython$VERSION -lbe -lnet -lroot"

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"
		case $(uname -r) in
			4.0*) CC="mwcc -xms -export pragma -nodup" ;;
			*) CC="mwcc -shared -export pragma -nodup" ;;
		esac
		;;

	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
