diff --git a/src/cmd/dist/build.go b/src/cmd/dist/build.go index aa106e45c51834ac98eab3ac087edb2fe75b28f8..b50f3342fe8714b5f395a06fb5529db38017a045 100644 --- a/src/cmd/dist/build.go +++ b/src/cmd/dist/build.go @@ -673,7 +673,6 @@ var gentab = []struct { file string gen func(dir, file string) }{ - {"go/build", "zcgo.go", mkzcgo}, {"cmd/go/internal/cfg", "zdefaultcc.go", mkzdefaultcc}, {"internal/runtime/sys", "zversion.go", mkzversion}, {"time/tzdata", "zzipdata.go", mktzdata}, diff --git a/src/cmd/dist/buildgo.go b/src/cmd/dist/buildgo.go index 884e9d729a6a3596c7713a30ebeee413fd2b3245..6bd8a9ce8dfa6bf2a15f221a15fc244db3141d8d 100644 --- a/src/cmd/dist/buildgo.go +++ b/src/cmd/dist/buildgo.go @@ -7,7 +7,6 @@ package main import ( "fmt" "io" - "os" "path/filepath" "sort" "strings" @@ -108,22 +107,6 @@ func defaultCCFunc(name string, defaultcc map[string]string) string { return buf.String() } -// mkzcgo writes zcgo.go for the go/build package: -// -// package build -// const defaultCGO_ENABLED = <CGO_ENABLED> -// -// It is invoked to write go/build/zcgo.go. -func mkzcgo(dir, file string) { - var buf strings.Builder - writeHeader(&buf) - fmt.Fprintf(&buf, "package build\n") - fmt.Fprintln(&buf) - fmt.Fprintf(&buf, "const defaultCGO_ENABLED = %s\n", quote(os.Getenv("CGO_ENABLED"))) - - writefile(buf.String(), file, writeSkipSame) -} - // mktzdata src/time/tzdata/zzipdata.go: // // package tzdata diff --git a/src/cmd/dist/buildruntime.go b/src/cmd/dist/buildruntime.go index 04b5b45410b70c5462ab4661c86aa75a95140176..87e88671763996604cfe5cbca1399ce1a323dc31 100644 --- a/src/cmd/dist/buildruntime.go +++ b/src/cmd/dist/buildruntime.go @@ -6,6 +6,7 @@ package main import ( "fmt" + "os" "strings" ) @@ -66,6 +67,7 @@ func mkbuildcfg(file string) { fmt.Fprintf(&buf, "const defaultGOOS = runtime.GOOS\n") fmt.Fprintf(&buf, "const defaultGOARCH = runtime.GOARCH\n") fmt.Fprintf(&buf, "const DefaultGOFIPS140 = `%s`\n", gofips140) + fmt.Fprintf(&buf, "const DefaultCGO_ENABLED = %s\n", quote(os.Getenv("CGO_ENABLED"))) writefile(buf.String(), file, writeSkipSame) } diff --git a/src/cmd/go/internal/cfg/cfg.go b/src/cmd/go/internal/cfg/cfg.go index 3b9f27e91d517e765a0175290469f999f86e4ab4..49d87839f4a782444ad9924cbdc41df333ebe0d9 100644 --- a/src/cmd/go/internal/cfg/cfg.go +++ b/src/cmd/go/internal/cfg/cfg.go @@ -13,6 +13,7 @@ import ( "go/build" "internal/buildcfg" "internal/cfg" + "internal/platform" "io" "io/fs" "os" @@ -140,10 +141,12 @@ func defaultContext() build.Context { // Recreate that logic here with the new GOOS/GOARCH setting. // We need to run steps 2 and 3 to determine what the default value // of CgoEnabled would be for computing CGOChanged. - defaultCgoEnabled := ctxt.CgoEnabled - if ctxt.GOOS != runtime.GOOS || ctxt.GOARCH != runtime.GOARCH { - defaultCgoEnabled = false - } else { + defaultCgoEnabled := false + if buildcfg.DefaultCGO_ENABLED == "1" { + defaultCgoEnabled = true + } else if buildcfg.DefaultCGO_ENABLED == "0" { + } else if runtime.GOARCH == ctxt.GOARCH && runtime.GOOS == ctxt.GOOS { + defaultCgoEnabled = platform.CgoSupported(ctxt.GOOS, ctxt.GOARCH) // Use built-in default cgo setting for GOOS/GOARCH. // Note that ctxt.GOOS/GOARCH are derived from the preference list // (1) environment, (2) go/env file, (3) runtime constants, diff --git a/src/cmd/go/testdata/script/env_changed.txt b/src/cmd/go/testdata/script/env_changed.txt index 5ba13b4dbfa0851a4360abe493cfc9a72ce6400f..05fb71d020fc3ca1df91ef4152961f117d6c2d5d 100644 --- a/src/cmd/go/testdata/script/env_changed.txt +++ b/src/cmd/go/testdata/script/env_changed.txt @@ -11,6 +11,7 @@ env GO111MODULE=auto env CGO_CFLAGS=nodefault env CGO_CPPFLAGS=nodefault env GOFIPS140=latest +[cgo] env CGO_ENABLED=0 go env -changed # linux output like GOTOOLCHAIN='local' @@ -22,6 +23,7 @@ stdout 'GO111MODULE=''?auto''?' stdout 'CGO_CFLAGS=''?nodefault''?' stdout 'CGO_CPPFLAGS=''?nodefault''?' stdout 'GOFIPS140=''?latest''?' +[cgo] stdout 'CGO_ENABLED=''?0''?' go env -changed -json stdout '"GOTOOLCHAIN": "local"' @@ -31,6 +33,7 @@ stdout '"GO111MODULE": "auto"' stdout '"CGO_CFLAGS": "nodefault"' stdout '"CGO_CPPFLAGS": "nodefault"' stdout '"GOFIPS140": "latest"' +[cgo] stdout '"CGO_ENABLED": "0"' [GOOS:windows] env GOOS=linux [!GOOS:windows] env GOOS=windows diff --git a/src/go/build/build.go b/src/go/build/build.go index 0e5c7e512d794ccd29fa5995d35f1d44a641f50c..50288fcec64141f531920cc824592d314d8748b8 100644 --- a/src/go/build/build.go +++ b/src/go/build/build.go @@ -359,7 +359,7 @@ func defaultContext() Context { env := os.Getenv("CGO_ENABLED") if env == "" { - env = defaultCGO_ENABLED + env = buildcfg.DefaultCGO_ENABLED } switch env { case "1":