#! /usr/bin/env 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}"

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


if ! [ "${buildbot_path}" ] ; then
	echo "No \${buildbot_path} defined! (will sleep for 5 minutes)"
	sleep 300
	exit 111
fi


if ! [ "${WEBKIT_TESTFONTS}" ] ; then
	echo "No \${WEBKIT_TESTFONTS} environment variable! (will sleep for 5 minutes)"
	sleep 300
	exit 111
fi


if [ "${coredump_output:=''}" ] ; then
	# Ensure that the output directory exists.
	if [[ ! -d ${crashmon_output} ]] ; then
		mkdir -p "${crashmon_output}"
	fi

	ulimit -c "${crashmon_max_size:=unlimited}"
fi


if [ "${ccache_path}" ] ; then
	export PATH="${ccache_path}:${PATH}"
fi

: ${buildbot_user:=${USER}}

cd "${buildbot_path}"
exec /usr/bin/env -          \
		TERM=dumb                 \
		TZ=PST8PDT                 \
		PATH="${PATH}"              \
		SHELL=/bin/bash              \
		LANG=en_US.UTF-8              \
		USER="${buildbot_user}"        \
		LOGNAME="${buildbot_user}"      \
		HOME="/home/${buildbot_user}"    \
		DISPLAY="${xvfb_display:-':10'}"  \
		MAIL="/var/mail/${buildbot_user}"  \
	/usr/bin/setuidgid "${buildbot_user}" \
	/usr/bin/twistd -noy buildbot.tac

