#!/usr/bin/env bash
######################################################################
# Create Debian package
######################################################################

. "$(dirname "$0")/funcs.sh"

usage () {
  err
  err "usage:  $p [options]"
  err
  err "options:"
  err "  -d --dest <dest-dir>       - Destination directory"
  err "		default: $DEB"
  err "  -e --email <email>         - Package maintainer e-mail address"
  # err "		default: $AUTHOR_EMAIL (git config user.email)"
  err "		default: $AUTHOR_EMAIL"
  err "  -n --name <full name>      - Package maintainer name"
  # err "		default: $AUTHOR_NAME (git config user.name)"
  err "		default: $AUTHOR_NAME"
  err "  -q --quiet                 - Suppress output"
  err "  -s --sign                  - Sign the resulting Debian package"
  err "  -t --timestamp <date time> - Package timestamp (last change)"
  err "		default: $PACKAGE_DATE (date -R)"
  err "  -v --version <version>     - Package version"
  err "		default: $PACKAGE_VERSION (latest Git tag)"
  err
  exit 1
}

mkdir_cd () { try mkdir -p "$1"; try cd "$1"; }

######################################################################
# main()

QUIET=false
SIGN=false

TOP=$(git rev-parse --show-toplevel 2> /dev/null)
test -z "$TOP" && TOP=$PWD

DEB="$TOP/deb"
PACKAGE_VERSION=""
AUTHOR_NAME="Solarflare Linux maintainers"
AUTHOR_EMAIL="linux-net-drivers@solarflare.com"
# AUTHOR_NAME="$(cd "${TOP}"; git config user.name)"
# AUTHOR_EMAIL="$(cd "${TOP}"; git config user.email)"
PACKAGE_DATE="$(date -R)"

if [ -d "${TOP}/.git" ] && [ "${USE_BASE_DRIVER_VERSION}" == "" ]; then
	PACKAGE_VERSION=$(cd "${TOP}"; git describe --tags --match 'v*' HEAD | sed 's/^v//; s/_/./g')
else
	PACKAGE_VERSION=$(grep EFX_DRIVER_VERSION "${TOP}/drivers/net/ethernet/sfc/net_driver.h" | cut -d\" -f2)
fi

while [ $# -gt 0 ]; do
	case "$1" in
	-d|--dest)	DEB="$2"; shift
		;;
	-e|--email)	AUTHOR_EMAIL="$2"; shift
		;;
	-n|--name)	AUTHOR_NAME="$2"; shift
		;;
	-q|--quiet)	QUIET=true
		;;
	-s|--sign)	SIGN=true
		;;
	-t|--timestamp)	PACKAGE_DATE="$2"; shift
		;;
	-v|--version)	PACKAGE_VERSION="$2"; shift
		;;
	-*)		usage
		;;
	*)		break
		;;
	esac
	shift
done

# Prepare.
if [ -d $TOP/.git2 ]; then
	test -z "$(cd "${TOP}"; git status --porcelain)" || fail "The working directory is not clean";
fi

# Env var EFAB_VERSION is used by other scripts called by this.
export EFAB_VERSION="$PACKAGE_VERSION"
[[ "${QUIET}" != "true" ]] && echo Version: $PACKAGE_VERSION

INITIAL_DIRECTORY="$(pwd)"
trap "cd $INITIAL_DIRECTORY" EXIT

# Create directories.
mkdir -p "${DEB}/staging"

# This cleans up a lot of stuff, it seems.
cd "${TOP}"
try git archive --format=tar --prefix=sfc/ -o "${DEB}/staging/sfc.tar" HEAD

# Extract source files.
cd "${DEB}/staging"
try tar xf sfc.tar

# Add Debian control files
try cp -R "$TOP/scripts/deb/debian" debian
cd debian

# changelog substitutions
sed -i -e "s/%VERSION HERE%/${PACKAGE_VERSION}/g" changelog
sed -i -e "s/%NAME HERE%/${AUTHOR_NAME}/g" changelog
sed -i -e "s/%EMAIL HERE%/${AUTHOR_EMAIL}/g" changelog
sed -i -e "s/%DATE HERE%/${PACKAGE_DATE}/g" changelog

# control substitutions
sed -i -e "s/%NAME HERE%/${AUTHOR_NAME}/g" control
sed -i -e "s/%EMAIL HERE%/${AUTHOR_EMAIL}/g" control

# Build package
cd ..

if [[ "${SIGN}" == "true" ]]; then
	try dpkg-buildpackage
else
	try dpkg-buildpackage -us -uc
fi

# Boast about results
if [[ "${QUIET}" != "true" ]]; then
	cd ..
	pwd
	ls -la

	if [[ "${SIGN}" != "true" ]]; then
		err "\033[31m"
		err "i)  Please use the runbench build-queue for customer releases (for consistency and to ensure files are owned by root). See http://intranet/staffwiki/SwReleaseProcess#SRPM"
		err "ii) Please note that Debian packages for customers should be GPG signed as per http://intranet/staffwiki/RpmSigning#Signing_a_single_RPM_with_the_private_key_on_a_yubikey"
		err "\033[0m"
	fi
fi

exit 0
