]> Cypherpunks repositories - gostls13.git/commitdiff
undo CL 5754088 / cae9a7c0db06
authorRuss Cox <rsc@golang.org>
Mon, 12 Mar 2012 21:03:29 +0000 (17:03 -0400)
committerRuss Cox <rsc@golang.org>
Mon, 12 Mar 2012 21:03:29 +0000 (17:03 -0400)
broke builders

««« original CL description
cmd/go: respect $GOBIN always

Before, we only consulted $GOBIN for source code
found in $GOROOT, but that's confusing to explain
and less useful.  The new behavior lets users set
GOBIN=$HOME/bin and have all go-compiled binaries
installed there.

Fixes #3269.

R=golang-dev, bradfitz
CC=golang-dev
https://golang.org/cl/5754088
»»»

TBR=bradfitz
CC=golang-dev
https://golang.org/cl/5794065

doc/install-source.html
src/cmd/go/build.go
src/cmd/go/doc.go
src/cmd/go/help.go
src/cmd/go/pkg.go

index 4673850f42d4c8ab23ca5d3de3715daf51d9c1f1..82ff8e740d05c2510095426b4803a4bc6ba9851c 100644 (file)
@@ -393,12 +393,11 @@ For example, you should not set <code>$GOHOSTARCH</code> to
 
 <p><code>$GOBIN</code>
 <p>
-The location where Go binaries will be installed.
+The location where binaries from the main repository will be installed.
+XXX THIS MAY CHANGE TO BE AN OVERRIDE EVEN FOR GOPATH ENTRIES XXX
 The default is <code>$GOROOT/bin</code>.
 After installing, you will want to arrange to add this
 directory to your <code>$PATH</code>, so you can use the tools.
-If <code>$GOBIN</code> is set, the <a href="/cmd/go">go command</a>
-installs all commands there.
 </p>
 
 <p><code>$GOARM</code> (arm, default=6)</p>
index 7929a3a54d62e9f6ffd8686565a9b810adf15910..e62de32e160c87cc835f57bb03ca26ed4fba1637 100644 (file)
@@ -199,8 +199,6 @@ along with their dependencies.
 
 For more about the build flags, see 'go help build'.
 For more about specifying packages, see 'go help packages'.
-For more about where packages and binaries are installed,
-see 'go help gopath'.
 
 See also: go build, go get, go clean.
        `,
@@ -304,13 +302,20 @@ const (
 )
 
 var (
-       gobin        = os.Getenv("GOBIN")
        goroot       = filepath.Clean(runtime.GOROOT())
+       gobin        = defaultGobin()
        gorootSrcPkg = filepath.Join(goroot, "src/pkg")
        gorootPkg    = filepath.Join(goroot, "pkg")
        gorootSrc    = filepath.Join(goroot, "src")
 )
 
+func defaultGobin() string {
+       if s := os.Getenv("GOBIN"); s != "" {
+               return s
+       }
+       return filepath.Join(goroot, "bin")
+}
+
 func (b *builder) init() {
        var err error
        b.print = fmt.Print
@@ -382,24 +387,18 @@ func goFilesPackage(gofiles []string) *Package {
        pkg.load(&stk, bp, err)
        pkg.localPrefix = dirToImportPath(dir)
        pkg.ImportPath = "command-line-arguments"
-       pkg.target = ""
 
-       if pkg.Name == "main" {
-               _, elem := filepath.Split(gofiles[0])
-               exe := elem[:len(elem)-len(".go")] + exeSuffix
-               if *buildO == "" {
-                       *buildO = exe
-               }
-               if gobin != "" {
-                       pkg.target = filepath.Join(gobin, exe)
-               }
-       } else {
-               if *buildO == "" {
+       if *buildO == "" {
+               if pkg.Name == "main" {
+                       _, elem := filepath.Split(gofiles[0])
+                       *buildO = elem[:len(elem)-len(".go")] + exeSuffix
+               } else {
                        *buildO = pkg.Name + ".a"
                }
        }
+       pkg.target = ""
+       pkg.Target = ""
        pkg.Stale = true
-       pkg.Target = pkg.target
 
        computeStale(pkg)
        return pkg
@@ -463,13 +462,13 @@ func (b *builder) action(mode buildMode, depMode buildMode, p *Package) *action
                return a
        }
 
-       a.link = p.Name == "main"
-       if p.local && (!a.link || p.target == "") {
+       if p.local {
                // Imported via local path.  No permanent target.
                mode = modeBuild
        }
        a.objdir = filepath.Join(b.work, a.p.ImportPath, "_obj") + string(filepath.Separator)
        a.objpkg = buildToolchain.pkgpath(b.work, a.p)
+       a.link = p.Name == "main"
 
        switch mode {
        case modeInstall:
index aacd7269e6213393c29d7ee4abc052bb2f7a3598..eb9c38b63968bfe98207838b3bae68c9c418d20a 100644 (file)
@@ -453,9 +453,7 @@ the final element, not the entire path.  That is, the
 command with source in DIR/src/foo/quux is installed into
 DIR/bin/quux, not DIR/bin/foo/quux.  The foo/ is stripped
 so that you can add DIR/bin to your PATH to get at the
-installed commands.  If the GOBIN environment variable is
-set, commands are installed to the directory it names instead
-of DIR/bin.
+installed commands.
 
 Here's an example directory layout:
 
index 47ea0c7110f87745d43f2a3090bc4e5b59622410..26640d833c5489a8545374f188236bcf410c006e 100644 (file)
@@ -209,9 +209,7 @@ the final element, not the entire path.  That is, the
 command with source in DIR/src/foo/quux is installed into
 DIR/bin/quux, not DIR/bin/foo/quux.  The foo/ is stripped
 so that you can add DIR/bin to your PATH to get at the
-installed commands.  If the GOBIN environment variable is
-set, commands are installed to the directory it names instead
-of DIR/bin.
+installed commands.
 
 Here's an example directory layout:
 
index 9a72bb1e2e9d882aec06f7ba611841c967e9dfa8..1b6a8c5124cdcc21629a4d8b6e2961fb59a859d8 100644 (file)
@@ -276,9 +276,6 @@ func expandScanner(err error) error {
 // load populates p using information from bp, err, which should
 // be the result of calling build.Context.Import.
 func (p *Package) load(stk *importStack, bp *build.Package, err error) *Package {
-       if gobin != "" {
-               bp.BinDir = gobin
-       }
        p.copyBuild(bp)
 
        // The localPrefix is the path we interpret ./ imports relative to.
@@ -541,6 +538,7 @@ func loadPackage(arg string, stk *importStack) *Package {
                bp, err := build.ImportDir(filepath.Join(gorootSrc, arg), 0)
                bp.ImportPath = arg
                bp.Goroot = true
+               bp.BinDir = gobin
                bp.Root = goroot
                bp.SrcRoot = gorootSrc
                p := new(Package)