| #!/bin/bash |
| # Copyright 2015 The Vanadium Authors. All rights reserved. |
| # Use of this source code is governed by a BSD-style |
| # license that can be found in the LICENSE file. |
| |
| NATTEMPTS="${NATTEMPTS:-3}" |
| |
| retry() { |
| for attempt in $(seq 1 "${NATTEMPTS}"); do |
| "$@" && break |
| if [[ "${attempt}" == "${NATTEMPTS}" ]]; then |
| echo "\"$@\" failed ${NATTEMPTS} times in a row." |
| echo "This can happen if servers are unavailable," |
| echo "and is most likely a temporary problem." |
| echo "Please try again later." |
| exit 1 |
| fi |
| echo "\"$@\" failed, trying again." |
| sleep 1 |
| done |
| } |
| |
| check_environment() { |
| # Check that the JIRI_ROOT environment variable is set. |
| if [[ -z "${JIRI_ROOT}" ]]; then |
| echo "The JIRI_ROOT environment variable is not set." |
| echo "Set the environment variable and re-run." |
| exit 1 |
| fi |
| |
| # Check that the JIRI_ROOT environment variable does not contain spaces. |
| # Note: This limitation is inherited from Autotools. |
| local -r PATTERN="[ ']" |
| if [[ "${JIRI_ROOT}" =~ "${PATTERN}" ]]; then |
| echo "The JIRI_ROOT environment variable cannot contain" |
| echo "space characters." |
| exit 1 |
| fi |
| |
| # Check that the JIRI_ROOT path does not exist. |
| if [[ -e "${JIRI_ROOT}" ]]; then |
| echo "The JIRI_ROOT path already exists: ${JIRI_ROOT}" |
| echo "Remove it or choose a different path and re-run." |
| exit 1 |
| fi |
| |
| # Check that the host OS and package manager is supported. |
| case $(uname -s) in |
| "Linux") |
| apt-get -v &> /dev/null |
| if [[ "$?" -ne 0 ]]; then |
| echo "Could not find the apt-get package manager." |
| exit 1 |
| fi |
| ;; |
| "Darwin") |
| brew -v &> /dev/null |
| if [[ "$?" -ne 0 ]]; then |
| echo "Could not find the brew package manager." |
| exit 1 |
| fi |
| ;; |
| *) |
| echo "Operating system $(uname -s) is not supported." |
| exit 1 |
| esac |
| |
| # Check that Go compiler version 1.5 or newer exists on the host. |
| local -r GO_VERSION=$(go version 2> /dev/null) |
| local -r RESULT="$?" |
| local -a TOKENS=(${GO_VERSION}) |
| TOKENS=($(echo "${TOKENS[2]}" | tr '.' ' ')) |
| if [[ "${RESULT}" -ne 0 ]] || [[ "${TOKENS[0]}" -eq "go1" && "${TOKENS[1]}" -lt 5 ]]; then |
| echo "Go compiler version 1.5 or newer is required for installation." |
| echo "Install it and re-run." |
| exit 1 |
| fi |
| |
| # Check that GOPATH does not contain v.io packages. |
| local -r VANADIUM_PACKAGES=$(go list v.io/... 2> /dev/null) |
| if [[ -n "${VANADIUM_PACKAGES}" ]]; then |
| echo "Your GOPATH already contains v.io packages." |
| echo "Remove these from your GOPATH and re-run." |
| exit 1 |
| fi |
| |
| # Check that git exists on the host. |
| local -r GIT_VERSION=$(git version 2> /dev/null) |
| if [[ "$?" -ne 0 ]]; then |
| echo "The 'git' command does not exist in your PATH." |
| echo "Add it to the PATH and re-run." |
| exit 1 |
| fi |
| } |
| |
| main() { |
| check_environment |
| |
| trap "rm -rf ${JIRI_ROOT}" INT TERM EXIT |
| |
| # Run the jiri_bootstrap script. |
| curl -f -s https://raw.githubusercontent.com/vanadium/go.jiri/master/scripts/bootstrap_jiri | bash -s $JIRI_ROOT |
| |
| # Import the Vanadium public manifest. |
| pushd $JIRI_ROOT |
| $JIRI_ROOT/.jiri_root/bin/jiri import -name=manifest public https://vanadium.googlesource.com/manifest |
| |
| # Sync the Vanadium projects locally. |
| retry $JIRI_ROOT/.jiri_root/bin/jiri update |
| popd |
| |
| echo "Recommended: Add ${JIRI_ROOT}/.jiri_root/scripts to your PATH." |
| trap - EXIT |
| } |
| |
| main "$@" |