1
0
mirror of https://github.com/golang/go synced 2024-11-17 18:24:45 -07:00

cmd/go: fix script conditions that require cgo

This fixes a regression introduced in CL 419875
that causes features that require cgo to be tested
on the nocgo builders.

For #27494.

Change-Id: Iee61225c98c1275810256ab002a698fc4b42c053
Reviewed-on: https://go-review.googlesource.com/c/go/+/445235
Auto-Submit: Bryan Mills <bcmills@google.com>
Run-TryBot: Bryan Mills <bcmills@google.com>
TryBot-Result: Gopher Robot <gobot@golang.org>
Reviewed-by: Jonathan Amsterdam <jba@google.com>
Reviewed-by: Cherry Mui <cherryyz@google.com>
This commit is contained in:
Bryan C. Mills 2022-10-24 19:50:48 -04:00 committed by Gopher Robot
parent 3617514de0
commit 9fffcde118

View File

@ -34,21 +34,21 @@ func scriptConditions() map[string]script.Cond {
return script.OnceCondition(summary, func() (bool, error) { return f(), nil }) return script.OnceCondition(summary, func() (bool, error) { return f(), nil })
} }
add("asan", sysCondition("-asan", platform.ASanSupported)) add("asan", sysCondition("-asan", platform.ASanSupported, true))
add("buildmode", script.PrefixCondition("go supports -buildmode=<suffix>", hasBuildmode)) add("buildmode", script.PrefixCondition("go supports -buildmode=<suffix>", hasBuildmode))
add("case-sensitive", script.OnceCondition("$WORK filesystem is case-sensitive", isCaseSensitive)) add("case-sensitive", script.OnceCondition("$WORK filesystem is case-sensitive", isCaseSensitive))
add("cgo", script.BoolCondition("host CGO_ENABLED", canCgo)) add("cgo", script.BoolCondition("host CGO_ENABLED", canCgo))
add("cross", script.BoolCondition("cmd/go GOOS/GOARCH != GOHOSTOS/GOHOSTARCH", goHostOS != runtime.GOOS || goHostArch != runtime.GOARCH)) add("cross", script.BoolCondition("cmd/go GOOS/GOARCH != GOHOSTOS/GOHOSTARCH", goHostOS != runtime.GOOS || goHostArch != runtime.GOARCH))
add("fuzz", sysCondition("-fuzz", platform.FuzzSupported)) add("fuzz", sysCondition("-fuzz", platform.FuzzSupported, false))
add("fuzz-instrumented", sysCondition("-fuzz with instrumentation", platform.FuzzInstrumented)) add("fuzz-instrumented", sysCondition("-fuzz with instrumentation", platform.FuzzInstrumented, false))
add("git", lazyBool("the 'git' executable exists and provides the standard CLI", hasWorkingGit)) add("git", lazyBool("the 'git' executable exists and provides the standard CLI", hasWorkingGit))
add("GODEBUG", script.PrefixCondition("GODEBUG contains <suffix>", hasGodebug)) add("GODEBUG", script.PrefixCondition("GODEBUG contains <suffix>", hasGodebug))
add("GOEXPERIMENT", script.PrefixCondition("GOEXPERIMENT <suffix> is enabled", hasGoexperiment)) add("GOEXPERIMENT", script.PrefixCondition("GOEXPERIMENT <suffix> is enabled", hasGoexperiment))
add("link", lazyBool("testenv.HasLink()", testenv.HasLink)) add("link", lazyBool("testenv.HasLink()", testenv.HasLink))
add("mismatched-goroot", script.Condition("test's GOROOT_FINAL does not match the real GOROOT", isMismatchedGoroot)) add("mismatched-goroot", script.Condition("test's GOROOT_FINAL does not match the real GOROOT", isMismatchedGoroot))
add("msan", sysCondition("-msan", platform.MSanSupported)) add("msan", sysCondition("-msan", platform.MSanSupported, true))
add("net", lazyBool("testenv.HasExternalNetwork()", testenv.HasExternalNetwork)) add("net", lazyBool("testenv.HasExternalNetwork()", testenv.HasExternalNetwork))
add("race", sysCondition("-race", platform.RaceDetectorSupported)) add("race", sysCondition("-race", platform.RaceDetectorSupported, true))
add("symlink", lazyBool("testenv.HasSymlink()", testenv.HasSymlink)) add("symlink", lazyBool("testenv.HasSymlink()", testenv.HasSymlink))
add("trimpath", script.OnceCondition("test binary was built with -trimpath", isTrimpath)) add("trimpath", script.OnceCondition("test binary was built with -trimpath", isTrimpath))
@ -63,13 +63,14 @@ func isMismatchedGoroot(s *script.State) (bool, error) {
return gorootFinal != testGOROOT, nil return gorootFinal != testGOROOT, nil
} }
func sysCondition(flag string, f func(goos, goarch string) bool) script.Cond { func sysCondition(flag string, f func(goos, goarch string) bool, needsCgo bool) script.Cond {
return script.Condition( return script.Condition(
"GOOS/GOARCH supports "+flag, "GOOS/GOARCH supports "+flag,
func(s *script.State) (bool, error) { func(s *script.State) (bool, error) {
GOOS, _ := s.LookupEnv("GOOS") GOOS, _ := s.LookupEnv("GOOS")
GOARCH, _ := s.LookupEnv("GOARCH") GOARCH, _ := s.LookupEnv("GOARCH")
return f(GOOS, GOARCH), nil cross := goHostOS != GOOS || goHostArch != GOARCH
return (!needsCgo || (canCgo && !cross)) && f(GOOS, GOARCH), nil
}) })
} }