#!/bin/bash
########################################################################
#
# Copyright 2016 Keith Busch
#
# Permission is hereby granted, free of charge, to any person obtaining a
# copy of this software and associated documentation files (the "Software"),
# to deal in the Software without restriction, including without limitation
# the rights to use, copy, modify, merge, publish, distribute, sublicense,
# and/or sell copies of the Software, and to permit persons to whom the
# Software is furnished to do so, subject to the following conditions:
#
# The above copyright notice and this permission notice shall be included
# in all copies or substantial portions of the Software.
#
# THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS
# OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
# FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL
# THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR
# OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE,
# ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR
# OTHER DEALINGS IN THE SOFTWARE.
#
# Forked off of nvme-cli:
#   https://github.com/linux-nvme/nvme-cli/
#
########################################################################

OBJDIR=${OBJDIR:-.}
GVF=$OBJDIR/version.h
DEF_VER=???

LF='
'

# First see if there is a version file (included in release tarballs),
# then try git-describe, then default.
if test -f version; then
	VN=$(cat version) || VN="$DEF_VER"
elif test -d .git -o -f .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.]*\)')

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 -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
}
