Commit bff0ae6a authored by Bryan C. Mills's avatar Bryan C. Mills

cmd/go: in TestScript, set $GOEXE instead of $exe

$GOEXE exists and is documented in 'go env', so $exe is redundant and
a bit confusing. Notably, mod_modinfo.txt already assumes that GOEXE
is set (even though it isn't), and thus fails on Windows.

After this CL, `go test cmd/go/...` passes on a windows-amd64-2016
builder. However, given that the $PATH on the builder is very minimal
(#32430) and network access is limited, tests that rely on binaries
(such as 'git') or external networking may still be broken.

Updates #25300

Change-Id: I9d80f2a0fbaa8bc35fa2205b6898aeccecda4e94
Reviewed-on: https://go-review.googlesource.com/c/go/+/181542
Run-TryBot: Bryan C. Mills <bcmills@google.com>
TryBot-Result: Gobot Gobot <gobot@golang.org>
Reviewed-by: default avatarIan Lance Taylor <iant@golang.org>
parent 5ce1819c
...@@ -24,6 +24,7 @@ import ( ...@@ -24,6 +24,7 @@ import (
"testing" "testing"
"time" "time"
"cmd/go/internal/cfg"
"cmd/go/internal/imports" "cmd/go/internal/imports"
"cmd/go/internal/par" "cmd/go/internal/par"
"cmd/go/internal/txtar" "cmd/go/internal/txtar"
...@@ -106,6 +107,7 @@ func (ts *testScript) setup() { ...@@ -106,6 +107,7 @@ func (ts *testScript) setup() {
"CCACHE_DISABLE=1", // ccache breaks with non-existent HOME "CCACHE_DISABLE=1", // ccache breaks with non-existent HOME
"GOARCH=" + runtime.GOARCH, "GOARCH=" + runtime.GOARCH,
"GOCACHE=" + testGOCACHE, "GOCACHE=" + testGOCACHE,
"GOEXE=" + cfg.ExeSuffix,
"GOOS=" + runtime.GOOS, "GOOS=" + runtime.GOOS,
"GOPATH=" + filepath.Join(ts.workdir, "gopath"), "GOPATH=" + filepath.Join(ts.workdir, "gopath"),
"GOPROXY=" + proxyURL, "GOPROXY=" + proxyURL,
...@@ -123,11 +125,6 @@ func (ts *testScript) setup() { ...@@ -123,11 +125,6 @@ func (ts *testScript) setup() {
ts.env = append(ts.env, "path="+testBin+string(filepath.ListSeparator)+os.Getenv("path")) ts.env = append(ts.env, "path="+testBin+string(filepath.ListSeparator)+os.Getenv("path"))
} }
if runtime.GOOS == "windows" {
ts.env = append(ts.env, "exe=.exe")
} else {
ts.env = append(ts.env, "exe=")
}
for _, key := range extraEnvKeys { for _, key := range extraEnvKeys {
if val := os.Getenv(key); val != "" { if val := os.Getenv(key); val != "" {
ts.env = append(ts.env, key+"="+val) ts.env = append(ts.env, key+"="+val)
......
...@@ -28,6 +28,7 @@ Scripts also have access to these other environment variables: ...@@ -28,6 +28,7 @@ Scripts also have access to these other environment variables:
GOARCH=<target GOARCH> GOARCH=<target GOARCH>
GOCACHE=<actual GOCACHE being used outside the test> GOCACHE=<actual GOCACHE being used outside the test>
GOEXE=<executable file suffix: .exe on Windows, empty on other systems>
GOOS=<target GOOS> GOOS=<target GOOS>
GOPATH=$WORK/gopath GOPATH=$WORK/gopath
GOPROXY=<local module proxy serving from cmd/go/testdata/mod> GOPROXY=<local module proxy serving from cmd/go/testdata/mod>
...@@ -38,8 +39,6 @@ Scripts also have access to these other environment variables: ...@@ -38,8 +39,6 @@ Scripts also have access to these other environment variables:
devnull=<value of os.DevNull> devnull=<value of os.DevNull>
goversion=<current Go version; for example, 1.12> goversion=<current Go version; for example, 1.12>
The environment variable $exe (lowercase) is an empty string on most systems, ".exe" on Windows.
The scripts supporting files are unpacked relative to $GOPATH/src (aka $WORK/gopath/src) The scripts supporting files are unpacked relative to $GOPATH/src (aka $WORK/gopath/src)
and then the script begins execution in that directory as well. Thus the example above runs and then the script begins execution in that directory as well. Thus the example above runs
in $WORK/gopath/src with GOPATH=$WORK/gopath and $WORK/gopath/src/hello.go in $WORK/gopath/src with GOPATH=$WORK/gopath and $WORK/gopath/src/hello.go
......
...@@ -16,9 +16,9 @@ go build -o $devnull -x main.go ...@@ -16,9 +16,9 @@ go build -o $devnull -x main.go
stderr '(link|gccgo)( |\.exe)' stderr '(link|gccgo)( |\.exe)'
# ... but the output binary can serve as a cache. # ... but the output binary can serve as a cache.
go build -o main$exe -x main.go go build -o main$GOEXE -x main.go
stderr '(link|gccgo)( |\.exe)' stderr '(link|gccgo)( |\.exe)'
go build -o main$exe -x main.go go build -o main$GOEXE -x main.go
! stderr '(link|gccgo)( |\.exe)' ! stderr '(link|gccgo)( |\.exe)'
-- main.go -- -- main.go --
......
...@@ -29,5 +29,5 @@ package pkg1 ...@@ -29,5 +29,5 @@ package pkg1
-- pkg2/pkg2.go -- -- pkg2/pkg2.go --
package pkg2 package pkg2
-- c1$exe/keep.txt -- -- c1$GOEXE/keep.txt --
Create c1 directory. Create c1 directory.
...@@ -4,21 +4,21 @@ env GO111MODULE=off ...@@ -4,21 +4,21 @@ env GO111MODULE=off
# 'go install' with no arguments should clean up after go build # 'go install' with no arguments should clean up after go build
cd mycmd cd mycmd
go build go build
exists mycmd$exe exists mycmd$GOEXE
go install go install
! exists mycmd$exe ! exists mycmd$GOEXE
# 'go install mycmd' does not clean up, even in the mycmd directory # 'go install mycmd' does not clean up, even in the mycmd directory
go build go build
exists mycmd$exe exists mycmd$GOEXE
go install mycmd go install mycmd
exists mycmd$exe exists mycmd$GOEXE
# 'go install mycmd' should not clean up in an unrelated current directory either # 'go install mycmd' should not clean up in an unrelated current directory either
cd .. cd ..
cp mycmd/mycmd$exe mycmd$exe cp mycmd/mycmd$GOEXE mycmd$GOEXE
go install mycmd go install mycmd
exists mycmd$exe exists mycmd$GOEXE
-- mycmd/main.go -- -- mycmd/main.go --
package main package main
......
...@@ -3,15 +3,15 @@ env GO111MODULE=on ...@@ -3,15 +3,15 @@ env GO111MODULE=on
go get -d rsc.io/fortune/v2 go get -d rsc.io/fortune/v2
# The default executable name shouldn't be v2$exe # The default executable name shouldn't be v2$GOEXE
go build rsc.io/fortune/v2 go build rsc.io/fortune/v2
! exists v2$exe ! exists v2$GOEXE
exists fortune$exe exists fortune$GOEXE
# The default test binary name shouldn't be v2.test$exe # The default test binary name shouldn't be v2.test$GOEXE
go test -c rsc.io/fortune/v2 go test -c rsc.io/fortune/v2
! exists v2.test$exe ! exists v2.test$GOEXE
exists fortune.test$exe exists fortune.test$GOEXE
-- go.mod -- -- go.mod --
module scratch module scratch
...@@ -4,7 +4,7 @@ env GO111MODULE=off ...@@ -4,7 +4,7 @@ env GO111MODULE=off
# should work (see golang.org/issue/28035). # should work (see golang.org/issue/28035).
cd x cd x
go test -o=$devnull -c go test -o=$devnull -c
! exists x.test$exe ! exists x.test$GOEXE
-- x/x_test.go -- -- x/x_test.go --
package x_test package x_test
......
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment