mirror of
https://github.com/golang/go
synced 2024-11-23 23:50:08 -07:00
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: c67e511213
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>
This commit is contained in:
parent
f0cb44a773
commit
8491fd311c
@ -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) {
|
||||
|
@ -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
|
||||
}
|
||||
|
Loading…
Reference in New Issue
Block a user