#!/bin/bash
ROOTDIR=$(dirname "$0")
OBJDIR=${OBJDIR:-build}
DOCDIR=${DOCDIR:-$ROOTDIR/doc}
GVF=$OBJDIR/version.h
MVF=$OBJDIR/version.mk
DEF_VER=???

LF='
'

# First see if there is a version file (included in release tarballs),
# then try git-describe, then default.
if test -f $ROOTDIR/version; then
	VN=$(cat version) || VN="$DEF_VER"
elif test -d $ROOTDIR/.git -o -f $ROOTDIR/.git; then
    VN=$(git describe --always --tags --match "v[0-9]*" HEAD 2>/dev/null)

    git update-index -q --refresh
    test -z "$(git diff-index --name-only HEAD --)" ||
        VN="$VN-dirty"
else
	VN="$DEF_VER"
fi

VN=$(expr "$VN" : v*'\(.*\)')
MVN=$(expr "$VN" : v*'\([0-9.]*\)')
RVN=$(expr "$VN" : v*'[0-9.]*\-\(.*\)')
test -n "$RVN" && RDVN=0.$(echo "$RVN" | sed -e 's/-/./g') || RDVN="1"

VN_RE='^([0-9]+)\.([0-9]+)(.([0-9]+))?(-rc[0-9]+)?(-([0-9]+)-g([A-Za-z0-9]+))?'
if [[ $VN =~ $VN_RE ]]; then
    MAJOR=${BASH_REMATCH[1]}
    MINOR=${BASH_REMATCH[2]}
    PATCH=${BASH_REMATCH[4]}
    if [[ "$PATCH" -eq "" ]]; then
        PATCH=0
    fi
    SINCE_TAG=${BASH_REMATCH[7]}
    if [[ "$SINCE_TAG" -eq "" ]]; then
        SINCE_TAG=0
    fi
else
    MAJOR=0
    MINOR=0
    SINCE_TAG=0
fi


if test -d $OBJDIR; then

	if test -r $GVF; then
		VC=$(head -n1 $GVF | sed -e 's/^#define VERSION //')
		VC="${VC%\"}"
		VC="${VC#\"}"
	else
		VC=unset
	fi

	test "$VN" = "$VC" || {
		echo "  VER   $VN"
		echo "#define VERSION \"$VN\"" >$GVF
		echo "#define MAJOR $MAJOR" >>$GVF
		echo "#define MINOR $MINOR" >>$GVF
		echo "#define PATCH $PATCH" >>$GVF
		echo "#define SINCE_TAG $SINCE_TAG" >>$GVF

		echo "VERSION=$MVN" >$MVF
		echo "FULL_VERSION=$VN" >>$MVF
		echo "MAJOR_VER=$MAJOR" >>$MVF
		echo "RELEASE=$RDVN" >>$MVF
	}
fi

echo "PROJECT_NUMBER = \"$VN\"" > $DOCDIR/version
