]> Cypherpunks repositories - gostls13.git/commitdiff
cmd/go: add env command, use to fix misc/cgo/testso
authorRuss Cox <rsc@golang.org>
Thu, 8 Mar 2012 19:28:44 +0000 (14:28 -0500)
committerRuss Cox <rsc@golang.org>
Thu, 8 Mar 2012 19:28:44 +0000 (14:28 -0500)
Fixes 386 build on 64-bit machines.

R=golang-dev, bradfitz, minux.ma
CC=golang-dev
https://golang.org/cl/5785053

misc/cgo/testso/test.bash
src/cmd/go/doc.go
src/cmd/go/env.go [new file with mode: 0644]
src/cmd/go/main.go

index 119fd64827281e9eda35a4d6782a828054fa54d0..ecef873c8d61bf0649ac8af269a5531520ab8dd2 100755 (executable)
@@ -4,7 +4,7 @@
 # license that can be found in the LICENSE file.
 
 set -e
-gcc -fPIC -g -shared -o libcgosotest.so cgoso_c.c
+gcc $(go env GOGCCFLAGS) -shared -o libcgosotest.so cgoso_c.c
 go build main.go
 LD_LIBRARY_PATH=. ./main
 rm -f libcgosotest.so main
index 8df57ff38ed99d3bb2444c5300fa6c838d58c423..80938087d0e2059701192e6a056046fd22727d1c 100644 (file)
@@ -14,6 +14,7 @@ The commands are:
     build       compile packages and dependencies
     clean       remove object files
     doc         run godoc on package sources
+    env         print Go environment information
     fix         run go tool fix on packages
     fmt         run gofmt on package sources
     get         download and install packages and dependencies
@@ -76,6 +77,8 @@ The build flags are shared by the build, install, run, and test commands:
        -x
                print the commands.
 
+       -compiler name
+               name of compiler to use, as in runtime.Compiler (gccgo or gc)
        -gccgoflags 'arg list'
                arguments to pass on each gccgo compiler/linker invocation
        -gcflags 'arg list'
@@ -153,6 +156,20 @@ To run godoc with specific options, run godoc itself.
 See also: go fix, go fmt, go vet.
 
 
+Print Go environment information
+
+Usage:
+
+       go env [var ...]
+
+Env prints Go environment information.
+
+By default env prints information as a shell script
+(on Windows, a batch file).  If one or more variable
+names is given as arguments,  env prints the value of
+each named variable on its own line.
+
+
 Run go tool fix on packages
 
 Usage:
@@ -253,21 +270,28 @@ is equivalent to -f '{{.ImportPath}}'.  The struct
 being passed to the template is:
 
     type Package struct {
+        Dir        string // directory containing package sources
+        ImportPath string // import path of package in dir
         Name       string // package name
         Doc        string // package documentation string
-        ImportPath string // import path of package in dir
-        Dir        string // directory containing package sources
-        Version    string // version of installed package (TODO)
+        Target     string // install path
+        Goroot     bool   // is this package in the Go root?
+        Standard   bool   // is this package part of the standard Go library?
         Stale      bool   // would 'go install' do anything for this package?
+        Root       string // Go root or Go path dir containing this package
 
         // Source files
-        GoFiles      []string // .go source files (excluding CgoFiles, TestGoFiles, and XTestGoFiles)
-        TestGoFiles  []string // _test.go source files internal to the package they are testing
-        XTestGoFiles []string // _test.go source files external to the package they are testing
-        CFiles       []string // .c source files
-        HFiles       []string // .h source files
-        SFiles       []string // .s source files
-        CgoFiles     []string // .go sources files that import "C"
+        GoFiles  []string  // .go source files (excluding CgoFiles, TestGoFiles, XTestGoFiles)
+        CgoFiles []string  // .go sources files that import "C"
+        CFiles   []string  // .c source files
+        HFiles   []string  // .h source files
+        SFiles   []string  // .s source files
+        SysoFiles []string // .syso object files to add to archive
+
+        // Cgo directives
+        CgoCFLAGS    []string // cgo: flags for C compiler
+        CgoLDFLAGS   []string // cgo: flags for linker
+        CgoPkgConfig []string // cgo: pkg-config names
 
         // Dependency information
         Imports []string // import paths used by this package
@@ -275,8 +299,13 @@ being passed to the template is:
 
         // Error information
         Incomplete bool            // this package or a dependency has an error
-        Error *PackageError        // error loading package
+        Error      *PackageError   // error loading package
         DepsErrors []*PackageError // errors loading dependencies
+
+        TestGoFiles  []string // _test.go files in package
+        TestImports  []string // imports from TestGoFiles
+        XTestGoFiles []string // _test.go files outside package
+        XTestImports []string // imports from XTestGoFiles
     }
 
 The -json flag causes the package data to be printed in JSON format
diff --git a/src/cmd/go/env.go b/src/cmd/go/env.go
new file mode 100644 (file)
index 0000000..804dc8e
--- /dev/null
@@ -0,0 +1,83 @@
+// Copyright 2012 The Go Authors.  All rights reserved.
+// Use of this source code is governed by a BSD-style
+// license that can be found in the LICENSE file.
+
+package main
+
+import (
+       "fmt"
+       "runtime"
+       "strings"
+)
+
+var cmdEnv = &Command{
+       Run:       runEnv,
+       UsageLine: "env [var ...]",
+       Short:     "print Go environment information",
+       Long: `
+Env prints Go environment information.
+
+By default env prints information as a shell script
+(on Windows, a batch file).  If one or more variable
+names is given as arguments,  env prints the value of
+each named variable on its own line.
+       `,
+}
+
+type envVar struct {
+       name, value string
+}
+
+func mkEnv() []envVar {
+       var b builder
+       b.init()
+
+       env := []envVar{
+               {"GOROOT", goroot},
+               {"GOBIN", gobin},
+               {"GOARCH", goarch},
+               {"GOCHAR", archChar},
+               {"GOOS", goos},
+               {"GOEXE", exeSuffix},
+               {"GOHOSTARCH", runtime.GOARCH},
+               {"GOHOSTOS", runtime.GOOS},
+               {"GOTOOLDIR", toolDir},
+               {"GOGCCFLAGS", strings.Join(b.gccCmd(".")[3:], " ")},
+       }
+
+       return env
+}
+
+func findEnv(env []envVar, name string) string {
+       for _, e := range env {
+               if e.name == name {
+                       return e.value
+               }
+       }
+       return ""
+}
+
+func runEnv(cmd *Command, args []string) {
+       env := mkEnv()
+       if len(args) > 0 {
+               for _, name := range args {
+                       fmt.Printf("%s\n", findEnv(env, name))
+               }
+               return
+       }
+
+       switch runtime.GOOS {
+       default:
+               for _, e := range env {
+                       fmt.Printf("%s=\"%s\"\n", e.name, e.value)
+               }
+       case "plan9":
+               for _, e := range env {
+                       fmt.Printf("%s='%s'\n", e.name, strings.Replace(e.value, "'", "''", -1))
+               }
+       case "windows":
+               for _, e := range env {
+                       fmt.Printf("set %s=%s\n", e.name, e.value)
+               }
+       }
+}
index 3a0f7a089d453533dfb35e8ec85940aeeccbd821..2cc23d9bd3c16be58756b27a432d85c0ead30e17 100644 (file)
@@ -76,6 +76,7 @@ var commands = []*Command{
        cmdBuild,
        cmdClean,
        cmdDoc,
+       cmdEnv,
        cmdFix,
        cmdFmt,
        cmdGet,