#!/usr/bin/env bash

# Make sure we're running from the root git repository, not whatever submodule
# we could have been called from.
pushd $(dirname "$0") > /dev/null

VERSION=$(perl -e 'while(<>){print $1 if (/^PACKAGE_VERSION='\''(.+)'\''$/)}' < configure)
BUILDNUMBER=dev

# Call git describe, and convert it to a semi-semantic version, like
# 5.0.0-alpha.0+dev.52.g123abc
generate_dev_version() {
    git describe | perl -pe 's/(.*)-([0-9]*)-(g[0-9a-f]*)/\1+dev.\2.\3/'
}

# If we are in a Git repository and have git installed, build the version
# string using the latest tag in case it's reachable
if type git >/dev/null 2>&1 && [ -d '.git' ] ; then

	# Check for tag reachability, in case of shallow clones we might not
	# be able to use git describe since the commit which was tagged is
	# unreachable even if we have pulled the tags. If we can reach it,
	# overwrite the VERSION from autoconf with the output, else append
	# HEAD commit info
	if git describe >/dev/null 2>&1 ; then
		VERSION=$(generate_dev_version)
	else
		VERSION+=+
		VERSION+=$(git rev-parse --short HEAD)
	fi
# If not a git repository and VERSION file exists, use version string from file.
elif [[ -s ./VERSION ]]; then
	VERSION=$(awk -F' build ' '{print $1}' ./VERSION)
	BUILDNUMBER=$(awk -F' build ' '{print $2}' ./VERSION)
fi

FLAG="${1:-noflag}"
if [ "$FLAG" = '--short' ] ; then
    echo "${VERSION}"
else
    if [[ ${BUILDNUMBER} = 'dev' && -f BUILD_NUMBER ]] ; then
        BUILDNUMBER=`cat BUILD_NUMBER`
    fi
    echo "${VERSION} build ${BUILDNUMBER}"
fi
popd > /dev/null
