build: Clean up environment handling

Don't set variables for cross compilation when building assets, cleaner
check for Go version.
This commit is contained in:
Jakob Borg 2016-03-31 07:33:09 +00:00 committed by Audrius Butkevicius
parent 66f480519b
commit b6f32b6e45

View File

@ -46,6 +46,8 @@ func main() {
log.SetOutput(os.Stdout) log.SetOutput(os.Stdout)
log.SetFlags(0) log.SetFlags(0)
// If GOPATH isn't set, set it correctly with the assumption that we are
// in $GOPATH/src/github.com/syncthing/syncthing.
if os.Getenv("GOPATH") == "" { if os.Getenv("GOPATH") == "" {
cwd, err := os.Getwd() cwd, err := os.Getwd()
if err != nil { if err != nil {
@ -55,6 +57,12 @@ func main() {
log.Println("GOPATH is", gopath) log.Println("GOPATH is", gopath)
os.Setenv("GOPATH", gopath) os.Setenv("GOPATH", gopath)
} }
// We use Go 1.5+ vendoring.
os.Setenv("GO15VENDOREXPERIMENT", "1")
// Set path to $GOPATH/bin:$PATH so that we can for sure find tools we
// might have installed during "build.go setup".
os.Setenv("PATH", fmt.Sprintf("%s%cbin%c%s", os.Getenv("GOPATH"), os.PathSeparator, os.PathListSeparator, os.Getenv("PATH"))) os.Setenv("PATH", fmt.Sprintf("%s%cbin%c%s", os.Getenv("GOPATH"), os.PathSeparator, os.PathListSeparator, os.Getenv("PATH")))
flag.StringVar(&goarch, "goarch", runtime.GOARCH, "GOARCH") flag.StringVar(&goarch, "goarch", runtime.GOARCH, "GOARCH")
@ -153,9 +161,9 @@ func main() {
} }
func checkRequiredGoVersion() (float64, bool) { func checkRequiredGoVersion() (float64, bool) {
ver := run("go", "version") re := regexp.MustCompile(`go(\d+\.\d+)`)
re := regexp.MustCompile(`go version go(\d+\.\d+)`) ver := runtime.Version()
if m := re.FindSubmatch(ver); len(m) == 2 { if m := re.FindStringSubmatch(ver); len(m) == 2 {
vs := string(m[1]) vs := string(m[1])
// This is a standard go build. Verify that it's new enough. // This is a standard go build. Verify that it's new enough.
f, err := strconv.ParseFloat(vs, 64) f, err := strconv.ParseFloat(vs, 64)
@ -163,7 +171,9 @@ func checkRequiredGoVersion() (float64, bool) {
log.Printf("*** Couldn't parse Go version out of %q.\n*** This isn't known to work, proceed on your own risk.", vs) log.Printf("*** Couldn't parse Go version out of %q.\n*** This isn't known to work, proceed on your own risk.", vs)
return 0, false return 0, false
} }
if f < minGoVersion { if f < 1.5 {
log.Printf("*** Go version %.01f doesn't support the vendoring mechanism.\n*** Ensure correct dependencies in your $GOPATH.", f)
} else if f < minGoVersion {
log.Fatalf("*** Go version %.01f is less than required %.01f.\n*** This is known not to work, not proceeding.", f, minGoVersion) log.Fatalf("*** Go version %.01f is less than required %.01f.\n*** This is known not to work, not proceeding.", f, minGoVersion)
} }
return f, true return f, true
@ -186,7 +196,6 @@ func setup() {
func test(pkgs ...string) { func test(pkgs ...string) {
lazyRebuildAssets() lazyRebuildAssets()
setBuildEnv()
useRace := runtime.GOARCH == "amd64" useRace := runtime.GOARCH == "amd64"
switch runtime.GOOS { switch runtime.GOOS {
case "darwin", "linux", "freebsd", "windows": case "darwin", "linux", "freebsd", "windows":
@ -203,8 +212,6 @@ func test(pkgs ...string) {
func bench(pkgs ...string) { func bench(pkgs ...string) {
lazyRebuildAssets() lazyRebuildAssets()
setBuildEnv()
runPrint("go", append([]string{"test", "-run", "NONE", "-bench", "."}, pkgs...)...) runPrint("go", append([]string{"test", "-run", "NONE", "-bench", "."}, pkgs...)...)
} }
@ -224,7 +231,9 @@ func install(pkg string, tags []string) {
args = append(args, "-race") args = append(args, "-race")
} }
args = append(args, pkg) args = append(args, pkg)
setBuildEnv()
os.Setenv("GOOS", goos)
os.Setenv("GOARCH", goarch)
runPrint("go", args...) runPrint("go", args...)
} }
@ -245,7 +254,9 @@ func build(pkg string, tags []string) {
args = append(args, "-race") args = append(args, "-race")
} }
args = append(args, pkg) args = append(args, pkg)
setBuildEnv()
os.Setenv("GOOS", goos)
os.Setenv("GOARCH", goarch)
runPrint("go", args...) runPrint("go", args...)
} }
@ -408,14 +419,7 @@ func listFiles(dir string) []string {
return res return res
} }
func setBuildEnv() {
os.Setenv("GOOS", goos)
os.Setenv("GOARCH", goarch)
os.Setenv("GO15VENDOREXPERIMENT", "1")
}
func rebuildAssets() { func rebuildAssets() {
setBuildEnv()
runPipe("lib/auto/gui.files.go", "go", "run", "script/genassets.go", "gui") runPipe("lib/auto/gui.files.go", "go", "run", "script/genassets.go", "gui")
} }