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 | 105 ++++++++++--------------- 1 file changed, 41 insertions(+), 64 deletions(-) diff --git a/misc/cgo/testcarchive/carchive_test.go b/misc/cgo/testcarchive/carchive_test.go index 14de439bcee..49999297751 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") +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, 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) + }() + + ccArgs := append(cc, "-o", exe, "main.c") if GOOS == "windows" { - ccArgs = append(ccArgs, "main_windows.c", libgo, "-lntdll", "-lws2_32", "-lwinmm") + ccArgs = append(ccArgs, "main_windows.c", libgoa, "-lntdll", "-lws2_32", "-lwinmm") } else { - ccArgs = append(ccArgs, "main_unix.c", libgo) + ccArgs = append(ccArgs, "main_unix.c", libgoa) } 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) + + 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) + } } func TestInstall(t *testing.T) { - defer func() { - os.Remove("libgo.a") - os.Remove("libgo.h") - os.Remove("testp") - os.RemoveAll("pkg") - }() + defer os.RemoveAll("pkg") - cmd := exec.Command("go", "install", "-buildmode=c-archive", "libgo") - cmd.Env = gopathEnv - if out, err := cmd.CombinedOutput(); err != nil { - t.Logf("%s", out) - t.Fatal(err) - } - - 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) - } - - os.Remove("libgo.a") - os.Remove("libgo.h") - os.Remove("testp") + testInstall(t, "./testp1"+exeSuffix, + filepath.Join("pkg", libgodir, "libgo.a"), + filepath.Join("pkg", libgodir, "libgo.h"), + "go", "install", "-buildmode=c-archive", "libgo") // 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.Logf("%s", out) - t.Fatal(err) - } + testInstall(t, "./testp2"+exeSuffix, "libgo.a", "libgo.h", + "go", "build", "-buildmode=c-archive", filepath.Join("src", "libgo", "libgo.go")) - compilemain(t, "libgo.a") - - 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") - - 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) - } - - compilemain(t, "libgo.a") - - 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) {