#! /bin/sh
#
# linkcc 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 the Python shared library properly; if we haven't
# already built the export list, we'll need to link twice (argh...) so we
# can eliminate some unwatnted global symbols from the system glue/init
# objects.
#
# This is called by the Modules/Makefile as part of $(LINKCC):
#
# $(LINKCC) $(LDFLAGS) $(LINKFORSHARED) $(MAINOBJ) \
#	-L.. -lpython$(VERSION) $(MODLIBS) $(LIBS) $(SYSLIBS) -o python $(LDLAST)
#
# In 1.5.1 this changed to:
#
# $(LINKCC) $(LDFLAGS) $(LINKFORSHARED) $(MAINOBJ) \
#	$(LIBRARY) $(MODLIBS) $(LIBS) $(SYSLIBS) -o python $(LDLAST)
#
# For BeOS we should set $(LINKCC) to this in configure (similar to the
# AIX situation):
#
# $(srcdir)../BeOS/linkcc $(LIBRARY) $(PURIFY) $(CC) $(OPT)
#
# -L.. -lpython$(VERSION) will automagically pick up the shared library.
#
# 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.
DYNAMIC=${LIBRARY/.a/.so}
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
# and not the static lib.
LINK_CMD=""
while [ "$#" != "0" ] ; do
	case "$1" in
		$LIBRARY)
			LINK_CMD="$LINK_CMD -L.. $LINK_DYNAMIC"
			shift
			;;

		*)
			LINK_CMD="$LINK_CMD $1"
			shift
			;;
	esac
done

# 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"

case $BE_HOST_CPU in
	ppc)
		LIBS="-nodup $LIBS"
		;;
esac

# 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.
echo "Link command: $LINK_CMD $LIBS"
$LINK_CMD $LIBS
