81 lines
2.0 KiB
Go
81 lines
2.0 KiB
Go
|
// Copyright 2015 The Go Authors. All rights reserved.
|
||
|
// Use of this source code is governed by a BSD-style
|
||
|
// license that can be found in the LICENSE file.
|
||
|
|
||
|
package main
|
||
|
|
||
|
import (
|
||
|
"bytes"
|
||
|
"fmt"
|
||
|
"os"
|
||
|
"os/exec"
|
||
|
"path/filepath"
|
||
|
)
|
||
|
|
||
|
var cmdVersion = &command{
|
||
|
run: runVersion,
|
||
|
Name: "version",
|
||
|
Usage: "",
|
||
|
Short: "print version",
|
||
|
Long: `
|
||
|
Version prints versions of the gomobile binary and tools
|
||
|
`,
|
||
|
}
|
||
|
|
||
|
func runVersion(cmd *command) (err error) {
|
||
|
// Check this binary matches the version in golang.org/x/mobile/cmd/gomobile
|
||
|
// source code in GOPATH. If they don't match, currently there is no
|
||
|
// way to reliably identify the revision number this binary was built
|
||
|
// against.
|
||
|
version := func() string {
|
||
|
bin, err := exec.LookPath(os.Args[0])
|
||
|
if err != nil {
|
||
|
return ""
|
||
|
}
|
||
|
bindir := filepath.Dir(bin)
|
||
|
cmd := exec.Command("go", "install", "-x", "-n", "golang.org/x/mobile/cmd/gomobile")
|
||
|
cmd.Env = append(os.Environ(), "GOBIN="+bindir)
|
||
|
out, err := cmd.CombinedOutput()
|
||
|
if err != nil || len(out) != 0 {
|
||
|
return ""
|
||
|
}
|
||
|
if rev, err := mobileRepoRevision(); err == nil {
|
||
|
return rev
|
||
|
}
|
||
|
return ""
|
||
|
}()
|
||
|
if version == "" {
|
||
|
fmt.Println("gomobile version unknown")
|
||
|
return nil
|
||
|
}
|
||
|
|
||
|
// Supported platforms
|
||
|
platforms := "android"
|
||
|
if goos == "darwin" {
|
||
|
platforms = "android,ios"
|
||
|
}
|
||
|
|
||
|
// ANDROID_HOME, sdk build tool version
|
||
|
androidapi, _ := androidAPIPath()
|
||
|
|
||
|
fmt.Printf("gomobile version %s (%s); androidSDK=%s\n", version, platforms, androidapi)
|
||
|
return nil
|
||
|
}
|
||
|
|
||
|
func mobileRepoRevision() (rev string, err error) {
|
||
|
b, err := exec.Command("go", "list", "-f", "{{.Dir}}", "golang.org/x/mobile/app").CombinedOutput()
|
||
|
if err != nil {
|
||
|
return "", fmt.Errorf("mobile repo not found: %v", err)
|
||
|
}
|
||
|
|
||
|
repo := filepath.Dir(string(b))
|
||
|
if err := os.Chdir(repo); err != nil {
|
||
|
return "", fmt.Errorf("mobile repo %q not accessible: %v", repo, err)
|
||
|
}
|
||
|
revision, err := exec.Command("git", "log", "-n", "1", "--format=format: +%h %cd", "HEAD").CombinedOutput()
|
||
|
if err != nil {
|
||
|
return "", err
|
||
|
}
|
||
|
return string(bytes.Trim(revision, " \t\r\n")), nil
|
||
|
}
|