1
0
mirror of https://github.com/golang/go synced 2024-07-05 09:50:19 +00:00

cmd/cgo: retain original file paths in godefs generated comment

Don't rewrite relative file paths to absolute file paths in the
godefs generated code comment.

Fixes #52063

Change-Id: Ie9c5bd021b8f3954e827838930861622c7aa90b4
Reviewed-on: https://go-review.googlesource.com/c/go/+/396936
Trust: Tobias Klauser <tobias.klauser@gmail.com>
Run-TryBot: Tobias Klauser <tobias.klauser@gmail.com>
TryBot-Result: Gopher Robot <gobot@golang.org>
Reviewed-by: Ian Lance Taylor <iant@golang.org>
This commit is contained in:
Tobias Klauser 2022-04-01 09:41:57 +02:00 committed by Tobias Klauser
parent 8e50298f12
commit 73a81d84b6
3 changed files with 32 additions and 4 deletions

View File

@ -9,6 +9,7 @@ import (
"os"
"os/exec"
"path/filepath"
"runtime"
"strings"
"testing"
)
@ -58,9 +59,32 @@ func TestGoDefs(t *testing.T) {
t.Fatalf("%s: %v\n%s", strings.Join(cmd.Args, " "), err, cmd.Stderr)
}
if err := os.WriteFile(filepath.Join(dir, fp+"_defs.go"), out, 0644); err != nil {
fn := fp + "_defs.go"
if err := os.WriteFile(filepath.Join(dir, fn), out, 0644); err != nil {
t.Fatal(err)
}
// Verify that command line arguments are not rewritten in the generated comment,
// see go.dev/issue/52063
hasGeneratedByComment := false
for _, line := range strings.Split(strings.TrimSpace(string(out)), "\n") {
cgoExe := "cgo"
if runtime.GOOS == "windows" {
cgoExe = "cgo.exe"
}
if !strings.HasPrefix(line, "// "+cgoExe+" -godefs") {
continue
}
if want := "// " + cgoExe + " " + strings.Join(cmd.Args[3:], " "); line != want {
t.Errorf("%s: got generated comment %q, want %q", fn, line, want)
}
hasGeneratedByComment = true
break
}
if !hasGeneratedByComment {
t.Errorf("%s: comment with generating cgo -godefs command not found", fn)
}
}
main, err := os.ReadFile(filepath.Join("testdata", "main.go"))

View File

@ -16,11 +16,11 @@ import (
)
// godefs returns the output for -godefs mode.
func (p *Package) godefs(f *File) string {
func (p *Package) godefs(f *File, args []string) string {
var buf bytes.Buffer
fmt.Fprintf(&buf, "// Code generated by cmd/cgo -godefs; DO NOT EDIT.\n")
fmt.Fprintf(&buf, "// %s %s\n", filepath.Base(os.Args[0]), strings.Join(os.Args[1:], " "))
fmt.Fprintf(&buf, "// %s %s\n", filepath.Base(args[0]), strings.Join(args[1:], " "))
fmt.Fprintf(&buf, "\n")
override := make(map[string]string)

View File

@ -291,6 +291,10 @@ func main() {
usage()
}
// Save original command line arguments for the godefs generated comment. Relative file
// paths in os.Args will be rewritten to absolute file paths in the loop below.
osArgs := make([]string, len(os.Args))
copy(osArgs, os.Args[:])
goFiles := args[i:]
for _, arg := range args[:i] {
@ -390,7 +394,7 @@ func main() {
p.PackagePath = f.Package
p.Record(f)
if *godefs {
os.Stdout.WriteString(p.godefs(f))
os.Stdout.WriteString(p.godefs(f, osArgs))
} else {
p.writeOutput(f, input)
}