From 2d7b0cf94d0ed5e9c9b97eca179e14d1b0d0c73b Mon Sep 17 00:00:00 2001 From: Jakob Borg Date: Sun, 30 Nov 2014 21:46:00 +0100 Subject: [PATCH] Figure out GOARM without being told (ref #1051) --- build.go | 31 ++++++++++++++++++++++++++++--- 1 file changed, 28 insertions(+), 3 deletions(-) diff --git a/build.go b/build.go index 32639b8e..c762b8be 100644 --- a/build.go +++ b/build.go @@ -20,6 +20,7 @@ package main import ( "archive/tar" "archive/zip" + "bufio" "bytes" "compress/gzip" "flag" @@ -75,12 +76,18 @@ func main() { case "386", "amd64", "armv5", "armv6", "armv7": break case "arm": - switch os.Getenv("GOARM") { + // Grab GOARM from the environment + origGoArm := os.Getenv("GOARM") + if origGoArm == "" { + // Not found there, run "go env" to try to figure it out. + origGoArm = getGoEnv("GOARM") + } + switch origGoArm { case "5", "6", "7": - goarch += "v" + os.Getenv("GOARM") + goarch += "v" + origGoArm break default: - log.Println("Invalid goarch \"arm\". Use one of \"armv5\", \"armv6\", \"armv7\".") + log.Println("Invalid -goarch \"arm\". Use one of \"armv5\", \"armv6\", \"armv7\" or set GOARM.") log.Fatalln("Note that producing a correct \"armv5\" binary requires a rebuilt stdlib.") } default: @@ -449,6 +456,24 @@ func runPipe(file, cmd string, args ...string) { fd.Close() } +func getGoEnv(key string) string { + bs, err := runError("go", "env") + if err != nil { + log.Fatal(err) + } + s := bufio.NewScanner(bytes.NewReader(bs)) + for s.Scan() { + fields := strings.SplitN(s.Text(), "=", 2) + if len(fields) != 2 { + continue + } + if fields[0] == key { + return strings.Trim(fields[1], `"`) + } + } + return "" +} + type archiveFile struct { src string dst string