HOST_SYSTEM=`uname -s | tr [:upper:] [:lower:] | sed s/darwin/macosx/`

if [ "${HOST_SYSTEM}" = "macosx" ]; then
	HOST_MACHINE=`uname -p | tr [:upper:] [:lower:]`
else
	HOST_MACHINE=`uname -m | tr [:upper:] [:lower:] | sed s/i686/i386/ | sed s/x86_64/amd64/ | sed s/ppc64/powerpc/`
fi

BINSUFFIX=
MAKEARGS=
MAKE=make
WANTZIP=0

if [ "${HOST_SYSTEM}" = "mingw32_nt-5.1" ]; then
	HOST_SYSTEM=win32
	BINSUFFIX=.exe
	WANTZIP=1
	MAKEARGS="USE_BIGENDIAN=NO"
fi

BINARY=uhub${BINSUFFIX}

if [ "${HOST_SYSTEM}" = "freebsd" ]; then
	MAKE=gmake
fi

VERSION=`grep define\ VERSION version.h | cut -f 3 -d " " | tr -d [=\"=]`
SNAPSHOT=`date '+%Y%m%d'`
PACKAGE=uhub-${VERSION}
PACKAGE_SRC=${PACKAGE}-src
PACKAGE_BIN=${PACKAGE}-${HOST_SYSTEM}-${HOST_MACHINE}
ARCHIVE='build-archive:~/www/downloads/uhub/'

function export_source_directory
{
	if [ -d ${PACKAGE} ]; then
		rm -Rf ${PACKAGE};
	fi

	if [ ! -d .git ]; then
		echo "No git repo found in `dirname $0`"
		exit 1
	fi

	git archive --format=tar --prefix=${PACKAGE}/ HEAD > tmp.tar && tar -xf tmp.tar && rm tmp.tar

	if [ ! -d ${PACKAGE} ]; then
		echo "Something went wrong while exporting the repo."
		exit 1
	fi
}

function package_zips
{
	tar cf $1.tar $2
	gzip -c -9 $1.tar > $1.tar.gz
	bzip2 -c -9 $1.tar > $1.tar.bz2
	rm -f $1.tar

	if [ $WANTZIP -eq 1 ]; then
		zip -q -9 -r $1.zip $2
	fi
}

function export_sources
{
	if [ ! -d ${PACKAGE} ]; then
		export_source_directory
	fi

	cd ${PACKAGE}
	${MAKE} ${MAKEARGS} autotest.c
	cd ..

	if [ ! -f ${PACKAGE}/autotest.c ]; then
		echo "Unable to create autotest.c, aborting..."
		exit 1
	fi

	rm -Rf ${PACKAGE}/admin
	package_zips ${PACKAGE_SRC} ${PACKAGE}

	rm -Rf ${PACKAGE};
	cp ChangeLog ChangeLog-${VERSION}
}

function build_binaries
{
        if [ ! -d ${PACKAGE} ]; then
                export_source_directory
        fi

        cd ${PACKAGE}
        ${MAKE} ${MAKEARGS} RELEASE=YES
        cd ..

        if [ ! -x ${PACKAGE}/${BINARY} ]; then
                echo "Build failed, no binary found..."
                exit 1
        fi
}

function export_binaries
{
	build_binaries

	rm -Rf ${PACKAGE}/admin
	rm -Rf ${PACKAGE}/autotest
	rm -Rf ${PACKAGE}/src
	rm -Rf ${PACKAGE}/debian
	rm -f ${PACKAGE}/autotest.c
	rm -f ${PACKAGE}/*akefile
	rm -f ${PACKAGE}/version.h
	rm -f ${PACKAGE}/doc/Doxyfile
	rm -f ${PACKAGE}/doc/uhub.dot
	rm -f ${PACKAGE}/libuhub*

	package_zips ${PACKAGE_BIN} ${PACKAGE}
	rm -Rf ${PACKAGE}
}

function upload_pkg
{
	if [ -f $1 ]; then
		scp $1 ${ARCHIVE}
	fi
}

function upload_packages
{
	upload_pkg ${PACKAGE_SRC}.tar.gz
	upload_pkg ${PACKAGE_SRC}.tar.bz2
	upload_pkg ${PACKAGE_SRC}.zip
	upload_pkg ChangeLog-${VERSION}
	upload_pkg ${PACKAGE_BIN}.tar.gz
	upload_pkg ${PACKAGE_BIN}.tar.bz2
	upload_pkg ${PACKAGE_BIN}.zip
}