#!/usr/bin/env bash

# Copyright 2010 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.

# This is a small script for executing go binaries on the android platform.
#
# example:
# ./a 5.out foo bar baz
#
# The script exports the local values of GOARCH, GOTRACEBACK and GOGC
# to the android environment.
#
# Known issues:
# The script fails unless the last character output by the program is "\n"
#
# TODO(kaib): add gdb bridge support

exp ()
{
	if [ ${!1} ]; then
		echo "export $1=\"${!1}\"; "
	fi
}

# adb does not correctly return the exit value of the executed program. use this
# wrapper to manually extract the exit value
rloc=/data/local/tmp/retval
rsize=$(adb shell "ls -l $rloc"|tr -s ' '|cut -d' ' -f4)
rcheck=38
if [ "$rsize" != "$rcheck" ]; then
#	echo "debug: retval size incorrect want $rcheck, got $rsize. uploading"
	echo  >/tmp/adb.retval '#!/system/bin/sh
"$@"
echo RETVAL: $?' 
	adb push /tmp/adb.retval $rloc >/dev/null 2>&1
	adb shell chmod 755 $rloc
fi

# run the main binary
if [ "-g" == "$1" ]; then
	adb forward tcp:$2 tcp:$2
	args=$(echo $*| cut -d' ' -f4-)
	adb push $3 /data/local/tmp/$3 >/dev/null 2>&1
	adb shell "$(exp GOARCH) $(exp GOTRACEBACK) $(exp GOGC) \
		gdbserver :$2 /data/local/tmp/retval /data/local/tmp/$3 $args" \
		2>&1|tr -d '\r' |tee /tmp/adb.out|grep -v RETVAL
else
	if [ "$*" != "$1" ]; then
		args=$(echo $*| cut -d' ' -f2-)
	fi
	adb push $1 /data/local/tmp/$1 >/dev/null 2>&1
	adb shell "$(exp GOARCH) $(exp GOTRACEBACK) $(exp GOGC) \
		/data/local/tmp/retval /data/local/tmp/$1 $args" \
		2>&1|tr -d '\r' |tee /tmp/adb.out|grep -v RETVAL
fi
exit $(grep RETVAL /tmp/adb.out|tr -d '\n\r'| cut -d' ' -f2)
