#!/bin/bash

sv=44

if [ -n "$1" ]
then
	sv=$1
fi

case $sv in
	*.*)
		smaj=${sv%*.*}
		smin=${sv#*.*}
		sv=$((smaj*10+smin))
		;;
	*)
		if [ $sv -lt 10 ]
		then
			sv=$((sv*10))
		fi
		;;
esac

quiet()
{
	$* >/dev/null 2>/dev/null
}

check()
{
	local ver=""
	local tmpver=$(gcc -dumpversion)
	local v=$1
	local maj=${v%*.*}
	local min=${v#*.*}

	if [ "${tmpver%*.*}" = "${maj}.${min}" ]
	then
		ver=gcc
	elif quiet gcc$v-version && quiet gcc-$(gcc$v-version) -dumpversion
	then
		ver=gcc-$(gcc$v-version)
	elif quiet gcc-$v -dumpversion
	then
		ver=gcc-$v
	elif quiet gcc$v -dumpversion
	then
		ver=gcc$v
	elif [ "$min" = 0 ]
	then
		v=$maj
#		echo $v
		if quiet gcc$v-version && quiet gcc-$(gcc$v-version) -dumpversion
		then
			ver=gcc-$(gcc$v-version)
		elif quiet gcc-$v -dumpversion
		then
			ver=gcc-$v
		elif quiet gcc$v -dumpversion
		then
			ver=gcc$v
		fi
	fi

	echo $ver
}

ver=""
for ((dv=$sv; dv>=30; dv--))
do
	v=$((dv/10)).$((dv%10))
#	echo $v
	ver=$(check $v)
	if [ -n "$ver" ]
	then
		break;
	fi
done
[ -z "$ver" ] && ver=$(check 2.95)
[ -z "$ver" ] && ver=gcc

echo $ver
