mirror of
https://github.com/golang/go
synced 2024-11-25 06:47:56 -07:00
cmd/go: add env command, use to fix misc/cgo/testso
Fixes 386 build on 64-bit machines. R=golang-dev, bradfitz, minux.ma CC=golang-dev https://golang.org/cl/5785053
This commit is contained in:
parent
36aa7d4d14
commit
2c46569f57
@ -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
|
||||
|
@ -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
|
||||
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
|
||||
CgoFiles []string // .go sources files that import "C"
|
||||
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
|
||||
@ -277,6 +301,11 @@ being passed to the template is:
|
||||
Incomplete bool // this package or a dependency has an error
|
||||
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
|
||||
|
83
src/cmd/go/env.go
Normal file
83
src/cmd/go/env.go
Normal file
@ -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)
|
||||
}
|
||||
}
|
||||
}
|
@ -76,6 +76,7 @@ var commands = []*Command{
|
||||
cmdBuild,
|
||||
cmdClean,
|
||||
cmdDoc,
|
||||
cmdEnv,
|
||||
cmdFix,
|
||||
cmdFmt,
|
||||
cmdGet,
|
||||
|
Loading…
Reference in New Issue
Block a user