#!/bin/bash
#
# This script sets up a Kokoro MacOS worker for running Protobuf tests

set -eux

##
# Select Xcode version

# Remember to update the Xcode version when Xcode_11.3.app is not available.
# If xcode is not available, it will probably encounter the failure for
# "autom4te: need GNU m4 1.4 or later: /usr/bin/m4"
# go/kokoro/userdocs/macos/selecting_xcode.md for more information.
export DEVELOPER_DIR=/Applications/Xcode_11.3.app/Contents/Developer

##
# Select C/C++ compilers

export CC=gcc
export CXX=g++

##
# Brew: update, then upgrade the installed tools to current version and install
# some needed ones not in the Kokoro base image. This ensure current versions
# of CMake, autotools, etc.

# But first...
#
# The transitive deps of the installed tools need protobuf, but Kokoro manually
# installed it outside of brew so it needs to be removed so brew can install the
# tools (and a newer version of protobuf). g/kokoro-users/7FRvQMUdN40 about why
# it is a manual install vs. a brew install in the first place.
sudo rm -rf \
    /usr/local/include/google/protobuf \
    /usr/local/bin/protoc
# Likewise, updating python can have issues because of some existing binaries.
sudo rm -rf \
    /usr/local/bin/2to3* \
    /usr/local/bin/idle3* \
    /usr/local/bin/pip3 \
    /usr/local/bin/pydoc3* \
    /usr/local/bin/python3* \
    /usr/local/bin/pyvenv*

git -C /usr/local/Homebrew/Library/Taps/homebrew/homebrew-core fetch --unshallow
git -C /usr/local/Homebrew/Library/Taps/homebrew/homebrew-cask fetch --unshallow

brew update
brew upgrade

##
# Install Ruby

if [[ "${KOKORO_INSTALL_RUBY:-}" == "yes" ]] ; then
  brew install ruby
fi

##
# Install Cocoapods

if [[ "${KOKORO_INSTALL_COCOAPODS:-}" == "yes" ]] ; then
  # The existing cocoapods was installed via gem, but that doesn't work well
  # with the overlap in deps with things managed by brew (errors around ruby
  # versions, etc.); so remove it and install in via brew instead.
  gem uninstall -a "$(gem list | grep cocoapods | cut -d ' ' -f 1)"
  brew install cocoapods
fi

##
# Install Tox

if [[ "${KOKORO_INSTALL_TOX:-}" == "yes" ]] ; then
  sudo python3 -m pip install --upgrade pip tox
fi

##
# Install RVM

if [[ "${KOKORO_INSTALL_RVM:-}" == "yes" ]] ; then
  curl -sSL https://rvm.io/mpapis.asc | gpg --import -
  curl -sSL https://rvm.io/pkuczynski.asc | gpg --import -

  curl -sSL https://get.rvm.io | bash -s master --ruby
fi
