diff --git a/util/msrtool/configure b/util/msrtool/configure
new file mode 100755
index 0000000..f627a65
--- /dev/null
+++ b/util/msrtool/configure
@@ -0,0 +1,162 @@
+#!/bin/sh
+#
+# This file is part of msrtool.
+#
+# Copyright (c) 2008 Peter Stuge <peter@stuge.se>
+#
+# This program is free software; you can redistribute it and/or modify
+# it under the terms of the GNU General Public License version 2 as
+# published by the Free Software Foundation.
+#
+# This program is distributed in the hope that it will be useful,
+# but WITHOUT ANY WARRANTY; without even the implied warranty of
+# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+# GNU General Public License for more details.
+#
+# You should have received a copy of the GNU General Public License
+# along with this program; if not, write to the Free Software
+# Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA  02110-1301 USA
+#
+
+# If this is left unset, try to set the version string from the highest
+# revision number of the checked out files later.
+VERSION=""
+
+REV="$(svnversion -c . 2>/dev/null)"; REV="${REV/*:}"
+VERSION="${VERSION:-$REV}"
+
+function findprog() {
+	local WHAT FROMENV FILE
+	WHAT="${1}"
+	shift
+	FROMENV="${1}"
+	shift
+	echo -n "searching for ${WHAT} (${*})..." 1>&2
+	test -n "${FROMENV}" && {
+		echo "  using environment: ${FROMENV}" 1>&2
+		echo "${FROMENV}"
+		exit 0
+	}
+	for parm in $(seq 0 $#); do
+		test -z "${1}" && {
+			shift
+			continue
+		}
+		FILE="$(which "${1}" 2>/dev/null)"
+		test $? -eq 0 && {
+			echo "${1}"
+			break
+		}
+		shift
+	done
+	test -z "${1}" && {
+		echo "  not found!" 1>&2
+		echo 1>&2
+		echo "This is a fatal error, configure is exiting!" 1>&2
+		exit 1
+	}
+	echo "  using ${FILE} in PATH" 1>&2
+	exit 0
+}
+
+function trycompile() {
+	local WHAT OUT
+	WHAT="${1}"
+	shift
+	echo -n "finding CFLAGS for ${WHAT}... " 1>&2
+	OUT="${OUT}\n${CC} ${CFLAGS} -o .config.o -c .config.c"
+	OUT="${OUT}\n$(${CC} ${CFLAGS} -o .config.o -c .config.c 2>&1)"
+	test $? -eq 0 && {
+		echo " using: ${CFLAGS}" 1>&2
+		echo "${CFLAGS}"
+		exit 0
+	}
+	for parm in $(seq 1 $#); do
+		OUT="${OUT}\n${CC} ${CFLAGS} ${1} -o .config.o -c .config.c 2>&1"
+		OUT="${OUT}\n$(${CC} ${CFLAGS} ${1} -o .config.o -c .config.c 2>&1)"
+		test $? -eq 0 && {
+			echo " using: ${CFLAGS} ${1}" 1>&2
+			echo "${CFLAGS} ${1}"
+			exit 0
+		} 
+		shift
+	done
+	echo "failed!" 1>&2
+	echo 1>&2
+	echo -n "The following compiler commands were executed:" 1>&2
+	echo -e "${OUT}\n" 1>&2
+	echo "This is a fatal error, configure is exiting!" 1>&2
+	echo 1>&2
+	echo "You can try to fix this by manually setting CFLAGS in the environment before" 1>&2
+	echo "running configure. E.g.:" 1>&2
+	echo "CFLAGS=-I/opt/somedir/include ${0}" 1>&2
+	echo 1>&2
+	exit 1
+}
+
+function trylink() {
+	local WHAT OUT
+	WHAT="${1}"
+	shift
+	echo -n "finding LDFLAGS for ${WHAT}... " 1>&2
+	OUT="${OUT}\n${CC} -o .config .config.o ${LDFLAGS} 2>&1"
+	OUT="${OUT}\n$(${CC} -o .config .config.o ${LDFLAGS} 2>&1)"
+	test $? -eq 0 && {
+		echo " using: ${LDFLAGS}" 1>&2
+		echo "${LDFLAGS}"
+		exit 0
+	}
+	for parm in $(seq 1 $#); do
+		OUT="${OUT}\n${CC} -o .config .config.o ${LDFLAGS} ${1} 2>&1"
+		OUT="${OUT}\n$(${CC} -o .config .config.o ${LDFLAGS} ${1} 2>&1)"
+		test $? -eq 0 && {
+			echo " using: ${LDFLAGS} ${1}" 1>&2
+			echo "${LDFLAGS} ${1}"
+			exit 0
+		}
+		shift
+	done
+	echo "failed!" 1>&2
+	echo 1>&2
+	echo -n "The following linker commands were executed:" 1>&2
+	echo -e "${OUT}\n" 1>&2
+	echo "This is a fatal error, configure is exiting!" 1>&2
+	echo 1>&2
+	echo "You can try to fix this by manually setting LDFLAGS in the environment before" 1>&2
+	echo "running configure. E.g.:" 1>&2
+	echo "LDFLAGS=-L/opt/somedir/lib ${0}" 1>&2
+	echo 1>&2
+	exit 1
+}
+
+CC=$(findprog "compiler" "${CC}" gcc cc icc) || exit
+INSTALL=$(findprog "install" "${INSTALL}" install ginstall) || exit
+
+test -n "$DEBUG" && myCFLAGS="-O2 -g" || myCFLAGS="-Os"
+CFLAGS="${CFLAGS} ${myCFLAGS} -Wall -Werror"
+
+PREFIX="${PREFIX:-/usr/local}"
+
+OS_ARCH=$(uname)
+
+echo
+echo "configured using the following settings:"
+echo
+echo "VERSION=${VERSION}"
+echo "CC=${CC}"
+echo "CFLAGS=${CFLAGS}"
+echo "LDFLAGS=${LDFLAGS}"
+echo "INSTALL=${INSTALL}"
+echo "PREFIX=${PREFIX}"
+echo
+echo -n "creating Makefile..."
+echo "# This file was automatically generated by configure" > Makefile
+sed -e "s#@VERSION@#${VERSION}#g" \
+	-e "s#@CC@#${CC}#g" \
+	-e "s#@CFLAGS@#${CFLAGS}#g" \
+	-e "s#@LDFLAGS@#${LDFLAGS}#g" \
+	-e "s#@INSTALL@#${INSTALL}#g" \
+	-e "s#@PREFIX@#/usr/local#g" \
+	Makefile.in >> Makefile
+echo "  done"
+echo
