From d8cbc2c918f68e8ca5992e68fed052a0e52a8e67 Mon Sep 17 00:00:00 2001 From: Alex Brainman Date: Fri, 14 Oct 2016 17:03:01 +1100 Subject: [PATCH] misc/cgo/testcarchive: do not use same executable name in TestInstall Fixes #17439 Change-Id: I7caa28519f38692f9ca306f0789cbb975fa1d7c4 Reviewed-on: https://go-review.googlesource.com/31112 Reviewed-by: Ian Lance Taylor Run-TryBot: Ian Lance Taylor Run-TryBot: Alex Brainman TryBot-Result: Gobot Gobot --- misc/cgo/testcarchive/carchive_test.go | 93 ++++++++++---------------- 1 file changed, 35 insertions(+), 58 deletions(-) diff --git a/misc/cgo/testcarchive/carchive_test.go b/misc/cgo/testcarchive/carchive_test.go index 14de439bce..4999929775 100644 --- a/misc/cgo/testcarchive/carchive_test.go +++ b/misc/cgo/testcarchive/carchive_test.go @@ -35,13 +35,9 @@ var GOOS, GOARCH string var libgodir string func init() { - bin = []string{"./testp"} GOOS = goEnv("GOOS") GOARCH = goEnv("GOARCH") - execScript := "go_" + GOOS + "_" + GOARCH + "_exec" - if executor, err := exec.LookPath(execScript); err == nil { - bin = []string{executor, "./testp"} - } + bin = cmdToRun("./testp") ccOut := goEnv("CC") cc = []string{string(ccOut)} @@ -126,81 +122,62 @@ func goEnv(key string) string { return strings.TrimSpace(string(out)) } -func compilemain(t *testing.T, libgo string) { - ccArgs := append(cc, "-o", "testp"+exeSuffix, "main.c") - if GOOS == "windows" { - ccArgs = append(ccArgs, "main_windows.c", libgo, "-lntdll", "-lws2_32", "-lwinmm") - } else { - ccArgs = append(ccArgs, "main_unix.c", libgo) - } - t.Log(ccArgs) - - if out, err := exec.Command(ccArgs[0], ccArgs[1:]...).CombinedOutput(); err != nil { - t.Logf("%s", out) - t.Fatal(err) +func cmdToRun(name string) []string { + execScript := "go_" + goEnv("GOOS") + "_" + goEnv("GOARCH") + "_exec" + executor, err := exec.LookPath(execScript) + if err != nil { + return []string{name} } + return []string{executor, name} } -func TestInstall(t *testing.T) { - defer func() { - os.Remove("libgo.a") - os.Remove("libgo.h") - os.Remove("testp") - os.RemoveAll("pkg") - }() - - cmd := exec.Command("go", "install", "-buildmode=c-archive", "libgo") +func testInstall(t *testing.T, exe, libgoa, libgoh string, buildcmd ...string) { + cmd := exec.Command(buildcmd[0], buildcmd[1:]...) cmd.Env = gopathEnv if out, err := cmd.CombinedOutput(); err != nil { t.Logf("%s", out) t.Fatal(err) } + defer func() { + os.Remove(libgoa) + os.Remove(libgoh) + }() - compilemain(t, filepath.Join("pkg", libgodir, "libgo.a")) - - binArgs := append(bin, "arg1", "arg2") - if out, err := exec.Command(binArgs[0], binArgs[1:]...).CombinedOutput(); err != nil { - t.Logf("%s", out) - t.Fatal(err) + ccArgs := append(cc, "-o", exe, "main.c") + if GOOS == "windows" { + ccArgs = append(ccArgs, "main_windows.c", libgoa, "-lntdll", "-lws2_32", "-lwinmm") + } else { + ccArgs = append(ccArgs, "main_unix.c", libgoa) } - - os.Remove("libgo.a") - os.Remove("libgo.h") - os.Remove("testp") - - // Test building libgo other than installing it. - // Header files are now present. - cmd = exec.Command("go", "build", "-buildmode=c-archive", filepath.Join("src", "libgo", "libgo.go")) - cmd.Env = gopathEnv - if out, err := cmd.CombinedOutput(); err != nil { + t.Log(ccArgs) + if out, err := exec.Command(ccArgs[0], ccArgs[1:]...).CombinedOutput(); err != nil { t.Logf("%s", out) t.Fatal(err) } + defer os.Remove(exe) - compilemain(t, "libgo.a") - + binArgs := append(cmdToRun(exe), "arg1", "arg2") if out, err := exec.Command(binArgs[0], binArgs[1:]...).CombinedOutput(); err != nil { t.Logf("%s", out) t.Fatal(err) } +} - os.Remove("libgo.a") - os.Remove("libgo.h") - os.Remove("testp") +func TestInstall(t *testing.T) { + defer os.RemoveAll("pkg") - cmd = exec.Command("go", "build", "-buildmode=c-archive", "-o", "libgo.a", "libgo") - cmd.Env = gopathEnv - if out, err := cmd.CombinedOutput(); err != nil { - t.Logf("%s", out) - t.Fatal(err) - } + testInstall(t, "./testp1"+exeSuffix, + filepath.Join("pkg", libgodir, "libgo.a"), + filepath.Join("pkg", libgodir, "libgo.h"), + "go", "install", "-buildmode=c-archive", "libgo") - compilemain(t, "libgo.a") + // Test building libgo other than installing it. + // Header files are now present. + testInstall(t, "./testp2"+exeSuffix, "libgo.a", "libgo.h", + "go", "build", "-buildmode=c-archive", filepath.Join("src", "libgo", "libgo.go")) - if out, err := exec.Command(binArgs[0], binArgs[1:]...).CombinedOutput(); err != nil { - t.Logf("%s", out) - t.Fatal(err) - } + testInstall(t, "./testp3"+exeSuffix, "libgo.a", "libgo.h", + "go", "build", "-buildmode=c-archive", "-o", "libgo.a", "libgo") } func TestEarlySignalHandler(t *testing.T) { -- 2.48.1