Index: mojo/public/tools/bindings/generators/mojom_java_generator.py |
diff --git a/mojo/public/tools/bindings/generators/mojom_java_generator.py b/mojo/public/tools/bindings/generators/mojom_java_generator.py |
index 8b4fd25e0ce51a31782e485179dcc264ca5ff801..602cc6422d001f0417e2b0fe9f6dc0515131f50c 100644 |
--- a/mojo/public/tools/bindings/generators/mojom_java_generator.py |
+++ b/mojo/public/tools/bindings/generators/mojom_java_generator.py |
@@ -6,6 +6,7 @@ |
import argparse |
import ast |
+import contextlib |
import os |
import re |
@@ -350,6 +351,26 @@ def HasMethodWithoutResponse(interface): |
return True |
return False |
+@contextlib.contextmanager |
+def TempDir(): |
ppi
2014/09/25 18:16:49
Do you think these two should be extracted to, say
|
+ import tempfile |
+ import shutil |
+ dirname = tempfile.mkdtemp() |
+ try: |
+ yield dirname |
+ finally: |
+ shutil.rmtree(dirname) |
+ |
+def ZipContentInto(directory, root, zip_filename): |
+ import zipfile |
+ with zipfile.ZipFile(zip_filename, 'w') as zip_file: |
+ for dirname, subdirs, files in os.walk(directory): |
+ for filename in files: |
+ path = os.path.join(dirname, filename) |
+ arcname = os.path.relpath(path, root) |
+ zip_file.write(path, arcname) |
+ print "%s -> %s" % (path, arcname,) |
+ |
class Generator(generator.Generator): |
java_filters = { |
@@ -417,19 +438,13 @@ class Generator(generator.Generator): |
'constants': module.constants}) |
return exports |
- def GenerateFiles(self, unparsed_args): |
- parser = argparse.ArgumentParser() |
- parser.add_argument('--java_output_directory', dest='java_output_directory') |
- args = parser.parse_args(unparsed_args) |
- if self.output_dir and args.java_output_directory: |
- self.output_dir = os.path.join(args.java_output_directory, |
- GetPackage(self.module).replace('.', '/')) |
- if not os.path.exists(self.output_dir): |
- try: |
- os.makedirs(self.output_dir) |
- except: |
- # Ignore errors on directory creation. |
- pass |
+ def DoGenerateFiles(self): |
+ if not os.path.exists(self.output_dir): |
+ try: |
+ os.makedirs(self.output_dir) |
+ except: |
+ # Ignore errors on directory creation. |
+ pass |
# Keep this above the others as .GetStructs() changes the state of the |
# module, annotating structs with required information. |
@@ -451,6 +466,29 @@ class Generator(generator.Generator): |
self.Write(self.GenerateConstantsSource(self.module), |
'%s.java' % GetConstantsMainEntityName(self.module)) |
+ def GenerateFiles(self, unparsed_args): |
+ parser = argparse.ArgumentParser() |
+ parser.add_argument('--java_output_directory', dest='java_output_directory') |
+ parser.add_argument('--java_srcjar', dest='java_srcjar', |
+ action='store_true', |
+ help='output a single srcjar in the regular output ' |
+ 'directory (overrides --java_output_directory)') |
+ args = parser.parse_args(unparsed_args) |
+ package_path = GetPackage(self.module).replace('.', '/') |
+ if args.java_srcjar: |
+ # Place the output srcjar in the regular output directory. |
+ zip_filename = os.path.join(self.output_dir, |
+ "%s.srcjar" % self.module.name) |
+ # Generate the files in a temporary directory. |
+ with TempDir() as temp_java_root: |
+ self.output_dir = os.path.join(temp_java_root, package_path) |
+ self.DoGenerateFiles(); |
+ ZipContentInto(self.output_dir, temp_java_root, zip_filename) |
+ else: |
+ if self.output_dir and args.java_output_directory: |
+ self.output_dir = os.path.join(args.java_output_directory, package_path) |
+ self.DoGenerateFiles(); |
+ |
def GetJinjaParameters(self): |
return { |
'lstrip_blocks': True, |