aboutsummaryrefslogtreecommitdiff
path: root/src/cmd/go/build.go
diff options
context:
space:
mode:
Diffstat (limited to 'src/cmd/go/build.go')
-rw-r--r--src/cmd/go/build.go20
1 files changed, 19 insertions, 1 deletions
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)
}