t.Errorf("got %q; want %q", out, "hello")
}
}
+
+func TestExecBuildX(t *testing.T) {
+ if !canCgo {
+ t.Skip("skipping because cgo not enabled")
+ }
+
+ if runtime.GOOS == "plan9" || runtime.GOOS == "windows" {
+ t.Skipf("skipping because unix shell is not supported on %s", runtime.GOOS)
+ }
+
+ tg := testgo(t)
+ defer tg.cleanup()
+
+ tg.tempFile("main.go", `package main; import "C"; func main() { print("hello") }`)
+ src := tg.path("main.go")
+ obj := tg.path("main")
+ tg.run("build", "-x", "-o", obj, src)
+ sh := tg.path("test.sh")
+ err := ioutil.WriteFile(sh, []byte(tg.getStderr()), 0666)
+ if err != nil {
+ t.Fatal(err)
+ }
+
+ out, err := exec.Command(obj).CombinedOutput()
+ if err != nil {
+ t.Fatal(err)
+ }
+ if string(out) != "hello" {
+ t.Fatalf("got %q; want %q", out, "hello")
+ }
+
+ err = os.Remove(obj)
+ if err != nil {
+ t.Fatal(err)
+ }
+
+ out, err = exec.Command("/bin/sh", sh).CombinedOutput()
+ if err != nil {
+ t.Fatalf("/bin/sh %s: %v\n%s", sh, err, out)
+ }
+
+ out, err = exec.Command(obj).CombinedOutput()
+ if err != nil {
+ t.Fatal(err)
+ }
+ if string(out) != "hello" {
+ t.Fatalf("got %q; want %q", out, "hello")
+ }
+}
cmdline := str.StringList(cmdargs...)
if cfg.BuildN || cfg.BuildX {
var envcmdline string
- for i := range env {
- envcmdline += env[i]
- envcmdline += " "
+ for _, e := range env {
+ if j := strings.IndexByte(e, '='); j != -1 {
+ if strings.ContainsRune(e[j+1:], '\'') {
+ envcmdline += fmt.Sprintf("%s=%q", e[:j], e[j+1:])
+ } else {
+ envcmdline += fmt.Sprintf("%s='%s'", e[:j], e[j+1:])
+ }
+ envcmdline += " "
+ }
}
envcmdline += joinUnambiguously(cmdline)
b.Showcmd(dir, "%s", envcmdline)
}
if cfg.BuildN || cfg.BuildX {
- cmdline := str.StringList("pack", "r", absAfile, absOfiles)
+ cmdline := str.StringList(base.Tool("pack"), "r", absAfile, absOfiles)
b.Showcmd(p.Dir, "%s # internal", joinUnambiguously(cmdline))
}
if cfg.BuildN {
return b
}
if b.flagCache == nil {
+ if cfg.BuildN || cfg.BuildX {
+ b.Showcmd(b.WorkDir, "touch trivial.c")
+ }
src := filepath.Join(b.WorkDir, "trivial.c")
if err := ioutil.WriteFile(src, []byte{}, 0666); err != nil {
return false