mirror of
https://github.com/golang/go
synced 2024-11-24 05:40:15 -07:00
cmd/go: move internal/load.PluginPath to internal/work
It uses the build ID, which is soon to be internal to package work. Luckily it is also only called from package work. Change-Id: I5e6662cfe667bdc9190f086be733105ad65a3191 Reviewed-on: https://go-review.googlesource.com/70670 Run-TryBot: Russ Cox <rsc@golang.org> TryBot-Result: Gobot Gobot <gobot@golang.org> Reviewed-by: David Crawshaw <crawshaw@golang.org>
This commit is contained in:
parent
a607b3b437
commit
1992ab7e65
1
src/cmd/dist/deps.go
vendored
1
src/cmd/dist/deps.go
vendored
@ -332,6 +332,7 @@ var builddeps = map[string][]string{
|
|||||||
"cmd/go/internal/str", // cmd/go/internal/work
|
"cmd/go/internal/str", // cmd/go/internal/work
|
||||||
"cmd/internal/buildid", // cmd/go/internal/work
|
"cmd/internal/buildid", // cmd/go/internal/work
|
||||||
"container/heap", // cmd/go/internal/work
|
"container/heap", // cmd/go/internal/work
|
||||||
|
"crypto/sha1", // cmd/go/internal/work
|
||||||
"crypto/sha256", // cmd/go/internal/work
|
"crypto/sha256", // cmd/go/internal/work
|
||||||
"debug/elf", // cmd/go/internal/work
|
"debug/elf", // cmd/go/internal/work
|
||||||
"encoding/json", // cmd/go/internal/work
|
"encoding/json", // cmd/go/internal/work
|
||||||
|
@ -1689,29 +1689,6 @@ func pkgInputFiles(p *Package) []string {
|
|||||||
)
|
)
|
||||||
}
|
}
|
||||||
|
|
||||||
// PluginPath computes the package path for a plugin main package.
|
|
||||||
//
|
|
||||||
// This is typically the import path of the main package p, unless the
|
|
||||||
// plugin is being built directly from source files. In that case we
|
|
||||||
// combine the package build ID with the contents of the main package
|
|
||||||
// source files. This allows us to identify two different plugins
|
|
||||||
// built from two source files with the same name.
|
|
||||||
func PluginPath(p *Package) string {
|
|
||||||
if p.ImportPath != "command-line-arguments" {
|
|
||||||
return p.ImportPath
|
|
||||||
}
|
|
||||||
h := sha1.New()
|
|
||||||
fmt.Fprintf(h, "build ID: %s\n", p.Internal.BuildID)
|
|
||||||
for _, file := range str.StringList(p.GoFiles, p.CgoFiles, p.SFiles) {
|
|
||||||
data, err := ioutil.ReadFile(filepath.Join(p.Dir, file))
|
|
||||||
if err != nil {
|
|
||||||
base.Fatalf("go: %s", err)
|
|
||||||
}
|
|
||||||
h.Write(data)
|
|
||||||
}
|
|
||||||
return fmt.Sprintf("plugin/unnamed-%x", h.Sum(nil))
|
|
||||||
}
|
|
||||||
|
|
||||||
// computeBuildID computes the build ID for p, leaving it in p.Internal.BuildID.
|
// computeBuildID computes the build ID for p, leaving it in p.Internal.BuildID.
|
||||||
// Build ID is a hash of the information we want to detect changes in.
|
// Build ID is a hash of the information we want to detect changes in.
|
||||||
// See the long comment in isStale for details.
|
// See the long comment in isStale for details.
|
||||||
|
@ -8,6 +8,7 @@ import (
|
|||||||
"bufio"
|
"bufio"
|
||||||
"bytes"
|
"bytes"
|
||||||
"container/heap"
|
"container/heap"
|
||||||
|
"crypto/sha1"
|
||||||
"crypto/sha256"
|
"crypto/sha256"
|
||||||
"debug/elf"
|
"debug/elf"
|
||||||
"encoding/json"
|
"encoding/json"
|
||||||
@ -2501,7 +2502,7 @@ func (gcToolchain) gc(b *Builder, a *Action, archive string, importcfg []byte, a
|
|||||||
|
|
||||||
pkgpath := p.ImportPath
|
pkgpath := p.ImportPath
|
||||||
if cfg.BuildBuildmode == "plugin" {
|
if cfg.BuildBuildmode == "plugin" {
|
||||||
pkgpath = load.PluginPath(p)
|
pkgpath = pluginPath(p)
|
||||||
} else if p.Name == "main" {
|
} else if p.Name == "main" {
|
||||||
pkgpath = "main"
|
pkgpath = "main"
|
||||||
}
|
}
|
||||||
@ -2814,6 +2815,29 @@ func setextld(ldflags []string, compiler []string) []string {
|
|||||||
return ldflags
|
return ldflags
|
||||||
}
|
}
|
||||||
|
|
||||||
|
// pluginPath computes the package path for a plugin main package.
|
||||||
|
//
|
||||||
|
// This is typically the import path of the main package p, unless the
|
||||||
|
// plugin is being built directly from source files. In that case we
|
||||||
|
// combine the package build ID with the contents of the main package
|
||||||
|
// source files. This allows us to identify two different plugins
|
||||||
|
// built from two source files with the same name.
|
||||||
|
func pluginPath(p *load.Package) string {
|
||||||
|
if p.ImportPath != "command-line-arguments" {
|
||||||
|
return p.ImportPath
|
||||||
|
}
|
||||||
|
h := sha1.New()
|
||||||
|
fmt.Fprintf(h, "build ID: %s\n", p.Internal.BuildID)
|
||||||
|
for _, file := range str.StringList(p.GoFiles, p.CgoFiles, p.SFiles) {
|
||||||
|
data, err := ioutil.ReadFile(filepath.Join(p.Dir, file))
|
||||||
|
if err != nil {
|
||||||
|
base.Fatalf("go: %s", err)
|
||||||
|
}
|
||||||
|
h.Write(data)
|
||||||
|
}
|
||||||
|
return fmt.Sprintf("plugin/unnamed-%x", h.Sum(nil))
|
||||||
|
}
|
||||||
|
|
||||||
func (gcToolchain) ld(b *Builder, root *Action, out, importcfg, mainpkg string) error {
|
func (gcToolchain) ld(b *Builder, root *Action, out, importcfg, mainpkg string) error {
|
||||||
cxx := len(root.Package.CXXFiles) > 0 || len(root.Package.SwigCXXFiles) > 0
|
cxx := len(root.Package.CXXFiles) > 0 || len(root.Package.SwigCXXFiles) > 0
|
||||||
for _, a := range root.Deps {
|
for _, a := range root.Deps {
|
||||||
@ -2829,7 +2853,7 @@ func (gcToolchain) ld(b *Builder, root *Action, out, importcfg, mainpkg string)
|
|||||||
ldflags = append(ldflags, "-s", "-w")
|
ldflags = append(ldflags, "-s", "-w")
|
||||||
}
|
}
|
||||||
if cfg.BuildBuildmode == "plugin" {
|
if cfg.BuildBuildmode == "plugin" {
|
||||||
ldflags = append(ldflags, "-pluginpath", load.PluginPath(root.Package))
|
ldflags = append(ldflags, "-pluginpath", pluginPath(root.Package))
|
||||||
}
|
}
|
||||||
|
|
||||||
// TODO(rsc): This is probably wrong - see golang.org/issue/22155.
|
// TODO(rsc): This is probably wrong - see golang.org/issue/22155.
|
||||||
|
Loading…
Reference in New Issue
Block a user