diff --git a/bin/qtcreator b/bin/qtcreator
index c142ea825a6ca1a41a9a8e777bfa571c45ac5061..b5f4f945d51629ed61838c017fbf3d77b829b0fa 100755
--- a/bin/qtcreator
+++ b/bin/qtcreator
@@ -1,5 +1,36 @@
 #!/bin/sh
 
-bindir=$(dirname "$(readlink -nf $0)")
-libdir=$(cd "${bindir}/../lib" ; pwd)
-LD_LIBRARY_PATH="${libdir}/qtcreator:${LD_LIBRARY_PATH}" exec "${bindir}/qtcreator.bin" ${1+"$@"}
+function makeAbsolute() {
+    case "$1" in
+	/*)
+	    # already absolute, return it
+	    echo "$1"
+	    ;;
+	*)
+	    # relative, prepend $2 made absolute
+	    echo `makeAbsolute "$2" "$PWD"`/"$1" | sed 's,/\.$,,'
+	    ;;
+    esac
+}
+
+if test -L "$0"; then
+    # Try readlink(1)
+    readlink=`type readlink 2>/dev/null` || readlink=
+    if test -n "$readlink"; then
+	# We have readlink(1), so we can use it
+	me=`readlink -nf "$0"`
+    else
+	# No readlink(1), so let's try ls -l
+	me=`ls -l "$0" | sed 's/^.*-> //'`
+	base=`dirname "$0"`
+	me=`makeAbsolute "$me" "$base"`
+    fi
+else
+    me="$0"
+fi
+
+bindir=`dirname "$me"`
+libdir=`cd "${bindir}/../lib" ; pwd`
+LD_LIBRARY_PATH="${libdir}/qtcreator:${LD_LIBRARY_PATH}"
+export LD_LIBRARY_PATH
+exec "${bindir}/qtcreator.bin" ${1+"$@"}