Index: tools/toolchain.sh
===================================================================
--- tools/toolchain.sh	(revision a9aafa1d6371f470985f9a54f3f739fcf1852baa)
+++ tools/toolchain.sh	(revision c8cf261a450bf22fa6cc6e9872a1f07f9e7dccda)
@@ -1,3 +1,3 @@
-#! /bin/bash
+#!/bin/sh
 
 #
@@ -103,8 +103,8 @@
 	echo
 	
-	if [ -z "$1" ] || [ "$1" == "all" ] ; then
-		PLATFORMS=("amd64" "arm32" "arm64" "ia32" "ia64" "mips32" "mips32eb" "ppc32" "riscv64" "sparc64")
+	if [ -z "$1" ] || [ "$1" = "all" ] ; then
+		PLATFORMS='amd64 arm32 arm64 ia32 ia64 mips32 mips32eb ppc32 riscv64 sparc64'
 	else
-		PLATFORMS=("$1")
+		PLATFORMS="$1"
 	fi
 	
@@ -114,5 +114,5 @@
 	fi
 
-	for i in "${PLATFORMS[@]}"
+	for i in $PLATFORMS
 	do
 		PLATFORM="$i"
@@ -121,7 +121,7 @@
 
 		echo "== $PLATFORM =="
-		test_app_version "Binutils" "ld" "GNU\ ld\ \(GNU\ Binutils\)\ ((\.|[0-9])+)" "$BINUTILS_VERSION"
-		test_app_version "GCC" "gcc" "gcc\ version\ ((\.|[0-9])+)" "$GCC_VERSION"
-		test_app_version "GDB" "gdb" "GNU\ gdb\ \(GDB\)\s+((\.|[0-9])+)" "$GDB_VERSION"
+		test_app_version "Binutils" "ld" "GNU ld (.*) \([.0-9]*\)" "$BINUTILS_VERSION"
+		test_app_version "GCC" "gcc" "gcc version \([.0-9]*\)" "$GCC_VERSION"
+		test_app_version "GDB" "gdb" "GNU gdb (.*)[[:space:]]\+\([.0-9]*\)" "$GDB_VERSION"
 	done
 
@@ -140,18 +140,16 @@
 		echo "- $PKGNAME is missing"
 	else
-		{
-			OUT=$(${APP} -v 2>&1)
-		} &> /dev/null
-
-		if [[ "$OUT" =~ $REGEX ]]; then
-	        VERSION="${BASH_REMATCH[1]}"
-	        if [ "$INS_VERSION" = "$VERSION" ]; then
-	        	echo "+ $PKGNAME is uptodate ($INS_VERSION)"
-	        else
-	        	echo "- $PKGNAME ($VERSION) is outdated ($INS_VERSION)"
-	        fi
-	    else
-	        echo "- $PKGNAME Unexpected output"
-	    fi
+		VERSION=`${APP} -v 2>&1 | sed -n "s:^${REGEX}.*:\1:p"`
+
+		if [ -z "$VERSION" ]; then
+			echo "- $PKGNAME Unexpected output"
+			return 1
+		fi
+
+		if [ "$INS_VERSION" = "$VERSION" ]; then
+			echo "+ $PKGNAME is uptodate ($INS_VERSION)"
+		else
+			echo "- $PKGNAME ($VERSION) is outdated ($INS_VERSION)"
+		fi
 	fi
 }
@@ -160,5 +158,5 @@
 
 change_title() {
-	echo -en "\e]0;$1\a"
+	printf "\e]0;$1\a"
 }
 
@@ -171,5 +169,5 @@
 	fi
 
-	echo -n "${TM} "
+	printf "${TM} "
 	change_title "${TM}"
 	sleep 1
@@ -222,28 +220,29 @@
 	OUTSIDE="$1"
 	BASE="$2"
-	ORIGINAL="`pwd`"
+	ORIGINAL="$PWD"
+
+	cd "${BASE}"
+	check_error $? "Unable to change directory to ${BASE}."
+	ABS_BASE="$PWD"
+	cd "${ORIGINAL}"
+	check_error $? "Unable to change directory to ${ORIGINAL}."
 
 	mkdir -p "${OUTSIDE}"
-
 	cd "${OUTSIDE}"
 	check_error $? "Unable to change directory to ${OUTSIDE}."
-	ABS_OUTSIDE="`pwd`"
-
-	cd "${BASE}"
-	check_error $? "Unable to change directory to ${BASE}."
-	ABS_BASE="`pwd`"
+
+	while [ "${#PWD}" -gt "${#ABS_BASE}" ]; do
+		cd ..
+	done
+
+	if [ "$PWD" = "$ABS_BASE" ]; then
+		echo
+		echo "CROSS_PREFIX cannot reside within the working directory."
+
+		exit 5
+	fi
 
 	cd "${ORIGINAL}"
 	check_error $? "Unable to change directory to ${ORIGINAL}."
-
-	BASE_LEN="${#ABS_BASE}"
-	OUTSIDE_TRIM="${ABS_OUTSIDE:0:${BASE_LEN}}"
-
-	if [ "${OUTSIDE_TRIM}" == "${ABS_BASE}" ] ; then
-		echo
-		echo "CROSS_PREFIX cannot reside within the working directory."
-
-		exit 5
-	fi
 }
 
