summaryrefslogtreecommitdiff
path: root/src/make.bash
diff options
context:
space:
mode:
authorRuss Cox <rsc@golang.org>2012-01-23 15:16:51 -0500
committerRuss Cox <rsc@golang.org>2012-01-23 15:16:51 -0500
commit5e7fdcc56428badb3452e01cb7ca23dd5d3f7011 (patch)
tree8c7d513f1bac12f5609791bd2168af22f776721a /src/make.bash
parent0841de5bcf798384500493d23d2639bf1e254976 (diff)
downloadgo-5e7fdcc56428badb3452e01cb7ca23dd5d3f7011.tar.gz
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
Diffstat (limited to 'src/make.bash')
-rwxr-xr-xsrc/make.bash16
1 files changed, 13 insertions, 3 deletions
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