BUILDTHREADS=${BUILDTHREADS:-1}
SDK_VERSION=${SDK_VERSION:-"Default"}
NDK_VERSION=${NDK_VERSION:-"Default"}
Configuration=${Configuration:-"Default"}
XBMC_DEPENDS_ROOT=${XBMC_DEPENDS_ROOT:-"Default"}
PATH_CHANGE_REV_FILENAME=".last_success_revision"
FAILED_BUILD_FILENAME=".last_failed_revision"
#TARBALLS ENV-VAR is only used by android scripts atm
TARBALLS=${TARBALLS:-"/opt/xbmc-tarballs"}

BINARY_ADDONS_ROOT=tools/depends/target
BINARY_ADDONS="binary-addons"
DEPLOYED_BINARY_ADDONS="-e addons"

#set platform defaults
#$XBMC_PLATFORM_DIR matches the platform subdirs!
case $XBMC_PLATFORM_DIR in
  atv2)
    DEFAULT_SDK_VERSION=8.1
    DEFAULT_XBMC_DEPENDS_ROOT=$WORKSPACE/tools/depends/xbmc-depends
    DEFAULT_CONFIGURATION="Debug"
    ;;

  ios)
    DEFAULT_SDK_VERSION=8.1
    DEFAULT_XBMC_DEPENDS_ROOT=$WORKSPACE/tools/depends/xbmc-depends
    DEFAULT_CONFIGURATION="Debug"
    ;;

  osx32)
    DEFAULT_SDK_VERSION=10.10
    DEFAULT_XBMC_DEPENDS_ROOT=$WORKSPACE/tools/depends/xbmc-depends
    DEFAULT_CONFIGURATION="Debug"
    ;;

  osx64)
    DEFAULT_SDK_VERSION=10.10
    DEFAULT_XBMC_DEPENDS_ROOT=$WORKSPACE/tools/depends/xbmc-depends
    DEFAULT_CONFIGURATION="Debug"
    ;;

  android)
    DEFAULT_SDK_VERSION="17"
    DEFAULT_NDK_VERSION="10d"
    DEFAULT_XBMC_DEPENDS_ROOT=$WORKSPACE/tools/depends/xbmc-depends
    DEFAULT_CONFIGURATION="Debug"
    ;;

  linux*)
    DEFAULT_XBMC_DEPENDS_ROOT=$WORKSPACE/tools/depends/xbmc-depends
    DEFAULT_CONFIGURATION="Debug"
  ;;

  rbpi)
    JENKINS_RBPI_DEVENV=${JENKINS_RBPI_DEVENV:-"/home/jenkins/rbpi-dev"}
    DEFAULT_XBMC_DEPENDS_ROOT=$WORKSPACE/tools/depends/xbmc-depends
    DEFAULT_CONFIGURATION="Debug"
  ;;
esac

if [ "$SDK_VERSION" == "Default" ]
then
  SDK_VERSION=$DEFAULT_SDK_VERSION
fi

if [ "$NDK_VERSION" == "Default" ]
then
  NDK_VERSION=$DEFAULT_NDK_VERSION
fi 

if [ "$XBMC_DEPENDS_ROOT" == "Default" ]
then
  XBMC_DEPENDS_ROOT=$DEFAULT_XBMC_DEPENDS_ROOT
fi

if [ "$Configuration" == "Default" ]
then
  Configuration=$DEFAULT_CONFIGURATION
fi

#helper functions

#hash a dir based on the git revision, SDK_PATH, NDK_PATH, NDK_VERSION, SDK_VERSION, TOOLCHAIN TOOLCHAIN_X86 (for droidx86) and XBMC_DEPENDS_ROOT
#param1 path to be hashed
function getBuildHash ()
{
  local checkPath
  checkPath="$1"
  local hashStr
  hashStr="$(git rev-list HEAD --max-count=1  -- $checkPath)"
  hashStr="$hashStr $SDK_PATH $NDK_PATH $NDK_VERSION $SDK_VERSION $TOOLCHAIN $TOOLCHAIN_X86 $XBMC_DEPENDS_ROOT"
  echo $hashStr
}

#param1 path to be checked for changes
function pathChanged ()
{
  local ret
  local checkPath
  ret="0"
  #no optims in release builds!
  if [ "$Configuration" == "Release" ]
  then
    echo "1"
    return
  fi

  checkPath="$1"
  if [ -e $checkPath/$PATH_CHANGE_REV_FILENAME ]
  then
    if [ "$(cat $checkPath/$PATH_CHANGE_REV_FILENAME)" != "$(getBuildHash $checkPath)" ]
    then
      ret="1"
    fi
  else
    ret="1"
  fi
  
  echo $ret
}

#param1 path to be tagged with hash
function tagSuccessFulBuild ()
{
  local pathToTag
  pathToTag="$1"
  # tag last successful build with revisions of the given dir
  # needs to match the checks in function getBuildHash
  echo "$(getBuildHash $pathToTag)" > $pathToTag/$PATH_CHANGE_REV_FILENAME
}

#param1 path to be tagged with hash
function tagFailedBuild ()
{
  local pathToTag
  pathToTag="$1"
  # tag last failed build with revisions of the given dir
  # needs to match the checks in function getBuildHash
  echo "$(getBuildHash $pathToTag)" > $pathToTag/$FAILED_BUILD_FILENAME
}

function getBranchName ()
{
  local branchName
  branchName=`git symbolic-ref HEAD 2>/dev/null || echo detached`

  if [ "$branchName" != "detached" ] # if we are not detached
  then
    #we are attached - use the branchname then
    if echo $branchName | grep pr 2>&1 > /dev/null
    then
      #if this is a pull request branch - fetch the pr number and prefix with "PR"
      #refs/heads/number/head
      echo PR$(echo $branchName | awk '{gsub(".*/pr/","");print $1}' | awk '{gsub("/.*","");print $1}')
    else
      #if we are on a normal branch - fetch branchname
      #refs/heads/branchname
      echo $branchName | awk '{gsub(".*/","");print $1}'
    fi
  else
    #if we are in detached head state
    #fetch the first non-pullrequest branch we can find with HEAD
    #also only grep in remotes that match current GITHUB_REPO
    git branch -r --contains HEAD | sed "/origin\/pr\//d" | grep $GITHUB_REPO | head -n1 | awk '{gsub(".*/","");print $1}'
  fi
}

function getBuildRevDateStr ()
{
  local revStr
  #fetch date-rev
  revStr=`git --no-pager log --abbrev=7 -n 1 --pretty=format:"%h %ci" HEAD | awk '{gsub("-", "");print $2"-"$1}' 2>/dev/null`
  if [ "$?" == "0" ]
  then
    #fetch the first branch containing head
    revStr=$revStr"-"$(getBranchName)
    if [ "$?" == "0" ]
    then
      echo $revStr
    else
      echo "Unknown"
    fi
  else
    echo "Unknown"
  fi
}
