cmd/dist: list only supported platforms

Introduce an incomplete map in dist alongside cgoEnabled and filter out
the incomplete ports in 'dist list'.

Fixes #28944

Change-Id: I15aae56aec570e1cd9e28906900cd5ba0db77811
Reviewed-on: https://go-review.googlesource.com/c/155839
Run-TryBot: Tobias Klauser <tobias.klauser@gmail.com>
TryBot-Result: Gobot Gobot <gobot@golang.org>
Reviewed-by: Brad Fitzpatrick <bradfitz@golang.org>
diff --git a/src/cmd/dist/build.go b/src/cmd/dist/build.go
index da677c8..ad2c964 100644
--- a/src/cmd/dist/build.go
+++ b/src/cmd/dist/build.go
@@ -1458,6 +1458,13 @@
 	"windows/arm":     false,
 }
 
+// List of platforms which are supported but not complete yet. These get
+// filtered out of cgoEnabled for 'dist list'. See golang.org/issue/28944
+var incomplete = map[string]bool{
+	"linux/riscv64": true,
+	"linux/sparc64": true,
+}
+
 func needCC() bool {
 	switch os.Getenv("CGO_ENABLED") {
 	case "1":
@@ -1576,6 +1583,9 @@
 
 	var plats []string
 	for p := range cgoEnabled {
+		if incomplete[p] {
+			continue
+		}
 		plats = append(plats, p)
 	}
 	sort.Strings(plats)
diff --git a/src/cmd/dist/test.go b/src/cmd/dist/test.go
index 82e2e17..74cee8f 100644
--- a/src/cmd/dist/test.go
+++ b/src/cmd/dist/test.go
@@ -212,6 +212,9 @@
 	if t.failed {
 		fmt.Println("\nFAILED")
 		os.Exit(1)
+	} else if incomplete[goos+"/"+goarch] {
+		fmt.Println("\nFAILED (incomplete port)")
+		os.Exit(1)
 	} else if t.partial {
 		fmt.Println("\nALL TESTS PASSED (some were excluded)")
 	} else {