# Test support for declaring needed Go version in module. env GO111MODULE=on go list go build go build sub.1 go build subver.1 ! stderr 'module requires' ! go build badsub.1 stderr '^note: module requires Go 1.11111$' go build versioned.1 go mod edit -require versioned.1@v1.1.0 ! go build versioned.1 stderr '^note: module requires Go 1.99999$' [short] stop # The message should be printed even if the compiler emits no output. go build -o $WORK/nooutput.exe nooutput.go ! go build -toolexec=$WORK/nooutput.exe versioned.1 stderr '^# versioned.1\nnote: module requires Go 1.99999$' -- go.mod -- module m go 1.999 require ( sub.1 v1.0.0 subver.1 v1.0.0 badsub.1 v1.0.0 versioned.1 v1.0.0 ) replace ( sub.1 => ./sub subver.1 => ./subver badsub.1 => ./badsub versioned.1 v1.0.0 => ./versioned1 versioned.1 v1.1.0 => ./versioned2 ) -- x.go -- package x -- sub/go.mod -- module m go 1.11 -- sub/x.go -- package x -- subver/go.mod -- module m go 1.11111 -- subver/x.go -- package x -- badsub/go.mod -- module m go 1.11111 -- badsub/x.go -- package x invalid syntax -- versioned1/go.mod -- module versioned go 1.0 -- versioned1/x.go -- package x -- versioned2/go.mod -- module versioned go 1.99999 -- versioned2/x.go -- package x invalid syntax -- nooutput.go -- // +build ignore package main import ( "bytes" "os" "os/exec" "strings" ) func main() { stderr := new(bytes.Buffer) stdout := new(bytes.Buffer) cmd := exec.Command(os.Args[1], os.Args[2:]...) cmd.Stderr = stderr cmd.Stdout = stdout err := cmd.Run() if strings.HasPrefix(os.Args[2], "-V") { os.Stderr.Write(stderr.Bytes()) os.Stdout.Write(stdout.Bytes()) } if err != nil { os.Exit(1) } }