OLD | NEW |
(Empty) | |
| 1 # Copyright 2016 The Chromium Authors. All rights reserved. |
| 2 # Use of this source code is governed by a BSD-style license that can be |
| 3 # found in the LICENSE file. |
| 4 |
| 5 import os |
| 6 import re |
| 7 |
| 8 from pylib import constants |
| 9 |
| 10 |
| 11 _BLACKLIST = [ |
| 12 re.compile(r'.*OWNERS'), # Should never be included. |
| 13 re.compile(r'.*\.crx'), # Chrome extension zip files. |
| 14 re.compile(r'.*\.so'), # Libraries packed into .apk. |
| 15 re.compile(r'.*Mojo.*manifest\.json'), # Some source_set()s pull these in. |
| 16 re.compile(r'.*\.py'), # Some test_support targets include python deps. |
| 17 |
| 18 # Some test_support targets include python deps. |
| 19 re.compile(r'.*\.mojom\.js'), |
| 20 |
| 21 # Chrome external extensions config file. |
| 22 re.compile(r'.*external_extensions\.json'), |
| 23 |
| 24 # Exists just to test the compile, not to be run. |
| 25 re.compile(r'.*jni_generator_tests'), |
| 26 |
| 27 # v8's blobs get packaged into APKs. |
| 28 re.compile(r'.*natives_blob.*\.bin'), |
| 29 re.compile(r'.*snapshot_blob.*\.bin'), |
| 30 ] |
| 31 |
| 32 |
| 33 def DevicePathComponentsFor(host_path, output_directory): |
| 34 """Returns the device path components for a given host path. |
| 35 |
| 36 This returns the device path as a list of joinable path components, |
| 37 with None as the first element to indicate that the path should be |
| 38 rooted at $EXTERNAL_STORAGE. |
| 39 |
| 40 e.g., given |
| 41 |
| 42 '$CHROMIUM_SRC/foo/bar/baz.txt' |
| 43 |
| 44 this would return |
| 45 |
| 46 [None, 'foo', 'bar', 'baz.txt'] |
| 47 |
| 48 This handles a couple classes of paths differently than it otherwise would: |
| 49 - All .pak files get mapped to top-level paks/ |
| 50 - Anything in the output directory gets mapped relative to the output |
| 51 directory rather than the source directory. |
| 52 |
| 53 e.g. given |
| 54 |
| 55 '$CHROMIUM_SRC/out/Release/icu_fake_dir/icudtl.dat' |
| 56 |
| 57 this would return |
| 58 |
| 59 [None, 'icu_fake_dir', 'icudtl.dat'] |
| 60 |
| 61 Args: |
| 62 host_path: The absolute path to the host file. |
| 63 Returns: |
| 64 A list of device path components. |
| 65 """ |
| 66 if host_path.startswith(output_directory): |
| 67 if os.path.splitext(host_path)[1] == '.pak': |
| 68 return [None, 'paks', os.path.basename(host_path)] |
| 69 rel_host_path = os.path.relpath(host_path, output_directory) |
| 70 else: |
| 71 rel_host_path = os.path.relpath(host_path, constants.DIR_SOURCE_ROOT) |
| 72 |
| 73 device_path_components = [None] |
| 74 p = rel_host_path |
| 75 while p: |
| 76 p, d = os.path.split(p) |
| 77 if d: |
| 78 device_path_components.insert(1, d) |
| 79 return device_path_components |
| 80 |
| 81 |
| 82 def GetDataDependencies(runtime_deps_path): |
| 83 """Returns a list of device data dependencies. |
| 84 |
| 85 Args: |
| 86 runtime_deps_path: A str path to the .runtime_deps file. |
| 87 Returns: |
| 88 A list of (host_path, device_path) tuples. |
| 89 """ |
| 90 if not runtime_deps_path: |
| 91 return [] |
| 92 |
| 93 with open(runtime_deps_path, 'r') as runtime_deps_file: |
| 94 rel_host_files = [l.strip() for l in runtime_deps_file if l] |
| 95 |
| 96 output_directory = constants.GetOutDirectory() |
| 97 abs_host_files = [ |
| 98 os.path.abspath(os.path.join(output_directory, r)) |
| 99 for r in rel_host_files] |
| 100 filtered_abs_host_files = [ |
| 101 host_file for host_file in abs_host_files |
| 102 if not any(blacklist_re.match(host_file) for blacklist_re in _BLACKLIST)] |
| 103 return [(f, DevicePathComponentsFor(f, output_directory)) |
| 104 for f in filtered_abs_host_files] |
OLD | NEW |