Chromium Code Reviews
chromiumcodereview-hr@appspot.gserviceaccount.com (chromiumcodereview-hr) | Please choose your nickname with Settings | Help | Chromium Project | Gerrit Changes | Sign out
(1977)

Unified Diff: android_webview/buildbot/deps_whitelist.py

Issue 14669003: [android_webview] Deps whitelist and scripts for AOSP builder (Closed) Base URL: svn://svn.chromium.org/chrome/trunk/src
Patch Set: Created 7 years, 7 months ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View side-by-side diff with in-line comments
Download patch
« no previous file with comments | « android_webview/buildbot/OWNERS ('k') | android_webview/buildbot/generate_local_manifest.py » ('j') | no next file with comments »
Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
Index: android_webview/buildbot/deps_whitelist.py
diff --git a/android_webview/buildbot/deps_whitelist.py b/android_webview/buildbot/deps_whitelist.py
new file mode 100755
index 0000000000000000000000000000000000000000..64394366b6aa4ab8fc6e8b03224b24d6eb048c91
--- /dev/null
+++ b/android_webview/buildbot/deps_whitelist.py
@@ -0,0 +1,192 @@
+#!/usr/bin/env python
+# Copyright (c) 2013 The Chromium Authors. All rights reserved.
+# Use of this source code is governed by a BSD-style license that can be
+# found in the LICENSE file.
+#
+"""Logic to generate lists of DEPS used by various parts of
+the android_webview continuous integration (buildbot) infrastructure.
+
+Note: The root Chromium project (which is not explicitly listed here)
+has a couple of third_party libraries checked in directly into it. This means
+that the list of third parties present in this file is not a comprehensive
+list of third party android_webview dependencies.
+"""
+
+import argparse
+import json
+import logging
+import os
+import sys
+
+
+class DepsWhitelist(object):
+ def __init__(self):
+ # Dependencies required to build android_webview.
+ self._compile_dependencies = [
+ 'googleurl',
+ 'sdch/open-vcdiff',
+ 'testing/gtest',
+ 'third_party/WebKit',
+ 'third_party/angle',
+ ('third_party/eyesfree/src/android/java/src/com/googlecode/eyesfree/'
+ 'braille'),
+ 'third_party/freetype',
+ 'third_party/icu',
+ 'third_party/leveldatabase/src',
+ 'third_party/libjingle/source',
+ 'third_party/libphonenumber/src/phonenumbers',
+ 'third_party/libphonenumber/src/resources',
+ 'third_party/openssl',
+ 'third_party/opus/src',
+ 'third_party/ots',
+ 'third_party/skia/gyp',
+ 'third_party/skia/include',
+ 'third_party/skia/src',
+ 'third_party/smhasher/src',
+ 'third_party/v8-i18n',
+ 'third_party/yasm/source/patched-yasm',
+ 'tools/grit',
+ 'tools/gyp',
+ 'v8',
+ ]
+
+ # Dependencies that need to be merged into the Android tree.
+ self._snapshot_into_android_dependencies = self._compile_dependencies
+
+ # Dependencies required to run android_webview tests but not required to
+ # compile.
+ self._test_data_dependencies = [
+ 'chrome/test/data/perf/third_party/octane',
+ ]
+
+ @staticmethod
+ def _read_deps_file(deps_file_path):
+ class FileImplStub(object):
+ """Stub for the File syntax."""
+ def __init__(self, file_location):
+ pass
+
+ @staticmethod
+ def GetPath():
+ return ''
+
+ @staticmethod
+ def GetFilename():
+ return ''
+
+ @staticmethod
+ def GetRevision():
+ return None
+
+ def from_stub(__, _=None):
+ """Stub for the From syntax."""
+ return ''
+
+ class VarImpl(object):
+ def __init__(self, custom_vars, local_scope):
+ self._custom_vars = custom_vars
+ self._local_scope = local_scope
+
+ def Lookup(self, var_name):
+ """Implements the Var syntax."""
+ if var_name in self._custom_vars:
+ return self._custom_vars[var_name]
+ elif var_name in self._local_scope.get("vars", {}):
+ return self._local_scope["vars"][var_name]
+ raise Exception("Var is not defined: %s" % var_name)
+
+ local_scope = {}
+ var = VarImpl({}, local_scope)
+ global_scope = {
+ 'File': FileImplStub,
+ 'From': from_stub,
+ 'Var': var.Lookup,
+ 'deps_os': {},
+ }
+ execfile(deps_file_path, global_scope, local_scope)
+ deps = local_scope.get('deps', {})
+ deps_os = local_scope.get('deps_os', {})
+ for os_specific_deps in deps_os.itervalues():
+ deps.update(os_specific_deps)
+ return deps.keys()
+
+ def _make_gclient_blacklist(self, deps_file_path, whitelisted_deps):
+ """Calculates the list of deps that need to be excluded from the deps_file
+ so that the only deps left are the one in the whitelist."""
+ all_deps = self._read_deps_file(deps_file_path)
+ # The list of deps read from the DEPS file are prefixed with the source
+ # tree root, which is 'src' for Chromium.
+ def prepend_root(path):
+ return os.path.join('src', path)
+ whitelisted_deps = map(prepend_root, whitelisted_deps)
+ deps_blacklist = set(all_deps).difference(set(whitelisted_deps))
+ return dict(map(lambda(x): (x, None), deps_blacklist))
+
+ def get_deps_for_android_build(self, deps_file_path):
+ """This is used to calculate the custom_deps list for the Android bot.
+ """
+ if not deps_file_path:
+ raise Exception('You need to specify a DEPS file path.')
+ return self._make_gclient_blacklist(deps_file_path,
+ self._compile_dependencies)
+
+ def get_deps_for_android_build_and_test(self, deps_file_path):
+ """This is used to calculate the custom_deps list for the Android perf bot.
+ """
+ if not deps_file_path:
+ raise Exception('You need to specify a DEPS file path.')
+ return self._make_gclient_blacklist(deps_file_path,
+ self._compile_dependencies +
+ self._test_data_dependencies)
+
+ def get_deps_for_android_merge(self, _):
+ """Calculates the list of deps that need to be merged into the Android tree
+ in order to build the C++ and Java android_webview code."""
+ return self._snapshot_into_android_dependencies
+
+ def get_deps_for_license_check(self, _):
+ """Calculates the list of deps that need to be checked for Android license
+ compatibility"""
+ return self._snapshot_into_android_dependencies
+
+ def execute_method(self, method_name, deps_file_path):
+ methods = {
+ 'android_build': self.get_deps_for_android_build,
+ 'android_build_and_test':
+ self.get_deps_for_android_build_and_test,
+ 'android_merge': self.get_deps_for_android_merge,
+ 'license_check': self.get_deps_for_license_check
+ }
+ if not method_name in methods:
+ raise Exception('Method name %s is not valid. Valid choices are %s' %
+ (method_name, methods.keys()))
+ return methods[method_name](deps_file_path)
+
+def main():
+ parser = argparse.ArgumentParser()
+ parser.add_argument('--method', help='Method to use to fetch from whitelist.',
+ required=True)
+ parser.add_argument('--path-to-deps', help='Path to DEPS file.')
+ parser.add_argument('--output-json', help='Name of file to write output to.')
+ parser.add_argument('verbose', action='store_true', default=False)
+ opts = parser.parse_args()
+
+ logging.getLogger().setLevel(logging.DEBUG if opts.verbose else logging.WARN)
+
+ deps_whitelist = DepsWhitelist()
+ blacklist = deps_whitelist.execute_method(opts.method, opts.path_to_deps)
+
+ if (opts.output_json):
+ output_dict = {
+ 'blacklist' : blacklist
+ }
+ with open(opts.output_json, 'w') as output_json_file:
+ json.dump(output_dict, output_json_file)
+ else:
+ print blacklist
+
+ return 0
+
+
+if __name__ == '__main__':
+ sys.exit(main())
« no previous file with comments | « android_webview/buildbot/OWNERS ('k') | android_webview/buildbot/generate_local_manifest.py » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698