...

Text file src/cmd/go/testdata/script/build_trimpath.txt

Documentation: cmd/go/testdata/script

     1[short] skip
     2
     3# If GOROOT is set, 'go build -trimpath' bakes that into the resulting
     4# binary. Explicitly unset it here.
     5env GOROOT=
     6
     7# Set up two identical directories that can be used as GOPATH.
     8env GO111MODULE=on
     9mkdir $WORK/a/src/paths $WORK/b/src/paths
    10cp paths.go $WORK/a/src/paths
    11cp paths.go $WORK/b/src/paths
    12cp overlay.json $WORK/a/src/paths
    13cp overlay.json $WORK/b/src/paths
    14cp go.mod $WORK/a/src/paths/
    15cp go.mod $WORK/b/src/paths/
    16
    17
    18# A binary built without -trimpath should contain the module root dir
    19# and GOROOT for debugging and stack traces.
    20cd $WORK/a/src/paths
    21go build -o $WORK/paths-dbg.exe .
    22exec $WORK/paths-dbg.exe $WORK/paths-dbg.exe
    23stdout 'binary contains module root: true'
    24stdout 'binary contains an empty GOROOT'
    25
    26# A binary built with -trimpath should not contain the current workspace.
    27go build -trimpath -o $WORK/paths-a.exe .
    28exec $WORK/paths-a.exe $WORK/paths-a.exe
    29stdout 'binary contains module root: false'
    30stdout 'binary contains an empty GOROOT'
    31
    32# A binary from an external module built with -trimpath should not contain
    33# the current workspace or GOROOT.
    34go get rsc.io/fortune
    35go install -trimpath rsc.io/fortune
    36exec $WORK/paths-a.exe $GOPATH/bin/fortune$GOEXE
    37stdout 'binary contains module root: false'
    38stdout 'binary contains an empty GOROOT'
    39go mod edit -droprequire rsc.io/fortune
    40
    41# Two binaries built from identical packages in different directories
    42# should be identical.
    43cd $WORK/b/src/paths
    44go build -trimpath -o $WORK/paths-b.exe
    45cmp -q $WORK/paths-a.exe $WORK/paths-b.exe
    46
    47
    48# Same sequence of tests but with overlays.
    49# A binary built without -trimpath should contain the module root dir
    50# and GOROOT for debugging and stack traces.
    51cd $WORK/a/src/paths
    52go build -overlay overlay.json -o $WORK/paths-dbg.exe ./overlaydir
    53exec $WORK/paths-dbg.exe $WORK/paths-dbg.exe
    54stdout 'binary contains module root: true'
    55stdout 'binary contains an empty GOROOT'
    56
    57# A binary built with -trimpath should not contain the current workspace.
    58go build -overlay overlay.json -trimpath -o $WORK/paths-a.exe ./overlaydir
    59exec $WORK/paths-a.exe $WORK/paths-a.exe
    60stdout 'binary contains module root: false'
    61stdout 'binary contains an empty GOROOT'
    62
    63# Two binaries built from identical packages in different directories
    64# should be identical.
    65cd $WORK/b/src/paths
    66go build -overlay overlay.json -trimpath -o $WORK/paths-b.exe ./overlaydir
    67cmp -q $WORK/paths-a.exe $WORK/paths-b.exe
    68
    69
    70# Same sequence of tests but in GOPATH mode.
    71# A binary built without -trimpath should contain GOPATH and GOROOT.
    72env GO111MODULE=off
    73cd $WORK
    74env GOPATH=$WORK/a
    75go build -o paths-dbg.exe paths
    76exec ./paths-dbg.exe paths-dbg.exe
    77stdout 'binary contains GOPATH: true'
    78stdout 'binary contains an empty GOROOT'
    79
    80# A binary built with -trimpath should not contain GOPATH.
    81go build -trimpath -o paths-a.exe paths
    82exec ./paths-a.exe paths-a.exe
    83stdout 'binary contains GOPATH: false'
    84stdout 'binary contains an empty GOROOT'
    85
    86# Two binaries built from identical packages in different GOPATH roots
    87# should be identical.
    88env GOPATH=$WORK/b
    89go build -trimpath -o paths-b.exe paths
    90cmp -q paths-a.exe paths-b.exe
    91
    92
    93# Same sequence of tests but with gccgo.
    94# gccgo does not support builds in module mode.
    95[!exec:gccgo] stop
    96[cross] stop  # gccgo can't necessarily cross-compile
    97env GOPATH=$WORK/a
    98
    99# A binary built with gccgo without -trimpath should contain the current
   100# GOPATH and GOROOT.
   101go build -compiler=gccgo -o paths-dbg.exe paths
   102exec ./paths-dbg.exe paths-dbg.exe
   103stdout 'binary contains GOPATH: true'
   104stdout 'binary contains an empty GOROOT'
   105
   106# gccgo doesn't load std from GOROOT.
   107# A binary built with gccgo with -trimpath should not contain GOPATH or GOROOT.
   108go build -compiler=gccgo -trimpath -o paths-a.exe paths
   109exec ./paths-a.exe paths-a.exe
   110stdout 'binary contains GOPATH: false'
   111stdout 'binary contains an empty GOROOT'
   112
   113# Two binaries built from identical packages in different directories
   114# should be identical.
   115env GOPATH=$WORK/b
   116go build -compiler=gccgo -trimpath -o paths-b.exe paths
   117cmp -q paths-a.exe paths-b.exe
   118
   119-- paths.go --
   120package main
   121
   122import (
   123	"bytes"
   124	"fmt"
   125	"io/ioutil"
   126	"log"
   127	"os"
   128	"os/exec"
   129	"path/filepath"
   130	"strings"
   131)
   132
   133func main() {
   134	exe := os.Args[1]
   135	data, err := ioutil.ReadFile(exe)
   136	if err != nil {
   137		log.Fatal(err)
   138	}
   139
   140	if os.Getenv("GO111MODULE") == "on" {
   141		out, err := exec.Command("go", "env", "GOMOD").Output()
   142		if err != nil {
   143			log.Fatal(err)
   144		}
   145		modRoot := filepath.Dir(strings.TrimSpace(string(out)))
   146		check(data, "module root", modRoot)
   147	} else {
   148		check(data, "GOPATH", os.Getenv("GOPATH"))
   149	}
   150	check(data, "GOROOT", os.Getenv("GOROOT"))
   151}
   152
   153func check(data []byte, desc, dir string) {
   154	if dir == "" {
   155		fmt.Printf("binary contains an empty %s\n", desc)
   156		return
   157	}
   158	containsDir := bytes.Contains(data, []byte(dir))
   159	containsSlashDir := bytes.Contains(data, []byte(filepath.ToSlash(dir)))
   160	fmt.Printf("binary contains %s: %v\n", desc, containsDir || containsSlashDir)
   161}
   162-- overlay.json --
   163{ "Replace": { "overlaydir/paths.go": "paths.go" } }
   164-- go.mod --
   165module paths
   166
   167go 1.14

View as plain text