Просмотр исходного кода

Check for supported go version build.go

Jakob Borg 11 лет назад
Родитель
Сommit
264400a984
1 измененных файлов с 23 добавлено и 0 удалено
  1. 23 0
      build.go

+ 23 - 0
build.go

@@ -33,6 +33,8 @@ var (
 	noupgrade bool
 )
 
+const minGoVersion = 1.3
+
 func main() {
 	log.SetOutput(os.Stdout)
 	log.SetFlags(0)
@@ -53,6 +55,8 @@ func main() {
 	flag.BoolVar(&noupgrade, "no-upgrade", false, "Disable upgrade functionality")
 	flag.Parse()
 
+	checkRequiredGoVersion()
+
 	if check() != nil {
 		setup()
 	}
@@ -122,6 +126,25 @@ func check() error {
 	return err
 }
 
+func checkRequiredGoVersion() {
+	ver := run("go", "version")
+	re := regexp.MustCompile(`go version go(\d+\.\d+)`)
+	if m := re.FindSubmatch(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)
+		if err != nil {
+			log.Printf("*** Could parse Go version out of %q.\n*** This isn't known to work, proceed on your own risk.", vs)
+			return
+		}
+		if f < minGoVersion {
+			log.Fatalf("*** Go version %.01f is less than required %.01f.\n*** This is known not to work, not proceeding.", f, minGoVersion)
+		}
+	} else {
+		log.Printf("*** Unknown Go version %q.\n*** This isn't known to work, proceed on your own risk.", ver)
+	}
+}
+
 func setup() {
 	runPrint("go", "get", "-v", "code.google.com/p/go.tools/cmd/cover")
 	runPrint("go", "get", "-v", "code.google.com/p/go.tools/cmd/vet")