mirror of
https://github.com/golang/go
synced 2024-10-02 16:18:38 -06:00
cmd/go: rewrite TestCgoFlagContainsSpace not to use a fake CC
Using a fake CC fails today if runtime/cgo is stale, because the build will try to rebuild runtime/cgo using the fake CC, and the fake CC is not a working C compiler. Worse, in the future, when the go command is sensitive to details like the fact that different CCs produce different outputs, putting in the fake CC will make runtime/cgo look stale even if it was formerly up-to-date. Fix both problems by not overriding CC and instead looking at the command being run to make sure the flags are quoted as expected. Change-Id: I4417e35cfab33a07546cc90748ddb6119d8fdb2d Reviewed-on: https://go-review.googlesource.com/56272 Run-TryBot: Russ Cox <rsc@golang.org> TryBot-Result: Gobot Gobot <gobot@golang.org> Reviewed-by: Ian Lance Taylor <iant@golang.org>
This commit is contained in:
parent
e2c30e1fc5
commit
c6f3e98eb5
@ -4141,65 +4141,22 @@ func TestCgoFlagContainsSpace(t *testing.T) {
|
|||||||
if !canCgo {
|
if !canCgo {
|
||||||
t.Skip("skipping because cgo not enabled")
|
t.Skip("skipping because cgo not enabled")
|
||||||
}
|
}
|
||||||
|
|
||||||
tg := testgo(t)
|
tg := testgo(t)
|
||||||
defer tg.cleanup()
|
defer tg.cleanup()
|
||||||
|
|
||||||
ccName := filepath.Base(testCC)
|
tg.makeTempdir()
|
||||||
|
tg.cd(tg.path("."))
|
||||||
tg.tempFile(fmt.Sprintf("src/%s/main.go", ccName), fmt.Sprintf(`package main
|
tg.tempFile("main.go", `package main
|
||||||
import (
|
|
||||||
"os"
|
|
||||||
"os/exec"
|
|
||||||
"strings"
|
|
||||||
)
|
|
||||||
|
|
||||||
func main() {
|
|
||||||
cmd := exec.Command(%q, os.Args[1:]...)
|
|
||||||
cmd.Stdin = os.Stdin
|
|
||||||
cmd.Stdout = os.Stdout
|
|
||||||
cmd.Stderr = os.Stderr
|
|
||||||
err := cmd.Run()
|
|
||||||
if err != nil {
|
|
||||||
panic(err)
|
|
||||||
}
|
|
||||||
|
|
||||||
if os.Args[len(os.Args)-1] == "trivial.c" {
|
|
||||||
return
|
|
||||||
}
|
|
||||||
|
|
||||||
var success bool
|
|
||||||
for _, arg := range os.Args {
|
|
||||||
switch {
|
|
||||||
case strings.Contains(arg, "c flags"):
|
|
||||||
if success {
|
|
||||||
panic("duplicate CFLAGS")
|
|
||||||
}
|
|
||||||
success = true
|
|
||||||
case strings.Contains(arg, "ld flags"):
|
|
||||||
if success {
|
|
||||||
panic("duplicate LDFLAGS")
|
|
||||||
}
|
|
||||||
success = true
|
|
||||||
}
|
|
||||||
}
|
|
||||||
if !success {
|
|
||||||
panic("args should contains '-Ic flags' or '-Lld flags'")
|
|
||||||
}
|
|
||||||
}
|
|
||||||
`, testCC))
|
|
||||||
tg.cd(tg.path(fmt.Sprintf("src/%s", ccName)))
|
|
||||||
tg.run("build")
|
|
||||||
tg.setenv("CC", tg.path(fmt.Sprintf("src/%s/%s", ccName, ccName)))
|
|
||||||
|
|
||||||
tg.tempFile("src/cgo/main.go", `package main
|
|
||||||
// #cgo CFLAGS: -I"c flags"
|
// #cgo CFLAGS: -I"c flags"
|
||||||
// #cgo LDFLAGS: -L"ld flags"
|
// #cgo LDFLAGS: -L"ld flags"
|
||||||
import "C"
|
import "C"
|
||||||
func main() {}
|
func main() {}
|
||||||
`)
|
`)
|
||||||
tg.cd(tg.path("src/cgo"))
|
tg.run("run", "-x", "main.go")
|
||||||
tg.run("run", "main.go")
|
tg.grepStderr(`"-I[^"]+c flags"`, "did not find quoted c flags")
|
||||||
|
tg.grepStderrNot(`"-I[^"]+c flags".*"-I[^"]+c flags"`, "found too many quoted c flags")
|
||||||
|
tg.grepStderr(`"-L[^"]+ld flags"`, "did not find quoted ld flags")
|
||||||
|
tg.grepStderrNot(`"-L[^"]+c flags".*"-L[^"]+c flags"`, "found too many quoted ld flags")
|
||||||
}
|
}
|
||||||
|
|
||||||
// Issue #20435.
|
// Issue #20435.
|
||||||
|
Loading…
Reference in New Issue
Block a user