#!/bin/sh
#
# setgcc [ <arch> ] [ <gcc> ]

abiDir=/boot/develop/abi/
abiLink=$abiDir/current

usage()
{
	cat << EOF
Usage: $0 [ <arch> ] [ <gcc> ]

Sets the current gcc version, respectively prints it, if no arguments are
given.

  <arch>  - The architecture to set. Supported values: "x86".
  <gcc>   - The major gcc version to set. Supported values: "gcc2", "gcc4".

EOF
}

if [ $# -gt 2 ]; then
	usage
	exit 1
fi

if [ $# -eq 0 ]; then
	if [ -h $abiLink ]; then
		abi=$(readlink $abiLink 2> /dev/null) || {
			echo "Failed to read GCC symlink." >&2
			exit 1
		}
		echo "Current GCC: $abi"
		exit
	else
		echo "GCC symlink not installed." >&2
		exit 1
	fi
fi

arch=
gcc=

# parse the args
while [ $# -gt 0 ]; do
	case $1 in
		-h,--help)	usage; exit;;
		x86)		arch=$1;;
		gcc2|gcc4)	gcc=$1;;
		*)			usage; exit 1;;
	esac

	shift
done

# use the native arch, if not given
if [ -z "$arch" ]; then
	case $(uname -m) in
		BePC)	arch=x86;;
		*)		echo "Can't guess native architecture. Please specify!" >&2
				exit 1;;
	esac
fi

# guess the native gcc version, if not given
if [ -z "$gcc" ]; then
	if [ -e /system/lib/gcc2 ]; then
		gcc=gcc4
	elif [ -e /system/lib/gcc4 ]; then
		gcc=gcc2
	elif [ -e /system/lib/libstdc++.r4.so ]; then
		gcc=gcc2
	else
		echo "Can't guess native GCC version. Please specify!" >&2
		exit 1
	fi
fi

# check whether the gcc exits
if [ ! -e $abiDir/$arch/$gcc/tools/current/bin/gcc ]; then
	echo "Can't set GCC $arch/$gcc -- not installed." >&2
	exit 1
fi

# create the symlink
( rm $abiLink && ln -sf $arch/$gcc $abiLink ) || {
	echo "Failed to set GCC $arch/$gcc." >&2
	exit 1
}
