cmd/gomobile: expose goVersion to subcommands

Pulled out of golang.org/cl/16913.

Change-Id: I041aba4e8cefed95ee2935139571140164b5d677
Reviewed-on: https://go-review.googlesource.com/17001
Reviewed-by: Hyang-Ah Hana Kim <hyangah@gmail.com>
This commit is contained in:
David Crawshaw 2015-11-17 13:24:48 -05:00
parent a6a27b7fc9
commit f8cb2f0e7e
4 changed files with 44 additions and 35 deletions

View File

@ -48,14 +48,9 @@ func buildEnvInit() (cleanup func(), err error) {
// Check the toolchain is in a good state.
// Pick a temporary directory for assembling an apk/app.
version, err := goVersion()
if err != nil {
return nil, err
}
if gomobilepath == "" {
return nil, errors.New("toolchain not installed, run `gomobile init`")
}
cleanupFn := func() {
if buildWork {
fmt.Printf("WORK=%s\n", tmpdir)
@ -72,7 +67,7 @@ func buildEnvInit() (cleanup func(), err error) {
if err != nil {
return nil, errors.New("toolchain partially installed, run `gomobile init`")
}
if !bytes.Equal(installedVersion, version) {
if !bytes.Equal(installedVersion, goVersionOut) {
return nil, errors.New("toolchain out of date, run `gomobile init`")
}

View File

@ -38,7 +38,6 @@ const openALVersion = "openal-soft-1.16.0.1"
var (
goos = runtime.GOOS
goarch = runtime.GOARCH
goTool = go1_6
ndkarch string
)
@ -77,14 +76,6 @@ func init() {
}
func runInit(cmd *command) error {
version, err := goVersion()
if err != nil {
return fmt.Errorf("%v: %s", err, version)
}
if bytes.HasPrefix(version, []byte("go version go1.5")) {
goTool = go1_5
}
gopaths := filepath.SplitList(goEnv("GOPATH"))
if len(gopaths) == 0 {
return fmt.Errorf("GOPATH is not set")
@ -150,7 +141,7 @@ func runInit(cmd *command) error {
// Install standard libraries for cross compilers.
start := time.Now()
var androidArgs []string
if goTool == go1_6 {
if goVersion == go1_6 {
// Ideally this would be -buildmode=c-shared.
// https://golang.org/issue/13234.
androidArgs = []string{"-gcflags=-shared", "-ldflags=-shared"}
@ -166,7 +157,7 @@ func runInit(cmd *command) error {
printcmd("go version > %s", verpath)
}
if !buildN {
if err := ioutil.WriteFile(verpath, version, 0644); err != nil {
if err := ioutil.WriteFile(verpath, goVersionOut, 0644); err != nil {
return err
}
}
@ -306,14 +297,6 @@ func rm(name string) error {
return os.Remove(name)
}
func goVersion() ([]byte, error) {
gobin, err := exec.LookPath("go")
if err != nil {
return nil, fmt.Errorf("go not found")
}
return exec.Command(gobin, "version").CombinedOutput()
}
func fetchOpenAL() error {
url := "https://dl.google.com/go/mobile/gomobile-" + openALVersion + ".tar.gz"
archive, err := fetch(url)
@ -676,10 +659,3 @@ func runCmd(cmd *exec.Cmd) error {
}
return nil
}
type goToolVersion int
const (
go1_5 goToolVersion = iota
go1_6
)

View File

@ -132,7 +132,7 @@ mv $WORK/openal/lib $GOMOBILE/android-{{.NDK}}/openal/lib{{if eq .GOOS "darwin"}
go install -p={{.NumCPU}} -x golang.org/x/mobile/gl
go install -p={{.NumCPU}} -x golang.org/x/mobile/app
go install -p={{.NumCPU}} -x golang.org/x/mobile/exp/app/debug{{end}}
GOOS=android GOARCH=arm GOARM=7 CC=$GOMOBILE/android-{{.NDK}}/arm/bin/arm-linux-androideabi-gcc{{.EXE}} CXX=$GOMOBILE/android-{{.NDK}}/arm/bin/arm-linux-androideabi-g++{{.EXE}} CGO_ENABLED=1 go install -p={{.NumCPU}} -buildmode=c-shared -pkgdir=$GOMOBILE/pkg_android_arm -x std
GOOS=android GOARCH=arm GOARM=7 CC=$GOMOBILE/android-{{.NDK}}/arm/bin/arm-linux-androideabi-gcc{{.EXE}} CXX=$GOMOBILE/android-{{.NDK}}/arm/bin/arm-linux-androideabi-g++{{.EXE}} CGO_ENABLED=1 go install -p={{.NumCPU}} -pkgdir=$GOMOBILE/pkg_android_arm -x std
{{if eq .GOOS "darwin"}}GOOS=darwin GOARCH=arm GOARM=7 CC=clang-iphoneos CXX=clang-iphoneos CGO_CFLAGS=-isysroot=iphoneos -arch armv7 CGO_LDFLAGS=-isysroot=iphoneos -arch armv7 CGO_ENABLED=1 go install -p={{.NumCPU}} -pkgdir=$GOMOBILE/pkg_darwin_arm -x std
GOOS=darwin GOARCH=arm64 CC=clang-iphoneos CXX=clang-iphoneos CGO_CFLAGS=-isysroot=iphoneos -arch arm64 CGO_LDFLAGS=-isysroot=iphoneos -arch arm64 CGO_ENABLED=1 go install -p={{.NumCPU}} -pkgdir=$GOMOBILE/pkg_darwin_arm64 -x std
GOOS=darwin GOARCH=amd64 CC=clang-iphonesimulator CXX=clang-iphonesimulator CGO_CFLAGS=-isysroot=iphonesimulator -mios-simulator-version-min=6.1 -arch x86_64 CGO_LDFLAGS=-isysroot=iphonesimulator -mios-simulator-version-min=6.1 -arch x86_64 CGO_ENABLED=1 go install -p={{.NumCPU}} -tags=ios -pkgdir=$GOMOBILE/pkg_darwin_amd64 -x std

View File

@ -9,6 +9,7 @@ package main
import (
"bufio"
"bytes"
"errors"
"flag"
"fmt"
"html/template"
@ -16,10 +17,17 @@ import (
"io/ioutil"
"log"
"os"
"os/exec"
"unicode"
"unicode/utf8"
)
var (
gomobileName = "gomobile"
goVersionOut = []byte(nil)
goVersion = go1_5
)
func printUsage(w io.Writer) {
bufw := bufio.NewWriter(w)
if err := usageTmpl.Execute(bufw, commands); err != nil {
@ -28,8 +36,6 @@ func printUsage(w io.Writer) {
bufw.Flush()
}
var gomobileName = "gomobile"
func main() {
gomobileName = os.Args[0]
flag.Usage = func() {
@ -53,6 +59,11 @@ func main() {
return
}
if err := determineGoVersion(); err != nil {
fmt.Fprintf(os.Stderr, "%s: %v\n", gomobileName, err)
os.Exit(1)
}
for _, cmd := range commands {
if cmd.Name == args[0] {
cmd.flag.Usage = func() {
@ -74,6 +85,33 @@ func main() {
os.Exit(2)
}
type goToolVersion int
const (
go1_5 goToolVersion = iota
go1_6
)
func determineGoVersion() error {
gobin, err := exec.LookPath("go")
if err != nil {
return errors.New("go not found")
}
goVersionOut, err = exec.Command(gobin, "version").CombinedOutput()
if err != nil {
return fmt.Errorf("'go version' failed: %v, %s", err, goVersionOut)
}
switch {
case bytes.HasPrefix(goVersionOut, []byte("go version go1.4")):
return errors.New("Go 1.5 or newer is required")
case bytes.HasPrefix(goVersionOut, []byte("go version go1.5")):
goVersion = go1_5
default:
goVersion = go1_6 // assume developers are working at tip
}
return nil
}
func help(args []string) {
if len(args) == 0 {
printUsage(os.Stdout)