cmd/gomobile: emit replace directives without a version

bind builds the bindings in a generated module and reconstructs its
build list from 'go list -m -json all' run in the original module. For
a replaced module it emitted the replacement scoped to the version the
original module selected, and emitted no requirement at all.

The generated module requires a different set of modules than the
original one does, so minimal version selection can select a higher
version: requirements that module graph pruning hides in the original
module become direct requirements of the generated module. The scoped
directive then matches nothing, and the module is fetched from the
module proxy instead of the replacement. Nothing reports an error; the
build just compiles sources other than the ones the original module
resolves to.

Emit replacements without a version so that they stay effective
whichever version is selected, and record the selected version as a
requirement.

Extract the translation into parseModuleVersions so that it can be
tested without running the go command.

Fixes golang/go#80816

Change-Id: Ifd93b8b5ed8b216982a804ff9f4bfdf6aa439209
Reviewed-on: https://go-review.googlesource.com/c/mobile/+/812720
LUCI-TryBot-Result: golang-scoped@luci-project-accounts.iam.gserviceaccount.com <golang-scoped@luci-project-accounts.iam.gserviceaccount.com>
Reviewed-by: Dmitri Shuralyov <dmitshur@google.com>
Reviewed-by: Mark Freeman <markfreeman@google.com>
Reviewed-by: Dmitri Shuralyov <dmitshur@golang.org>
2 files changed
tree: c3dbfa719d9757f72a6d33f6b8b795b546ea344a
  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.