#!/bin/sh
# Copyright 2009 The Go Authors. All rights reserved.
# Use of this source code is governed by a BSD-style
# license that can be found in the LICENSE file.

export E=""
case X"$GOARCH" in
Xamd64)
	export A=6
	;;
X386)
	export A=8
	;;
Xarm)
	export A=5
	export E="qemu-arm -cpu cortex-a8 "
	;;
*)
	echo 1>&2 run: unsupported '$GOARCH'
	exit 1
esac

export G=${A}g
export L=${A}l
export GOTRACEBACK=0

PATH=/bin:/usr/bin:/usr/local/bin:${GOBIN:-$HOME/bin}:`pwd`

RUNFILE=/tmp/gorun-$$-$USER
TMP1FILE=/tmp/gotest1-$$-$USER
TMP2FILE=/tmp/gotest2-$$-$USER
FAILEDFILE=/tmp/gotest3-$$-$USER

# don't run the machine out of memory: limit individual processes to 4GB.
# on thresher, 3GB suffices to run the tests; with 2GB, peano fails.
ulimit -v 4000000


for i in $(cat arm-pass.txt)
do
	export F=$(basename $i .go)
	dir=$(dirname $i)
	export D=$dir
	sed '/^\/\//!q' $i | sed 's@//@@; $d' |sed 's|./\$A.out|$E &|' >$RUNFILE
	if ! sh $RUNFILE >$TMP1FILE 2>$TMP2FILE
	then
		echo
		echo "===========" $i
		cat $TMP1FILE
		cat $TMP2FILE
		echo >&2 fail: $i
		touch $FAILEDFILE
	elif test -s $TMP1FILE || test -s $TMP2FILE
	then
		echo
		echo "===========" $i
		cat $TMP1FILE
		cat $TMP2FILE
	elif [ $dir = "bugs" ]
	then
		echo $i succeeded with no output.
	fi
done | # clean up some stack noise
	egrep -v '^(r[0-9a-z]+|[cfg]s)  +0x'  |
	sed '/tmp.*Bus error/s/.*Bus/Bus/; /tmp.*Trace.BPT/s/.*Trace/Trace/
		s!'$RUNFILE'!$RUNFILE!g
		s/ PC=0x[0-9a-f]*/ PC=xxx/
		s/^pc: 0x[0-9a-f]*/pc: xxx/
		/^Trace\/breakpoint trap/d
		/^Trace\/BPT trap/d
		/RUNFILE/ s/line 1: *[0-9]*/line 1: PID/
		/^\$RUNFILE: line 1: PID Trace\/breakpoint trap/d
		/^qemu: uncaught target signal 11 (Segmentation fault) - exiting/d' > run.out

failed=0
if test -f $FAILEDFILE; then
	failed=1
	rm -f $FAILEDFILE
fi

rm  -f $RUNFILE $TMP1FILE $TMP2FILE *.$A $A.out

exit $failed
