#!/bin/sh

if [ $# -gt 3 -o $# -lt 1 ]; then
	echo "Syntax: $0 [-c] <server version> [<revision>]" >&2
	exit 1
fi

if [ "$1" = "-c" ]; then
	echo "building campaignd..."
	TYPE=campaignd
	shift
else
	echo "building wesnothd..."
	TYPE=wesnothd
fi

SERVER=$1
SERVERBASE=$HOME/$TYPE/$SERVER
if [ $TYPE = wesnothd ]; then
	SERVERBASE=$HOME/servers/$SERVER
fi

SOURCE=$HOME/source
SOCKET=$SERVERBASE/build/var/run/socket

if ! [ -d $SERVERBASE ]; then
	echo "$SERVER server not found." >&2
	exit 1
fi

if ! [ -d $SOURCE ]; then
	echo "$SOURCE not found." >&2
	exit 1
fi
# only really needed on server.wesnoth.org
#CXXFLAGS="$CXXFLAGS -I$HOME/tools/include"
#LDFLAGS="$LDFLAGS -L$HOME/tools/lib"
case $SERVER in
	1.2 )   cd $SOURCE/1.2   || exit 1
		CXXFLAGS="$CXXFLAGS -ggdb3"
	;;
	1.4 )   cd $SOURCE/1.4   || exit 1
		CXXFLAGS="$CXXFLAGS -ggdb3 -DNUM_SHARDS=7 -DBANDWIDTH_MONITOR"
		#SCONS=yes
	;;
	trunk ) cd $SOURCE/trunk || exit 1
		CXXFLAGS="$CXXFLAGS -ggdb3 -DNUM_SHARDS=7 -O0 -DBANDWIDTH_MONITOR"
		SCONS=yes
	;;
	*   )   cd $SOURCE/trunk || exit 1
		CXXFLAGS="$CXXFLAGS -ggdb3 -DNUM_SHARDS=7 -DBANDWIDTH_MONITOR"
		SCONS=yes
	;;
esac
if [ $TYPE = campaignd ]; then
	CXXFLAGS="$CXXFLAGS -ggdb3 -pg"
	LDFLAGS="$LDFLAGS -pg"
	[ "$SERVER" = "1.4" ] && SCONS=no
fi

REVISION=""
if [ "$2" != "" ]; then
	REVISION="-r $2"
fi
echo -n 'svn update... '
svn up $REVISION > /dev/null
rev=$(svnversion -cn src/ | cut -d: -f2)
echo "to $rev"
if [ "$rev" = "" ]; then
	echo "No revision information found." >&2
	exit 1
fi
# reminder for local changes
#svn status
DIR=$TYPE-svn-${rev}_$SERVER
BUILD=$HOME/$TYPE/builds/$DIR
if [ $TYPE = wesnothd ]; then
	BUILD=$HOME/servers/builds/$DIR
fi

set -x
mkdir -p $BUILD

if [ "$SCONS" = "yes" ]; then
	if [ $TYPE = wesnothd ]; then
		BUILD_FLAGS="fifodir=$BUILD/var/run raw_sockets=1 forum_user_handler=1"
	fi
	mkdir -p $BUILD/var/run
	# need to remove .scons-option-cache when parameters get removed!
	CXXFLAGS="$CXXFLAGS" LDFLAGS="$LDFLAGS" scons install-$TYPE prefix=$BUILD program_suffix=-$SERVER $BUILD_FLAGS profile=0 fribidi=0 python=0 localedir= prefsdir= > $BUILD/scons.log || exit 1
#	boostdir=$HOME/tools/include boostlibdir=$HOME/tools/lib boost_suffix=-mt
else
	if [ $TYPE = wesnothd ]; then
		BUILD_FLAGS="--enable-server --enable-raw-sockets --with-fifodir=$BUILD/var/run"
	else
		BUILD_FLAGS="--enable-campaign-server"
	fi
	#echo 'autogen.sh and configure...'
	./autogen.sh > $BUILD/autogen.log
	CXXFLAGS="$CXXFLAGS" LDFLAGS="$LDFLAGS" ./configure --prefix=$BUILD --program-suffix=-$SERVER $BUILD_FLAGS --disable-game --disable-nls --enable-lite --with-boost=$HOME/tools > $BUILD/configure.log || exit 1
	make clean > /dev/null
	#echo 'make...'
	make > $BUILD/make.log || exit 1
	#echo 'make install...'
	make install > $BUILD/install.log || exit 1
fi

# remove the man pages
rm -rf $BUILD/share/

cd $SERVERBASE
if [ -p $SOCKET -o $TYPE = campaignd ]; then
	rm -f oldbuild
	mv build oldbuild
else #the server under build has never been started, keep the oldbuild link to the (currently) running server
	rm -f build
fi
ln -s ../builds/$DIR/ build

cd $HOME/bin || exit 1
ln -sf $BUILD/bin/$TYPE-$SERVER $TYPE-$SERVER
set +x
