#! /bin/bash

# Process script arguments and expand to fully qualified names where appropriate
OURSCP="$(readlink -f "$0" 2>/dev/null)"
OURSCPDIR="$(dirname "${OURSCP}" 2>/dev/null)"
TCLKITSUPPORTDIR="${OURSCPDIR}/../tclkits/"

NOTK=0
PRINTPLAT=0
if [ "$1" = "--printplatform" ]; then
	shift
	PRINTPLAT=1
fi
if [ "$1" = "--notk" ]; then
	shift
	NOTK=1
fi
if [ "$1" = "--printplatform" ]; then
	shift
	PRINTPLAT=1
fi

DESTTCLKIT="$1"

if [ -z "${DESTTCLKIT}" ]; then
	DESTTCLKIT=$( ( cat ~/.tclkit-local 2>/dev/null; ls -1d "${TCLKITSUPPORTDIR}"/tclkit-* ) | while read chk_kit; do
		if [ ! -f "${chk_kit}" ]; then
			continue
		fi
		if [ ! -x "${chk_kit}" ]; then
			continue
		fi

		CHKWORK=$(echo 'puts WORKS; exit 0' | "${chk_kit}" 2>/dev/null)
		if [ "${CHKWORK}" != "WORKS" ]; then
			continue
		fi

		echo "${chk_kit}"
		break
	done | sort -n | head -n 1)

	if [ -n "${DESTTCLKIT}" -a -x "${DESTTCLKIT}" ]; then
		echo "${DESTTCLKIT}" > ~/.tclkit-local
	fi
fi

if [ ! -f "${DESTTCLKIT}" -a -n "${DESTTCLKIT}" ]; then
	# Attempt to deduce an appropriate Tclkit based on a non-file name.
	# Supported schemes:
	#   <tclvers>
	#   <os>-<cpu>
	#   <tclvers>-<os>-<cpu>
	eval $(echo "${DESTTCLKIT}" | sed 's@  *@_@g;s@-@ @g;s@"@@g' | ( read OS CPU VER; echo "DESTTCLKIT_OS=\"${OS}\"; DESTTCLKIT_CPU=\"${CPU}\"; DESTTCLKIT_VER=\"${VER}\"" ))

	if [ -n "${DESTTCLKIT_OS}" -a -z "${DESTTCLKIT_CPU}" -a -z "${DESTTCLKIT_VER}" ]; then
		# If only one item is specified, assume it is the Tcl version, not the OS
		DESTTCLKIT_VER="${DESTTCLKIT_OS}"
		DESTTCLKIT_OS="*"
		DESTTCLKIT_CPU="*"
	elif [ -n "${DESTTCLKIT_OS}" -a -n "${DESTTCLKIT_CPU}" -a -z "${DESTTCLKIT_VER}" ]; then
		# If no Tcl version is specified, use any
		DESTTCLKIT_VER="*"
	fi

	DESTTCLKIT_CPU=$(echo "${DESTTCLKIT_CPU}" | dd conv=lcase 2>/dev/null | sed 's@i[3456]86@x86@;s@sparc@sun4m@;s@sun4u@sun4m@;s@amd64@x86_64@;s@i86pc@x86@')
	DESTTCLKIT_OS=$(echo "${DESTTCLKIT_OS}" | dd conv=lcase 2>/dev/null | sed 's@sunos@solaris@')

	SEARCHLIST=""
	if [ "${NOTK}" = "1" ]; then
		SEARCHLIST="\"${TCLKITSUPPORTDIR}\"/tclkitnotk-${DESTTCLKIT_VER}-\"${DESTTCLKIT_OS}-${DESTTCLKIT_CPU}\" \"${TCLKITSUPPORTDIR}\"/tclkitnotk-${DESTTCLKIT_VER}-${DESTTCLKIT_OS}-*+${DESTTCLKIT_CPU} \"${TCLKITSUPPORTDIR}\"/tclkitnotk-${DESTTCLKIT_VER}-${DESTTCLKIT_OS}-${DESTTCLKIT_CPU}+* \"${TCLKITSUPPORTDIR}\"/tclkitnotk-${DESTTCLKIT_VER}-${DESTTCLKIT_OS}-*+${DESTTCLKIT_CPU}+* \"${TCLKITSUPPORTDIR}\"/tclkitnotk-${DESTTCLKIT_VER}-${DESTTCLKIT_OS}-${DESTTCLKIT_CPU}"
	fi
	SEARCHLIST="${SEARCHLIST} \"${TCLKITSUPPORTDIR}\"/tclkit-${DESTTCLKIT_VER}-\"${DESTTCLKIT_OS}-${DESTTCLKIT_CPU}\" \"${TCLKITSUPPORTDIR}\"/tclkit-${DESTTCLKIT_VER}-${DESTTCLKIT_OS}-*+${DESTTCLKIT_CPU} \"${TCLKITSUPPORTDIR}\"/tclkit-${DESTTCLKIT_VER}-${DESTTCLKIT_OS}-${DESTTCLKIT_CPU}+* \"${TCLKITSUPPORTDIR}\"/tclkit-${DESTTCLKIT_VER}-${DESTTCLKIT_OS}-*+${DESTTCLKIT_CPU}+* \"${TCLKITSUPPORTDIR}\"/tclkit-${DESTTCLKIT_VER}-${DESTTCLKIT_OS}-${DESTTCLKIT_CPU}"

	DESTTCLKIT=$(eval ls -1d ${SEARCHLIST} 2>/dev/null | sort -rn | head -n 1)
	if [ -z "${DESTTCLKIT}" ]; then
		echo "Unable to locate suitable Tclkit for: os=${DESTTCLKIT_OS}, cpu=${DESTTCLKIT_CPU}, vers=${DESTTCLKIT_VER}" >&2
		exit 1
	fi
fi
if [ -n "${DESTTCLKIT}" ]; then
	DESTTCLKIT="$(readlink -f "${DESTTCLKIT}" 2>/dev/null)"
fi

if [ -z "${DESTTCLKIT}" ]; then
	echo "Unable to locate suitable Tclkit for \"$1\" (OS=${DESTTCLKIT_OS}, CPU=${DESTTCLKIT_CPU})" >&2
	exit 1
fi

if [ "${PRINTPLAT}" = "1" ]; then
	basename "${DESTTCLKIT}" | sed 's@^tclkit[^-]*-[^-]*-@@'
	exit 0
fi

echo "${DESTTCLKIT}"
