]> Cypherpunks repositories - gostls13.git/commitdiff
cmd/go: in TestScript, set $GOEXE instead of $exe
authorBryan C. Mills <bcmills@google.com>
Mon, 10 Jun 2019 16:31:13 +0000 (12:31 -0400)
committerBryan C. Mills <bcmills@google.com>
Mon, 10 Jun 2019 21:00:48 +0000 (21:00 +0000)
$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: Ian Lance Taylor <iant@golang.org>
src/cmd/go/script_test.go
src/cmd/go/testdata/script/README
src/cmd/go/testdata/script/build_cache_link.txt
src/cmd/go/testdata/script/build_multi_main.txt
src/cmd/go/testdata/script/install_cleans_build.txt
src/cmd/go/testdata/script/mod_build_versioned.txt
src/cmd/go/testdata/script/test_devnull.txt

index 499a1ccd3f224528d809f659a4195a5b34d5d930..c169a4ceec44678d37ad93934cc2a01fd5a3e435 100644 (file)
@@ -24,6 +24,7 @@ import (
        "testing"
        "time"
 
+       "cmd/go/internal/cfg"
        "cmd/go/internal/imports"
        "cmd/go/internal/par"
        "cmd/go/internal/txtar"
@@ -106,6 +107,7 @@ func (ts *testScript) setup() {
                "CCACHE_DISABLE=1", // ccache breaks with non-existent HOME
                "GOARCH=" + runtime.GOARCH,
                "GOCACHE=" + testGOCACHE,
+               "GOEXE=" + cfg.ExeSuffix,
                "GOOS=" + runtime.GOOS,
                "GOPATH=" + filepath.Join(ts.workdir, "gopath"),
                "GOPROXY=" + proxyURL,
@@ -123,11 +125,6 @@ func (ts *testScript) setup() {
                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 {
                if val := os.Getenv(key); val != "" {
                        ts.env = append(ts.env, key+"="+val)
index 3dceb735aa3167177414e737d6afc3833c776eb7..66ab8515c33e7838b31f4c4a3b63260a967ad67a 100644 (file)
@@ -28,6 +28,7 @@ Scripts also have access to these other environment variables:
 
        GOARCH=<target GOARCH>
        GOCACHE=<actual GOCACHE being used outside the test>
+       GOEXE=<executable file suffix: .exe on Windows, empty on other systems>
        GOOS=<target GOOS>
        GOPATH=$WORK/gopath
        GOPROXY=<local module proxy serving from cmd/go/testdata/mod>
@@ -38,8 +39,6 @@ Scripts also have access to these other environment variables:
        devnull=<value of os.DevNull>
        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)
 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
index e80d776473c7ff98aeba328e6860ca0af87dab0a..b9c740ac10ea23acdb23901b3d9a113081e5d169 100644 (file)
@@ -16,9 +16,9 @@ go build -o $devnull -x main.go
 stderr '(link|gccgo)( |\.exe)'
 
 # ... 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)'
-go build -o main$exe -x main.go
+go build -o main$GOEXE -x main.go
 ! stderr '(link|gccgo)( |\.exe)'
 
 -- main.go --
index 89fe2bec13e95a02bd0ed5b460daaa4f3cd213df..1d4926d979095b8b370bfb76a27895f6f63b8537 100644 (file)
@@ -29,5 +29,5 @@ package pkg1
 -- pkg2/pkg2.go --
 package pkg2
 
--- c1$exe/keep.txt --
+-- c1$GOEXE/keep.txt --
 Create c1 directory.
index a169a60bda1ffcde511f13035aa7f88dcefd4c19..dc85eb8ceffaf0d343488291c9768c54226c400f 100644 (file)
@@ -4,21 +4,21 @@ env GO111MODULE=off
 # 'go install' with no arguments should clean up after go build
 cd mycmd
 go build
-exists mycmd$exe
+exists mycmd$GOEXE
 go install
-! exists mycmd$exe
+! exists mycmd$GOEXE
 
 # 'go install mycmd' does not clean up, even in the mycmd directory
 go build
-exists mycmd$exe
+exists mycmd$GOEXE
 go install mycmd
-exists mycmd$exe
+exists mycmd$GOEXE
 
 # 'go install mycmd' should not clean up in an unrelated current directory either
 cd ..
-cp mycmd/mycmd$exe mycmd$exe
+cp mycmd/mycmd$GOEXE mycmd$GOEXE
 go install mycmd
-exists mycmd$exe
+exists mycmd$GOEXE
 
 -- mycmd/main.go --
 package main
index 11ad556d44e79363ea7dfff81f3e58681ee6b6a8..d1d74de10c22b1b75cd79a237b8e6c3b36db519c 100644 (file)
@@ -3,15 +3,15 @@ env GO111MODULE=on
 
 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
-! exists v2$exe
-exists fortune$exe
+! exists v2$GOEXE
+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
-! exists v2.test$exe
-exists fortune.test$exe
+! exists v2.test$GOEXE
+exists fortune.test$GOEXE
 
 -- go.mod --
 module scratch
index e7ebda33ee5b0bff6094d6f2ef41071ad8070571..33071679a29fba84339032a4e18c7f53e8d9a9c4 100644 (file)
@@ -4,7 +4,7 @@ env GO111MODULE=off
 # should work (see golang.org/issue/28035).
 cd x
 go test -o=$devnull -c
-! exists x.test$exe
+! exists x.test$GOEXE
 
 -- x/x_test.go --
 package x_test