diff --git a/run-tests b/run-tests
new file mode 100755
index 0000000000000000000000000000000000000000..87a04a4624a8888607762b4f1c6353a2f5aca984
--- /dev/null
+++ b/run-tests
@@ -0,0 +1,69 @@
+#! /bin/sh
+
+failed=0
+all=0
+
+if [ -z "$srcdir" ] ; then
+  srcdir=`pwd`
+fi
+
+export srcdir
+
+find_program () {
+  if [ -x "$1" ] ; then
+    echo "./$1"
+  else
+    echo "$srcdir/$1"
+  fi
+}
+
+env_program () {
+  if [ -x "$1" ] ; then
+    if "$1"; then : ; else
+      echo FAIL: $1
+      exit 1
+    fi
+  fi
+}
+
+test_program () {
+  testname=`basename "$1" -test`
+  "$1"
+  case "$?" in
+      0)
+    	echo PASS: $testname
+	all=`expr $all + 1`
+	;;
+      77)
+      	echo SKIP: $testname
+      ;;
+      *)
+    	echo FAIL: $testname
+	failed=`expr $failed + 1`
+	all=`expr $all + 1`
+	;;
+  esac
+}
+
+env_program `find_program setup-env`
+
+if [ $# -eq 0 ] ; then
+  for f in *-test; do test_program "./$f"; done
+else
+  for f in "$@" ; do test_program `find_program "$f"`; done
+fi
+
+if [ $failed -eq 0 ] ; then
+  banner="All $all tests passed"
+else
+  banner="$failed of $all tests failed"
+fi
+dashes=`echo "$banner" | sed s/./=/g`
+echo "$dashes"
+echo "$banner"
+echo "$dashes"
+
+env_program `find_program teardown-env`
+
+[ "$failed" -eq 0 ]
+