From 7bdb77af5fea5b94cf3d5d7840ca9162e76b3e9b Mon Sep 17 00:00:00 2001 From: Ian Lance Taylor Date: Thu, 10 Nov 2016 15:19:11 -0800 Subject: [PATCH] cmd/cgo: don't depend on runtime/cgo if !CgoEnabled Fixes the build when CGO_ENABLED=0. Change-Id: I7f3c67d61e156e69536558fda0a0a4b429b82bbd Reviewed-on: https://go-review.googlesource.com/33104 Run-TryBot: Ian Lance Taylor Reviewed-by: Brad Fitzpatrick TryBot-Result: Gobot Gobot --- src/cmd/go/pkg.go | 32 +++++++++++++++++--------------- 1 file changed, 17 insertions(+), 15 deletions(-) diff --git a/src/cmd/go/pkg.go b/src/cmd/go/pkg.go index 23d3114682..064a428703 100644 --- a/src/cmd/go/pkg.go +++ b/src/cmd/go/pkg.go @@ -913,24 +913,26 @@ func (p *Package) load(stk *importStack, bp *build.Package, err error) *Package importPaths = append(importPaths, "syscall") } - // Currently build modes c-shared, pie (on systems that do not - // support PIE with internal linking mode), plugin, and - // -linkshared force external linking mode, as of course does - // -ldflags=-linkmode=external. External linking mode forces - // an import of runtime/cgo. - pieCgo := buildBuildmode == "pie" && (buildContext.GOOS != "linux" || buildContext.GOARCH != "amd64") - linkmodeExternal := false - for i, a := range buildLdflags { - if a == "-linkmode=external" { - linkmodeExternal = true + if buildContext.CgoEnabled && p.Name == "main" && !p.Goroot { + // Currently build modes c-shared, pie (on systems that do not + // support PIE with internal linking mode), plugin, and + // -linkshared force external linking mode, as of course does + // -ldflags=-linkmode=external. External linking mode forces + // an import of runtime/cgo. + pieCgo := buildBuildmode == "pie" && (buildContext.GOOS != "linux" || buildContext.GOARCH != "amd64") + linkmodeExternal := false + for i, a := range buildLdflags { + if a == "-linkmode=external" { + linkmodeExternal = true + } + if a == "-linkmode" && i+1 < len(buildLdflags) && buildLdflags[i+1] == "external" { + linkmodeExternal = true + } } - if a == "-linkmode" && i+1 < len(buildLdflags) && buildLdflags[i+1] == "external" { - linkmodeExternal = true + if buildBuildmode == "c-shared" || buildBuildmode == "plugin" || pieCgo || buildLinkshared || linkmodeExternal { + importPaths = append(importPaths, "runtime/cgo") } } - if p.Name == "main" && !p.Goroot && (buildBuildmode == "c-shared" || buildBuildmode == "plugin" || pieCgo || buildLinkshared || linkmodeExternal) { - importPaths = append(importPaths, "runtime/cgo") - } // Everything depends on runtime, except runtime, its internal // subpackages, and unsafe.