#!/bin/sh
#
# Firefox/Thunderbird automatic build script.
#
# This script expects the directory "mozilla" to contain the complete Mozilla
# source tree.
#

#
# Utility Functions
#

SuccessMsg()
{
	echo -e "\033[01;32m*\033[00m $*"
}

FailureMsg()
{
	echo -e "\033[01;31m*\033[00m $*"
}

#
# Process arguments, and set the target.
#
if [ $# -ne 1 ]
then
	cat <<__EOF__
Usage: build.sh target
where, target is one of:
firefox, firefox-developer,
thunderbird, thunderbird-with-calendar, thunderbird-with-lightning,
xulrunner
__EOF__
	exit 1
fi
cwd=`pwd`
target=$1

MOZILLA_OFFICIAL=1
BUILD_OFFICIAL=1
export MOZILLA_OFFICIAL BUILD_OFFICIAL

#
# Some defaults
#
buildLog="$cwd/build.out"
commonOptions="
ac_add_options --disable-tests
ac_add_options --disable-debug
ac_add_options --enable-optimize=-O2
ac_add_options --without-system-nspr
ac_add_options --without-system-zlib
ac_add_options --without-system-jpeg
ac_add_options --without-system-png
ac_add_options --without-system-mng
ac_add_options --enable-crypto
ac_add_options --disable-gnomevfs
ac_add_options --disable-gnomeui
"
SuccessMsg "Logging errors and build output to $buildLog"

case $target in
firefox)
	buildDir=firefox-build
	rm -fr $buildDir
	if [ $? = 0 ]
	then
		SuccessMsg "Cleaned up existing build directory"
	else
		FailureMsg "Removing of $buildDir directory failed."
		exit 2
	fi
	SuccessMsg "Firefox build started at `date`"
	target=firefox
	cat >mozilla/.mozconfig <<__EOF__
. \$topsrcdir/browser/config/mozconfig
mk_add_options MOZ_OBJDIR=@TOPSRCDIR@/../$buildDir
$commonOptions
__EOF__
	installer="$buildDir/browser/installer"
	buildOutput="$buildDir/dist/firefox-*"
	;;
firefox-developer)
	buildDir=firefox-build
	rm -fr $buildDir
	if [ $? = 0 ]
	then
		SuccessMsg "Cleaned up existing build directory"
	else
		FailureMsg "Removing of $buildDir directory failed."
		exit 2
	fi
	SuccessMsg "Firefox build started at `date`"
	target=firefox
	cat >mozilla/.mozconfig <<__EOF__
. \$topsrcdir/browser/config/mozconfig
mk_add_options MOZ_OBJDIR=@TOPSRCDIR@/../$buildDir
ac_add_options --enable-extensions=default,schema-validation,sql,venkman,webdav,webservices,xforms,xml-rpc
$commonOptions
__EOF__
	installer="$buildDir/browser/installer"
	buildOutput="$buildDir/dist/firefox-*"
	;;
thunderbird)
	buildDir=thunderbird-build
	rm -fr $buildDir
	if [ $? = 0 ]
	then
		SuccessMsg "Cleaned up existing build directory"
	else
		FailureMsg "Removing of $buildDir directory failed."
		exit 2
	fi
	SuccessMsg "Thunderbird build started at `date`"
	target=thunderbird
	cat >mozilla/.mozconfig <<__EOF__
. \$topsrcdir/mail/config/mozconfig
mk_add_options MOZ_OBJDIR=@TOPSRCDIR@/../$buildDir
$commonOptions
__EOF__
	installer="$buildDir/mail/installer"
	buildOutput="$buildDir/dist/thunderbird-*"
	;;
thunderbird-with-calendar)
	buildDir=thunderbird-build
	rm -fr $buildDir
	if [ $? = 0 ]
	then
		SuccessMsg "Cleaned up existing build directory"
	else
		FailureMsg "Removing of $buildDir directory failed."
		exit 2
	fi
	SuccessMsg "Thunderbird with calendar support "\
	    "build started at `date`"
	target=thunderbird
	cat >mozilla/.mozconfig <<__EOF__
. \$topsrcdir/mail/config/mozconfig
mk_add_options MOZ_OBJDIR=@TOPSRCDIR@/../$buildDir
ac_add_options --enable-calendar
$commonOptions
__EOF__
	installer="$buildDir/mail/installer"
	buildOutput="$buildDir/dist/thunderbird-*"
	;;
thunderbird-with-lightning)
	buildDir=thunderbird-build
	rm -fr $buildDir
	if [ $? = 0 ]
	then
		SuccessMsg "Cleaned up existing build directory"
	else
		FailureMsg "Removing of $buildDir directory failed."
		exit 2
	fi
	SuccessMsg "Thunderbird with calendar (lightning) support "\
	    "build started at `date`"
	target=thunderbird
	cat >mozilla/.mozconfig <<__EOF__
. \$topsrcdir/mail/config/mozconfig
mk_add_options MOZ_OBJDIR=@TOPSRCDIR@/../$buildDir
ac_add_options --enable-extensions=default,lightning
$commonOptions
__EOF__
	installer="$buildDir/mail/installer"
	buildOutput="$buildDir/dist/thunderbird-*"
	;;
xulrunner)
	buildDir=xulrunner-build
	rm -fr $buildDir
	if [ $? = 0 ]
	then
		SuccessMsg "Cleaned up existing build directory"
	else
		FailureMsg "Removing of $buildDir directory failed."
		exit 2
	fi
	SuccessMsg "XulRunner build started at `date`"
	target=xulrunner
	cat >mozilla/.mozconfig <<__EOF__
ac_add_options --enable-application=xulrunner
mk_add_options MOZ_OBJDIR=@TOPSRCDIR@/../$buildDir
ac_add_options --disable-javaxpcom
$commonOptions
__EOF__
	installer="$buildDir/xulrunner/installer"
	buildOutput="$buildDir/dist/xulrunner-*"
	;;
esac

#
# Some OS specific tweaks
#
case `uname` in
FreeBSD)
	export LIBS='-pthread'
	;;
esac

#
# Start the ball
#
cd mozilla
make -f client.mk build >$buildLog 2>&1
if [ $? = 0 ]
then
	SuccessMsg "Build successfully completed at `date`"
	SuccessMsg "Bundling software ..."
	make -C $installer >>$buildLog 2>&1
	if [ $? = 0 ]
	then
		ls -l $buildOutput
		SuccessMsg "Bundling complete at `date`"
	fi
else
	FailureMsg "Build failed (`date`)"
fi
cd $cwd
# EOF
