#!/bin/bash

USAGE="`basename $0`
Run this script from the project root.

Without options, the default is to build a signed source package for uploading
to a Launchpad PPA.

Options:

-h  --help

--binary-only
--source-only
--source-and-binary
--signed
--unsigned"

# version for the debian package
VERSION=0.9.9.2e
PROJECT=fractorium
PROJECT_ROOT=$PWD
PPA_DIR="$HOME/PPA/$PROJECT-$VERSION"
TAR_NAME="$PROJECT-$VERSION.tar.gz"

if [ ! -d '.git' -o ! -f 'main.pro' ]; then
    echo "Run `basename $0` from the project root."
    exit 2
fi

# Set defaults.
OPT_BUILD_BINARY=0
OPT_BUILD_SOURCE=1
OPT_SIGNED=1

while [ $# -gt 0 ]; do
    case "$1" in
        --binary-only)       OPT_BUILD_SOURCE=0
                             OPT_BUILD_BINARY=1
                             ;;
        --source-only)       OPT_BUILD_SOURCE=1
                             OPT_BUILD_BINARY=0
                             ;;
        --source-and-binary) OPT_BUILD_SOURCE=1
                             OPT_BUILD_BINARY=1
                             ;;
        --signed)            OPT_SIGNED=1
                             ;;
        --unsigned)          OPT_SIGNED=0
                             ;;
        -h|--help) echo "$USAGE"
                   exit 0;;
    esac
    shift
done

tarversion=$(tar --version | head -1 | sed -e 's/tar (GNU tar) \+\([0-9\.]\+\)$/\1/; s/[^0-9]//g; s/^\(.{3}\).*$/\1/;')

if [[ "$tarversion" -lt "128" ]]; then
    echo "Tar >= 1.28 is required. Download the .deb from https://launchpad.net/ubuntu/+source/tar/ and install manually."
    exit 2
fi

if [ ! -d "$PPA_DIR" ]; then
    mkdir -p "$PPA_DIR"
else
    echo -n "PPA work folder already exists: $PPA_DIR
Move this folder aside or remove it.
"
    exit 2
fi

# tar 1.28 required for --exclude-vcs-ignores

# FIXME: somehow it didn't ignore the 'Bin' folder.

tar --exclude='package-linux.sh' \
    --exclude='debian' \
    --exclude='Bin' \
    --exclude-vcs \
    --exclude-vcs-ignores \
    --exclude-backups \
    -czf "$PPA_DIR/$TAR_NAME" .

[ $? -ne 0 ] && echo "Tar command failed." && exit 2

cd "$PPA_DIR"
bzr dh-make $PROJECT $VERSION $TAR_NAME

[ $? -ne 0 ] && echo "bzr dh-make command failed." && exit 2

rm "$PPA_DIR/fractorium/debian" -r
cp -R "$PROJECT_ROOT/debian" "$PPA_DIR/fractorium"

cd "$PPA_DIR/fractorium" &&\
    bzr add . &&\
    bzr commit -m "Debian package $VERSION"

[ $? -ne 0 ] && echo "bzr command failed." && exit 2

# Build a source package.

# Launchpad only needs a signed source package. It will build its own binary on
# the servers.

if [ $OPT_BUILD_SOURCE -eq 1 ]; then
    if [ $OPT_SIGNED -eq 1 ]; then
        bzr builddeb -- -S
    else
        bzr builddeb -- -S -us -uc
    fi
fi

[ $? -ne 0 ] && echo "bzr builddeb for source package failed." && exit 2

# Build an binary package.

if [ $OPT_BUILD_BINARY -eq 1 ]; then
    if [ $OPT_SIGNED -eq 1 ]; then
        bzr builddeb -- -b
    else
        bzr builddeb -- -b -us -uc
    fi
fi

[ $? -ne 0 ] && echo "bzr builddeb for source package failed." && exit 2