Chromium Code Reviews
chromiumcodereview-hr@appspot.gserviceaccount.com (chromiumcodereview-hr) | Please choose your nickname with Settings | Help | Chromium Project | Gerrit Changes | Sign out
(11)

Unified Diff: third_party/go/src/golang.org/x/mobile/cmd/gomobile/build.go

Issue 1275153002: Remove third_party/golang.org/x/mobile as it is no longer used with Go 1.5. (Closed) Base URL: https://github.com/domokit/mojo.git@master
Patch Set: Remove golang.org/x/mobile Created 5 years, 4 months ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View side-by-side diff with in-line comments
Download patch
Index: third_party/go/src/golang.org/x/mobile/cmd/gomobile/build.go
diff --git a/third_party/go/src/golang.org/x/mobile/cmd/gomobile/build.go b/third_party/go/src/golang.org/x/mobile/cmd/gomobile/build.go
deleted file mode 100644
index 7a324ec049206b573aca4c002b28f10519a8ba40..0000000000000000000000000000000000000000
--- a/third_party/go/src/golang.org/x/mobile/cmd/gomobile/build.go
+++ /dev/null
@@ -1,413 +0,0 @@
-// 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"
- "crypto/x509"
- "encoding/pem"
- "errors"
- "fmt"
- "go/build"
- "io"
- "io/ioutil"
- "os"
- "os/exec"
- "path"
- "path/filepath"
- "strconv"
- "strings"
-)
-
-var ctx = build.Default
-var pkg *build.Package
-var ndkccpath string
-var tmpdir string
-
-var cmdBuild = &command{
- run: runBuild,
- Name: "build",
- Usage: "[package]",
- Short: "compile android APK and/or iOS app",
- Long: `
-Build compiles and encodes the app named by the import path.
-
-The named package must define a main function.
-
-If an AndroidManifest.xml is defined in the package directory, it is
-added to the APK file. Otherwise, a default manifest is generated.
-
-If the package directory contains an assets subdirectory, its contents
-are copied into the APK file.
-
-The -o flag specifies the output file name. If not specified, the
-output file name depends on the package built. The output file must end
-in '.apk'.
-
-The -v flag provides verbose output, including the list of packages built.
-
-These build flags are shared by the build, install, and test commands.
-For documentation, see 'go help build':
- -a
- -i
- -n
- -x
- -tags 'tag list'
-`,
-}
-
-// TODO: -mobile
-
-func runBuild(cmd *command) error {
- cwd, err := os.Getwd()
- if err != nil {
- panic(err)
- }
- args := cmd.flag.Args()
-
- switch len(args) {
- case 0:
- pkg, err = ctx.ImportDir(cwd, build.ImportComment)
- case 1:
- pkg, err = ctx.Import(args[0], cwd, build.ImportComment)
- default:
- cmd.usage()
- os.Exit(1)
- }
- if err != nil {
- return err
- }
-
- if pkg.Name != "main" {
- // Not an app, don't build a final package.
- return gobuild(pkg.ImportPath, "")
- }
-
- // Building a program, make sure it is appropriate for mobile.
- importsApp := false
- for _, path := range pkg.Imports {
- if path == "golang.org/x/mobile/app" {
- importsApp = true
- break
- }
- }
- if !importsApp {
- return fmt.Errorf(`%s does not import "golang.org/x/mobile/app"`, pkg.ImportPath)
- }
-
- if buildN {
- tmpdir = "$WORK"
- } else {
- tmpdir, err = ioutil.TempDir("", "gobuildapk-work-")
- if err != nil {
- return err
- }
- }
- defer removeAll(tmpdir)
- if buildX {
- fmt.Fprintln(os.Stderr, "WORK="+tmpdir)
- }
-
- libName := path.Base(pkg.ImportPath)
- manifestData, err := ioutil.ReadFile(filepath.Join(pkg.Dir, "AndroidManifest.xml"))
- if err != nil {
- if !os.IsNotExist(err) {
- return err
- }
- buf := new(bytes.Buffer)
- buf.WriteString(`<?xml version="1.0" encoding="utf-8"?>`)
- err := manifestTmpl.Execute(buf, manifestTmplData{
- // TODO(crawshaw): a better package path.
- JavaPkgPath: "org.golang.todo." + pkg.Name,
- Name: strings.ToUpper(pkg.Name[:1]) + pkg.Name[1:],
- LibName: libName,
- })
- if err != nil {
- return err
- }
- manifestData = buf.Bytes()
- if buildV {
- fmt.Fprintf(os.Stderr, "generated AndroidManifest.xml:\n%s\n", manifestData)
- }
- } else {
- libName, err = manifestLibName(manifestData)
- if err != nil {
- return err
- }
- }
- libPath := filepath.Join(tmpdir, "lib"+libName+".so")
-
- if err := gobuild(pkg.ImportPath, libPath); err != nil {
- return err
- }
- block, _ := pem.Decode([]byte(debugCert))
- if block == nil {
- return errors.New("no debug cert")
- }
- privKey, err := x509.ParsePKCS1PrivateKey(block.Bytes)
- if err != nil {
- return err
- }
-
- if *buildO == "" {
- *buildO = filepath.Base(pkg.Dir) + ".apk"
- }
- if !strings.HasSuffix(*buildO, ".apk") {
- return fmt.Errorf("output file name %q does not end in '.apk'", *buildO)
- }
- out, err := os.Create(*buildO)
- if err != nil {
- return err
- }
-
- var apkw *Writer
- if !buildN {
- apkw = NewWriter(out, privKey)
- }
- apkwcreate := func(name string) (io.Writer, error) {
- if buildV {
- fmt.Fprintf(os.Stderr, "apk: %s\n", name)
- }
- if buildN {
- return ioutil.Discard, nil
- }
- return apkw.Create(name)
- }
-
- w, err := apkwcreate("AndroidManifest.xml")
- if err != nil {
- return err
- }
- if _, err := w.Write(manifestData); err != nil {
- return err
- }
-
- w, err = apkwcreate("lib/armeabi/lib" + libName + ".so")
- if err != nil {
- return err
- }
- if !buildN {
- r, err := os.Open(libPath)
- if err != nil {
- return err
- }
- if _, err := io.Copy(w, r); err != nil {
- return err
- }
- }
-
- // Add any assets.
- assetsDir := filepath.Join(pkg.Dir, "assets")
- assetsDirExists := true
- fi, err := os.Stat(assetsDir)
- if err != nil {
- if os.IsNotExist(err) {
- assetsDirExists = false
- } else {
- return err
- }
- } else {
- assetsDirExists = fi.IsDir()
- }
- if assetsDirExists {
- filepath.Walk(assetsDir, func(path string, info os.FileInfo, err error) error {
- if err != nil {
- return err
- }
- if info.IsDir() {
- return nil
- }
- name := "assets/" + path[len(assetsDir)+1:]
- w, err := apkwcreate(name)
- if err != nil {
- return err
- }
- f, err := os.Open(path)
- if err != nil {
- return err
- }
- defer f.Close()
- _, err = io.Copy(w, f)
- return err
- })
- }
-
- // TODO: add gdbserver to apk?
-
- if buildN {
- return nil
- }
- return apkw.Close()
-}
-
-var xout io.Writer = os.Stderr
-
-func printcmd(format string, args ...interface{}) {
- cmd := fmt.Sprintf(format+"\n", args...)
- if tmpdir != "" {
- cmd = strings.Replace(cmd, tmpdir, "$WORK", -1)
- }
- if ndkccpath != "" {
- cmd = strings.Replace(cmd, ndkccpath, "$NDKCCPATH", -1)
- }
- if env := os.Getenv("HOME"); env != "" {
- cmd = strings.Replace(cmd, env, "$HOME", -1)
- }
- fmt.Fprint(xout, cmd)
-}
-
-// "Build flags", used by multiple commands.
-var (
- buildA bool // -a
- buildI bool // -i
- buildN bool // -n
- buildV bool // -v
- buildX bool // -x
- buildO *string // -o
-)
-
-func addBuildFlags(cmd *command) {
- cmd.flag.BoolVar(&buildA, "a", false, "")
- cmd.flag.BoolVar(&buildI, "i", false, "")
- cmd.flag.Var((*stringsFlag)(&ctx.BuildTags), "tags", "")
-}
-
-func addBuildFlagsNVX(cmd *command) {
- cmd.flag.BoolVar(&buildN, "n", false, "")
- cmd.flag.BoolVar(&buildV, "v", false, "")
- cmd.flag.BoolVar(&buildX, "x", false, "")
-}
-
-// gobuild builds a package.
-// If libPath is specified then it builds as a shared library.
-func gobuild(src, libPath string) error {
- version, err := goVersion()
- if err != nil {
- return err
- }
-
- gopath := goEnv("GOPATH")
- gomobilepath := ""
- for _, p := range filepath.SplitList(gopath) {
- gomobilepath = filepath.Join(p, "pkg", "gomobile")
- if _, err = os.Stat(gomobilepath); err == nil {
- break
- }
- }
- if err != nil || gomobilepath == "" {
- return errors.New("android toolchain not installed, run:\n\tgomobile init")
- }
- verpath := filepath.Join(gomobilepath, "version")
- installedVersion, err := ioutil.ReadFile(verpath)
- if err != nil {
- return errors.New("android toolchain partially installed, run:\n\tgomobile init")
- }
- if !bytes.Equal(installedVersion, version) {
- return errors.New("android toolchain out of date, run:\n\tgomobile init")
- }
-
- ndkccpath = filepath.Join(gomobilepath, "android-"+ndkVersion)
- ndkccbin := filepath.Join(ndkccpath, "arm", "bin")
- if buildX {
- fmt.Fprintln(os.Stderr, "NDKCCPATH="+ndkccpath)
- }
-
- gocmd := exec.Command(
- `go`,
- `build`,
- `-tags=`+strconv.Quote(strings.Join(ctx.BuildTags, ",")),
- `-toolexec=`+filepath.Join(ndkccbin, "toolexec"))
- if buildV {
- gocmd.Args = append(gocmd.Args, "-v")
- }
- if buildI {
- gocmd.Args = append(gocmd.Args, "-i")
- }
- if buildX {
- gocmd.Args = append(gocmd.Args, "-x")
- }
- if libPath == "" {
- if *buildO != "" {
- gocmd.Args = append(gocmd.Args, `-o`, *buildO)
- }
- } else {
- gocmd.Args = append(gocmd.Args,
- `-ldflags="-shared"`,
- `-o`, libPath,
- )
- }
-
- gocmd.Args = append(gocmd.Args, src)
-
- gocmd.Stdout = os.Stdout
- gocmd.Stderr = os.Stderr
- gocmd.Env = []string{
- `GOOS=android`,
- `GOARCH=arm`,
- `GOARM=7`,
- `CGO_ENABLED=1`,
- `CC=` + filepath.Join(ndkccbin, "arm-linux-androideabi-gcc"),
- `CXX=` + filepath.Join(ndkccbin, "arm-linux-androideabi-g++"),
- `GOGCCFLAGS="-fPIC -marm -pthread -fmessage-length=0"`,
- `GOROOT=` + goEnv("GOROOT"),
- `GOPATH=` + gopath,
- `GOMOBILEPATH=` + ndkccbin, // for toolexec
- }
- if buildX {
- printcmd("%s", strings.Join(gocmd.Env, " ")+" "+strings.Join(gocmd.Args, " "))
- }
- if !buildN {
- if err := gocmd.Run(); err != nil {
- return err
- }
- }
- return nil
-}
-
-func init() {
- buildO = cmdBuild.flag.String("o", "", "output file")
- addBuildFlags(cmdBuild)
- addBuildFlagsNVX(cmdBuild)
-
- addBuildFlags(cmdInstall)
- addBuildFlagsNVX(cmdInstall)
-
- addBuildFlagsNVX(cmdInit)
-
- addBuildFlags(cmdBind)
- addBuildFlagsNVX(cmdBind)
-}
-
-// A random uninteresting private key.
-// Must be consistent across builds so newer app versions can be installed.
-const debugCert = `
------BEGIN RSA PRIVATE KEY-----
-MIIEowIBAAKCAQEAy6ItnWZJ8DpX9R5FdWbS9Kr1U8Z7mKgqNByGU7No99JUnmyu
-NQ6Uy6Nj0Gz3o3c0BXESECblOC13WdzjsH1Pi7/L9QV8jXOXX8cvkG5SJAyj6hcO
-LOapjDiN89NXjXtyv206JWYvRtpexyVrmHJgRAw3fiFI+m4g4Qop1CxcIF/EgYh7
-rYrqh4wbCM1OGaCleQWaOCXxZGm+J5YNKQcWpjZRrDrb35IZmlT0bK46CXUKvCqK
-x7YXHgfhC8ZsXCtsScKJVHs7gEsNxz7A0XoibFw6DoxtjKzUCktnT0w3wxdY7OTj
-9AR8mobFlM9W3yirX8TtwekWhDNTYEu8dwwykwIDAQABAoIBAA2hjpIhvcNR9H9Z
-BmdEecydAQ0ZlT5zy1dvrWI++UDVmIp+Ve8BSd6T0mOqV61elmHi3sWsBN4M1Rdz
-3N38lW2SajG9q0fAvBpSOBHgAKmfGv3Ziz5gNmtHgeEXfZ3f7J95zVGhlHqWtY95
-JsmuplkHxFMyITN6WcMWrhQg4A3enKLhJLlaGLJf9PeBrvVxHR1/txrfENd2iJBH
-FmxVGILL09fIIktJvoScbzVOneeWXj5vJGzWVhB17DHBbANGvVPdD5f+k/s5aooh
-hWAy/yLKocr294C4J+gkO5h2zjjjSGcmVHfrhlXQoEPX+iW1TGoF8BMtl4Llc+jw
-lKWKfpECgYEA9C428Z6CvAn+KJ2yhbAtuRo41kkOVoiQPtlPeRYs91Pq4+NBlfKO
-2nWLkyavVrLx4YQeCeaEU2Xoieo9msfLZGTVxgRlztylOUR+zz2FzDBYGicuUD3s
-EqC0Wv7tiX6dumpWyOcVVLmR9aKlOUzA9xemzIsWUwL3PpyONhKSq7kCgYEA1X2F
-f2jKjoOVzglhtuX4/SP9GxS4gRf9rOQ1Q8DzZhyH2LZ6Dnb1uEQvGhiqJTU8CXxb
-7odI0fgyNXq425Nlxc1Tu0G38TtJhwrx7HWHuFcbI/QpRtDYLWil8Zr7Q3BT9rdh
-moo4m937hLMvqOG9pyIbyjOEPK2WBCtKW5yabqsCgYEAu9DkUBr1Qf+Jr+IEU9I8
-iRkDSMeusJ6gHMd32pJVCfRRQvIlG1oTyTMKpafmzBAd/rFpjYHynFdRcutqcShm
-aJUq3QG68U9EAvWNeIhA5tr0mUEz3WKTt4xGzYsyWES8u4tZr3QXMzD9dOuinJ1N
-+4EEumXtSPKKDG3M8Qh+KnkCgYBUEVSTYmF5EynXc2xOCGsuy5AsrNEmzJqxDUBI
-SN/P0uZPmTOhJIkIIZlmrlW5xye4GIde+1jajeC/nG7U0EsgRAV31J4pWQ5QJigz
-0+g419wxIUFryGuIHhBSfpP472+w1G+T2mAGSLh1fdYDq7jx6oWE7xpghn5vb9id
-EKLjdwKBgBtz9mzbzutIfAW0Y8F23T60nKvQ0gibE92rnUbjPnw8HjL3AZLU05N+
-cSL5bhq0N5XHK77sscxW9vXjG0LJMXmFZPp9F6aV6ejkMIXyJ/Yz/EqeaJFwilTq
-Mc6xR47qkdzu0dQ1aPm4XD7AWDtIvPo/GG2DKOucLBbQc2cOWtKS
------END RSA PRIVATE KEY-----
-`

Powered by Google App Engine
This is Rietveld 408576698