cmd/gomobile: create go.sum at the temporary directory
As of Go1.16, `go build` fails if go.sum does not exist. This change
fixes this issue by forcing to create go.sum by calling `go mod tidy`.
Closes golang/go#44162
Change-Id: Ibba738503d1a58c6533b2427dd4efa6954b8eaa3
Reviewed-on: https://go-review.googlesource.com/c/mobile/+/290409
Run-TryBot: Hajime Hoshi <hajimehoshi@gmail.com>
Trust: Than McIntosh <thanm@google.com>
Trust: Hyang-Ah Hana Kim <hyangah@gmail.com>
TryBot-Result: Go Bot <gobot@golang.org>
Reviewed-by: Hyang-Ah Hana Kim <hyangah@gmail.com>
diff --git a/cmd/gomobile/bind_androidapp.go b/cmd/gomobile/bind_androidapp.go
index 8fe9179..88a5c86 100644
--- a/cmd/gomobile/bind_androidapp.go
+++ b/cmd/gomobile/bind_androidapp.go
@@ -52,6 +52,11 @@
androidDir := filepath.Join(tmpdir, "android")
+ modulesUsed, err := areGoModulesUsed()
+ if err != nil {
+ return err
+ }
+
// Generate binding code and java source code only when processing the first package.
for _, arch := range androidArchs {
if err := writeGoMod("android", arch); err != nil {
@@ -62,8 +67,16 @@
// Add the generated packages to GOPATH for reverse bindings.
gopath := fmt.Sprintf("GOPATH=%s%c%s", tmpdir, filepath.ListSeparator, goEnv("GOPATH"))
env = append(env, gopath)
- toolchain := ndk.Toolchain(arch)
+ // Run `go mod tidy` to force to create go.sum.
+ // Without go.sum, `go build` fails as of Go 1.16.
+ if modulesUsed {
+ if err := goModTidyAt(filepath.Join(tmpdir, "src"), env); err != nil {
+ return err
+ }
+ }
+
+ toolchain := ndk.Toolchain(arch)
err := goBuildAt(
filepath.Join(tmpdir, "src"),
"./gobind",
diff --git a/cmd/gomobile/bind_iosapp.go b/cmd/gomobile/bind_iosapp.go
index 91d0de3..846a63f 100644
--- a/cmd/gomobile/bind_iosapp.go
+++ b/cmd/gomobile/bind_iosapp.go
@@ -61,6 +61,11 @@
cmd = exec.Command("xcrun", "lipo", "-create")
+ modulesUsed, err := areGoModulesUsed()
+ if err != nil {
+ return err
+ }
+
for _, arch := range archs {
if err := writeGoMod("darwin", arch); err != nil {
return err
@@ -70,6 +75,15 @@
// Add the generated packages to GOPATH for reverse bindings.
gopath := fmt.Sprintf("GOPATH=%s%c%s", tmpdir, filepath.ListSeparator, goEnv("GOPATH"))
env = append(env, gopath)
+
+ // Run `go mod tidy` to force to create go.sum.
+ // Without go.sum, `go build` fails as of Go 1.16.
+ if modulesUsed {
+ if err := goModTidyAt(filepath.Join(tmpdir, "src"), env); err != nil {
+ return err
+ }
+ }
+
path, err := goIOSBindArchive(name, env, filepath.Join(tmpdir, "src"))
if err != nil {
return fmt.Errorf("darwin-%s: %v", arch, err)
@@ -145,11 +159,10 @@
if err := symlink("Versions/Current/Resources", buildO+"/Resources"); err != nil {
return err
}
- err := writeFile(buildO+"/Resources/Info.plist", func(w io.Writer) error {
+ if err := writeFile(buildO+"/Resources/Info.plist", func(w io.Writer) error {
_, err := w.Write([]byte(iosBindInfoPlist))
return err
- })
- if err != nil {
+ }); err != nil {
return err
}
diff --git a/cmd/gomobile/bind_test.go b/cmd/gomobile/bind_test.go
index 4a4c147..9a5ffa8 100644
--- a/cmd/gomobile/bind_test.go
+++ b/cmd/gomobile/bind_test.go
@@ -186,6 +186,7 @@
WORK=$WORK
GOOS=android CGO_ENABLED=1 gobind -lang=go,java -outdir=$WORK{{if .JavaPkg}} -javapkg={{.JavaPkg}}{{end}} golang.org/x/mobile/asset
mkdir -p $WORK/src
+PWD=$WORK/src GOOS=android GOARCH=arm CC=$NDK_PATH/toolchains/llvm/prebuilt/{{.NDKARCH}}/bin/armv7a-linux-androideabi16-clang CXX=$NDK_PATH/toolchains/llvm/prebuilt/{{.NDKARCH}}/bin/armv7a-linux-androideabi16-clang++ CGO_ENABLED=1 GOARM=7 GOPATH=$WORK:$GOPATH go mod tidy
PWD=$WORK/src GOOS=android GOARCH=arm CC=$NDK_PATH/toolchains/llvm/prebuilt/{{.NDKARCH}}/bin/armv7a-linux-androideabi16-clang CXX=$NDK_PATH/toolchains/llvm/prebuilt/{{.NDKARCH}}/bin/armv7a-linux-androideabi16-clang++ CGO_ENABLED=1 GOARM=7 GOPATH=$WORK:$GOPATH go build -x -buildmode=c-shared -o=$WORK/android/src/main/jniLibs/armeabi-v7a/libgojni.so ./gobind
PWD=$WORK/java javac -d $WORK/javac-output -source 1.7 -target 1.7 -bootclasspath {{.AndroidPlatform}}/android.jar *.java
jar c -C $WORK/javac-output .
diff --git a/cmd/gomobile/build.go b/cmd/gomobile/build.go
index 4811ab7..072af00 100644
--- a/cmd/gomobile/build.go
+++ b/cmd/gomobile/build.go
@@ -329,6 +329,16 @@
return runCmd(cmd)
}
+func goModTidyAt(at string, env []string) error {
+ cmd := exec.Command("go", "mod", "tidy")
+ if buildV {
+ cmd.Args = append(cmd.Args, "-v")
+ }
+ cmd.Env = append([]string{}, env...)
+ cmd.Dir = at
+ return runCmd(cmd)
+}
+
func parseBuildTarget(buildTarget string) (os string, archs []string, _ error) {
if buildTarget == "" {
return "", nil, fmt.Errorf(`invalid target ""`)
diff --git a/go.sum b/go.sum
index 1143895..1bf420b 100644
--- a/go.sum
+++ b/go.sum
@@ -8,7 +8,6 @@
golang.org/x/image v0.0.0-20190802002840-cff245a6509b h1:+qEpEAPhDZ1o0x3tHzZTQDArnOixOzGD9HUJfcg0mb4=
golang.org/x/image v0.0.0-20190802002840-cff245a6509b/go.mod h1:FeLwcggjj3mMvU+oOTbSwawSJRM1uh48EjtB4UJZlP0=
golang.org/x/mobile v0.0.0-20190312151609-d3739f865fa6/go.mod h1:z+o9i4GpDbdi3rU15maQ/Ox0txvL9dWGYEHz965HBQE=
-golang.org/x/mod v0.1.0 h1:sfUMP1Gu8qASkorDVjnMuvgJzwFbTZSeXFiGBYAVdl4=
golang.org/x/mod v0.1.0/go.mod h1:0QHyrYULN0/3qlju5TqG8bIK38QM8yzMo5ekMj3DlcY=
golang.org/x/mod v0.1.1-0.20191105210325-c90efee705ee/go.mod h1:QqPTAvyqsEbceGzBzNggFXnrqF1CaUcvgkdR5Ot7KZg=
golang.org/x/mod v0.1.1-0.20191209134235-331c550502dd h1:ePuNC7PZ6O5BzgPn9bZayERXBdfZjUYoXEf5BTfDfh8=
@@ -22,7 +21,6 @@
golang.org/x/sys v0.0.0-20190412213103-97732733099d/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs=
golang.org/x/text v0.3.0/go.mod h1:NqM8EUOU14njkJ3fqMW+pc6Ldnwhi/IjpwHt7yyuwOQ=
golang.org/x/tools v0.0.0-20190312151545-0bb0c0a6e846/go.mod h1:LCzVGOaR6xXOjkQ3onu1FJEFr0SW1gC7cKk1uF8kGRs=
-golang.org/x/tools v0.0.0-20191119224855-298f0cb1881e h1:aZzprAO9/8oim3qStq3wc1Xuxx4QmAGriC4VU4ojemQ=
golang.org/x/tools v0.0.0-20191119224855-298f0cb1881e/go.mod h1:b+2E5dAYhXwXZwtnZ6UAqBI28+e2cm9otk0dWdXHAEo=
golang.org/x/tools v0.0.0-20200117012304-6edc0a871e69 h1:yBHHx+XZqXJBm6Exke3N7V9gnlsyXxoCPEb1yVenjfk=
golang.org/x/tools v0.0.0-20200117012304-6edc0a871e69/go.mod h1:TB2adYChydJhpapKDTa4BR/hXlZSLoq2Wpct/0txZ28=