mirror of
https://github.com/golang/go
synced 2024-11-25 16:07:56 -07:00
cmd/go: improvements
Do not treat $GOROOT/src/pkg, $GOROOT/src/cmd, $GOPATH/src as package directories (only subdirectories of those can be package directories). Fixes issue 2602. Accept additional compiler and linker arguments during cgo from $CGO_CFLAGS and $CGO_LDFLAGS, as the Makefiles used to do. Show failed pkg-config output. Fixes issue 2785. Use different (perhaps better) git commands. Fixes issue 2109. R=golang-dev, r CC=golang-dev https://golang.org/cl/5605045
This commit is contained in:
parent
e818536500
commit
0f1056667f
@ -1131,6 +1131,10 @@ func (b *builder) gccCmd(objdir string) []string {
|
|||||||
return a
|
return a
|
||||||
}
|
}
|
||||||
|
|
||||||
|
func envList(key string) []string {
|
||||||
|
return strings.Fields(os.Getenv(key))
|
||||||
|
}
|
||||||
|
|
||||||
var cgoRe = regexp.MustCompile(`[/\\:]`)
|
var cgoRe = regexp.MustCompile(`[/\\:]`)
|
||||||
|
|
||||||
func (b *builder) cgo(p *Package, cgoExe, obj string, gccfiles []string) (outGo, outObj []string, err error) {
|
func (b *builder) cgo(p *Package, cgoExe, obj string, gccfiles []string) (outGo, outObj []string, err error) {
|
||||||
@ -1140,19 +1144,24 @@ func (b *builder) cgo(p *Package, cgoExe, obj string, gccfiles []string) (outGo,
|
|||||||
|
|
||||||
outObj = append(outObj, "") // for importObj, at end of function
|
outObj = append(outObj, "") // for importObj, at end of function
|
||||||
|
|
||||||
cgoCFLAGS := stringList(p.info.CgoCFLAGS)
|
cgoCFLAGS := stringList(envList("CGO_CFLAGS"), p.info.CgoCFLAGS)
|
||||||
cgoLDFLAGS := stringList(p.info.CgoLDFLAGS)
|
cgoLDFLAGS := stringList(envList("CGO_LDFLAGS"), p.info.CgoLDFLAGS)
|
||||||
|
|
||||||
if pkgs := p.info.CgoPkgConfig; len(pkgs) > 0 {
|
if pkgs := p.info.CgoPkgConfig; len(pkgs) > 0 {
|
||||||
out, err := b.runOut(p.Dir, p.ImportPath, "pkg-config", "--cflags", pkgs)
|
out, err := b.runOut(p.Dir, p.ImportPath, "pkg-config", "--cflags", pkgs)
|
||||||
if err != nil {
|
if err != nil {
|
||||||
return nil, nil, err
|
b.showOutput(p.Dir, "pkg-config --cflags "+strings.Join(pkgs, " "), string(out))
|
||||||
|
b.print(err.Error() + "\n")
|
||||||
|
return nil, nil, errPrintedOutput
|
||||||
}
|
}
|
||||||
if len(out) > 0 {
|
if len(out) > 0 {
|
||||||
cgoCFLAGS = append(cgoCFLAGS, strings.Fields(string(out))...)
|
cgoCFLAGS = append(cgoCFLAGS, strings.Fields(string(out))...)
|
||||||
}
|
}
|
||||||
out, err = b.runOut(p.Dir, p.ImportPath, "pkg-config", "--libs", pkgs)
|
out, err = b.runOut(p.Dir, p.ImportPath, "pkg-config", "--libs", pkgs)
|
||||||
if err != nil {
|
if err != nil {
|
||||||
return nil, nil, err
|
b.showOutput(p.Dir, "pkg-config --libs "+strings.Join(pkgs, " "), string(out))
|
||||||
|
b.print(err.Error() + "\n")
|
||||||
|
return nil, nil, errPrintedOutput
|
||||||
}
|
}
|
||||||
if len(out) > 0 {
|
if len(out) > 0 {
|
||||||
cgoLDFLAGS = append(cgoLDFLAGS, strings.Fields(string(out))...)
|
cgoLDFLAGS = append(cgoLDFLAGS, strings.Fields(string(out))...)
|
||||||
|
@ -215,11 +215,7 @@ func downloadPackage(p *Package) error {
|
|||||||
if i := strings.Index(vers, " "); i >= 0 {
|
if i := strings.Index(vers, " "); i >= 0 {
|
||||||
vers = vers[:i]
|
vers = vers[:i]
|
||||||
}
|
}
|
||||||
tag := selectTag(vers, tags)
|
if err := vcs.tagSync(root, selectTag(vers, tags)); err != nil {
|
||||||
if tag == "" {
|
|
||||||
tag = vcs.tagDefault
|
|
||||||
}
|
|
||||||
if err := vcs.tagSync(root, tag); err != nil {
|
|
||||||
return err
|
return err
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -347,7 +347,7 @@ func allPackages(pattern string) []string {
|
|||||||
goroot := build.Path[0].Path
|
goroot := build.Path[0].Path
|
||||||
cmd := filepath.Join(goroot, "src/cmd") + string(filepath.Separator)
|
cmd := filepath.Join(goroot, "src/cmd") + string(filepath.Separator)
|
||||||
filepath.Walk(cmd, func(path string, fi os.FileInfo, err error) error {
|
filepath.Walk(cmd, func(path string, fi os.FileInfo, err error) error {
|
||||||
if err != nil || !fi.IsDir() {
|
if err != nil || !fi.IsDir() || path == cmd {
|
||||||
return nil
|
return nil
|
||||||
}
|
}
|
||||||
name := path[len(cmd):]
|
name := path[len(cmd):]
|
||||||
@ -378,7 +378,7 @@ func allPackages(pattern string) []string {
|
|||||||
}
|
}
|
||||||
src := t.SrcDir() + string(filepath.Separator)
|
src := t.SrcDir() + string(filepath.Separator)
|
||||||
filepath.Walk(src, func(path string, fi os.FileInfo, err error) error {
|
filepath.Walk(src, func(path string, fi os.FileInfo, err error) error {
|
||||||
if err != nil || !fi.IsDir() {
|
if err != nil || !fi.IsDir() || path == src {
|
||||||
return nil
|
return nil
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -445,7 +445,7 @@ func allPackagesInFS(pattern string) []string {
|
|||||||
|
|
||||||
var pkgs []string
|
var pkgs []string
|
||||||
filepath.Walk(dir, func(path string, fi os.FileInfo, err error) error {
|
filepath.Walk(dir, func(path string, fi os.FileInfo, err error) error {
|
||||||
if err != nil || !fi.IsDir() {
|
if err != nil || !fi.IsDir() || path == dir {
|
||||||
return nil
|
return nil
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -24,8 +24,8 @@ type vcsCmd struct {
|
|||||||
downloadCmd string // command to download updates into an existing repository
|
downloadCmd string // command to download updates into an existing repository
|
||||||
|
|
||||||
tagCmd []tagCmd // commands to list tags
|
tagCmd []tagCmd // commands to list tags
|
||||||
tagDefault string // default tag to use
|
|
||||||
tagSyncCmd string // command to sync to specific tag
|
tagSyncCmd string // command to sync to specific tag
|
||||||
|
tagSyncDefault string // command to sync to default tag
|
||||||
}
|
}
|
||||||
|
|
||||||
// A tagCmd describes a command to list available tags
|
// A tagCmd describes a command to list available tags
|
||||||
@ -71,8 +71,8 @@ var vcsHg = &vcsCmd{
|
|||||||
{"tags", `^(\S+)`},
|
{"tags", `^(\S+)`},
|
||||||
{"branches", `^(\S+)`},
|
{"branches", `^(\S+)`},
|
||||||
},
|
},
|
||||||
tagDefault: "default",
|
|
||||||
tagSyncCmd: "update -r {tag}",
|
tagSyncCmd: "update -r {tag}",
|
||||||
|
tagSyncDefault: "update default",
|
||||||
}
|
}
|
||||||
|
|
||||||
// vcsGit describes how to use Git.
|
// vcsGit describes how to use Git.
|
||||||
@ -84,8 +84,8 @@ var vcsGit = &vcsCmd{
|
|||||||
downloadCmd: "fetch",
|
downloadCmd: "fetch",
|
||||||
|
|
||||||
tagCmd: []tagCmd{{"tag", `^(\S+)$`}},
|
tagCmd: []tagCmd{{"tag", `^(\S+)$`}},
|
||||||
tagDefault: "master",
|
|
||||||
tagSyncCmd: "checkout {tag}",
|
tagSyncCmd: "checkout {tag}",
|
||||||
|
tagSyncDefault: "checkout origin/master",
|
||||||
}
|
}
|
||||||
|
|
||||||
// vcsBzr describes how to use Bazaar.
|
// vcsBzr describes how to use Bazaar.
|
||||||
@ -100,8 +100,8 @@ var vcsBzr = &vcsCmd{
|
|||||||
downloadCmd: "pull --overwrite",
|
downloadCmd: "pull --overwrite",
|
||||||
|
|
||||||
tagCmd: []tagCmd{{"tags", `^(\S+)`}},
|
tagCmd: []tagCmd{{"tags", `^(\S+)`}},
|
||||||
tagDefault: "revno:-1",
|
|
||||||
tagSyncCmd: "update -r {tag}",
|
tagSyncCmd: "update -r {tag}",
|
||||||
|
tagSyncDefault: "update -r revno:-1",
|
||||||
}
|
}
|
||||||
|
|
||||||
// vcsSvn describes how to use Subversion.
|
// vcsSvn describes how to use Subversion.
|
||||||
@ -198,6 +198,9 @@ func (v *vcsCmd) tagSync(dir, tag string) error {
|
|||||||
if v.tagSyncCmd == "" {
|
if v.tagSyncCmd == "" {
|
||||||
return nil
|
return nil
|
||||||
}
|
}
|
||||||
|
if tag == "" && v.tagSyncDefault != "" {
|
||||||
|
return v.run(dir, v.tagSyncDefault)
|
||||||
|
}
|
||||||
return v.run(dir, v.tagSyncCmd, "tag", tag)
|
return v.run(dir, v.tagSyncCmd, "tag", tag)
|
||||||
}
|
}
|
||||||
|
|
||||||
|
Loading…
Reference in New Issue
Block a user