Commit c3ecded7 authored by Shenghou Ma's avatar Shenghou Ma Committed by Minux Ma

cmd/dist: introduce list subcommand to list all supported platforms

Fixes #12270.

Change-Id: Ie3dcbd0403d270b4b7f5c39049e12315eee159ed
Reviewed-on: https://go-review.googlesource.com/19837Reviewed-by: default avatarBrad Fitzpatrick <bradfitz@golang.org>
Run-TryBot: Minux Ma <minux@golang.org>
TryBot-Result: Gobot Gobot <gobot@golang.org>
parent 539aa05a
Tools: Tools:
cmd/dist: add list subcommand to list all supported platforms (CL 19837)
cmd/go: GO15VENDOREXPERIMENT gone, assumed on (CL 19615) cmd/go: GO15VENDOREXPERIMENT gone, assumed on (CL 19615)
cmd/link: "-X name value" form gone (CL 19614) cmd/link: "-X name value" form gone (CL 19614)
......
...@@ -6,6 +6,7 @@ package main ...@@ -6,6 +6,7 @@ package main
import ( import (
"bytes" "bytes"
"encoding/json"
"flag" "flag"
"fmt" "fmt"
"os" "os"
...@@ -937,6 +938,7 @@ func usage() { ...@@ -937,6 +938,7 @@ func usage() {
"clean deletes all built files\n" + "clean deletes all built files\n" +
"env [-p] print environment (-p: include $PATH)\n" + "env [-p] print environment (-p: include $PATH)\n" +
"install [dir] install individual directory\n" + "install [dir] install individual directory\n" +
"list [-json] list all supported platforms\n" +
"test [-h] run Go test(s)\n" + "test [-h] run Go test(s)\n" +
"version print Go version\n" + "version print Go version\n" +
"\n" + "\n" +
...@@ -1068,6 +1070,10 @@ func cmdbootstrap() { ...@@ -1068,6 +1070,10 @@ func cmdbootstrap() {
// Cannot use go/build directly because cmd/dist for a new release // Cannot use go/build directly because cmd/dist for a new release
// builds against an old release's go/build, which may be out of sync. // builds against an old release's go/build, which may be out of sync.
// To reduce duplication, we generate the list for go/build from this. // To reduce duplication, we generate the list for go/build from this.
//
// We list all supported platforms in this list, so that this is the
// single point of truth for supported platforms. This list is used
// by 'go tool dist list'.
var cgoEnabled = map[string]bool{ var cgoEnabled = map[string]bool{
"darwin/386": true, "darwin/386": true,
"darwin/amd64": true, "darwin/amd64": true,
...@@ -1076,19 +1082,31 @@ var cgoEnabled = map[string]bool{ ...@@ -1076,19 +1082,31 @@ var cgoEnabled = map[string]bool{
"dragonfly/amd64": true, "dragonfly/amd64": true,
"freebsd/386": true, "freebsd/386": true,
"freebsd/amd64": true, "freebsd/amd64": true,
"freebsd/arm": false,
"linux/386": true, "linux/386": true,
"linux/amd64": true, "linux/amd64": true,
"linux/arm": true, "linux/arm": true,
"linux/arm64": true, "linux/arm64": true,
"linux/ppc64": false,
"linux/ppc64le": true, "linux/ppc64le": true,
"linux/mips64": false,
"linux/mips64le": false,
"android/386": true, "android/386": true,
"android/amd64": true, "android/amd64": true,
"android/arm": true, "android/arm": true,
"android/arm64": true,
"nacl/386": false,
"nacl/amd64p32": false,
"nacl/arm": false,
"netbsd/386": true, "netbsd/386": true,
"netbsd/amd64": true, "netbsd/amd64": true,
"netbsd/arm": true, "netbsd/arm": true,
"openbsd/386": true, "openbsd/386": true,
"openbsd/amd64": true, "openbsd/amd64": true,
"openbsd/arm": false,
"plan9/386": false,
"plan9/amd64": false,
"plan9/arm": false,
"solaris/amd64": true, "solaris/amd64": true,
"windows/386": true, "windows/386": true,
"windows/amd64": true, "windows/amd64": true,
...@@ -1199,3 +1217,43 @@ func cmdversion() { ...@@ -1199,3 +1217,43 @@ func cmdversion() {
xflagparse(0) xflagparse(0)
xprintf("%s\n", findgoversion()) xprintf("%s\n", findgoversion())
} }
// cmdlist lists all supported platforms.
func cmdlist() {
jsonFlag := flag.Bool("json", false, "produce JSON output")
xflagparse(0)
var plats []string
for p := range cgoEnabled {
plats = append(plats, p)
}
sort.Strings(plats)
if !*jsonFlag {
for _, p := range plats {
xprintf("%s\n", p)
}
return
}
type jsonResult struct {
GOOS string
GOARCH string
CgoSupported bool
}
var results []jsonResult
for _, p := range plats {
fields := strings.Split(p, "/")
results = append(results, jsonResult{
GOOS: fields[0],
GOARCH: fields[1],
CgoSupported: cgoEnabled[p]})
}
out, err := json.MarshalIndent(results, "", "\t")
if err != nil {
fatal("json marshal error: %v", err)
}
if _, err := os.Stdout.Write(out); err != nil {
fatal("write failed: %v", err)
}
}
...@@ -56,8 +56,10 @@ func mkzcgo(dir, file string) { ...@@ -56,8 +56,10 @@ func mkzcgo(dir, file string) {
"package build\n"+ "package build\n"+
"\n"+ "\n"+
"var cgoEnabled = map[string]bool{\n") "var cgoEnabled = map[string]bool{\n")
for plat := range cgoEnabled { for plat, hasCgo := range cgoEnabled {
fmt.Fprintf(&buf, "\t%q: true,\n", plat) if hasCgo {
fmt.Fprintf(&buf, "\t%q: true,\n", plat)
}
} }
fmt.Fprintf(&buf, "}") fmt.Fprintf(&buf, "}")
......
...@@ -21,6 +21,7 @@ var cmdtab = []struct { ...@@ -21,6 +21,7 @@ var cmdtab = []struct {
{"clean", cmdclean}, {"clean", cmdclean},
{"env", cmdenv}, {"env", cmdenv},
{"install", cmdinstall}, {"install", cmdinstall},
{"list", cmdlist},
{"test", cmdtest}, {"test", cmdtest},
{"version", cmdversion}, {"version", cmdversion},
} }
......
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment