From 652293284321e34fa1d87ad70c28a854b5b47580 Mon Sep 17 00:00:00 2001 From: Ian Lance Taylor Date: Fri, 4 May 2018 01:34:30 +0000 Subject: [PATCH] cmd/go: update to match recent changes to gc In https://golang.org/cl/111097 the gc version of cmd/go was updated to include some gofrontend-specific changes. The gofrontend code already has different versions of those changes; this CL makes the gofrontend match the upstream code. Reviewed-on: https://go-review.googlesource.com/111099 From-SVN: r259918 --- gcc/go/gofrontend/MERGE | 2 +- libgo/go/cmd/go/alldocs.go | 6 +++--- libgo/go/cmd/go/internal/cfg/cfg.go | 11 +++++++---- libgo/go/cmd/go/internal/help/helpdoc.go | 6 +++--- libgo/go/cmd/go/internal/load/pkg.go | 3 +-- libgo/go/go/build/build.go | 9 +-------- libgo/go/go/build/gc.go | 17 +++++++++++++++++ libgo/go/go/build/gccgo.go | 14 ++++++++++++++ 8 files changed, 47 insertions(+), 21 deletions(-) create mode 100644 libgo/go/go/build/gc.go create mode 100644 libgo/go/go/build/gccgo.go diff --git a/gcc/go/gofrontend/MERGE b/gcc/go/gofrontend/MERGE index 614333d96d7..c45c9181ac4 100644 --- a/gcc/go/gofrontend/MERGE +++ b/gcc/go/gofrontend/MERGE @@ -1,4 +1,4 @@ -85ca682349af2cb1aa6b1eecac794aeb73d24f15 +bf6f714559bd7b27b7686811aaf0f6e8e7f1c0d5 The first line of this file holds the git revision number of the last merge done from the gofrontend repository. diff --git a/libgo/go/cmd/go/alldocs.go b/libgo/go/cmd/go/alldocs.go index 5e1ac5aaf57..aadf97c064f 100644 --- a/libgo/go/cmd/go/alldocs.go +++ b/libgo/go/cmd/go/alldocs.go @@ -1266,6 +1266,9 @@ // // Special-purpose environment variables: // +// GCCGOTOOLDIR +// If set, where to find gccgo tools, such as cgo. +// The default is based on how gccgo was configured. // GOROOT_FINAL // The root of the installed Go tree, when it is // installed in a location other than where it is built. @@ -1279,9 +1282,6 @@ // Defined by Git. A colon-separated list of schemes that are allowed to be used // with git fetch/clone. If set, any scheme not explicitly mentioned will be // considered insecure by 'go get'. -// GCCGOTOOLDIR -// If set, where to find gccgo tools, such as cgo. -// The default is based on how gccgo was configured. // // // Import path syntax diff --git a/libgo/go/cmd/go/internal/cfg/cfg.go b/libgo/go/cmd/go/internal/cfg/cfg.go index bfdd67e842d..f0a2277d1b2 100644 --- a/libgo/go/cmd/go/internal/cfg/cfg.go +++ b/libgo/go/cmd/go/internal/cfg/cfg.go @@ -92,11 +92,12 @@ var ( // Update build context to use our computed GOROOT. func init() { BuildContext.GOROOT = GOROOT - // Note that we must use runtime.GOOS and runtime.GOARCH here, - // as the tool directory does not move based on environment variables. - // This matches the initialization of ToolDir in go/build, - // except for using GOROOT rather than runtime.GOROOT(). if runtime.Compiler != "gccgo" { + // Note that we must use runtime.GOOS and runtime.GOARCH here, + // as the tool directory does not move based on environment + // variables. This matches the initialization of ToolDir in + // go/build, except for using GOROOT rather than + // runtime.GOROOT. build.ToolDir = filepath.Join(GOROOT, "pkg/tool/"+runtime.GOOS+"_"+runtime.GOARCH) } } @@ -107,6 +108,8 @@ func findGOROOT() string { } def := filepath.Clean(runtime.GOROOT()) if runtime.Compiler == "gccgo" { + // gccgo has no real GOROOT, and it certainly doesn't + // depend on the executable's location. return def } exe, err := os.Executable() diff --git a/libgo/go/cmd/go/internal/help/helpdoc.go b/libgo/go/cmd/go/internal/help/helpdoc.go index 9a9fc4e9448..6aa449a8e29 100644 --- a/libgo/go/cmd/go/internal/help/helpdoc.go +++ b/libgo/go/cmd/go/internal/help/helpdoc.go @@ -526,6 +526,9 @@ Architecture-specific environment variables: Special-purpose environment variables: + GCCGOTOOLDIR + If set, where to find gccgo tools, such as cgo. + The default is based on how gccgo was configured. GOROOT_FINAL The root of the installed Go tree, when it is installed in a location other than where it is built. @@ -539,9 +542,6 @@ Special-purpose environment variables: Defined by Git. A colon-separated list of schemes that are allowed to be used with git fetch/clone. If set, any scheme not explicitly mentioned will be considered insecure by 'go get'. - GCCGOTOOLDIR - If set, where to find gccgo tools, such as cgo. - The default is based on how gccgo was configured. `, } diff --git a/libgo/go/cmd/go/internal/load/pkg.go b/libgo/go/cmd/go/internal/load/pkg.go index 52ff6b8fcd2..d3026072e09 100644 --- a/libgo/go/cmd/go/internal/load/pkg.go +++ b/libgo/go/cmd/go/internal/load/pkg.go @@ -13,7 +13,6 @@ import ( "os" pathpkg "path" "path/filepath" - "runtime" "sort" "strings" "unicode" @@ -976,7 +975,7 @@ func (p *Package) load(stk *ImportStack, bp *build.Package, err error) { // This is for 'go tool'. // Override all the usual logic and force it into the tool directory. if cfg.BuildToolchainName == "gccgo" { - p.Target = filepath.Join(runtime.GCCGOTOOLDIR, elem) + p.Target = filepath.Join(base.ToolDir, elem) } else { p.Target = filepath.Join(cfg.GOROOTpkg, "tool", full) } diff --git a/libgo/go/go/build/build.go b/libgo/go/go/build/build.go index 79024042136..4e779557942 100644 --- a/libgo/go/go/build/build.go +++ b/libgo/go/go/build/build.go @@ -1595,14 +1595,7 @@ func init() { } } -func getToolDir() string { - if runtime.Compiler == "gccgo" { - return envOr("GCCGOTOOLDIR", runtime.GCCGOTOOLDIR) - } else { - return filepath.Join(runtime.GOROOT(), "pkg/tool/"+runtime.GOOS+"_"+runtime.GOARCH) - } -} - +// ToolDir is the directory containing build tools. var ToolDir = getToolDir() // IsLocalImport reports whether the import path is diff --git a/libgo/go/go/build/gc.go b/libgo/go/go/build/gc.go new file mode 100644 index 00000000000..3025cd56815 --- /dev/null +++ b/libgo/go/go/build/gc.go @@ -0,0 +1,17 @@ +// Copyright 2018 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. + +// +build gc + +package build + +import ( + "path/filepath" + "runtime" +) + +// getToolDir returns the default value of ToolDir. +func getToolDir() string { + return filepath.Join(runtime.GOROOT(), "pkg/tool/"+runtime.GOOS+"_"+runtime.GOARCH) +} diff --git a/libgo/go/go/build/gccgo.go b/libgo/go/go/build/gccgo.go new file mode 100644 index 00000000000..c6aac9aa1bc --- /dev/null +++ b/libgo/go/go/build/gccgo.go @@ -0,0 +1,14 @@ +// Copyright 2018 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. + +// +build gccgo + +package build + +import "runtime" + +// getToolDir returns the default value of ToolDir. +func getToolDir() string { + return envOr("GCCGOTOOLDIR", runtime.GCCGOTOOLDIR) +} -- 2.30.2