#! /bin/bash
#
# Copyright (C) 2010 Igalia S.L. All rights reserved.
#
# This library is free software; you can redistribute it and/or
# modify it under the terms of the GNU Library General Public
# License as published by the Free Software Foundation; either
# version 2 of the License, or (at your option) any later version.
#
# This library 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
# Library General Public License for more details.
#
# You should have received a copy of the GNU Library General Public License
# along with this library; see the file COPYING.LIB.  If not, write to
# the Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor,
# Boston, MA 02110-1301, USA.

exec 2>&1

: ${BUILDBOT_CONFIG:=/etc/daemontools-buildbot.conf}

# Read configuration file
[ -r "${BUILDBOT_CONFIG}" ] && . "${BUILDBOT_CONFIG}"

: ${buildbot_user:=${USER:-${LOGNAME}}}
: ${crashmon_output:=''}

# Expand all "env_*" environment variables
for varname in ${!env_*} ; do
	eval "export ${varname#env_}=\${${varname}}"
done


if [ ! -d "${crashmon_output}" ]
then
	if ! [ "${crashmon_output}" ]
	then
		echo "Dump directory '${crashmon_output}' does not exist (sleeping)"
	fi
	sleep $(( 60 * 60 * 4 ))
	exit 111
fi


if ! [ "${buildbot_bits}" ]
then
	# Guess bits (32/64) from uname -m
	machine=$(uname -m)
	case ${machine} in
		x86_64 | amd64 | ia64 | ppc64)
			buildbot_bits="64" ;;
		*)
			buildbot_bits="32" ;;
	esac
fi

: ${crashmon_bin_path:="${buildbot_path}/gtk-linux-${buildbot_bits}-debug/build/WebKitBuild/Debug/Programs"}


cd "${crashmon_output}"
exec /usr/bin/env -           \
		PATH="${PATH}"             \
		SHELL="/bin/bash"           \
		USER="${buildbot_user}"      \
		arch="${buildbot_bits}"       \
		LOGNAME="${buildbot_user}"     \
		coredir="${crashmon_output}"    \
		HOME="/home/${buildbot_user}"    \
		mailto="${crashmon_mailto:-''}"   \
		programpath="${crashmon_bin_path}" \
	/usr/bin/setuidgid "${buildbot_user}" "$(pwd)/crashmon"

