cmd/gomobile: generate package documentation

Change-Id: I2a41cf0f16dcefe87c73ab0a8f02a251c1243157
Reviewed-on: https://go-review.googlesource.com/8121
Reviewed-by: Hyang-Ah Hana Kim <hyangah@gmail.com>
This commit is contained in:
David Crawshaw 2015-03-26 14:21:54 -04:00
parent 2965d09ba5
commit 502bceb448
6 changed files with 196 additions and 10 deletions

View File

@ -31,7 +31,7 @@ var cmdBind = &command{
run: runBind,
Name: "bind",
Usage: "[package]",
Short: "build a shared library for android APK and/or iOS app",
Short: "build a shared library for android APK and 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

View File

@ -29,8 +29,8 @@ var tmpdir string
var cmdBuild = &command{
run: runBuild,
Name: "build",
Usage: "[package]",
Short: "compile android APK and/or iOS app",
Usage: "[-o output] [-i] [build flags] [package]",
Short: "compile android APK and iOS app",
Long: `
Build compiles and encodes the app named by the import path.

134
cmd/gomobile/doc.go Normal file
View File

@ -0,0 +1,134 @@
// 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.
// DO NOT EDIT. GENERATED BY 'gomobile help documentation'.
/*
Gomobile is a tool for building and running mobile apps written in Go.
Installation:
$ go get golang.org/x/mobile/cmd/gomobile
$ gomobile init
Note that until Go 1.5 is released, you must compile Go from
tip. For details see https://golang.org/doc/install/source.
The minimum process is:
$ git clone https://go.googlesource.com/go
$ cd go/src
$ ./all.bash
Usage:
gomobile command [arguments]
Commands:
bind build a shared library for android APK and iOS app
build compile android APK and iOS app
init install android compiler toolchain
install compile android APK and iOS app and install on device
Use 'gomobile help [command]' for more information about that command.
NOTE: iOS support is not ready yet.
Build a shared library for android APK and iOS app
Usage:
gomobile bind [package]
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'
Compile android APK and iOS app
Usage:
gomobile build [-o output] [-i] [build flags] [package]
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'
Install android compiler toolchain
Usage:
gomobile init [-u]
Init downloads and installs the Android C++ compiler toolchain.
The toolchain is installed in $GOPATH/pkg/gomobile.
If the Android C++ compiler toolchain already exists in the path,
it skips download and uses the existing toolchain.
The -u option forces download and installation of the new toolchain
even when the toolchain exists.
Compile android APK and iOS app and install on device
Usage:
gomobile install [package]
Install compiles and installs the app named by the import path on the
attached mobile device.
This command requires the 'adb' tool on the PATH.
See the build command help for common flags and common behavior.
*/
package main

View File

@ -49,6 +49,7 @@ func init() {
var cmdInit = &command{
run: runInit,
Name: "init",
Usage: "[-u]",
Short: "install android compiler toolchain",
Long: `
Init downloads and installs the Android C++ compiler toolchain.

View File

@ -14,7 +14,7 @@ var cmdInstall = &command{
run: runInstall,
Name: "install",
Usage: "[package]",
Short: "compile android APK and/or iOS app and install on device",
Short: "compile android APK and iOS app and install on device",
Long: `
Install compiles and installs the app named by the import path on the
attached mobile device.

View File

@ -2,21 +2,22 @@
// Use of this source code is governed by a BSD-style
// license that can be found in the LICENSE file.
/*
Gomobile is a tool for building and running mobile apps written in Go.
The tool is under development and not ready for use.
*/
package main
//go:generate gomobile help documentation doc.go
import (
"bufio"
"bytes"
"flag"
"fmt"
"html/template"
"io"
"io/ioutil"
"log"
"os"
"unicode"
"unicode/utf8"
)
func printUsage(w io.Writer) {
@ -44,6 +45,10 @@ func main() {
}
if args[0] == "help" {
if len(args) == 3 && args[1] == "documentation" {
helpDocumentation(args[2])
return
}
help(args[1:])
return
}
@ -91,6 +96,37 @@ func help(args []string) {
os.Exit(2)
}
const documentationHeader = `// 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.
// DO NOT EDIT. GENERATED BY 'gomobile help documentation'.
`
func helpDocumentation(path string) {
w := new(bytes.Buffer)
w.WriteString(documentationHeader)
w.WriteString("\n/*\n")
if err := usageTmpl.Execute(w, commands); err != nil {
log.Fatal(err)
}
for _, cmd := range commands {
r, rlen := utf8.DecodeRuneInString(cmd.Short)
w.WriteString("\n\n")
w.WriteRune(unicode.ToUpper(r))
w.WriteString(cmd.Short[rlen:])
w.WriteString("\n\nUsage:\n\n\tgomobile " + cmd.Name + " " + cmd.Usage + "\n")
w.WriteString(cmd.Long)
}
w.WriteString("*/\npackage main\n")
if err := ioutil.WriteFile(path, w.Bytes(), 0666); err != nil {
log.Fatal(err)
}
}
var commands = []*command{
// TODO(crawshaw): cmdRun
cmdBind,
@ -113,7 +149,20 @@ func (cmd *command) usage() {
}
var usageTmpl = template.Must(template.New("usage").Parse(
`Gomobile is a tool for building Android and iOS Go apps.
`Gomobile is a tool for building and running mobile apps written in Go.
Installation:
$ go get golang.org/x/mobile/cmd/gomobile
$ gomobile init
Note that until Go 1.5 is released, you must compile Go from
tip. For details see https://golang.org/doc/install/source.
The minimum process is:
$ git clone https://go.googlesource.com/go
$ cd go/src
$ ./all.bash
Usage:
@ -124,4 +173,6 @@ Commands:
{{.Name | printf "%-11s"}} {{.Short}}{{end}}
Use 'gomobile help [command]' for more information about that command.
NOTE: iOS support is not ready yet.
`))