cmd/gomobile: detect missing golang.org/x/mobile dep before invoking gobind

gobind's generated code depends on packages under golang.org/x/mobile/bind,
and gobind resolves them through the calling module via packages.Load. When
the dependency is missing from the user's module — most commonly after
go mod tidy removes it because no non-generated code imports it — gobind
fails with an opaque message repeated once per sub-target:

    unable to import bind: no Go package in golang.org/x/mobile/bind
    unable to import bind: no Go package in golang.org/x/mobile/bind
    unable to import bind/objc: no Go package in golang.org/x/mobile/bind/objc

Detect the missing module dependency in cmd/gomobile before invoking gobind
and emit a single actionable message that suggests adding a tool directive
to go.mod via 'go get -tool golang.org/x/mobile/cmd/gobind'.

Fixes golang/go#77183.

Change-Id: I365c99a1f37bec1f42b6cb858babd33d41317a8a
Reviewed-on: https://go-review.googlesource.com/c/mobile/+/779840
Reviewed-by: Dmitri Shuralyov <dmitshur@google.com>
Reviewed-by: Michael Pratt <mpratt@google.com>
Reviewed-by: Hajime Hoshi <hajimehoshi@gmail.com>
LUCI-TryBot-Result: golang-scoped@luci-project-accounts.iam.gserviceaccount.com <golang-scoped@luci-project-accounts.iam.gserviceaccount.com>
Auto-Submit: Hajime Hoshi <hajimehoshi@gmail.com>
2 files changed
tree: 0306987c8ae91c4c31d1b07b3015491bbaddd92e
  1. app/
  2. asset/
  3. bind/
  4. cmd/
  5. doc/
  6. event/
  7. example/
  8. exp/
  9. geom/
  10. gl/
  11. internal/
  12. testdata/
  13. .gitattributes
  14. .gitignore
  15. codereview.cfg
  16. CONTRIBUTING.md
  17. go.mod
  18. go.sum
  19. LICENSE
  20. PATENTS
  21. README.md
README.md

Go support for Mobile devices

Go Reference

The Go mobile repository holds packages and build tools for using Go on mobile platforms.

Package documentation as a starting point:

Caution image

The Go Mobile project is experimental. Use this at your own risk. While we are working hard to improve it, neither Google nor the Go team can provide end-user support.

This is early work and installing the build system requires Go 1.5. Follow the instructions on golang.org/wiki/Mobile to install the gomobile command, build the basic and the bind example apps.


Contributions to Go are appreciated. See https://go.dev/doc/contribute.

The git repository is https://go.googlesource.com/mobile.