aboutsummaryrefslogtreecommitdiff
path: root/src/cmd/api/goapi.go
diff options
context:
space:
mode:
authorBrad Fitzpatrick <bradfitz@golang.org>2012-05-23 13:45:53 -0700
committerBrad Fitzpatrick <bradfitz@golang.org>2012-05-23 13:45:53 -0700
commitf430d0e6096093c9b21b05c48acabe4ab15f87cd (patch)
treed05257918849c1bdd58203caff6515171df9d99a /src/cmd/api/goapi.go
parente4ed9494e5a9a6f2c05f84f9279c8062d8a9427d (diff)
downloadgo-f430d0e6096093c9b21b05c48acabe4ab15f87cd.tar.xz
cmd/api: add flag to specify contexts
I needed this to explore per-GOOS/GOARCH differences in pkg syscall for a recent CL. Others may find it useful too. R=golang-dev, rsc CC=golang-dev https://golang.org/cl/6236046
Diffstat (limited to 'src/cmd/api/goapi.go')
-rw-r--r--src/cmd/api/goapi.go42
1 files changed, 36 insertions, 6 deletions
diff --git a/src/cmd/api/goapi.go b/src/cmd/api/goapi.go
index 533636cd8a..b10a51c510 100644
--- a/src/cmd/api/goapi.go
+++ b/src/cmd/api/goapi.go
@@ -41,8 +41,11 @@ var (
allowNew = flag.Bool("allow_new", true, "allow API additions")
nextFile = flag.String("next", "", "optional filename of tentative upcoming API features for the next release. This file can be lazily maintained. It only affects the delta warnings from the -c file printed on success.")
verbose = flag.Bool("v", false, "verbose debugging")
+ forceCtx = flag.String("contexts", "", "optional comma-separated list of <goos>-<goarch>[-cgo] to override default contexts.")
)
+// contexts are the default contexts which are scanned, unless
+// overridden by the -contexts flag.
var contexts = []*build.Context{
{GOOS: "linux", GOARCH: "386", CgoEnabled: true},
{GOOS: "linux", GOARCH: "386"},
@@ -56,12 +59,6 @@ var contexts = []*build.Context{
{GOOS: "windows", GOARCH: "386"},
}
-func init() {
- for _, c := range contexts {
- c.Compiler = build.Default.Compiler
- }
-}
-
func contextName(c *build.Context) string {
s := c.GOOS + "-" + c.GOARCH
if c.CgoEnabled {
@@ -70,9 +67,42 @@ func contextName(c *build.Context) string {
return s
}
+func parseContext(c string) *build.Context {
+ parts := strings.Split(c, "-")
+ if len(parts) < 2 {
+ log.Fatalf("bad context: %q", c)
+ }
+ bc := &build.Context{
+ GOOS: parts[0],
+ GOARCH: parts[1],
+ }
+ if len(parts) == 3 {
+ if parts[2] == "cgo" {
+ bc.CgoEnabled = true
+ } else {
+ log.Fatalf("bad context: %q", c)
+ }
+ }
+ return bc
+}
+
+func setContexts() {
+ contexts = []*build.Context{}
+ for _, c := range strings.Split(*forceCtx, ",") {
+ contexts = append(contexts, parseContext(c))
+ }
+}
+
func main() {
flag.Parse()
+ if *forceCtx != "" {
+ setContexts()
+ }
+ for _, c := range contexts {
+ c.Compiler = build.Default.Compiler
+ }
+
var pkgs []string
if flag.NArg() > 0 {
pkgs = flag.Args()