#!/bin/sh

GVF="none"
DEF_VER="v0.2.5"
TOUCH_GVF="no"

LF='
'
curdir="`pwd`" || exit 1

# usage: git-version-gen [srcdir [builddir/version.mk]]
srcdir="."
if test "x${1}" != "x"
then
	srcdir="${1}"
fi
if test "x${2}" != "x"
then
	GVF="${2}"
fi

# First see if there is a version file (included in release tarballs),
# then try git-describe, then default.
cd "${srcdir}" || exit 1
if test -f version
then
	VN="`cat version`" || VN="${DEF_VER}"
	TOUCH_GVF="yes"
elif test -d .git -o -f .git &&
	VN="`git describe --match "v[0-9]*" --abbrev=5 HEAD 2>/dev/null`" &&
	case "${VN}" in
	*"${LF}"*) (exit 1) ;;
	v[0-9]*)
		git update-index -q --refresh
		test -z "`git diff-index --name-only HEAD --`" ||
		VN="${VN}-dirty" ;;
	esac
then
	# convert "v0.4.0-32-gf350f" to "v0.4.0.git32.f350f"
	VN="`echo "${VN}" | sed -e 's/-\([0-9]*\)-g/.git\1./g' -e 's/-/./g'`";
else
	VN="${DEF_VER}"
fi
cd "${curdir}" || exit 1

VN="`expr "${VN}" : v*'\(.*\)'`"

if test -r "${GVF}"
then
	VC="`sed -n -e 's/^VERSION = //p' <"${GVF}"`"
	# don't safe version file's timestamp if we overwrite an exising GVF file
	TOUCH_GVF="no"
else
	VC="unset"
fi

case "${GVF}" in
none)
	echo "${VN}"
	;;
*)
	test "${VN}" = "${VC}" || {
		echo "update ${GVF} to ${VN}" >&2
		( echo "VERSION = ${VN}"
		  echo 'PACKAGE_VERSION = $(VERSION)'
		  echo 'PACKAGE_STRING = $(PACKAGE) $(VERSION)' ) >"${GVF}"
		if test "${TOUCH_GVF}" = "yes"; then
			touch -r "${srcdir}/version" "${GVF}"
		fi
	}
	;;
esac

