#!/bin/sh
''''[ ! -z $VIRTUAL_ENV ] && exec python -u -- "$0" ${1+"$@"}; command -v python3 > /dev/null && exec python3 -u -- "$0" ${1+"$@"}; exec python2 -u -- "$0" ${1+"$@"} # '''

import sys
import os
import argparse
import shutil
import tempfile
import traceback

HERE = os.path.dirname(__file__)
READIES = os.path.abspath(os.path.join(HERE, ".."))
sys.path.insert(0, READIES)
import paella  # noqa: F401

os.environ["PYTHONWARNINGS"] = 'ignore:DEPRECATION::pip._internal.cli.base_command'

#----------------------------------------------------------------------------------------------

class BazeliskeSetup(paella.Setup):
    def __init__(self, args):
        paella.Setup.__init__(self, nop=False)

    def install_bazel(self):
        cmd = r"""
#!/bin/bash

if [[ `uname -s` == Darwin ]]; then
	profile_d="$HOME/.profile.d"
else
	profile_d="/etc/profile.d"
fi
. $profile_d/golang.sh

bazverfile=$(mktemp /tmp/bazver.XXXXXX)
bazelisk version > $bazverfile 2>&1
if [[ $? == 0 ]]; then
    rm $bazverfile
    exec bazelisk "$@"
fi

curdir="$PWD"
basedir=$(mktemp -d /tmp/bazel.XXXXXX)
bazver=$(cat $bazverfile | head -1 | cut -f4 -d" " | cut -d/ -f4)
bazfullver=$(cat $bazverfile | head -1 | cut -f4 -d" " | cut -d/ -f6 | sed -e 's/\.\.\.$//')
cd $basedir
wget -q -O bazel-dist.zip https://github.com/bazelbuild/bazel/releases/download/$bazver/bazel-${bazver}-dist.zip
unzip -q bazel-dist.zip -d bazel-dist
cd bazel-dist
EXTRA_BAZEL_ARGS="--host_javabase=@local_jdk//:jdk" ./compile.sh
if [[ $(uname -s) == Darwin ]]; then
    cachedir=$HOME/Library/Caches
else
    cachedir=$HOME/.cache
fi
bazdir="$cachedir/bazelisk/downloads/bazelbuild/${bazfullver}/bin/"
mkdir -p "$bazdir"
cp output/bazel "$bazdir"

cd $curdir
rm -rf $basedir $bazverfile
exec bazelisk "$@"

"""
        paella.fwrite('/tmp/bazel', cmd[1:])
		self.run("cp /tmp/bazel /usr/local/bin/bazel", sudo=True)
        self.run("chmod +x /usr/local/bin/bazel", sudo=True)

    #------------------------------------------------------------------------------------------

    def common_first(self):
        self.install_downloaders()
        if self.os != 'macos':
            self.install("sudo")
        self.install("git unzip zip rsync")

        self.run("%s/bin/getgolang" % READIES, sudo=True)

    def debian_compat(self):
        self.install("software-properties-common pkg-config")
        self.install("build-essential swig libcurl3-dev libfreetype6-dev libhdf5-serial-dev libzmq3-dev zlib1g-dev python3-dev")
        jdk_installed = self.install("openjdk-11-jdk openjdk-11-jre-headless", _try=True, output=False) == 0
        if not jdk_installed:
            self.install("openjdk-8-jdk openjdk-8-jre-headless")

        if self.osnick == 'trusty':
            self.run("add-apt-repository -y ppa:ubuntu-toolchain-r/test", sudo=True)
            self.run("apt-get -qq update", sudo=True)
            self.install("gcc-7 g++-7")
            self.run("update-alternatives --install /usr/bin/gcc gcc /usr/bin/gcc-7 60 --slave /usr/bin/g++ g++ /usr/bin/g++-7", sudo=True)
            self.run("update-alternatives --config gcc", sudo=True)

    def redhat_compat(self):
        self.group_install("'Development Tools'")
        self.install("swig libcurl-devel freetype-devel") # hdf5-serial-devel zmq3-devel zlib1g-devel python3-devel")
        self.install("java-1.8.0-openjdk java-1.8.0-openjdk-headless")

    def fedora(self):
        self.redhat_compat()

    def macos(self):
        if sh('xcode-select -p') == '':
            fatal("Xcode tools are not installed. Please run xcode-select --install.")

    def common_last(self):
        self.run(". {PROFILE_D}/golang.sh; go get github.com/bazelbuild/bazelisk".format(PROFILE_D=self.profile_d))
        self.install_bazel()

#----------------------------------------------------------------------------------------------

parser = argparse.ArgumentParser(description='Install Bazel')
args = parser.parse_args()

try:
    BazeliskeSetup(args).setup()
except Exception as x:
    traceback.print_exc()
    fatal(str(x))

exit(0)
