CURRENT_SOURCE_DIR=$1
CURRENT_BINARY_DIR=$2
BUILD_TYPE=$3
BUILD_PLATFORM=$4

echo "Current source dir: $CURRENT_SOURCE_DIR"
echo "Current binary dir: $CURRENT_BINARY_DIR"
echo "Build type: $BUILD_TYPE"
echo "Build platform: $BUILD_PLATFORM"

if [[ -e "$CURRENT_SOURCE_DIR/BuildInfo.h" ]]
then
	echo "Using existing BuildInfo.h"
	cp $CURRENT_SOURCE_DIR/BuildInfo.h $CURRENT_BINARY_DIR/BuildInfo.h.tmp
else
	if [[ -e "$CURRENT_SOURCE_DIR/.git" ]]
	then
		ETH_COMMIT_HASH=$(git --git-dir=$CURRENT_SOURCE_DIR/.git --work-tree=$CURRENT_SOURCE_DIR rev-parse HEAD)
		ETH_LOCAL_CHANGES=$(git --git-dir=$CURRENT_SOURCE_DIR/.git --work-tree=$CURRENT_SOURCE_DIR diff --shortstat)
		if [[ -z "$ETH_LOCAL_CHANGES" ]]
		then
			ETH_CLEAN_REPO=1
		else
			ETH_CLEAN_REPO=0
		fi

		echo "Commit hash: ${ETH_COMMIT_HASH} (Clean: ${ETH_CLEAN_REPO} - ${ETH_LOCAL_CHANGES})"
	else
		echo "Unknown repo."
		ETH_COMMIT_HASH=0
		ETH_CLEAN_REPO=1
	fi

	echo "// This file was automatically generated by cmake" > $CURRENT_BINARY_DIR/BuildInfo.h.tmp
	echo "" >> $CURRENT_BINARY_DIR/BuildInfo.h.tmp
	echo "#pragma once" >> $CURRENT_BINARY_DIR/BuildInfo.h.tmp
	echo "" >> $CURRENT_BINARY_DIR/BuildInfo.h.tmp
	echo "#define ETH_COMMIT_HASH $ETH_COMMIT_HASH" >> $CURRENT_BINARY_DIR/BuildInfo.h.tmp
	echo "#define ETH_CLEAN_REPO $ETH_CLEAN_REPO" >> $CURRENT_BINARY_DIR/BuildInfo.h.tmp
	echo "#define ETH_BUILD_TYPE $BUILD_TYPE" >> $CURRENT_BINARY_DIR/BuildInfo.h.tmp
	echo "#define ETH_BUILD_PLATFORM $BUILD_PLATFORM" >> $CURRENT_BINARY_DIR/BuildInfo.h.tmp
fi

if [[ -e "$CURRENT_BINARY_DIR/BuildInfo.h" ]]
then
	DIFF=$(diff $CURRENT_BINARY_DIR/BuildInfo.h $CURRENT_BINARY_DIR/BuildInfo.h.tmp)
	if [[ -z "$DIFF" ]]
	then
		rm $CURRENT_BINARY_DIR/BuildInfo.h.tmp
	else
		mv $CURRENT_BINARY_DIR/BuildInfo.h.tmp $CURRENT_BINARY_DIR/BuildInfo.h
	fi
else
	mv $CURRENT_BINARY_DIR/BuildInfo.h.tmp $CURRENT_BINARY_DIR/BuildInfo.h
fi