#!/bin/bash
set -euo pipefail

readonly scriptDir=$(dirname $0)
source $scriptDir/gamename.sh

readonly tmpDir=/tmp/deliver-$$
trap "rm -rf $tmpDir" EXIT
mkdir -p $tmpDir

function main
{
  echo "Delivering [$NAME]"
  #make clean
  #./check
  deliverBinaryVersion
}

function deliverBinaryVersion
{
  local N=$NAME
  local version="$(date +"%Y%m%d")_$(git rev-parse HEAD)"

  mkdir $tmpDir/$N

  echo "Version: $version"

  echo "-------------------------------------"
  echo "Building binaries"

  # Windows binaries
  BIN_WIN=$tmpDir/bin/w64
  CXXFLAGS+=-O3 \
  BIN=$BIN_WIN \
    ./scripts/w64-make -j`nproc` \
    VERSION="$version" \
    $BIN_WIN/rel/game.exe \
    >/dev/null

  gccVersion=$(x86_64-w64-mingw32-g++ -dumpversion)

  cp $BIN_WIN/rel/game.exe                                           $tmpDir/$N/$N.exe
  cp /usr/x86_64-w64-mingw32/lib/libwinpthread-1.dll                 $tmpDir/$N
  cp /usr/lib/gcc/x86_64-w64-mingw32/$gccVersion/libstdc++-6.dll     $tmpDir/$N
  cp /usr/lib/gcc/x86_64-w64-mingw32/$gccVersion/libgcc_s_seh-1.dll  $tmpDir/$N
  cp /opt/envs/x86_64-w64-mingw32/bin/SDL2.dll                       $tmpDir/$N

  # GNU/Linux binaries
  CXXFLAGS="-include extra/glibc_version.h -O3" \
  BIN=$tmpDir/bin/gnu \
    make -j`nproc` \
    VERSION="$version" \
    >/dev/null

  echo -n "Game required GLIBC: "
  nm -D $tmpDir/bin/gnu/rel/game.exe | grep GLIBC_ | sed 's/.*GLIBC_//g' | sort -Vru | head -n 1

  cp -a $tmpDir/bin/gnu/rel/game.exe                                 $tmpDir/$N/$N.x86_64

  # Strip executables
  strip -s $tmpDir/$N/*.{exe,dll,x86_64}

  # Compress executables
  upx -9 $tmpDir/$N/*.{exe,dll,x86_64}

  echo "$version" > "$tmpDir/$N/version.txt"

  # Copy data
  cp -a res                                                        $tmpDir/$N/res

  (
    cd $tmpDir
    zip -q $N.zip -r $N
  )

  cp $tmpDir/$N.zip /tmp/
  du -hs /tmp/$N.zip
}

main
