#!/bin/sh

# ONLY USE A PREFIX YOU ARE CONFIDENT YOU CAN WIPE OUT ENTIRELY
CI_INSTALL_PREFIX=/opt/spqlios
CI_REPO_URL=https://spq-dav.algonics.net/ci
WORKDIR=`pwd`
if [ "x$DESTDIR" = "x" ]; then
  DESTDIR=/
else
  mkdir -p $DESTDIR
  DESTDIR=`realpath $DESTDIR`
fi
DIR=`dirname "$0"`
cd $DIR/..
DIR=`pwd`

FULL_UNAME=`uname -a | tr '[A-Z]' '[a-z]'`
HOST=`echo $FULL_UNAME | sed 's/ .*//'`
ARCH=none
case "$HOST" in 
  *linux*)
    DISTRIB=`lsb_release -c | awk '{print $2}' | tr '[A-Z]' '[a-z]'`
    HOST=linux-$DISTRIB
    ;;
  *darwin*)
    HOST=darwin
    ;;
  *mingw*|*msys*)
    DISTRIB=`echo $MSYSTEM | tr '[A-Z]' '[a-z]'`
    HOST=msys64-$DISTRIB
    ;;
  *)
    echo "Host unknown: $HOST";
    exit 1
esac
case "$FULL_UNAME" in 
  *x86_64*)
    ARCH=x86_64
    ;;
  *aarch64*)
    ARCH=aarch64
    ;;
  *arm64*)
    ARCH=arm64
    ;;
  *)
    echo "Architecture unknown: $FULL_UNAME";
    exit 1
esac
UNAME="$HOST-$ARCH"
CMH=
if [ -d lib/spqlios/.git ]; then
  CMH=`git submodule status | sed 's/\(..........\).*/\1/'`
else
  CMH=`git rev-parse HEAD | sed 's/\(..........\).*/\1/'`
fi
FNAME=spqlios-arithmetic-$CMH-$UNAME.tar.gz

cat <<EOF
================= CI MINI-PACKAGER ==================
Work Dir:       WORKDIR=$WORKDIR
Spq Dir:        DIR=$DIR
Install Root:   DESTDIR=$DESTDIR
Install Prefix: CI_INSTALL_PREFIX=$CI_INSTALL_PREFIX
Archive Name:   FNAME=$FNAME
CI WebDav:      CI_REPO_URL=$CI_REPO_URL
=====================================================
EOF

if [ "x$1" = "xcreate" ]; then
  rm -rf dist
  cmake -B build -S . -DCMAKE_INSTALL_PREFIX="$CI_INSTALL_PREFIX" -DCMAKE_BUILD_TYPE=Release -DENABLE_TESTING=ON -DWARNING_PARANOID=ON -DDEVMODE_INSTALL=ON || exit 1
  cmake --build build || exit 1
  rm -rf "$DIR/dist" 2>/dev/null
  rm -f "$DIR/$FNAME" 2>/dev/null
  DESTDIR="$DIR/dist" cmake --install build || exit 1
  if [ -d "$DIR/dist$CI_INSTALL_PREFIX" ]; then
    tar -C "$DIR/dist" -cvzf "$DIR/$FNAME" .
  else
    # fix since msys can mess up the paths
    REAL_DEST=`find "$DIR/dist" -type d -exec test -d "{}$CI_INSTALL_PREFIX" \; -print`
    echo "REAL_DEST: $REAL_DEST"
    [ -d "$REAL_DEST$CI_INSTALL_PREFIX" ] && tar -C "$REAL_DEST" -cvzf "$DIR/$FNAME" .
  fi
  [ -f "$DIR/$FNAME" ] || { echo "failed to create $DIR/$FNAME"; exit 1; }
  [ "x$CI_CREDS" = "x" ] && { echo "CI_CREDS is not set: not uploading"; exit 1; }
  curl -u "$CI_CREDS" -T "$DIR/$FNAME" "$CI_REPO_URL/$FNAME"
fi

if [ "x$1" = "xinstall" ]; then
  [ "x$CI_CREDS" = "x" ] && { echo "CI_CREDS is not set: not downloading"; exit 1; }
  # cleaning
  rm -rf "$DESTDIR$CI_INSTALL_PREFIX"/* 2>/dev/null
  rm -f "$DIR/$FNAME" 2>/dev/null
  # downloading
  curl -u "$CI_CREDS" -o "$DIR/$FNAME" "$CI_REPO_URL/$FNAME"
  [ -f "$DIR/$FNAME" ] || { echo "failed to download $DIR/$FNAME"; exit 0; }
  # installing
  mkdir -p $DESTDIR
  tar -C "$DESTDIR" -xvzf "$DIR/$FNAME"
  exit 0
fi
