diff options
author | Russ Cox <rsc@golang.org> | 2009-12-21 08:31:02 -0800 |
---|---|---|
committer | Russ Cox <rsc@golang.org> | 2009-12-21 08:31:02 -0800 |
commit | c276d87c6c4ed332b55d89be7d408cb72b69a6ee (patch) | |
tree | af891cbc4e786a3eb4a7c4274a10b3d9a8f1c900 | |
parent | fa98cf6eefce9266b44e8c44349a731918928d72 (diff) | |
download | go-c276d87c6c4ed332b55d89be7d408cb72b69a6ee.tar.gz go-c276d87c6c4ed332b55d89be7d408cb72b69a6ee.zip |
cgo: interpret $CGOPKGDIR as absolute path if rooted
R=dho
CC=golang-dev
https://golang.org/cl/180099
-rw-r--r-- | src/Make.pkg | 6 | ||||
-rw-r--r-- | src/cmd/cgo/main.go | 7 | ||||
-rw-r--r-- | src/cmd/cgo/out.go | 8 |
3 files changed, 16 insertions, 5 deletions
diff --git a/src/Make.pkg b/src/Make.pkg index 890f43d490..b315b2ee1e 100644 --- a/src/Make.pkg +++ b/src/Make.pkg @@ -23,7 +23,11 @@ endif TARG_words=$(subst /, ,$(TARG)) elem=$(word $(words $(TARG_words)),$(TARG_words)) -dir=$(patsubst %/$(elem),%,./$(TARG)) +ifeq ($(elem),$(TARG)) +dir= +else +dir=$(patsubst %/$(elem),%,$(TARG)) +endif # ugly hack to deal with whitespaces in $GOROOT nullstring := diff --git a/src/cmd/cgo/main.go b/src/cmd/cgo/main.go index d1b551b555..607f26b22c 100644 --- a/src/cmd/cgo/main.go +++ b/src/cmd/cgo/main.go @@ -126,8 +126,11 @@ func main() { if nerrors > 0 { os.Exit(2) } - - p.PackagePath = os.Getenv("CGOPKGPATH") + "/" + p.Package + pkg := p.Package + if dir := os.Getenv("CGOPKGPATH"); dir != "" { + pkg = dir + "/" + pkg + } + p.PackagePath = pkg p.writeOutput(input) } diff --git a/src/cmd/cgo/out.go b/src/cmd/cgo/out.go index 8720d6ff7e..4c72f4c987 100644 --- a/src/cmd/cgo/out.go +++ b/src/cmd/cgo/out.go @@ -24,6 +24,10 @@ func creat(name string) *os.File { // (The comments here say 6g and 6c but the code applies to the 8 and 5 tools too.) func (p *Prog) writeDefs() { pkgroot := os.Getenv("GOROOT") + "/pkg/" + os.Getenv("GOOS") + "_" + os.Getenv("GOARCH") + path := p.PackagePath + if !strings.HasPrefix(path, "/") { + path = pkgroot + "/" + path + } fgo2 := creat("_cgo_gotypes.go") fc := creat("_cgo_defun.c") @@ -46,7 +50,7 @@ func (p *Prog) writeDefs() { fmt.Fprintf(fc, cProlog, pkgroot, pkgroot, pkgroot, pkgroot, p.Package, p.Package) for name, def := range p.Vardef { - fmt.Fprintf(fc, "#pragma dynld %s·_C_%s %s \"%s/%s.so\"\n", p.Package, name, name, pkgroot, p.PackagePath) + fmt.Fprintf(fc, "#pragma dynld %s·_C_%s %s \"%s.so\"\n", p.Package, name, name, path) fmt.Fprintf(fgo2, "var _C_%s ", name) printer.Fprint(fgo2, &ast.StarExpr{X: def.Go}) fmt.Fprintf(fgo2, "\n") @@ -121,7 +125,7 @@ func (p *Prog) writeDefs() { // C wrapper calls into gcc, passing a pointer to the argument frame. // Also emit #pragma to get a pointer to the gcc wrapper. - fmt.Fprintf(fc, "#pragma dynld _cgo_%s _cgo_%s \"%s/%s.so\"\n", name, name, pkgroot, p.PackagePath) + fmt.Fprintf(fc, "#pragma dynld _cgo_%s _cgo_%s \"%s.so\"\n", name, name, path) fmt.Fprintf(fc, "void (*_cgo_%s)(void*);\n", name) fmt.Fprintf(fc, "\n") fmt.Fprintf(fc, "void\n") |