#!/bin/bash
# Copyright (c) Facebook, Inc. and its affiliates.
#
# This source code is licensed under the MIT license found in the
# LICENSE file in the root directory of this source tree.

# source this script to import its utility functions

opam_retry () {
  "$@" || {
    echo >&2;
    printf '*** `%s` failed\n' "$*" >&2;
    echo '*** Updating opam then retrying' >&2;
    opam update &&
    "$@" || {
      echo >&2;
      printf '*** ERROR: `%s` failed\n' "$*" >&2;
      exit 1
    }
  }
}

opam_failed () {
    local command=$1
    echo
    printf '*** ERROR: %s failed\n' "$command" >&2
    printf "*** ERROR: Try running \$(opam update) then running this script again\n" >&2
    exit 1
}

opam_require_version_2 () {
    local status=0
    local version=0
    { version=$(opam --version 2>/dev/null); status=$?; }
    if [ "$status" != 0 ]; then
        printf '*** ERROR: `opam --version` failed, please install opam version 2\n' >&2
        env >&2
        exit 1
    fi
    case $version in
        2*) ;;
        *)
            printf '*** ERROR: opam version "%s" is not supported, please install opam version 2\n' "$version" >&2
            printf '*** NOTE: opam is "%s"\n' "$(which opam)" >&2
            env >&2
            exit 1
    esac
}

# assumes opam is available and initialized
opam_switch_create_if_needed () {
    local switch=$1
    local compiler=$2
    local switch_exists=no
    for installed_switch in $(opam switch list --short); do
        if [ "$installed_switch" == "$switch" ]; then
            switch_exists=yes
            break
        fi
    done
    if [ "$switch_exists" = "no" ]; then
        opam switch create "$switch" "$compiler"
    fi
}

opam_require_version_2