#!/usr/bin/env bash # Copyright 2009 The Go Authors. All rights reserved. # Use of this source code is governed by a BSD-style # license that can be found in the LICENSE file. # If set to a Windows-style path convert to an MSYS-Unix # one using the built-in shell commands. if [[ "$GOROOT" == *:* ]]; then GOROOT=$(cd "$GOROOT"; pwd) fi if [[ "$GOBIN" == *:* ]]; then GOBIN=$(cd "$GOBIN"; pwd) fi export GOROOT=${GOROOT:-$(cd ..; pwd)} if ! test -f "$GOROOT"/include/u.h then echo '$GOROOT is not set correctly or not exported: '$GOROOT 1>&2 exit 1 fi # Double-check that we're in $GOROOT, for people with multiple Go trees. # Various aspects of the build cd into $GOROOT-rooted paths, # making it easy to jump to a different tree and get confused. DIR1=$(cd ..; pwd) DIR2=$(cd "$GOROOT"; pwd) if [ "$DIR1" != "$DIR2" ]; then echo 'Suspicious $GOROOT '"$GOROOT"': does not match current directory.' 1>&2 exit 1 fi export GOBIN=${GOBIN:-"$GOROOT/bin"} if [ ! -d "$GOBIN" -a "$GOBIN" != "$GOROOT/bin" ]; then echo '$GOBIN is not a directory or does not exist' 1>&2 echo 'create it or set $GOBIN differently' 1>&2 exit 1 fi export OLDPATH=$PATH export PATH="$GOBIN":$PATH MAKE=make if ! make --version 2>/dev/null | grep 'GNU Make' >/dev/null; then MAKE=gmake fi PROGS=" ar awk bash bison chmod cp cut echo egrep gcc grep ls mkdir mv pwd rm sed sort tee touch tr true uname uniq " for i in $PROGS; do if ! which $i >/dev/null 2>&1; then echo "Cannot find '$i' on search path." 1>&2 echo "See http://golang.org/doc/install.html#ctools" 1>&2 exit 1 fi done if bison --version 2>&1 | grep 'bison++' >/dev/null 2>&1; then echo "Your system's 'bison' is bison++." echo "Go needs the original bison instead." 1>&2 echo "See http://golang.org/doc/install.html#ctools" 1>&2 exit 1 fi # Issue 2020: some users configure bash to default to # set -o noclobber # which makes >x fail if x already exists. Restore sanity. set +o noclobber # Tried to use . <($MAKE ...) here, but it cannot set environment # variables in the version of bash that ships with OS X. Amazing. eval $($MAKE --no-print-directory -f Make.inc go-env | egrep 'GOARCH|GOOS|GOHOSTARCH|GOHOSTOS|GO_ENV') # Shell doesn't tell us whether make succeeded, # so Make.inc generates a fake variable name. if [ "$MAKE_GO_ENV_WORKED" != 1 ]; then echo 'Did not find Go environment variables.' 1>&2 exit 1 fi unset MAKE_GO_ENV_WORKED