diff options
author | Russ Cox <rsc@golang.org> | 2012-01-23 15:16:51 -0500 |
---|---|---|
committer | Russ Cox <rsc@golang.org> | 2012-01-23 15:16:51 -0500 |
commit | 5e7fdcc56428badb3452e01cb7ca23dd5d3f7011 (patch) | |
tree | 8c7d513f1bac12f5609791bd2168af22f776721a /src/make.bash | |
parent | 0841de5bcf798384500493d23d2639bf1e254976 (diff) | |
download | go-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-x | src/make.bash | 16 |
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 |