#!/bin/sh
# SPDX-License-Identifier: (GPL-2.0-or-later OR BSD-2-Clause)
#
#  gitversion - a script to generate a header with the git revision
#  Copyright (C) 2018  Viktor Rosendahl <viktor.rosendahl@gmail.com>
#
#  This file is dual licensed: you can use it either under the terms of
#  the GPL, or the BSD license, at your option.
#
#   a) This program is free software; you can redistribute it and/or
#      modify it under the terms of the GNU General Public License as
#      published by the Free Software Foundation; either version 2 of the
#      License, or (at your option) any later version.
#
#      This program is distributed in the hope that it will be useful,
#      but WITHOUT ANY WARRANTY; without even the implied warranty of
#      MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
#      GNU General Public License for more details.
#
#      You should have received a copy of the GNU General Public
#      License along with this library; if not, write to the Free
#      Software Foundation, Inc., 51 Franklin St, Fifth Floor, Boston,
#      MA 02110-1301 USA
#
#  Alternatively,
#
#   b) Redistribution and use in source and binary forms, with or
#      without modification, are permitted provided that the following
#      conditions are met:
#
#      1. Redistributions of source code must retain the above
#         copyright notice, this list of conditions and the following
#         disclaimer.
#      2. Redistributions in binary form must reproduce the above
#         copyright notice, this list of conditions and the following
#         disclaimer in the documentation and/or other materials
#         provided with the distribution.
#
#      THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND
#      CONTRIBUTORS "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES,
#      INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF
#      MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
#      DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR
#      CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
#      SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT
#      NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;
#      LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)
#      HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN
#      CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR
#      OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE,
#      EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
#


usage()
{
    echo "usage $0 --input <infile> --output <outfile>"
}

errmsg()
{
    echo $1
    exit 1
}

if [ $# -lt 4 ];then
    usage
    exit 1
fi

output_file=""
input_file=""

while [ $# -gt 1 ]
do
    case $1 in
        -h | --help )
            usage
            exit 0
            ;;
        -i | --input )
            if [ $# -lt 2 ];then
                usage
                exit 1
            fi
	    input_file=$2
            ;;
        -o | --output )
            if [ $# -lt 2 ];then
                usage
                exit 1
            fi
            output_file=$2
            ;;
        * )
            usage
            exit 1
            ;;
    esac
    shift 2
done

if [ "x" = "x"$input_file ];then
    echo "Error empty input file name"
    exit 1
fi

if [ "x" = "x"$output_file ];then
    echo "Error empty output file name"
    exit 1
fi

if [ ! -e $input_file ];then
    echo "Input file "$input_file" does not exist"
    exit 1
fi

if [ ! -f $input_file ];then
    echo "Input file "$input_file" is not a regular file"
    exit 1
fi

echo "x" > $output_file || errmsg "Cannot write to "$output_file

if [ "x"$(which git) != "x" ];then
    GIT_REVISION=$(git rev-parse --verify --short HEAD||echo '')

    if [ "x"$GIT_REVISION != "x" ];then
	if [ -n "$(git diff --stat)" ]; then
	    GIT_VERSION="-"$GIT_REVISION"-dirty"
	else
	    GIT_VERSION="-"$GIT_REVISION
	fi
    else
	GIT_VERSION=""
    fi
else
    GIT_VERSION=""
fi

cat $input_file|sed -e "s/__INSERT_VERSION_HERE__/$GIT_VERSION/" > $output_file
exit 0
