]> Cypherpunks repositories - gostls13.git/commitdiff
[release-branch.go1] cmd/api: add flag to specify contexts
authorBrad Fitzpatrick <bradfitz@golang.org>
Wed, 13 Jun 2012 20:24:12 +0000 (16:24 -0400)
committerBrad Fitzpatrick <bradfitz@golang.org>
Wed, 13 Jun 2012 20:24:12 +0000 (16:24 -0400)
««« backport 287685288ce1
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

»»»

src/cmd/api/goapi.go

index 533636cd8aba96294d0302305a9556003ad9dc14..b10a51c510d251418c2d360d9a3019c3e63a5eb2 100644 (file)
@@ -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()