1
0
mirror of https://github.com/golang/go synced 2024-11-25 06:07:58 -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:
Russ Cox 2012-03-08 14:28:44 -05:00
parent 36aa7d4d14
commit 2c46569f57
4 changed files with 125 additions and 12 deletions

View File

@ -4,7 +4,7 @@
# license that can be found in the LICENSE file. # license that can be found in the LICENSE file.
set -e 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 go build main.go
LD_LIBRARY_PATH=. ./main LD_LIBRARY_PATH=. ./main
rm -f libcgosotest.so main rm -f libcgosotest.so main

View File

@ -14,6 +14,7 @@ The commands are:
build compile packages and dependencies build compile packages and dependencies
clean remove object files clean remove object files
doc run godoc on package sources doc run godoc on package sources
env print Go environment information
fix run go tool fix on packages fix run go tool fix on packages
fmt run gofmt on package sources fmt run gofmt on package sources
get download and install packages and dependencies 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 -x
print the commands. print the commands.
-compiler name
name of compiler to use, as in runtime.Compiler (gccgo or gc)
-gccgoflags 'arg list' -gccgoflags 'arg list'
arguments to pass on each gccgo compiler/linker invocation arguments to pass on each gccgo compiler/linker invocation
-gcflags 'arg list' -gcflags 'arg list'
@ -153,6 +156,20 @@ To run godoc with specific options, run godoc itself.
See also: go fix, go fmt, go vet. 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 Run go tool fix on packages
Usage: Usage:
@ -253,21 +270,28 @@ is equivalent to -f '{{.ImportPath}}'. The struct
being passed to the template is: being passed to the template is:
type Package struct { type Package struct {
Dir string // directory containing package sources
ImportPath string // import path of package in dir
Name string // package name Name string // package name
Doc string // package documentation string Doc string // package documentation string
ImportPath string // import path of package in dir Target string // install path
Dir string // directory containing package sources Goroot bool // is this package in the Go root?
Version string // version of installed package (TODO) Standard bool // is this package part of the standard Go library?
Stale bool // would 'go install' do anything for this package? Stale bool // would 'go install' do anything for this package?
Root string // Go root or Go path dir containing this package
// Source files // Source files
GoFiles []string // .go source files (excluding CgoFiles, TestGoFiles, and XTestGoFiles) GoFiles []string // .go source files (excluding CgoFiles, TestGoFiles, XTestGoFiles)
TestGoFiles []string // _test.go source files internal to the package they are testing CgoFiles []string // .go sources files that import "C"
XTestGoFiles []string // _test.go source files external to the package they are testing CFiles []string // .c source files
CFiles []string // .c source files HFiles []string // .h source files
HFiles []string // .h source files SFiles []string // .s source files
SFiles []string // .s source files SysoFiles []string // .syso object files to add to archive
CgoFiles []string // .go sources files that import "C"
// Cgo directives
CgoCFLAGS []string // cgo: flags for C compiler
CgoLDFLAGS []string // cgo: flags for linker
CgoPkgConfig []string // cgo: pkg-config names
// Dependency information // Dependency information
Imports []string // import paths used by this package Imports []string // import paths used by this package
@ -275,8 +299,13 @@ being passed to the template is:
// Error information // Error information
Incomplete bool // this package or a dependency has an error 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 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 The -json flag causes the package data to be printed in JSON format

83
src/cmd/go/env.go Normal file
View 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)
}
}
}

View File

@ -76,6 +76,7 @@ var commands = []*Command{
cmdBuild, cmdBuild,
cmdClean, cmdClean,
cmdDoc, cmdDoc,
cmdEnv,
cmdFix, cmdFix,
cmdFmt, cmdFmt,
cmdGet, cmdGet,