From: Russ Cox Date: Mon, 23 Feb 2015 16:47:48 +0000 (-0500) Subject: [dev.cc] cmd/go: do not install tools while executing them X-Git-Tag: go1.5beta1~1915^2~7 X-Git-Url: http://www.git.cypherpunks.su/?a=commitdiff_plain;h=264c099ba7988a30ba8d3088c0e925524655383c;p=gostls13.git [dev.cc] cmd/go: do not install tools while executing them Change-Id: I3417efc203f555a0a6101701f387ead84f9a08d1 Reviewed-on: https://go-review.googlesource.com/5577 Reviewed-by: Rob Pike --- diff --git a/src/cmd/go/build.go b/src/cmd/go/build.go index db1c93b8ac..fba122a04e 100644 --- a/src/cmd/go/build.go +++ b/src/cmd/go/build.go @@ -347,8 +347,26 @@ func runInstall(cmd *Command, args []string) { var b builder b.init() a := &action{} + var tools []*action for _, p := range pkgs { - a.deps = append(a.deps, b.action(modeInstall, modeInstall, p)) + // If p is a tool, delay the installation until the end of the build. + // This avoids installing assemblers/compilers that are being executed + // by other steps in the build. + // cmd/cgo is handled specially in b.action, so that we can + // both build and use it in the same 'go install'. + action := b.action(modeInstall, modeInstall, p) + if goTools[p.ImportPath] == toTool && p.ImportPath != "cmd/cgo" { + a.deps = append(a.deps, action.deps...) + action.deps = append(action.deps, a) + tools = append(tools, action) + continue + } + a.deps = append(a.deps, action) + } + if len(tools) > 0 { + a = &action{ + deps: tools, + } } b.do(a) }