From 5e7fdcc56428badb3452e01cb7ca23dd5d3f7011 Mon Sep 17 00:00:00 2001 From: Russ Cox Date: Mon, 23 Jan 2012 15:16:51 -0500 Subject: cmd/go: implement go get + bug fixes Move error information into Package struct, so that a package can be returned even if a dependency failed to load or did not exist. This makes it possible to run 'go fix' or 'go fmt' on packages with broken dependencies or missing imports. It also enables go get -fix. The new go list -e flag lets go list process those package errors as normal data. Change p.Doc to be first sentence of package doc, not entire package doc. Makes go list -json or go list -f '{{.ImportPath}} {{.Doc}}' much more reasonable. The go tool now depends on http, which means also net and crypto/tls, both of which use cgo. Trying to make the build scripts that build the go tool understand and handle cgo is too much work. Instead, we build a stripped down version of the go tool, compiled as go_bootstrap, that substitutes an error stub for the usual HTTP code. The buildscript builds go_bootstrap, go_bootstrap builds the standard packages and commands, including the full including-HTTP-support go tool, and then go_bootstrap gets deleted. Also handle the case where the buildscript needs updating during all.bash: if it fails but a go command can be found on the current $PATH, try to regenerate it. This gracefully handles situations like adding a new file to a package used by the go tool. R=r, adg CC=golang-dev http://codereview.appspot.com/5553059 --- src/make.bash | 16 +++++++++++++--- 1 file changed, 13 insertions(+), 3 deletions(-) (limited to 'src/make.bash') diff --git a/src/make.bash b/src/make.bash index 3878d263f..34708b506 100755 --- a/src/make.bash +++ b/src/make.bash @@ -92,11 +92,21 @@ echo; echo; echo %%%% making runtime generated files %%%%; echo if $USE_GO_TOOL; then echo - echo '# Building go command from bootstrap script.' - ./buildscript/${GOOS}_$GOARCH.sh + echo '# Building go_bootstrap command from bootstrap script.' + if ! ./buildscript/${GOOS}_$GOARCH.sh; then + echo '# Bootstrap script failed.' + if [ ! -x "$GOBIN/go" ]; then + exit 1 + fi + echo '# Regenerating bootstrap script using pre-existing go binary.' + ./buildscript.sh + ./buildscript/${GOOS}_$GOARCH.sh + fi echo '# Building Go code.' - go install -a -v std + go_bootstrap install -a -v std + rm -f "$GOBIN/go_bootstrap" + else echo; echo; echo %%%% making pkg %%%%; echo gomake -C pkg install -- cgit v1.2.1