فهرست منبع

build: Clean up environment handling

Don't set variables for cross compilation when building assets, cleaner
check for Go version.
Jakob Borg 9 سال پیش
والد
کامیت
b6f32b6e45
1فایلهای تغییر یافته به همراه20 افزوده شده و 16 حذف شده
  1. 20 16
      build.go

+ 20 - 16
build.go

@@ -46,6 +46,8 @@ func main() {
 	log.SetOutput(os.Stdout)
 	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") == "" {
 		cwd, err := os.Getwd()
 		if err != nil {
@@ -55,6 +57,12 @@ func main() {
 		log.Println("GOPATH is", 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")))
 
 	flag.StringVar(&goarch, "goarch", runtime.GOARCH, "GOARCH")
@@ -153,9 +161,9 @@ func main() {
 }
 
 func checkRequiredGoVersion() (float64, bool) {
-	ver := run("go", "version")
-	re := regexp.MustCompile(`go version go(\d+\.\d+)`)
-	if m := re.FindSubmatch(ver); len(m) == 2 {
+	re := regexp.MustCompile(`go(\d+\.\d+)`)
+	ver := runtime.Version()
+	if m := re.FindStringSubmatch(ver); len(m) == 2 {
 		vs := string(m[1])
 		// This is a standard go build. Verify that it's new enough.
 		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)
 			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)
 		}
 		return f, true
@@ -186,7 +196,6 @@ func setup() {
 func test(pkgs ...string) {
 	lazyRebuildAssets()
 
-	setBuildEnv()
 	useRace := runtime.GOARCH == "amd64"
 	switch runtime.GOOS {
 	case "darwin", "linux", "freebsd", "windows":
@@ -203,8 +212,6 @@ func test(pkgs ...string) {
 
 func bench(pkgs ...string) {
 	lazyRebuildAssets()
-
-	setBuildEnv()
 	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, pkg)
-	setBuildEnv()
+
+	os.Setenv("GOOS", goos)
+	os.Setenv("GOARCH", goarch)
 	runPrint("go", args...)
 }
 
@@ -245,7 +254,9 @@ func build(pkg string, tags []string) {
 		args = append(args, "-race")
 	}
 	args = append(args, pkg)
-	setBuildEnv()
+
+	os.Setenv("GOOS", goos)
+	os.Setenv("GOARCH", goarch)
 	runPrint("go", args...)
 }
 
@@ -408,14 +419,7 @@ func listFiles(dir string) []string {
 	return res
 }
 
-func setBuildEnv() {
-	os.Setenv("GOOS", goos)
-	os.Setenv("GOARCH", goarch)
-	os.Setenv("GO15VENDOREXPERIMENT", "1")
-}
-
 func rebuildAssets() {
-	setBuildEnv()
 	runPipe("lib/auto/gui.files.go", "go", "run", "script/genassets.go", "gui")
 }