]> Cypherpunks repositories - gostls13.git/commitdiff
[dev.cc] cmd/go: do not install tools while executing them
authorRuss Cox <rsc@golang.org>
Mon, 23 Feb 2015 16:47:48 +0000 (11:47 -0500)
committerRuss Cox <rsc@golang.org>
Mon, 23 Feb 2015 19:30:08 +0000 (19:30 +0000)
Change-Id: I3417efc203f555a0a6101701f387ead84f9a08d1
Reviewed-on: https://go-review.googlesource.com/5577
Reviewed-by: Rob Pike <r@golang.org>
src/cmd/go/build.go

index db1c93b8ac9826e03b30ba94013ad48023c0dd44..fba122a04e88be8cb83f70eebc25b3e9400fc11e 100644 (file)
@@ -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)
 }