summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorBrad Fitzpatrick <bradfitz@golang.org>2016-05-05 17:52:37 -0700
committerBrad Fitzpatrick <bradfitz@golang.org>2016-05-06 01:18:07 +0000
commitb90cb3f4716d3fede57bf8e798d27406fba5c294 (patch)
tree245a6a4be581fc25d756215c870a04a8469e618c
parent30bfafc319288e8cfe54111664e3f2f259998a0a (diff)
downloadgo-git-b90cb3f4716d3fede57bf8e798d27406fba5c294.tar.gz
cmd/go: fail with nice error message on bad GOOS/GOARCH pair
Fixes #12272 Change-Id: I2115ec62ed4061084c482eb385a583a1c1909888 Reviewed-on: https://go-review.googlesource.com/22838 Reviewed-by: Ian Lance Taylor <iant@golang.org> Reviewed-by: Minux Ma <minux@golang.org>
-rw-r--r--.gitignore1
-rw-r--r--src/cmd/dist/build.go2
-rw-r--r--src/cmd/dist/buildgo.go15
-rw-r--r--src/cmd/go/build.go6
4 files changed, 20 insertions, 4 deletions
diff --git a/.gitignore b/.gitignore
index 6851e147d3..7173067a75 100644
--- a/.gitignore
+++ b/.gitignore
@@ -26,6 +26,7 @@ misc/cgo/stdio/run.out
misc/cgo/testso/main
src/cmd/cgo/zdefaultcc.go
src/cmd/go/zdefaultcc.go
+src/cmd/go/zosarch.go
src/cmd/internal/obj/zbootstrap.go
src/go/build/zcgo.go
src/go/doc/headscan
diff --git a/src/cmd/dist/build.go b/src/cmd/dist/build.go
index 04a13b2365..aa12aa9dc3 100644
--- a/src/cmd/dist/build.go
+++ b/src/cmd/dist/build.go
@@ -464,6 +464,7 @@ var deptab = []struct {
}{
{"cmd/go", []string{
"zdefaultcc.go",
+ "zosarch.go",
}},
{"runtime/internal/sys", []string{
"zversion.go",
@@ -485,6 +486,7 @@ var gentab = []struct {
gen func(string, string)
}{
{"zdefaultcc.go", mkzdefaultcc},
+ {"zosarch.go", mkzosarch},
{"zversion.go", mkzversion},
{"zcgo.go", mkzcgo},
diff --git a/src/cmd/dist/buildgo.go b/src/cmd/dist/buildgo.go
index 2b68fc2224..c367c70b04 100644
--- a/src/cmd/dist/buildgo.go
+++ b/src/cmd/dist/buildgo.go
@@ -23,9 +23,7 @@ import (
// It is invoked to write cmd/go/zdefaultcc.go
// but we also write cmd/cgo/zdefaultcc.go
func mkzdefaultcc(dir, file string) {
- var out string
-
- out = fmt.Sprintf(
+ out := fmt.Sprintf(
"// auto generated by go tool dist\n"+
"\n"+
"package main\n"+
@@ -42,7 +40,16 @@ func mkzdefaultcc(dir, file string) {
writefile(out, file, writeSkipSame)
}
-// mkzcgo writes zcgo.go for go/build package:
+// mkzcgo writes zosarch.go for cmd/go.
+func mkzosarch(dir, file string) {
+ var buf bytes.Buffer
+ buf.WriteString("// auto generated by go tool dist\n\n")
+ buf.WriteString("package main\n\n")
+ fmt.Fprintf(&buf, "var osArchSupportsCgo = %#v", cgoEnabled)
+ writefile(buf.String(), file, writeSkipSame)
+}
+
+// mkzcgo writes zcgo.go for the go/build package:
//
// package build
// var cgoEnabled = map[string]bool{}
diff --git a/src/cmd/go/build.go b/src/cmd/go/build.go
index 0102b5e08a..09e2122b0c 100644
--- a/src/cmd/go/build.go
+++ b/src/cmd/go/build.go
@@ -669,6 +669,12 @@ var (
func init() {
goarch = buildContext.GOARCH
goos = buildContext.GOOS
+
+ if _, ok := osArchSupportsCgo[goos+"/"+goarch]; !ok {
+ fmt.Fprintf(os.Stderr, "cmd/go: unsupported GOOS/GOARCH pair %s/%s\n", goos, goarch)
+ os.Exit(2)
+ }
+
if goos == "windows" {
exeSuffix = ".exe"
}