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

Unified Diff: third_party/go/src/golang.org/x/mobile/cmd/gomobile/bind.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/bind.go
diff --git a/third_party/go/src/golang.org/x/mobile/cmd/gomobile/bind.go b/third_party/go/src/golang.org/x/mobile/cmd/gomobile/bind.go
deleted file mode 100644
index 8fc664b1e8389cf0c75ebb2ebac124f91cc4acc1..0000000000000000000000000000000000000000
--- a/third_party/go/src/golang.org/x/mobile/cmd/gomobile/bind.go
+++ /dev/null
@@ -1,308 +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 (
- "errors"
- "fmt"
- "go/ast"
- "go/build"
- "go/parser"
- "go/scanner"
- "go/token"
- "io"
- "io/ioutil"
- "os"
- "path/filepath"
- "text/template"
- "unicode"
- "unicode/utf8"
-
- "golang.org/x/mobile/bind"
- "golang.org/x/tools/go/loader"
- "golang.org/x/tools/go/types"
-)
-
-// ctx, pkg, ndkccpath, tmpdir in build.go
-
-var cmdBind = &command{
- run: runBind,
- Name: "bind",
- Usage: "[package]",
- Short: "build a shared library for android APK and/or iOS app",
- Long: `
-Bind generates language bindings like gobind (golang.org/x/mobile/cmd/gobind)
-for a package and builds a shared library for each platform from the go binding
-code.
-
-The -outdir flag specifies the output directory and is required.
-
-For Android, the bind command will place the generated Java API stubs and the
-compiled shared libraries in the android subdirectory of the following layout.
-
-<outdir>/android
- libs/
- armeabi-v7a/libgojni.so
- ...
- src/main/java/go/
- Seq.java
- Go.java
- mypackage/Mypackage.java
-
-The -v flag provides verbose output, including the list of packages built.
-
-These build flags are shared by the build command.
-For documentation, see 'go help build':
- -a
- -i
- -n
- -x
- -tags 'tag list'
-`,
-}
-
-// TODO: -mobile
-
-var bindOutdir *string // -outdir
-func init() {
- bindOutdir = cmdBind.flag.String("outdir", "", "output directory. Default is the current directory.")
-}
-
-func runBind(cmd *command) error {
- cwd, err := os.Getwd()
- if err != nil {
- panic(err)
- }
- args := cmd.flag.Args()
-
- var bindPkg *build.Package
- switch len(args) {
- case 0:
- bindPkg, err = ctx.ImportDir(cwd, build.ImportComment)
- case 1:
- bindPkg, err = ctx.Import(args[0], cwd, build.ImportComment)
- default:
- cmd.usage()
- os.Exit(1)
- }
- if err != nil {
- return err
- }
-
- if *bindOutdir == "" {
- return fmt.Errorf("-outdir is required")
- }
-
- if !buildN {
- sentinel := filepath.Join(*bindOutdir, "gomobile-bind-sentinel")
- if err := ioutil.WriteFile(sentinel, []byte("write test"), 0644); err != nil {
- return fmt.Errorf("output directory %q not writable", *bindOutdir)
- }
- os.Remove(sentinel)
- }
-
- if buildN {
- tmpdir = "$WORK"
- } else {
- tmpdir, err = ioutil.TempDir("", "gomobile-bind-work-")
- if err != nil {
- return err
- }
- }
- defer removeAll(tmpdir)
- if buildX {
- fmt.Fprintln(os.Stderr, "WORK="+tmpdir)
- }
-
- binder, err := newBinder(bindPkg)
- if err != nil {
- return err
- }
-
- if err := binder.GenGo(tmpdir); err != nil {
- return err
- }
-
- pathJoin := func(a, b string) string {
- return filepath.Join(a, filepath.FromSlash(b))
- }
-
- mainFile := pathJoin(tmpdir, "androidlib/main.go")
- err = writeFile(mainFile, func(w io.Writer) error {
- return androidMainTmpl.Execute(w, "../go_"+binder.pkg.Name())
- })
- if err != nil {
- return fmt.Errorf("failed to create the main package for android: %v", err)
- }
-
- androidOutdir := pathJoin(*bindOutdir, "android")
-
- err = gobuild(mainFile, pathJoin(androidOutdir, "libs/armeabi-v7a/libgojni.so"))
- if err != nil {
- return err
- }
- p, err := ctx.Import("golang.org/x/mobile/app", cwd, build.ImportComment)
- if err != nil {
- return fmt.Errorf(`"golang.org/x/mobile/app" is not found; run go get golang.org/x/mobile/app`)
- }
- repo := filepath.Clean(filepath.Join(p.Dir, "..")) // golang.org/x/mobile directory.
-
- // TODO(crawshaw): use a better package path derived from the go package.
- if err := binder.GenJava(pathJoin(androidOutdir, "src/main/java/go/"+binder.pkg.Name())); err != nil {
- return err
- }
-
- src := pathJoin(repo, "app/Go.java")
- dst := pathJoin(androidOutdir, "src/main/java/go/Go.java")
- rm(dst)
- if err := symlink(src, dst); err != nil {
- return err
- }
-
- src = pathJoin(repo, "bind/java/Seq.java")
- dst = pathJoin(androidOutdir, "src/main/java/go/Seq.java")
- rm(dst)
- if err := symlink(src, dst); err != nil {
- return err
- }
-
- return nil
-}
-
-type binder struct {
- files []*ast.File
- fset *token.FileSet
- pkg *types.Package
-}
-
-func (b *binder) GenJava(outdir string) error {
- firstRune, size := utf8.DecodeRuneInString(b.pkg.Name())
- className := string(unicode.ToUpper(firstRune)) + b.pkg.Name()[size:]
- javaFile := filepath.Join(outdir, className+".java")
-
- if buildX {
- printcmd("gobind -lang=java %s > %s", b.pkg.Path(), javaFile)
- }
-
- generate := func(w io.Writer) error {
- return bind.GenJava(w, b.fset, b.pkg)
- }
- if err := writeFile(javaFile, generate); err != nil {
- return err
- }
- return nil
-}
-
-func (b *binder) GenGo(outdir string) error {
- pkgName := "go_" + b.pkg.Name()
- goFile := filepath.Join(outdir, pkgName, pkgName+".go")
-
- if buildX {
- printcmd("gobind -lang=go %s > %s", b.pkg.Path(), goFile)
- }
-
- generate := func(w io.Writer) error {
- return bind.GenGo(w, b.fset, b.pkg)
- }
- if err := writeFile(goFile, generate); err != nil {
- return err
- }
- return nil
-}
-
-func writeFile(filename string, generate func(io.Writer) error) error {
- if buildV {
- fmt.Fprintf(os.Stderr, "write %s\n", filename)
- }
-
- err := mkdir(filepath.Dir(filename))
- if err != nil {
- return err
- }
-
- if buildN {
- return generate(ioutil.Discard)
- }
-
- f, err := os.Create(filename)
- if err != nil {
- return err
- }
- defer func() {
- if cerr := f.Close(); err == nil {
- err = cerr
- }
- }()
-
- return generate(f)
-}
-
-func newBinder(bindPkg *build.Package) (*binder, error) {
- if bindPkg.Name == "main" {
- return nil, fmt.Errorf("package %q: can only bind a library package", bindPkg.Name)
- }
-
- if len(bindPkg.CgoFiles) > 0 {
- return nil, fmt.Errorf("cannot use cgo-dependent package as service definition: %s", bindPkg.CgoFiles[0])
- }
-
- fset := token.NewFileSet()
-
- hasErr := false
- var files []*ast.File
- for _, filename := range bindPkg.GoFiles {
- p := filepath.Join(bindPkg.Dir, filename)
- file, err := parser.ParseFile(fset, p, nil, parser.AllErrors)
- if err != nil {
- hasErr = true
- if list, _ := err.(scanner.ErrorList); len(list) > 0 {
- for _, err := range list {
- fmt.Fprintln(os.Stderr, err)
- }
- } else {
- fmt.Fprintln(os.Stderr, err)
- }
- }
- files = append(files, file)
- }
-
- if hasErr {
- return nil, errors.New("package parsing failed.")
- }
-
- conf := loader.Config{
- Fset: fset,
- }
- conf.TypeChecker.Error = func(err error) {
- fmt.Fprintln(os.Stderr, err)
- }
-
- conf.CreateFromFiles(bindPkg.ImportPath, files...)
- program, err := conf.Load()
- if err != nil {
- return nil, err
- }
- b := &binder{
- files: files,
- fset: fset,
- pkg: program.Created[0].Pkg,
- }
- return b, nil
-}
-
-var androidMainTmpl = template.Must(template.New("android.go").Parse(`
-package main
-
-import (
- "golang.org/x/mobile/app"
- "golang.org/x/mobile/bind/java"
-
- _ "{{.}}"
-)
-
-func main() {
- app.Run(app.Callbacks{Start: java.Init})
-}
-`))

Powered by Google App Engine
This is Rietveld 408576698