Merge "v23-profile-mojo: upgrade mojo version"
diff --git a/jiri-profile-v23/mojo_profile/mojo.go b/jiri-profile-v23/mojo_profile/mojo.go
index e4d043d..229404b 100644
--- a/jiri-profile-v23/mojo_profile/mojo.go
+++ b/jiri-profile-v23/mojo_profile/mojo.go
@@ -10,6 +10,7 @@
 	"flag"
 	"fmt"
 	"io/ioutil"
+	"os"
 	"path/filepath"
 	"strings"
 
@@ -230,7 +231,32 @@
 				sdkVersion:                  "39488b961eb9dca8c6ca4a2cc0d693dd13db29e3",
 				androidPlatformToolsVersion: "2219198",
 			},
-		}, "7"),
+			"8": &versionSpec{
+				serviceNames: []string{
+					"authenticating_url_loader_interceptor.mojo",
+					"compositor_service.mojo",
+					"dart_content_handler.mojo",
+					"debugger.mojo",
+					"files.mojo",
+					"input_manager_service.mojo",
+					"launcher.mojo",
+					"view_manager_service.mojo",
+					"tracing.mojo",
+				},
+				serviceNamesAndroid: []string{
+					"shortcut.mojo",
+				},
+				serviceNamesLinux: []string{
+					"authentication.mojo",
+				},
+				buildVersionAndroid:         "92b330f6dedb4d880eb66e384a28b1a4de2f6ba2",
+				buildVersionLinux:           "92b330f6dedb4d880eb66e384a28b1a4de2f6ba2",
+				devtoolsVersion:             "6a6098eb787ea88af5ef8e2978074ad57ce6ebeb",
+				networkServiceVersion:       "0a814ed5512598e595c0ae7975a09d90a7a54e90",
+				sdkVersion:                  "465117ff5f34a8ef48b6a94d57f081e3c8e77ca5",
+				androidPlatformToolsVersion: "2219198",
+			},
+		}, "8"),
 	}
 	profilesmanager.Register(m)
 }
@@ -419,14 +445,15 @@
 func (m *Manager) installMojoSdk(jirix *jiri.X, outDir string) error {
 	fn := func() error {
 		seq := jirix.NewSeq()
+		srcDir := filepath.Join(outDir, "src")
 		// TODO(nlacasse): At some point Mojo needs to change the structure of
 		// their repo so that go packages occur with correct paths. Until then
 		// we'll clone into src/mojo/public so that go import paths work.
-		repoDst := filepath.Join(outDir, "src", "mojo", "public")
+		publicDir := filepath.Join(srcDir, "mojo", "public")
 		seq.
-			MkdirAll(repoDst, profilesutil.DefaultDirPerm).
-			Pushd(repoDst).
-			Call(func() error { return gitutil.New(jirix.NewSeq()).CloneRecursive(mojoSdkRemote, repoDst) }, "git clone --recursive %s", mojoSdkRemote).
+			MkdirAll(publicDir, profilesutil.DefaultDirPerm).
+			Pushd(publicDir).
+			Call(func() error { return gitutil.New(jirix.NewSeq()).CloneRecursive(mojoSdkRemote, publicDir) }, "git clone --recursive %s", mojoSdkRemote).
 			Call(func() error { return gitutil.New(jirix.NewSeq()).Reset(m.spec.sdkVersion) }, "git reset --hard %s", m.spec.sdkVersion).
 			Popd()
 
@@ -448,51 +475,56 @@
 			Popd()
 
 		servicesSrc := filepath.Join(tmpMojoCheckout, "mojo", "services")
-		servicesDst := filepath.Join(outDir, "src", "mojo", "services")
-		seq.Rename(servicesSrc, servicesDst)
+		servicesDir := filepath.Join(srcDir, "mojo", "services")
+		seq.Rename(servicesSrc, servicesDir)
 
-		// Find all .mojom files.
-		var mojomFilesBuffer bytes.Buffer
-		if err := jirix.NewSeq().Capture(&mojomFilesBuffer, nil).Last("find", outDir, "-name", "*.mojom"); err != nil {
-			return err
+		// Generate mojom bindings.
+		seq.Pushd(srcDir)
+
+		// Fetch the mojom compiler.
+		bindingsDir := filepath.Join(publicDir, "tools", "bindings")
+		compilerDir := filepath.Join(bindingsDir, "mojom_tool", "bin")
+		compilerName := "mojom"
+		if _, err := os.Stat(compilerDir); os.IsNotExist(err) {
+			// For an old versions < 8.
+			compilerDir = filepath.Join(bindingsDir, "mojom_parser", "bin")
+			compilerName = "mojom_parser"
 		}
-		mojomFiles := strings.Split(mojomFilesBuffer.String(), "\n")
-
-		// Generate the mojom.go files from all mojom files.
-		seq.Pushd(filepath.Join(outDir, "src"))
-		// Fetch the mojom compiler
-		compilerDir := filepath.Join(outDir, "src", "mojo", "public", "tools", "bindings", "mojom_parser", "bin")
-
 		fetchCompiler := func(arch string) error {
-			hash, err := ioutil.ReadFile(filepath.Join(compilerDir, arch, "mojom_parser.sha1"))
+			hash, err := ioutil.ReadFile(filepath.Join(compilerDir, arch, compilerName+".sha1"))
 			if err != nil {
 				return err
 			}
 			binary := mojoCompilerUrl(arch, string(hash))
-			return profilesutil.Fetch(jirix, filepath.Join(compilerDir, arch, "mojom_parser"), binary)
+			return profilesutil.Fetch(jirix, filepath.Join(compilerDir, arch, compilerName), binary)
 		}
 		seq.
 			Call(func() error { return fetchCompiler("linux64") }, "fetch linux64 mojom compiler").
-			Chmod(filepath.Join(compilerDir, "linux64", "mojom_parser"), 0755).
+			Chmod(filepath.Join(compilerDir, "linux64", compilerName), 0755).
 			Call(func() error { return fetchCompiler("mac64") }, "fetch mac64 mojom compiler").
-			Chmod(filepath.Join(compilerDir, "mac64", "mojom_parser"), 0755)
-		genMojomTool := filepath.Join(outDir, "src", "mojo", "public", "tools", "bindings", "mojom_bindings_generator.py")
+			Chmod(filepath.Join(compilerDir, "mac64", compilerName), 0755)
+
+		// Find all .mojom files excluding ones for testing.
+		var mojomFilesBuffer bytes.Buffer
+		if err := jirix.NewSeq().Capture(&mojomFilesBuffer, nil).Last("find", srcDir, "-name", "*.mojom"); err != nil {
+			return err
+		}
+		mojomFiles := strings.Split(strings.TrimSpace(mojomFilesBuffer.String()), "\n")
+
+		genDir := filepath.Join(outDir, "gen")
+		genMojomTool := filepath.Join(bindingsDir, "mojom_bindings_generator.py")
 		for _, mojomFile := range mojomFiles {
-			trimmedFile := strings.TrimSpace(mojomFile)
-			if trimmedFile == "" {
-				continue
-			}
 			seq.Run(genMojomTool,
 				"--use_bundled_pylibs",
-				"-g", "go",
-				"-o", filepath.Join("..", "gen"),
-				"-I", ".",
-				"-I", servicesDst,
 				"--generate-type-info",
-				trimmedFile)
+				"--no-gen-imports",
+				"-d", ".",
+				"-I", servicesDir,
+				"-g", "go,java",
+				"-o", genDir,
+				mojomFile)
 		}
 		seq.Popd()
-
 		return seq.Done()
 	}