cmd/dist: print error if GOROOT is inside a module

Fixes #36701

Change-Id: I22738235e7a7ee06bc5d748213aab523aad8cf12
Reviewed-on: https://go-review.googlesource.com/c/go/+/215939
Run-TryBot: Jay Conrod <jayconrod@google.com>
TryBot-Result: Gobot Gobot <gobot@golang.org>
Reviewed-by: Ian Lance Taylor <iant@golang.org>
Reviewed-by: Marwan Sulaiman <marwan.sameer@gmail.com>
This commit is contained in:
Jay Conrod 2020-01-22 15:30:03 -08:00
parent f9fe783c6c
commit 9f1d55c4e7
1 changed files with 17 additions and 0 deletions

17
src/cmd/dist/build.go vendored
View File

@ -110,6 +110,9 @@ func xinit() {
fatalf("$GOROOT must be set")
}
goroot = filepath.Clean(b)
if modRoot := findModuleRoot(goroot); modRoot != "" {
fatalf("found go.mod file in %s: $GOROOT must not be inside a module", modRoot)
}
b = os.Getenv("GOROOT_FINAL")
if b == "" {
@ -1590,6 +1593,20 @@ func checkCC() {
}
}
func findModuleRoot(dir string) (root string) {
for {
if fi, err := os.Stat(filepath.Join(dir, "go.mod")); err == nil && !fi.IsDir() {
return dir
}
d := filepath.Dir(dir)
if d == dir {
break
}
dir = d
}
return ""
}
func defaulttarg() string {
// xgetwd might return a path with symlinks fully resolved, and if
// there happens to be symlinks in goroot, then the hasprefix test