| [short] skip |
| env GO111MODULE=on |
| |
| # A binary built without -trimpath should contain the current workspace |
| # and GOROOT for debugging and stack traces. |
| cd a |
| go build -o $WORK/paths-a.exe paths.go |
| exec $WORK/paths-a.exe $WORK/paths-a.exe |
| stdout 'binary contains GOPATH: true' |
| stdout 'binary contains GOROOT: true' |
| |
| # A binary built with -trimpath should not contain the current workspace |
| # or GOROOT. |
| go build -trimpath -o $WORK/paths-a.exe paths.go |
| exec $WORK/paths-a.exe $WORK/paths-a.exe |
| stdout 'binary contains GOPATH: false' |
| stdout 'binary contains GOROOT: false' |
| |
| # A binary from an external module built with -trimpath should not contain |
| # the current workspace or GOROOT. |
| cd $WORK |
| go get -trimpath rsc.io/fortune |
| exec $WORK/paths-a.exe $GOPATH/bin/fortune$GOEXE |
| stdout 'binary contains GOPATH: false' |
| stdout 'binary contains GOROOT: false' |
| |
| # Two binaries built from identical packages in different directories |
| # should be identical. |
| # TODO(golang.org/issue/35435): at the moment, they are not. |
| #mkdir $GOPATH/src/b |
| #cp $GOPATH/src/a/go.mod $GOPATH/src/b/go.mod |
| #cp $GOPATH/src/a/paths.go $GOPATH/src/b/paths.go |
| #cd $GOPATH/src/b |
| #go build -trimpath -o $WORK/paths-b.exe . |
| #cmp -q $WORK/paths-a.exe $WORK/paths-b.exe |
| |
| [!exec:gccgo] stop |
| |
| # A binary built with gccgo without -trimpath should contain the current |
| # GOPATH and GOROOT. |
| env GO111MODULE=off # The current released gccgo does not support builds in module mode. |
| cd $GOPATH/src/a |
| go build -compiler=gccgo -o $WORK/gccgo-paths-a.exe . |
| exec $WORK/gccgo-paths-a.exe $WORK/gccgo-paths-b.exe |
| stdout 'binary contains GOPATH: true' |
| stdout 'binary contains GOROOT: true' |
| |
| # A binary built with gccgo with -trimpath should not contain GOPATH or GOROOT. |
| go build -compiler=gccgo -trimpath -o $WORK/gccgo-paths-a.exe . |
| exec $WORK/gccgo-paths-a.exe $WORK/gccgo-paths-b.exe |
| stdout 'binary contains GOPATH: false' |
| stdout 'binary contains GOROOT: false' |
| |
| # Two binaries built from identical packages in different directories |
| # should be identical. |
| # TODO(golang.org/issue/35435): at the moment, they are not. |
| #cd ../b |
| #go build -compiler=gccgo -trimpath -o $WORK/gccgo-paths-b.exe . |
| #cmp -q $WORK/gccgo-paths-a.exe $WORK/gccgo-paths-b.exe |
| |
| -- $GOPATH/src/a/paths.go -- |
| package main |
| |
| import ( |
| "bytes" |
| "fmt" |
| "io/ioutil" |
| "log" |
| "os" |
| "path/filepath" |
| ) |
| |
| func main() { |
| exe := os.Args[1] |
| data, err := ioutil.ReadFile(exe) |
| if err != nil { |
| log.Fatal(err) |
| } |
| |
| gopath := []byte(filepath.ToSlash(os.Getenv("GOPATH"))) |
| if len(gopath) == 0 { |
| log.Fatal("GOPATH not set") |
| } |
| fmt.Printf("binary contains GOPATH: %v\n", bytes.Contains(data, gopath)) |
| |
| goroot := []byte(filepath.ToSlash(os.Getenv("GOROOT"))) |
| if len(goroot) == 0 { |
| log.Fatal("GOROOT not set") |
| } |
| fmt.Printf("binary contains GOROOT: %v\n", bytes.Contains(data, goroot)) |
| } |
| -- $GOPATH/src/a/go.mod -- |
| module example.com/a |