cmd: Use correct install tool dir with gccgo

When using the go command built from gccgo to build and
    install a go tool, use the value from runtime GCCGOTOOLDIR as
    the install directory.
    
    This also fixes the output from 'go tool' when used with the
    gccgo-built go command, to only include the go tools and not
    other binaries found in the same directory.
    
    Reviewed-on: https://go-review.googlesource.com/16516

From-SVN: r230677
This commit is contained in:
Ian Lance Taylor 2015-11-20 21:30:16 +00:00
parent 1fb19247a9
commit dcfa3345eb
3 changed files with 28 additions and 3 deletions

View File

@ -1,4 +1,4 @@
dfa74d975884f363c74d6a66a37b1703093fdba6 d52835c9376985f92f35c32af5f1808239981536
The first line of this file holds the git revision number of the last The first line of this file holds the git revision number of the last
merge done from the gofrontend repository. merge done from the gofrontend repository.

View File

@ -785,7 +785,11 @@ func (p *Package) load(stk *importStack, bp *build.Package, err error) *Package
if goTools[p.ImportPath] == toTool { if goTools[p.ImportPath] == toTool {
// This is for 'go tool'. // This is for 'go tool'.
// Override all the usual logic and force it into the tool directory. // Override all the usual logic and force it into the tool directory.
p.target = filepath.Join(gorootPkg, "tool", full) if buildContext.Compiler == "gccgo" {
p.target = filepath.Join(runtime.GCCGOTOOLDIR, elem)
} else {
p.target = filepath.Join(gorootPkg, "tool", full)
}
} }
if p.target != "" && buildContext.GOOS == "windows" { if p.target != "" && buildContext.GOOS == "windows" {
p.target += ".exe" p.target += ".exe"

View File

@ -39,6 +39,12 @@ var (
toolN bool toolN bool
) )
// List of go tools found in the gccgo tool directory.
// Other binaries could be in the same directory so don't
// show those with the 'go tool' command.
var gccgoTools = []string{"cgo", "fix", "cover", "godoc", "vet"}
func init() { func init() {
cmdTool.Flag.BoolVar(&toolN, "n", false, "") cmdTool.Flag.BoolVar(&toolN, "n", false, "")
} }
@ -146,6 +152,21 @@ func listTools() {
if toolIsWindows && strings.HasSuffix(name, toolWindowsExtension) { if toolIsWindows && strings.HasSuffix(name, toolWindowsExtension) {
name = name[:len(name)-len(toolWindowsExtension)] name = name[:len(name)-len(toolWindowsExtension)]
} }
fmt.Println(name)
// The tool directory used by gccgo will have other binaries
// in additions to go tools. Only display go tools for this list.
if buildContext.Compiler == "gccgo" {
for _, tool := range gccgoTools {
if tool == name {
fmt.Println(name)
}
}
} else {
// Not gccgo, list all the tools found in this dir
fmt.Println(name)
}
} }
} }