Пример #1
0
func init() {
	var err error
	sandboxDir, err = os.Getwd()
	if err != nil {
		panic(err)
	}
	sandboxGoRoot = filepath.Join(sandboxDir, "go")
	sandboxGoCc = filepath.Join(sandboxGoRoot, "bin/go")

	// check for sandbox compiler
	_, err = os.Stat(sandboxGoCc)
	haveSandboxCompiler := !os.IsNotExist(err)

	// TODO: check for compiled runtime in goRoot/pkg/*/runtime.a

	if !haveSandboxCompiler /* || !haveSandboxRuntime */ {
		log.Always("Sandboxed Go not found")
		// try local, then remote
		if err := copyLocal(); err != nil {
			if err := getRemote(); err != nil {
				panic(err)
			}
		}
	}
}
Пример #2
0
func getRemote() error {
	log.Always("trying to get remote Go source")
	out, err := run("hg", "clone", "-r release", "-b default", "-u release", "https://code.google.com/p/go")
	if err != nil {
		log.Error(out)
		return err
	}

	log.Always("building")
	cmd, b := cmd("./all.bash")
	cmd.Dir = filepath.Join(sandboxGoRoot, "src")
	err = cmd.Run()
	if err != nil {
		log.Error(b.String())
		return err
	}
	return nil
}
Пример #3
0
func copyLocal() error {
	log.Always("trying to copy local")
	goRoot := os.Getenv("GOROOT")
	if goRoot == "" {
		log.Always("no installed go")
		return errors.New("no installed Go")
	}

	if _, err := os.Stat(sandboxGoRoot); os.IsNotExist(err) {
		if err = os.MkdirAll(sandboxGoRoot, 0644); err != nil {
			return err
		}
	}
	if s, err := run("cp", "-r", filepath.Join(goRoot, "bin"), sandboxGoRoot); err != nil {
		log.Always(s)
		return err
	}
	if s, err := run("cp", "-r", filepath.Join(goRoot, "pkg"), sandboxGoRoot); err != nil {
		log.Always(s)
		return err
	}
	if s, err := run("cp", "-r", filepath.Join(goRoot, "src"), sandboxGoRoot); err != nil {
		log.Always(s)
		return err
	}
	if s, err := run("cp", "-r", filepath.Join(goRoot, "VERSION"), sandboxGoRoot); err != nil {
		log.Always(s)
		return err
	}
	return nil
}