#!/bin/sh

proj="iperf"

if [ "x$2" != "x" ]; then
tag=$2
else
tag=`awk '/IPERF_VERSION / {
  gsub(/"/, "", $3);
  print $3 }' src/version.h`
fi

dirname=`echo $tag $proj | awk '{
  gsub(/-ALPHA/, "a", $1);
  gsub(/-BETA/, "b", $1);
  gsub(/-RELEASE/, "", $1);
  print $2"-"$1 }'`

# echo tag $tag
# echo dirname $dirname

do_tag ()
{
    git tag -s -m "tagging $tag" $tag
}

do_tar ()
{
    tarball=${dirname}.tar.gz
    rm -f ${tarball}
    git archive --format=tar --prefix ${dirname}/ ${tag} | gzip -9 > ${tarball}

    # Compute SHA256 hash
    case `uname -s` in
	FreeBSD) sha=sha256 ;;
	Linux) sha=sha256sum ;;
	Darwin) sha="shasum -a 256" ;;
	*) sha=echo ;;
    esac
    ${sha} ${tarball} | tee ${tarball}.sha256
}

usage ()
{
    cat <<EOF
$0: tag|tar

   tag  -- create a tag
   tar  -- create a tarball from a tag

General use is to do:

./$0 tag
./$0 tar

An optional argument may be specified to both the tag and tar
subcommands to explicitly specify a tag string.  If not specified, the
contents of src/version.h are used.

EOF
}

case $1 in
    tag) do_tag ;;
    tar) do_tar ;;
    *) echo "unknown command: $1"; usage ;;
esac

exit