Index: build/android/gyp/lint.py |
diff --git a/build/android/gyp/lint.py b/build/android/gyp/lint.py |
index 6f74d66d2b48c2fb445397b7aeb6c65f7a60e71b..72d81033d11267ea0201c372d34450ac41b96186 100755 |
--- a/build/android/gyp/lint.py |
+++ b/build/android/gyp/lint.py |
@@ -9,6 +9,7 @@ |
import argparse |
import os |
+import re |
import sys |
import traceback |
from xml.dom import minidom |
@@ -22,9 +23,8 @@ _SRC_ROOT = os.path.abspath(os.path.join(os.path.dirname(__file__), |
def _OnStaleMd5(changes, lint_path, config_path, processed_config_path, |
manifest_path, result_path, product_dir, sources, jar_path, |
- cache_dir, resource_dir=None, classpath=None, |
- can_fail_build=False, silent=False): |
- |
+ cache_dir, android_sdk_version, resource_dir=None, |
+ classpath=None, can_fail_build=False, silent=False): |
def _RelativizePath(path): |
"""Returns relative path to top-level src dir. |
@@ -129,14 +129,22 @@ def _OnStaleMd5(changes, lint_path, config_path, processed_config_path, |
cmd.extend(['--sources', _RelativizePath(src_dir)]) |
os.symlink(os.path.abspath(src), PathInDir(src_dir, src)) |
+ project_dir = NewSourceDir() |
+ if android_sdk_version: |
+ # Create dummy project.properies file in a temporary "project" directory. |
+ # It is the only way to add Android SDK to the Lint's classpath. Proper |
+ # classpath is necessary for most source-level checks. |
+ with open(os.path.join(project_dir, 'project.properties'), 'w') \ |
+ as propfile: |
+ print >> propfile, 'target=android-{}'.format(android_sdk_version) |
+ |
# Put the manifest in a temporary directory in order to avoid lint detecting |
# sibling res/ and src/ directories (which should be pass explicitly if they |
# are to be included). |
if manifest_path: |
- src_dir = NewSourceDir() |
os.symlink(os.path.abspath(manifest_path), |
- PathInDir(src_dir, manifest_path)) |
- cmd.append(src_dir) |
+ PathInDir(project_dir, manifest_path)) |
+ cmd.append(project_dir) |
if os.path.exists(result_path): |
os.remove(result_path) |
@@ -144,10 +152,12 @@ def _OnStaleMd5(changes, lint_path, config_path, processed_config_path, |
env = {} |
stderr_filter = None |
if cache_dir: |
+ env['_JAVA_OPTIONS'] = '-Duser.home=%s' % _RelativizePath(cache_dir) |
# When _JAVA_OPTIONS is set, java prints to stderr: |
# Picked up _JAVA_OPTIONS: ... |
- env['_JAVA_OPTIONS'] = '-Duser.home=%s' % _RelativizePath(cache_dir) |
- stderr_filter = lambda l: '' if '_JAVA_OPTIONS' in l else l |
+ # |
+ # We drop all lines that contain _JAVA_OPTIONS from the output |
+ stderr_filter = lambda l: re.sub(r'.*_JAVA_OPTIONS.*\n?', '', l) |
try: |
build_utils.CheckOutput(cmd, cwd=_SRC_ROOT, env=env or None, |
@@ -225,6 +235,9 @@ def main(): |
'directory tree should be stored.') |
parser.add_argument('--platform-xml-path', required=True, |
help='Path to api-platforms.xml') |
+ parser.add_argument('--android-sdk-version', |
+ help='Version (API level) of the Android SDK used for ' |
+ 'building.') |
parser.add_argument('--create-cache', action='store_true', |
help='Mark the lint cache file as an output rather than ' |
'an input.') |
@@ -289,6 +302,8 @@ def main(): |
input_paths.extend(classpath) |
input_strings = [] |
+ if args.android_sdk_version: |
+ input_strings.append(args.android_sdk_version) |
if args.processed_config_path: |
input_strings.append(args.processed_config_path) |
@@ -302,6 +317,7 @@ def main(): |
args.product_dir, sources, |
args.jar_path, |
args.cache_dir, |
+ args.android_sdk_version, |
resource_dir=args.resource_dir, |
classpath=classpath, |
can_fail_build=args.can_fail_build, |