mirror of
https://github.com/golang/go.git
synced 2025-12-08 06:10:04 +00:00
cmd/go, cmd/compile: match tool versions
This change passes runtime.Version from the go tool to the compiler. If the versions do not match, the compilation fails. The result is a go tool from one GOROOT will complain loudly if it is invoked with a different GOROOT value. Only release versions are checked, so that when developing Go you can still use "go install cmd/go" and "go install cmd/compile" separately. Fixes #19064 Change-Id: I17e184d07d3c1092b1d9af53ba55ed3ecf67791d Reviewed-on: https://go-review.googlesource.com/42595 Run-TryBot: David Crawshaw <crawshaw@golang.org> TryBot-Result: Gobot Gobot <gobot@golang.org> Reviewed-by: Ian Lance Taylor <iant@golang.org>
This commit is contained in:
parent
9dd70591c5
commit
98b3e3a064
4 changed files with 40 additions and 0 deletions
|
|
@ -222,6 +222,8 @@ func Main(archInit func(*Arch)) {
|
|||
flag.StringVar(&cpuprofile, "cpuprofile", "", "write cpu profile to `file`")
|
||||
flag.StringVar(&memprofile, "memprofile", "", "write memory profile to `file`")
|
||||
flag.Int64Var(&memprofilerate, "memprofilerate", 0, "set runtime.MemProfileRate to `rate`")
|
||||
var goversion string
|
||||
flag.StringVar(&goversion, "goversion", "", "required version of the runtime")
|
||||
flag.StringVar(&traceprofile, "traceprofile", "", "write an execution trace to `file`")
|
||||
flag.StringVar(&blockprofile, "blockprofile", "", "write block profile to `file`")
|
||||
flag.StringVar(&mutexprofile, "mutexprofile", "", "write mutex profile to `file`")
|
||||
|
|
@ -242,6 +244,11 @@ func Main(archInit func(*Arch)) {
|
|||
usage()
|
||||
}
|
||||
|
||||
if goversion != "" && goversion != runtime.Version() {
|
||||
fmt.Printf("compile: version %q does not match go tool version %q\n", runtime.Version(), goversion)
|
||||
Exit(2)
|
||||
}
|
||||
|
||||
thearch.LinkArch.Init(Ctxt)
|
||||
|
||||
if outfile == "" {
|
||||
|
|
|
|||
|
|
@ -4013,3 +4013,14 @@ func TestExecutableGOROOT(t *testing.T) {
|
|||
t.Fatalf("%s env GOROOT = %q, want %q", symGoTool, got, want)
|
||||
}
|
||||
}
|
||||
|
||||
func TestNeedVersion(t *testing.T) {
|
||||
tg := testgo(t)
|
||||
defer tg.cleanup()
|
||||
tg.parallel()
|
||||
tg.tempFile("goversion.go", `package main; func main() {}`)
|
||||
path := tg.path("goversion.go")
|
||||
tg.setenv("TESTGO_VERSION", "go1.testgo")
|
||||
tg.runFail("run", path)
|
||||
tg.grepStderr("compile", "does not match go tool version")
|
||||
}
|
||||
|
|
|
|||
|
|
@ -392,8 +392,13 @@ func BuildModeInit() {
|
|||
cfg.BuildContext.InstallSuffix += codegenArg[1:]
|
||||
}
|
||||
}
|
||||
if strings.HasPrefix(runtimeVersion, "go1") {
|
||||
buildGcflags = append(buildGcflags, "-goversion", runtimeVersion)
|
||||
}
|
||||
}
|
||||
|
||||
var runtimeVersion = runtime.Version()
|
||||
|
||||
func runBuild(cmd *base.Command, args []string) {
|
||||
InstrumentInit()
|
||||
BuildModeInit()
|
||||
|
|
|
|||
17
src/cmd/go/internal/work/testgo.go
Normal file
17
src/cmd/go/internal/work/testgo.go
Normal file
|
|
@ -0,0 +1,17 @@
|
|||
// Copyright 2017 The Go Authors. All rights reserved.
|
||||
// Use of this source code is governed by a BSD-style
|
||||
// license that can be found in the LICENSE file.
|
||||
|
||||
// This file contains extra hooks for testing the go command.
|
||||
|
||||
// +build testgo
|
||||
|
||||
package work
|
||||
|
||||
import "os"
|
||||
|
||||
func init() {
|
||||
if v := os.Getenv("TESTGO_VERSION"); v != "" {
|
||||
runtimeVersion = v
|
||||
}
|
||||
}
|
||||
Loading…
Add table
Add a link
Reference in a new issue