aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorzlasd <zlasd@hotmail.com>2023-02-09 14:03:45 +0000
committerGopher Robot <gobot@golang.org>2023-02-10 21:45:51 +0000
commit8491fd311c5d4f38fda026129709306ab4787e87 (patch)
treef329c4f9ec8b99250ee8d991c3557ae63d935d04
parentf0cb44a7736df649cdb5c7b3dfe8e270ae691626 (diff)
downloadgo-8491fd311c5d4f38fda026129709306ab4787e87.tar.xz
cmd/go: handle escapes in pkg-config ldflags output
#16455 handled escapes in pkg-config output but only for cflags. The fix for #41400 left a note that we don't need to parse quotes and unescapes, but it is still necessary to handle spaces in pkg-config output. As cflags has already been processed correctly, we apply the same logic to ldflags here. Fixes #35262 Change-Id: Id01d422b103780f67f89e99ff1df0d8f51a7a137 GitHub-Last-Rev: c67e5112130fa008397cfd0bc03e1de58201da86 GitHub-Pull-Request: golang/go#58429 Reviewed-on: https://go-review.googlesource.com/c/go/+/466875 Run-TryBot: Bryan Mills <bcmills@google.com> TryBot-Result: Gopher Robot <gobot@golang.org> Reviewed-by: Bryan Mills <bcmills@google.com> Auto-Submit: Bryan Mills <bcmills@google.com> Reviewed-by: David Chase <drchase@google.com>
-rw-r--r--src/cmd/go/go_test.go16
-rw-r--r--src/cmd/go/internal/work/exec.go9
2 files changed, 22 insertions, 3 deletions
diff --git a/src/cmd/go/go_test.go b/src/cmd/go/go_test.go
index ef22499b87..f056ab9a37 100644
--- a/src/cmd/go/go_test.go
+++ b/src/cmd/go/go_test.go
@@ -1616,6 +1616,22 @@ func main() {
`)
tg.setenv("PKG_CONFIG_PATH", tg.path("."))
tg.run("run", tg.path("foo.go"))
+
+ // test for ldflags
+ tg.tempFile("bar.pc", `
+Name: bar
+Description: The bar library
+Version: 1.0.0
+Libs: -Wl,-rpath=/path\ with\ spaces/bin
+`)
+ tg.tempFile("bar.go", `package main
+/*
+#cgo pkg-config: bar
+*/
+import "C"
+func main() {}
+`)
+ tg.run("run", tg.path("bar.go"))
}
func TestListTemplateContextFunction(t *testing.T) {
diff --git a/src/cmd/go/internal/work/exec.go b/src/cmd/go/internal/work/exec.go
index 8dde0a9e06..c1476f8757 100644
--- a/src/cmd/go/internal/work/exec.go
+++ b/src/cmd/go/internal/work/exec.go
@@ -1549,9 +1549,12 @@ func (b *Builder) getPkgConfigFlags(p *load.Package) (cflags, ldflags []string,
return nil, nil, err
}
if len(out) > 0 {
- // NOTE: we don't attempt to parse quotes and unescapes here. pkg-config
- // is typically used within shell backticks, which treats quotes literally.
- ldflags = strings.Fields(string(out))
+ // We need to handle path with spaces so that C:/Program\ Files can pass
+ // checkLinkerFlags. Use splitPkgConfigOutput here just like we treat cflags.
+ ldflags, err = splitPkgConfigOutput(out)
+ if err != nil {
+ return nil, nil, err
+ }
if err := checkLinkerFlags("LDFLAGS", "pkg-config --libs", ldflags); err != nil {
return nil, nil, err
}