#!/bin/bash
# Copyright 2023 The Fuchsia Authors. All rights reserved.
# Use of this source code is governed by a BSD-style license that can be
# found in the LICENSE file.

# Bash launcher for client.py. For performance reasons, do not invoke
# any sub-command before the final "exec" call.
set -e

function die {
  echo >&2 "ERROR: $*"
  exit 1
}

# Compute parent directory without invoking any subcommand.
function parent_dir {
  printf %s "${1%/[^/]*}"
}

# Compute Fuchsia host tag without invoking any subcommand.
function fuchsia_host_tag {
  local host_os host_arch
  case "${OSTYPE}" in
    linux*)
      host_os=linux
      ;;
    darwin*)
      host_os=mac
      ;;
    *)
      die "Unknown host operating system: $OSTYPE"
      ;;
  esac
  case "${HOSTTYPE}" in
    x86_64|amd64)
      host_arch=x64
      ;;
    aarch64|arm64)
      host_arch=arm64
      ;;
    *)
      die "Unknown host CPU architecture: $HOSTTYPE"
      ;;
  esac
  echo "${host_os}-${host_arch}"
}

script_dir="$(parent_dir "${BASH_SOURCE[0]}")"
readonly script_dir
readonly fuchsia_dir="${script_dir}/../.."
host_tag="$(fuchsia_host_tag)"
readonly host_tag
readonly python_prebuilt_dir="${fuchsia_dir}/prebuilt/third_party/python3/${host_tag}"
exec "${python_prebuilt_dir}/bin/python3" -S "${script_dir}/client.py" "--host-tag=${host_tag}" "$@"
