#!/bin/bash

# Copyright (C) 2011 by Mike Gabriel <mike.gabriel@das-netzwerkteam.de>
#
# This programme is free software; you can redistribute it and/or modify
# it under the terms of the GNU General Public License as published by
# the Free Software Foundation; either version 3 of the License, or
# (at your option) any later version.
#
# This programme 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 General Public License for more details.
#
# You should have received a copy of the GNU General Public License
# along with this program; if not, write to the
# Free Software Foundation, Inc.,
# 51 Franklin St, Fifth Floor, Boston, MA 02110-1301, USA.

test -z $1 && { echo "usage: <x2go-git-project> {main,heuler} [<git-checkout>]"; exit -1; }

set -ex

USE_SUDO="yes"
PDEBUILD="pdebuild --pbuilder qemubuilder"
TEMP_BASE="$HOME/tmp/"

PACKAGE=$1
COMPONENT=${2:-${COMPONENT:-heuler}}
[ "x$COMPONENT" = "xmain" ] && {
        CHECKOUT=${3:-build-main} 
} || { 
        CHECKOUT=${3:-master}
	DATE="~${DATE:-$(date +%Y%m%d)}."
}
[ "x$DATE" = "xtoday" ] && DATE="~$(date +%Y%m%d)."

PACKAGE_DIR=$HOME/build/$COMPONENT/$PACKAGE

DIST_SUPPORTED="debian ubuntu"
PKGDIST="$HOME/pkg-dist/$COMPONENT/$PACKAGE"
OTHERMIRROR=${OTHERMIRROR:-"deb http://code.x2go.org/debian $CODENAME $COMPONENT"}

# creating paths
mkdir -p "$TEMP_BASE"
mkdir -p $PACKAGE_DIR
mkdir -p $PKGDIST

# in any case remove the BUILDS_FOR file
rm -f $PACKAGE_DIR/BUILDS_FOR

# make sure our local working copy is up to date...
test -d $PACKAGE_DIR/.git && { cd $PACKAGE_DIR && git reset --hard; git pull; git checkout $CHECKOUT || git checkout master; } || { cd $(dirname $PACKAGE_DIR) && git clone git://code.x2go.org/$PACKAGE.git && cd $PACKAGE && git checkout $CHECKOUT || git checkout master; }
cd $PACKAGE_DIR

# by default we build for all current debian versions
test -f BUILDS_FOR || cat > BUILDS_FOR <<EOF
debian: sid wheezy squeeze
#ubuntu: lucid maverick natty
EOF


# pkgdist directory cleanup
cat BUILDS_FOR | egrep -v '(^$|^#.*$)' | while read line; do
	l_DIST=$(echo $line | cut -d":" -f1 | tr [A-Z] [a-z])
	CODENAMES=$(echo $line | cut -d":" -f2- | tr [A-Z] [a#-z])
	echo "$DIST_SUPPORTED" | grep $l_DIST >/dev/null && {
		for l_CODENAME in $CODENAMES; do
			for l_ARCH in amd64 i386; do
				mkdir -p $PKGDIST/$l_DIST/$l_CODENAME
				rm -f $PKGDIST/$l_DIST/$l_CODENAME/$l_ARCH/$PACKAGE_*.changes
				rm -f $PKGDIST/$l_DIST/$l_CODENAME/$l_ARCH/$PACKAGE_*.upload
				rm -f $PKGDIST/$l_DIST/$l_CODENAME/$l_ARCH/$PACKAGE_*.build
				rm -f $PKGDIST/$l_DIST/$l_CODENAME/$l_ARCH/$PACKAGE_*.dsc
				rm -f $PKGDIST/$l_DIST/$l_CODENAME/$l_ARCH/$PACKAGE_*.tar.gz
				rm -f $PKGDIST/$l_DIST/$l_CODENAME/$l_ARCH/*.deb
			done
		done
	}
done


# use pbuilder for building all variants of this package
cat BUILDS_FOR | egrep -v '(^$|^#.*$)' | while read line; do
	l_DIST=$(echo $line | cut -d":" -f1 | tr [A-Z] [a-z])
	CODENAMES=$(echo $line | cut -d":" -f2- | tr [A-Z] [a#-z])
	echo "$DIST_SUPPORTED" | grep $l_DIST >/dev/null && {
		for l_CODENAME in $CODENAMES; do
			TEMP_DIR="$(mktemp -d --tmpdir=$TEMP_BASE)"
			mkdir -p $TEMP_DIR/$PACKAGE
			git clone --local $PACKAGE_DIR $TEMP_DIR/$PACKAGE/ 
			cd $TEMP_DIR/$PACKAGE
			git checkout $CHECKOUT || git checkout master
			# translate the version name for Debian releases
			[ "x$l_CODENAME" = "xsid" ] && VERSION=unstable
			[ "x$l_CODENAME" = "xwheezy" ] && VERSION=testing
			[ "x$l_CODENAME" = "xsqueeze" ] && VERSION=stable
			[ "x$l_CODENAME" = "xlenny" ] && VERSION=oldstable
			
			# modify the section for non-main package builds
			[ "x$COMPONENT" = "xmain" ] || {
				mv debian/control debian/control.tmp
				cat debian/control.tmp | sed  "s#Section:[\ ]*\(.*\)#Section: $COMPONENT/\1#g" > debian/control
			}
			
			# modify changelog for this build
			DEBEMAIL=git-admin@x2go.org DEBFULLNAME="X2go Git Administrator" dch --distribution $VERSION --force-distribution -l "+$l_CODENAME~$COMPONENT$DATE" "Auto-built $l_DIST $l_CODENAME package for packages.x2go.org repository."
			mkdir -p $PKGDIST/$l_DIST/$l_CODENAME/{amd64,i386}
			[ "x$USE_SUDO" != "xyes" ] && {
				cat debian/control | egrep 'Architecture.*(all|any|amd64)' >/dev/null && {
					DIST=$l_DIST CODENAME=$l_CODENAME ARCH=amd64 $PDEBUILD --auto-debsign --debsign-k F4A7678C9C6B0B2B --buildresult $PKGDIST/$l_DIST/$l_CODENAME/amd64
				}
				cat debian/control | egrep 'Architecture.*(any|i386)' >/dev/null && {
					DIST=$l_DIST CODENAME=$l_CODENAME ARCH=i386  $PDEBUILD --auto-debsign --debsign-k F4A7678C9C6B0B2B --buildresult $PKGDIST/$l_DIST/$l_CODENAME/i386 -- --binary-arch
				}
			}
			[ "x$USE_SUDO" = "xyes" ] && {
				cat debian/control | egrep 'Architecture.*(all|any|amd64)' >/dev/null && {
				    sudo DIST=$l_DIST CODENAME=$l_CODENAME ARCH=amd64 OTHERMIRROR="$OTHERMIRROR" $PDEBUILD --auto-debsign --debsign-k F4A7678C9C6B0B2B --buildresult $PKGDIST/$l_DIST/$l_CODENAME/amd64
				}
				cat debian/control | egrep 'Architecture.*(any|i386)' >/dev/null && {
				    sudo DIST=$l_DIST CODENAME=$l_CODENAME ARCH=i386  OTHERMIRROR="$OTHERMIRROR" $PDEBUILD --auto-debsign --debsign-k F4A7678C9C6B0B2B --buildresult $PKGDIST/$l_DIST/$l_CODENAME/i386 -- --binary-arch
				}
			}
			cd -
			rm -Rf $TEMP_DIR
		done
		echo
	}
	echo
done

# dupload the new packages to the reprepro repository
cd $PKGDIST
cat $PACKAGE_DIR/BUILDS_FOR | egrep -v '(^$|^#.*$)' | while read line; do
	l_DIST=$(echo $line | cut -d":" -f1 | tr [A-Z] [a-z])
	CODENAMES=$(echo $line | cut -d":" -f2- | tr [A-Z] [a-z])
	for l_CODENAME in $CODENAMES; do
		for l_ARCH in amd64 i386; do 
			cd $PKGDIST/$l_DIST/$l_CODENAME/$l_ARCH
			ls $PACKAGE_*.changes &>/dev/null && dupload --to x2go-$l_DIST-$l_CODENAME $PACKAGE_*.changes
			cd -
		done
	done
done
cd -

