Index: build/android/gyp/javac.py |
diff --git a/build/android/gyp/javac.py b/build/android/gyp/javac.py |
index a0725cf8ee62722d4289cf163bb634fadb23490d..694dd3aeb42721619fda0c367bce8b3b61a4bf56 100755 |
--- a/build/android/gyp/javac.py |
+++ b/build/android/gyp/javac.py |
@@ -7,12 +7,15 @@ |
import fnmatch |
import optparse |
import os |
+import shutil |
import re |
import sys |
from util import build_utils |
from util import md5_check |
+import jar |
+ |
sys.path.append(build_utils.COLORAMA_ROOT) |
import colorama |
@@ -49,14 +52,10 @@ def ColorJavacOutput(output): |
return '\n'.join(map(ApplyColor, output.split('\n'))) |
- |
-def DoJavac(options, args): |
- output_dir = options.output_dir |
- |
- src_gendirs = build_utils.ParseGypList(options.src_gendirs) |
- java_files = args + build_utils.FindInDirectories(src_gendirs, '*.java') |
- if options.javac_includes: |
- javac_includes = build_utils.ParseGypList(options.javac_includes) |
+def DoJavac( |
+ classpath, javac_includes, classes_dir, chromium_code, java_files): |
+ if javac_includes: |
+ javac_includes = build_utils.ParseGypList(javac_includes) |
filtered_java_files = [] |
for f in java_files: |
for include in javac_includes: |
@@ -69,7 +68,7 @@ def DoJavac(options, args): |
# crash... Sorted order works, so use that. |
# See https://code.google.com/p/guava-libraries/issues/detail?id=950 |
java_files.sort() |
- classpath = build_utils.ParseGypList(options.classpath) |
+ classpath = build_utils.ParseGypList(classpath) |
jar_inputs = [] |
for path in classpath: |
@@ -83,8 +82,8 @@ def DoJavac(options, args): |
'-source', '1.5', |
'-target', '1.5', |
'-classpath', ':'.join(classpath), |
- '-d', output_dir] |
- if options.chromium_code: |
+ '-d', classes_dir] |
+ if chromium_code: |
javac_args.extend(['-Xlint:unchecked', '-Xlint:deprecation']) |
else: |
# XDignore.symbol.file makes javac compile against rt.jar instead of |
@@ -95,19 +94,12 @@ def DoJavac(options, args): |
javac_cmd = ['javac'] + javac_args + java_files |
def Compile(): |
- # Delete the classes directory. This ensures that all .class files in the |
- # output are actually from the input .java files. For example, if a .java |
- # file is deleted or an inner class is removed, the classes directory should |
- # not contain the corresponding old .class file after running this action. |
- build_utils.DeleteDirectory(output_dir) |
- build_utils.MakeDirectory(output_dir) |
build_utils.CheckOutput( |
javac_cmd, |
- print_stdout=options.chromium_code, |
+ print_stdout=chromium_code, |
stderr_filter=ColorJavacOutput) |
- |
- record_path = '%s/javac.md5.stamp' % options.output_dir |
+ record_path = os.path.join(classes_dir, 'javac.md5.stamp') |
md5_check.CallAndRecordIfStale( |
Compile, |
record_path=record_path, |
@@ -119,21 +111,59 @@ def main(): |
colorama.init() |
parser = optparse.OptionParser() |
- parser.add_option('--src-gendirs', |
+ parser.add_option( |
+ '--src-gendirs', |
help='Directories containing generated java files.') |
- parser.add_option('--javac-includes', |
- help='A list of file patterns. If provided, only java files that match' + |
- 'one of the patterns will be compiled.') |
parser.add_option('--classpath', help='Classpath for javac.') |
- parser.add_option('--output-dir', help='Directory for javac output.') |
+ parser.add_option( |
+ '--javac-includes', |
+ help='A list of file patterns. If provided, only java files that match' + |
+ 'one of the patterns will be compiled.') |
+ parser.add_option( |
+ '--jar-excluded-classes', |
+ help='List of .class file patterns to exclude from the jar.') |
+ |
+ parser.add_option( |
+ '--chromium-code', |
+ type='int', |
+ help='Whether code being compiled should be built with stricter ' |
+ 'warnings for chromium code.') |
+ |
+ parser.add_option( |
+ '--classes-dir', |
+ help='Directory for compiled .class files.') |
+ parser.add_option('--jar-path', help='Jar output path.') |
+ |
parser.add_option('--stamp', help='Path to touch on success.') |
- parser.add_option('--chromium-code', type='int', help='Whether code being ' |
- 'compiled should be built with stricter warnings for ' |
- 'chromium code.') |
options, args = parser.parse_args() |
- DoJavac(options, args) |
+ java_files = args |
+ if options.src_gendirs: |
+ src_gendirs = build_utils.ParseGypList(options.src_gendirs) |
+ java_files += build_utils.FindInDirectories(src_gendirs, '*.java') |
+ |
+ with build_utils.TempDir() as classes_dir: |
+ DoJavac( |
+ options.classpath, |
+ options.javac_includes, |
+ classes_dir, |
+ options.chromium_code, |
+ java_files) |
+ |
+ if options.jar_path: |
+ jar.JarDirectory(classes_dir, |
+ build_utils.ParseGypList(options.jar_excluded_classes), |
+ options.jar_path) |
+ |
+ if options.classes_dir: |
+ # Delete the old classes directory. This ensures that all .class files in |
+ # the output are actually from the input .java files. For example, if a |
+ # .java file is deleted or an inner class is removed, the classes |
+ # directory should not contain the corresponding old .class file after |
+ # running this action. |
+ build_utils.DeleteDirectory(options.classes_dir) |
+ shutil.copytree(classes_dir, options.classes_dir) |
if options.stamp: |
build_utils.Touch(options.stamp) |