#!/usr/bin/env bash

################################################################################
#
# Driver for Xilinx network controllers and boards
# Copyright 2021 Xilinx Inc.
#
# This program is free software; you can redistribute it and/or modify it
# under the terms of the GNU General Public License version 2 as published
# by the Free Software Foundation, incorporated herein by reference.
#
################################################################################

######################################################################
# 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="$(cd "${TOP}"; git config user.name)"
AUTHOR_EMAIL="$(cd "${TOP}"; git config user.email)"
PACKAGE_DATE="$(date -R)"
SRC_BUILD=
# Signing key used by dpkg-buildpackage
test -z "$DEB_SIGN_KEYID" && DEB_SIGN_KEYID="Xilinx Inc. (Net Driver)"
export DEB_SIGN_KEYID

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 EFCT_DRIVER_VERSION "${TOP}/drivers/net/ethernet/xilinx/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
		;;
	-S|--sdeb)	SRC_BUILD=1
		;;
	-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}"
if [ -d "${TOP}/.git" ]; then
	try git archive --format=tar --prefix=xilinx-efct/ -o "${DEB}/staging/xilinx-efct.tar" HEAD
else
	try tar --transform 's%^%xilinx-efct/%' -cf "${DEB}/staging/xilinx-efct.tar" .
fi

# Extract source files.
cd "${DEB}/staging"
try tar xf xilinx-efct.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 ..

BLD_OPTS=
test -n "$SRC_BUILD" && BLD_OPTS=-S
test "${SIGN}" == "false" && BLD_OPTS="$BLD_OPTS -us -uc"
try dpkg-buildpackage $BLD_OPTS

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

	if [[ "${SIGN}" != "true" ]]; then
		err "\033[31m"
		err "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
