diff options
author | Allan Sandfeld Jensen <allan.jensen@qt.io> | 2018-10-24 11:30:15 +0200 |
---|---|---|
committer | Allan Sandfeld Jensen <allan.jensen@qt.io> | 2018-10-30 12:56:19 +0000 |
commit | 6036726eb981b6c4b42047513b9d3f4ac865daac (patch) | |
tree | 673593e70678e7789766d1f732eb51f613a2703b /chromium/build | |
parent | 466052c4e7c052268fd931888cd58961da94c586 (diff) | |
download | qtwebengine-chromium-6036726eb981b6c4b42047513b9d3f4ac865daac.tar.gz |
BASELINE: Update Chromium to 70.0.3538.78
Change-Id: Ie634710bf039e26c1957f4ae45e101bd4c434ae7
Reviewed-by: Michael BrĂ¼ning <michael.bruning@qt.io>
Diffstat (limited to 'chromium/build')
233 files changed, 6892 insertions, 4872 deletions
diff --git a/chromium/build/OWNERS b/chromium/build/OWNERS index 0b659dd4cb6..918c4884e00 100644 --- a/chromium/build/OWNERS +++ b/chromium/build/OWNERS @@ -5,6 +5,7 @@ jochen@chromium.org scottmg@chromium.org thakis@chromium.org brucedawson@chromium.org +tikuta@chromium.org # Clang build config changes hans@chromium.org diff --git a/chromium/build/android/BUILD.gn b/chromium/build/android/BUILD.gn index 523636d137a..f6c9ab41ff5 100644 --- a/chromium/build/android/BUILD.gn +++ b/chromium/build/android/BUILD.gn @@ -54,6 +54,12 @@ if (enable_java_templates) { "android_ndk_root=" + rebase_path(android_ndk_root, root_build_dir) + CR _data += "android_tool_prefix=" + rebase_path(android_tool_prefix, root_build_dir) + CR + if (defined(android_secondary_abi_cpu)) { + _secondary_label_info = + get_label_info(":foo($android_secondary_abi_toolchain)", "root_out_dir") + _data += "android_secondary_abi_toolchain=" + + rebase_path(_secondary_label_info, root_build_dir) + CR + } write_file(android_build_vars, _data) } @@ -71,8 +77,8 @@ copy("cpplib_unstripped") { action("cpplib_stripped") { _strip_bin = "${android_tool_prefix}strip" _soname = "libc++_shared.so" - _input_so = "${root_shlib_dir}/lib.unstripped/${_soname}" - _output_so = "${root_shlib_dir}/${_soname}" + _input_so = "${root_out_dir}/lib.unstripped/${_soname}" + _output_so = "${root_out_dir}/${_soname}" deps = [ ":cpplib_unstripped", @@ -117,8 +123,14 @@ python_library("test_runner_py") { "${android_sdk_root}/platform-tools/adb", "//third_party/catapult/third_party/gsutil/", "//third_party/catapult/devil/devil/devil_dependencies.json", - "//third_party/proguard/lib/proguard.jar", ] + + # Proguard is needed only when using apks (rather than native executables). + if (enable_java_templates) { + deps = [ + "//third_party/proguard:proguard603_java", + ] + } } python_library("logdog_wrapper_py") { diff --git a/chromium/build/android/PRESUBMIT.py b/chromium/build/android/PRESUBMIT.py index 65d37d17a76..9617b5197cc 100644 --- a/chromium/build/android/PRESUBMIT.py +++ b/chromium/build/android/PRESUBMIT.py @@ -74,6 +74,7 @@ def CommonChecks(input_api, output_api): J('pylib', 'results', 'json_results_test.py'), J('pylib', 'symbols', 'apk_native_libs_unittest.py'), J('pylib', 'symbols', 'elf_symbolizer_unittest.py'), + J('pylib', 'symbols', 'symbol_utils_unittest.py'), J('pylib', 'utils', 'decorators_test.py'), J('pylib', 'utils', 'device_dependencies_test.py'), J('pylib', 'utils', 'dexdump_test.py'), diff --git a/chromium/build/android/apk_operations.py b/chromium/build/android/apk_operations.py index 33c3ef05559..2b17c19cdd4 100755 --- a/chromium/build/android/apk_operations.py +++ b/chromium/build/android/apk_operations.py @@ -16,6 +16,7 @@ import posixpath import random import re import shlex +import shutil import sys import tempfile import textwrap @@ -39,7 +40,11 @@ from incremental_install import installer from pylib import constants from pylib.symbols import deobfuscator from pylib.utils import simpleperf +from pylib.utils import app_bundle_utils +with devil_env.SysPath(os.path.join(os.path.dirname(__file__), '..', '..', + 'build', 'android', 'gyp')): + import bundletool # Matches messages only on pre-L (Dalvik) that are spammy and unimportant. _DALVIK_IGNORE_PATTERN = re.compile('|'.join([ @@ -74,6 +79,55 @@ def _InstallApk(devices, apk, install_dict): device_utils.DeviceUtils.parallel(devices).pMap(install) +# A named tuple containing the information needed to convert a bundle into +# an installable .apks archive. +# Fields: +# bundle_path: Path to input bundle file. +# bundle_apk_path: Path to output bundle .apks archive file. +# aapt2_path: Path to aapt2 tool. +# keystore_path: Path to keystore file. +# keystore_password: Password for the keystore file. +# keystore_alias: Signing key name alias within the keystore file. +BundleGenerationInfo = collections.namedtuple( + 'BundleGenerationInfo', + 'bundle_path,bundle_apks_path,aapt2_path,keystore_path,keystore_password,' + 'keystore_alias') + + +def _GenerateBundleApks(info): + """Generate an .apks archive from a bundle on demand. + + Args: + info: A BundleGenerationInfo instance. + Returns: + Path of output .apks archive. + """ + app_bundle_utils.GenerateBundleApks( + info.bundle_path, + info.bundle_apks_path, + info.aapt2_path, + info.keystore_path, + info.keystore_password, + info.keystore_alias) + return info.bundle_apks_path + + +def _InstallBundle(devices, bundle_apks): + def install(device): + # NOTE: For now, installation requires running 'bundletool install-apks'. + # TODO(digit): Add proper support for bundles to devil instead, then use it. + cmd_args = [ + 'install-apks', + '--apks=' + bundle_apks, + '--adb=' + adb_wrapper.AdbWrapper.GetAdbPath(), + '--device-id=' + device.serial + ] + bundletool.RunBundleTool(cmd_args) + + logging.info('Installing bundle.') + device_utils.DeviceUtils.parallel(devices).pMap(install) + + def _UninstallApk(devices, install_dict, package_name): def uninstall(device): if install_dict: @@ -735,21 +789,27 @@ class _Command(object): supports_incremental = False accepts_command_line_flags = False accepts_args = False + need_device_args = True all_devices_by_default = False calls_exec = False supports_multiple_devices = True - def __init__(self, from_wrapper_script): + def __init__(self, from_wrapper_script, is_bundle): self._parser = None self._from_wrapper_script = from_wrapper_script self.args = None self.apk_helper = None self.install_dict = None self.devices = None - # Do not support incremental install outside the context of wrapper scripts. - if not from_wrapper_script: + self.is_bundle = is_bundle + self.bundle_generation_info = None + # Only support incremental install from APK wrapper scripts. + if is_bundle or not from_wrapper_script: self.supports_incremental = False + def RegisterBundleGenerationInfo(self, bundle_generation_info): + self.bundle_generation_info = bundle_generation_info + def _RegisterExtraArgs(self, subp): pass @@ -760,17 +820,18 @@ class _Command(object): formatter_class=argparse.RawDescriptionHelpFormatter) self._parser = subp subp.set_defaults(command=self) - subp.add_argument('--all', - action='store_true', - default=self.all_devices_by_default, - help='Operate on all connected devices.',) - subp.add_argument('-d', - '--device', - action='append', - default=[], - dest='devices', - help='Target device for script to work on. Enter ' - 'multiple times for multiple devices.') + if self.need_device_args: + subp.add_argument('--all', + action='store_true', + default=self.all_devices_by_default, + help='Operate on all connected devices.',) + subp.add_argument('-d', + '--device', + action='append', + default=[], + dest='devices', + help='Target device for script to work on. Enter ' + 'multiple times for multiple devices.') subp.add_argument('-v', '--verbose', action='count', @@ -780,15 +841,29 @@ class _Command(object): group = subp.add_argument_group('%s arguments' % self.name) if self.needs_package_name: - # Always gleaned from apk when using wrapper scripts. - group.add_argument('--package-name', - help=argparse.SUPPRESS if self._from_wrapper_script else ( - "App's package name.")) + # Three cases to consider here, since later code assumes + # self.args.package_name always exists, even if None: + # + # - Called from a bundle wrapper script, the package_name is already + # set through parser.set_defaults(), so don't call add_argument() + # to avoid overriding its value. + # + # - Called from an apk wrapper script. The --package-name argument + # should not appear, but self.args.package_name will be gleaned from + # the --apk-path file later. + # + # - Called directly, then --package-name is required on the command-line. + # + if not self.is_bundle: + group.add_argument( + '--package-name', + help=argparse.SUPPRESS if self._from_wrapper_script else ( + "App's package name.")) if self.needs_apk_path or self.needs_package_name: # Adding this argument to the subparser would override the set_defaults() # value set by on the parent parser (even if None). - if not self._from_wrapper_script: + if not self._from_wrapper_script and not self.is_bundle: group.add_argument('--apk-path', required=self.needs_apk_path, help='Path to .apk') @@ -822,26 +897,27 @@ class _Command(object): self._RegisterExtraArgs(group) def ProcessArgs(self, args): - devices = device_utils.DeviceUtils.HealthyDevices( - device_arg=args.devices, - enable_device_files_cache=bool(args.output_directory), - default_retries=0) self.args = args - self.devices = devices + self.devices = [] + if self.need_device_args: + self.devices = device_utils.DeviceUtils.HealthyDevices( + device_arg=args.devices, + enable_device_files_cache=bool(args.output_directory), + default_retries=0) # TODO(agrieve): Device cache should not depend on output directory. # Maybe put int /tmp? - _LoadDeviceCaches(devices, args.output_directory) + _LoadDeviceCaches(self.devices, args.output_directory) # Ensure these keys always exist. They are set by wrapper scripts, but not # always added when not using wrapper scripts. args.__dict__.setdefault('apk_path', None) args.__dict__.setdefault('incremental_json', None) try: - if len(devices) > 1: + if len(self.devices) > 1: if not self.supports_multiple_devices: - self._parser.error(device_errors.MultipleDevicesError(devices)) + self._parser.error(device_errors.MultipleDevicesError(self.devices)) if not args.all and not args.devices: - self._parser.error(_GenerateMissingAllFlagMessage(devices)) + self._parser.error(_GenerateMissingAllFlagMessage(self.devices)) incremental_apk_exists = False @@ -869,7 +945,8 @@ class _Command(object): self._parser.error('Both incremental and non-incremental apks exist. ' 'Select using --incremental or --non-incremental') - if self.needs_apk_path or args.apk_path or args.incremental_json: + if ((self.needs_apk_path and not self.is_bundle) or args.apk_path + or args.incremental_json): if args.incremental_json: if incremental_apk_exists: self.install_dict = install_dict @@ -893,9 +970,9 @@ class _Command(object): # Save cache now if command will not get a chance to afterwards. if self.calls_exec: - _SaveDeviceCaches(devices, args.output_directory) + _SaveDeviceCaches(self.devices, args.output_directory) except: - _SaveDeviceCaches(devices, args.output_directory) + _SaveDeviceCaches(self.devices, args.output_directory) raise @@ -910,17 +987,21 @@ class _DevicesCommand(_Command): class _InstallCommand(_Command): name = 'install' - description = 'Installs the APK to one or more devices.' + description = 'Installs the APK or bundle to one or more devices.' needs_apk_path = True supports_incremental = True def Run(self): - _InstallApk(self.devices, self.apk_helper, self.install_dict) + if self.is_bundle: + bundle_apks_path = _GenerateBundleApks(self.bundle_generation_info) + _InstallBundle(self.devices, bundle_apks_path) + else: + _InstallApk(self.devices, self.apk_helper, self.install_dict) class _UninstallCommand(_Command): name = 'uninstall' - description = 'Removes the APK to one or more devices.' + description = 'Removes the APK or bundle from one or more devices.' needs_package_name = True def Run(self): @@ -929,8 +1010,8 @@ class _UninstallCommand(_Command): class _LaunchCommand(_Command): name = 'launch' - description = ('Sends a launch intent for the APK after first writing the ' - 'command-line flags file.') + description = ('Sends a launch intent for the APK or bundle after first ' + 'writing the command-line flags file.') needs_package_name = True accepts_command_line_flags = True all_devices_by_default = True @@ -950,6 +1031,10 @@ class _LaunchCommand(_Command): group.add_argument('url', nargs='?', help='A URL to launch with.') def Run(self): + if self.args.url and self.is_bundle: + # TODO(digit): Support this, maybe by using 'dumpsys' as described + # in the _LaunchUrl() comment. + raise Exception('Launching with URL not supported for bundles yet!') _LaunchUrl(self.devices, self.args.package_name, argv=self.args.args, command_line_flags_file=self.args.command_line_flags_file, url=self.args.url, apk=self.apk_helper, @@ -1214,6 +1299,26 @@ class _RunCommand(_InstallCommand, _LaunchCommand, _LogcatCommand): _LogcatCommand.Run(self) +class _BuildBundleApks(_Command): + name = 'build-bundle-apks' + description = ('Build the .apks archive from an Android app bundle, and ' + 'optionally copy it to a specific destination.') + need_device_args = False + + def _RegisterExtraArgs(self, group): + group.add_argument('--output-apks', + help='Destination path for .apks archive copy.') + + def Run(self): + bundle_apks_path = _GenerateBundleApks(self.bundle_generation_info) + if self.args.output_apks: + try: + shutil.copyfile(bundle_apks_path, self.args.output_apks) + except shutil.Error as e: + logging.exception('Failed to copy .apks archive: %s', e) + + +# Shared commands for regular APKs and app bundles. _COMMANDS = [ _DevicesCommand, _InstallCommand, @@ -1233,10 +1338,17 @@ _COMMANDS = [ _RunCommand, ] +# Commands specific to app bundles. +_BUNDLE_COMMANDS = [ + _BuildBundleApks, +] -def _ParseArgs(parser, from_wrapper_script): + +def _ParseArgs(parser, from_wrapper_script, is_bundle): subparsers = parser.add_subparsers() - commands = [clazz(from_wrapper_script) for clazz in _COMMANDS] + command_list = _COMMANDS + (_BUNDLE_COMMANDS if is_bundle else []) + commands = [clazz(from_wrapper_script, is_bundle) for clazz in command_list] + for command in commands: if from_wrapper_script or not command.needs_output_directory: command.RegisterArgs(subparsers) @@ -1249,21 +1361,21 @@ def _ParseArgs(parser, from_wrapper_script): return parser.parse_args(argv) -def _RunInternal(parser, output_directory=None): +def _RunInternal(parser, output_directory=None, bundle_generation_info=None): colorama.init() parser.set_defaults(output_directory=output_directory) from_wrapper_script = bool(output_directory) - args = _ParseArgs(parser, from_wrapper_script) + args = _ParseArgs(parser, from_wrapper_script, bool(bundle_generation_info)) run_tests_helper.SetLogLevel(args.verbose_count) args.command.ProcessArgs(args) + if bundle_generation_info: + args.command.RegisterBundleGenerationInfo(bundle_generation_info) args.command.Run() # Incremental install depends on the cache being cleared when uninstalling. if args.command.name != 'uninstall': _SaveDeviceCaches(args.command.devices, output_directory) -# TODO(agrieve): Remove =None from target_cpu on or after October 2017. -# It exists only so that stale wrapper scripts continue to work. def Run(output_directory, apk_path, incremental_json, command_line_flags_file, target_cpu, proguard_mapping_path): """Entry point for generated wrapper scripts.""" @@ -1280,6 +1392,47 @@ def Run(output_directory, apk_path, incremental_json, command_line_flags_file, _RunInternal(parser, output_directory=output_directory) +def RunForBundle(output_directory, bundle_path, bundle_apks_path, + aapt2_path, keystore_path, keystore_password, + keystore_alias, package_name, command_line_flags_file, + proguard_mapping_path, target_cpu): + """Entry point for generated app bundle wrapper scripts. + + Args: + output_dir: Chromium output directory path. + bundle_path: Input bundle path. + bundle_apks_path: Output bundle .apks archive path. + aapt2_path: Aapt2 tool path. + keystore_path: Keystore file path. + keystore_password: Keystore password. + keystore_alias: Signing key name alias in keystore file. + package_name: Application's package name. + command_line_flags_file: Optional. Name of an on-device file that will be + used to store command-line flags for this bundle. + proguard_mapping_path: Input path to the Proguard mapping file, used to + deobfuscate Java stack traces. + target_cpu: Chromium target CPU name, used by the 'gdb' command. + """ + constants.SetOutputDirectory(output_directory) + devil_chromium.Initialize(output_directory=output_directory) + bundle_generation_info = BundleGenerationInfo( + bundle_path=bundle_path, + bundle_apks_path=bundle_apks_path, + aapt2_path=aapt2_path, + keystore_path=keystore_path, + keystore_password=keystore_password, + keystore_alias=keystore_alias) + + parser = argparse.ArgumentParser() + parser.set_defaults( + package_name=package_name, + command_line_flags_file=command_line_flags_file, + proguard_mapping_path=proguard_mapping_path, + target_cpu=target_cpu) + _RunInternal(parser, output_directory=output_directory, + bundle_generation_info=bundle_generation_info) + + def main(): devil_chromium.Initialize() _RunInternal(argparse.ArgumentParser(), output_directory=None) diff --git a/chromium/build/android/asan_symbolize.py b/chromium/build/android/asan_symbolize.py index 19d71ca3aff..9f2e88a60d6 100755 --- a/chromium/build/android/asan_symbolize.py +++ b/chromium/build/android/asan_symbolize.py @@ -14,6 +14,7 @@ import sys from pylib import constants from pylib.constants import host_paths +# pylint: disable=wrong-import-order # Uses symbol.py from third_party/android_platform, not python's. with host_paths.SysPath( host_paths.ANDROID_PLATFORM_DEVELOPMENT_SCRIPTS_PATH, diff --git a/chromium/build/android/devil_chromium.py b/chromium/build/android/devil_chromium.py index af2141a552d..2ae643674bd 100644 --- a/chromium/build/android/devil_chromium.py +++ b/chromium/build/android/devil_chromium.py @@ -167,4 +167,3 @@ def Initialize(output_directory=None, custom_deps=None, adb_path=None): devil_env.config.Initialize( configs=[devil_dynamic_config], config_files=[_DEVIL_CONFIG]) - diff --git a/chromium/build/android/docs/android_app_bundles.md b/chromium/build/android/docs/android_app_bundles.md new file mode 100644 index 00000000000..e9e82844940 --- /dev/null +++ b/chromium/build/android/docs/android_app_bundles.md @@ -0,0 +1,199 @@ +# Introduction + +This document describes how the Chromium build system supports Android app +bundles. + +[TOC] + +# Overview of app bundles + +An Android app bundle is an alternative application distribution format for +Android applications on the Google Play Store, that allows reducing the size +of binaries sent for installation to individual devices that run on Android L +and beyond. For more information about them, see the official Android +documentation at: + + https://developer.android.com/guide/app-bundle/ + +For the context of this document, the most important points are: + + - Unlike a regular APK (e.g. `foo.apk`), the bundle (e.g. `foo.aab`) cannot + be installed directly on a device. + + - Instead, it must be processed into a set of installable split APKs, which + are stored inside a special zip archive (e.g. `foo.apks`). + + - The splitting can be based on various criteria: e.g. language or screen + density for resources, or cpu ABI for native code. + + - The bundle also uses the notion of modules to separate several application + features. Each module has its own code, assets and resources, and can be + installed separately from the rest of the application if needed. + + - The main application itself is stored in the '`base`' module (this name + cannot be changed). + + +# Declaring app bundles with GN templates + +Here's an example that shows how to declare a simple bundle that contains +a single base module, which enables language-based splits: + +```gn + + # First declare the first bundle module. The base module is the one + # that contains the main application's code, resources and assets. + android_app_bundle_module("foo_base_module") { + # Declaration are similar to android_apk here. + ... + } + + # Second, declare the bundle itself. + android_app_bundle("foo_bundle") { + # Indicate the base module to use for this bundle + base_module_target = ":foo_base_module" + + # The name of our bundle file (without any suffix). Default would + # be 'foo_bundle' otherwise. + bundle_name = "FooBundle" + + # Signing your bundle is required to upload it to the Play Store + # but since signing is very slow, avoid doing it for non official + # builds. Signing the bundle is not required for local testing. + sign_bundle = is_official_build + + # Enable language-based splits for this bundle. Which means that + # resources and assets specific to a given language will be placed + # into their own split APK in the final .apks archive. + enable_language_splits = true + + # Proguard settings must be passed at the bundle, not module, target. + proguard_enabled = !is_java_debug + } +``` + +When generating the `foo_bundle` target with Ninja, you will end up with +the following: + + - The bundle file under `out/Release/apks/FooBundle.aab` + + - A helper script called `out/Release/bin/foo_bundle`, which can be used + to install / launch / uninstall the bundle on local devices. + + This works like an APK wrapper script (e.g. `foo_apk`). Use `--help` + to see all possible commands supported by the script. + +If you need more modules besides the base one, you will need to list all the +extra ones using the extra_modules variable which takes a list of GN scopes, +as in: + +```gn + + android_app_bundle_module("foo_base_module") { + ... + } + + android_app_bundle_module("foo_extra_module") { + ... + } + + android_app_bundle("foo_bundle") { + base_module_target = ":foo_base_module" + + extra_modules = [ + { # NOTE: Scopes require one field per line, and no comma separators. + name = "my_module" + module_target = ":foo_extra_module" + } + ] + + ... + } +``` + +Note that each extra module is identified by a unique name, which cannot +be '`base`'. + + +# Bundle signature issues + +Signing an app bundle is not necessary, unless you want to upload it to the +Play Store. Since this process is very slow (it uses `jarsigner` instead of +the much faster `apkbuilder`), you can control it with the `sign_bundle` +variable, as described in the example above. + +The `.apks` archive however always contains signed split APKs. The keystore +path/password/alias being used are the default ones, unless you use custom +values when declaring the bundle itself, as in: + +```gn + android_app_bundle("foo_bundle") { + ... + keystore_path = "//path/to/keystore" + keystore_password = "K3y$t0Re-Pa$$w0rd" + keystore_name = "my-signing-key-name" + } +``` + +These values are not stored in the bundle itself, but in the wrapper script, +which will use them to generate the `.apks` archive for you. This allows you +to properly install updates on top of existing applications on any device. + + +# Proguard and bundles + +When using an app bundle that is made of several modules, it is crucial to +ensure that proguard, if enabled: + +- Keeps the obfuscated class names used by each module consistent. +- Does not remove classes that are not used in one module, but referenced + by others. + +To achieve this, a special scheme called *synchronized proguarding* is +performed, which consists of the following steps: + +- The list of unoptimized .jar files from all modules are sent to a single + proguard command. This generates a new temporary optimized *group* .jar file. + +- Each module extracts the optimized class files from the optimized *group* + .jar file, to generate its own, module-specific, optimized .jar. + +- Each module-specific optimized .jar is then sent to dex generation. + +This synchronized proguarding step is added by the `android_app_bundle()` GN +template. In practice this means the following: + + - If `proguard_enabled` and `proguard_jar_path` must be passed to + `android_app_bundle` targets, but not to `android_app_bundle_module` ones. + + - `proguard_configs` can be still passed to individual modules, just + like regular APKs. All proguard configs will be merged during the + synchronized proguard step. + + +# Manual generation and installation of .apks archives + +Note that the `foo_bundle` script knows how to generate the .apks archive +from the bundle file, and install it to local devices for you. For example, +to install and launch a bundle, use: + +```sh + out/Release/bin/foo_bundle run +``` + +If you want to manually look or use the `.apks` archive, use the following +command to generate it: + +```sh + out/Release/bin/foo_bundle build-bundle-apks \ + --output-apks=/tmp/BundleFoo.apks +``` + +All split APKs within the archive will be properly signed. And you will be +able to look at its content (with `unzip -l`), or install it manually with: + +```sh + build/android/gyp/bundletool.py install-apks \ + --apks=/tmp/BundleFoo.apks \ + --adb=$(which adb) +``` diff --git a/chromium/build/android/gradle/generate_gradle.py b/chromium/build/android/gradle/generate_gradle.py index 302f0a679ea..dfc2f241549 100755 --- a/chromium/build/android/gradle/generate_gradle.py +++ b/chromium/build/android/gradle/generate_gradle.py @@ -169,7 +169,7 @@ class _ProjectEntry(object): self._build_config = None self._java_files = None self._all_entries = None - self.android_test_entries = None + self.android_test_entries = [] @classmethod def FromGnTarget(cls, gn_target): @@ -334,7 +334,7 @@ class _ProjectContextGenerator(object): return _DEFAULT_ANDROID_MANIFEST_PATH variables = {} - variables['compile_sdk_version'] = self.build_vars['android_sdk_version'] + variables['compile_sdk_version'] = self.build_vars['compile_sdk_version'] variables['package'] = resource_packages[0] output_file = os.path.join( @@ -373,21 +373,24 @@ class _ProjectContextGenerator(object): res_zips += entry.ResZips() return set(_RebasePath(res_zips)) - def GeneratedInputs(self, root_entry): - generated_inputs = self.AllResZips(root_entry) - generated_inputs.update(self.AllSrcjars(root_entry)) + def GeneratedInputs(self, root_entry, fast=None): + generated_inputs = set() + if not fast: + generated_inputs.update(self.AllResZips(root_entry)) + generated_inputs.update(self.AllSrcjars(root_entry)) for entry in self._GetEntries(root_entry): generated_inputs.update(entry.GeneratedJavaFiles()) generated_inputs.update(entry.PrebuiltJars()) return generated_inputs - def GeneratedZips(self, root_entry): + def GeneratedZips(self, root_entry, fast=None): entry_output_dir = self.EntryOutputDir(root_entry) tuples = [] - tuples.extend((s, os.path.join(entry_output_dir, _SRCJARS_SUBDIR)) - for s in self.AllSrcjars(root_entry)) - tuples.extend((s, os.path.join(entry_output_dir, _RES_SUBDIR)) - for s in self.AllResZips(root_entry)) + if not fast: + tuples.extend((s, os.path.join(entry_output_dir, _SRCJARS_SUBDIR)) + for s in self.AllSrcjars(root_entry)) + tuples.extend((s, os.path.join(entry_output_dir, _RES_SUBDIR)) + for s in self.AllResZips(root_entry)) return tuples def GenerateManifest(self, root_entry): @@ -550,7 +553,7 @@ def _GenerateBaseVars(generator, build_vars, source_properties): variables = {} variables['build_tools_version'] = source_properties['Pkg.Revision'] variables['compile_sdk_version'] = ( - 'android-%s' % build_vars['android_sdk_version']) + 'android-%s' % build_vars['compile_sdk_version']) target_sdk_version = build_vars['android_sdk_version'] if target_sdk_version.isalpha(): target_sdk_version = '"{}"'.format(target_sdk_version) @@ -820,6 +823,12 @@ def main(): action='append', help='GN native targets to generate for. May be ' 'repeated.') + parser.add_argument('--compile-sdk-version', + type=int, + default=0, + help='Override compileSdkVersion for android sdk docs. ' + 'Useful when sources for android_sdk_version is ' + 'not available in Android Studio.') version_group = parser.add_mutually_exclusive_group() version_group.add_argument('--beta', action='store_true', @@ -895,6 +904,10 @@ def main(): channel = 'canary' else: channel = 'stable' + if args.compile_sdk_version: + build_vars['compile_sdk_version'] = args.compile_sdk_version + else: + build_vars['compile_sdk_version'] = build_vars['android_sdk_version'] generator = _ProjectContextGenerator(_gradle_output_dir, build_vars, args.use_gradle_process_resources, jinja_processor, args.split_projects, channel) @@ -962,24 +975,24 @@ def main(): _WriteFile(os.path.join(generator.project_dir, 'local.properties'), _GenerateLocalProperties(sdk_path)) - if not args.fast: - zip_tuples = [] - generated_inputs = set() - for entry in entries: + zip_tuples = [] + generated_inputs = set() + for entry in entries: + entries_to_gen = [entry] + entries_to_gen.extend(entry.android_test_entries) + for entry_to_gen in entries_to_gen: # Build all paths references by .gradle that exist within output_dir. - generated_inputs.update(generator.GeneratedInputs(entry)) - zip_tuples.extend(generator.GeneratedZips(entry)) - if generated_inputs: - logging.warning('Building generated source files...') - targets = _RebasePath(generated_inputs, output_dir) - _RunNinja(output_dir, targets, args.j) - if zip_tuples: - _ExtractZips(generator.project_dir, zip_tuples) + generated_inputs.update( + generator.GeneratedInputs(entry_to_gen, args.fast)) + zip_tuples.extend(generator.GeneratedZips(entry_to_gen, args.fast)) + if generated_inputs: + logging.warning('Building generated source files...') + targets = _RebasePath(generated_inputs, output_dir) + _RunNinja(output_dir, targets, args.j) + if zip_tuples: + _ExtractZips(generator.project_dir, zip_tuples) logging.warning('Generated projects for Android Studio %s', channel) - if not args.fast: - logging.warning('Run with --fast flag to skip generating files (faster, ' - 'but less correct)') logging.warning('For more tips: https://chromium.googlesource.com/chromium' '/src.git/+/master/docs/android_studio.md') diff --git a/chromium/build/android/gradle/root.jinja b/chromium/build/android/gradle/root.jinja index 76ffa8f63be..ff26840f00f 100644 --- a/chromium/build/android/gradle/root.jinja +++ b/chromium/build/android/gradle/root.jinja @@ -10,7 +10,7 @@ buildscript { } dependencies { {% if channel == 'canary' %} - classpath "com.android.tools.build:gradle:3.2.0-alpha16" + classpath "com.android.tools.build:gradle:3.3.0-alpha05" {% elif channel == 'beta' %} classpath "com.android.tools.build:gradle:3.1.0-beta4" {% else %} diff --git a/chromium/build/android/gyp/aar.pydeps b/chromium/build/android/gyp/aar.pydeps new file mode 100644 index 00000000000..e08c5475e3d --- /dev/null +++ b/chromium/build/android/gyp/aar.pydeps @@ -0,0 +1,7 @@ +# Generated by running: +# build/print_python_deps.py --root build/android/gyp --output build/android/gyp/aar.pydeps build/android/gyp/aar.py +../../gn_helpers.py +aar.py +util/__init__.py +util/build_utils.py +util/md5_check.py diff --git a/chromium/build/android/gyp/aidl.py b/chromium/build/android/gyp/aidl.py index 1591f24508c..64ad29041ad 100755 --- a/chromium/build/android/gyp/aidl.py +++ b/chromium/build/android/gyp/aidl.py @@ -18,7 +18,6 @@ from util import build_utils def main(argv): option_parser = optparse.OptionParser() - build_utils.AddDepfileOption(option_parser) option_parser.add_option('--aidl-path', help='Path to the aidl binary.') option_parser.add_option('--imports', help='Files to import.') option_parser.add_option('--includes', @@ -54,9 +53,6 @@ def main(argv): pkg_name.replace('.', '/'), os.path.basename(path)) build_utils.AddToZipHermetic(srcjar, arcname, data=data) - if options.depfile: - build_utils.WriteDepfile(options.depfile, options.srcjar) - if __name__ == '__main__': sys.exit(main(sys.argv)) diff --git a/chromium/build/android/gyp/aidl.pydeps b/chromium/build/android/gyp/aidl.pydeps new file mode 100644 index 00000000000..2dbce376f1e --- /dev/null +++ b/chromium/build/android/gyp/aidl.pydeps @@ -0,0 +1,7 @@ +# Generated by running: +# build/print_python_deps.py --root build/android/gyp --output build/android/gyp/aidl.pydeps build/android/gyp/aidl.py +../../gn_helpers.py +aidl.py +util/__init__.py +util/build_utils.py +util/md5_check.py diff --git a/chromium/build/android/gyp/apkbuilder.pydeps b/chromium/build/android/gyp/apkbuilder.pydeps new file mode 100644 index 00000000000..3ae03319c90 --- /dev/null +++ b/chromium/build/android/gyp/apkbuilder.pydeps @@ -0,0 +1,8 @@ +# Generated by running: +# build/print_python_deps.py --root build/android/gyp --output build/android/gyp/apkbuilder.pydeps build/android/gyp/apkbuilder.py +../../gn_helpers.py +apkbuilder.py +finalize_apk.py +util/__init__.py +util/build_utils.py +util/md5_check.py diff --git a/chromium/build/android/gyp/app_bundle_to_apks.pydeps b/chromium/build/android/gyp/app_bundle_to_apks.pydeps new file mode 100644 index 00000000000..49c2892b2f3 --- /dev/null +++ b/chromium/build/android/gyp/app_bundle_to_apks.pydeps @@ -0,0 +1,8 @@ +# Generated by running: +# build/print_python_deps.py --root build/android/gyp --output build/android/gyp/app_bundle_to_apks.pydeps build/android/gyp/app_bundle_to_apks.py +../../gn_helpers.py +app_bundle_to_apks.py +bundletool.py +util/__init__.py +util/build_utils.py +util/md5_check.py diff --git a/chromium/build/android/gyp/bytecode_processor.pydeps b/chromium/build/android/gyp/bytecode_processor.pydeps new file mode 100644 index 00000000000..d8ff3964950 --- /dev/null +++ b/chromium/build/android/gyp/bytecode_processor.pydeps @@ -0,0 +1,7 @@ +# Generated by running: +# build/print_python_deps.py --root build/android/gyp --output build/android/gyp/bytecode_processor.pydeps build/android/gyp/bytecode_processor.py +../../gn_helpers.py +bytecode_processor.py +util/__init__.py +util/build_utils.py +util/md5_check.py diff --git a/chromium/build/android/gyp/compile_resources.py b/chromium/build/android/gyp/compile_resources.py index 412c6f7485d..cda03e60601 100755 --- a/chromium/build/android/gyp/compile_resources.py +++ b/chromium/build/android/gyp/compile_resources.py @@ -671,7 +671,8 @@ def main(args): input_paths=input_paths, input_strings=input_strings, output_paths=output_paths, - depfile_deps=options.dependencies_res_zips + options.extra_r_text_files) + depfile_deps=options.dependencies_res_zips + options.extra_r_text_files, + add_pydeps=False) if __name__ == '__main__': diff --git a/chromium/build/android/gyp/compile_resources.pydeps b/chromium/build/android/gyp/compile_resources.pydeps new file mode 100644 index 00000000000..2ffcb52a2c9 --- /dev/null +++ b/chromium/build/android/gyp/compile_resources.pydeps @@ -0,0 +1,29 @@ +# Generated by running: +# build/print_python_deps.py --root build/android/gyp --output build/android/gyp/compile_resources.pydeps build/android/gyp/compile_resources.py +../../../third_party/jinja2/__init__.py +../../../third_party/jinja2/_compat.py +../../../third_party/jinja2/bccache.py +../../../third_party/jinja2/compiler.py +../../../third_party/jinja2/defaults.py +../../../third_party/jinja2/environment.py +../../../third_party/jinja2/exceptions.py +../../../third_party/jinja2/filters.py +../../../third_party/jinja2/idtracking.py +../../../third_party/jinja2/lexer.py +../../../third_party/jinja2/loaders.py +../../../third_party/jinja2/nodes.py +../../../third_party/jinja2/optimizer.py +../../../third_party/jinja2/parser.py +../../../third_party/jinja2/runtime.py +../../../third_party/jinja2/tests.py +../../../third_party/jinja2/utils.py +../../../third_party/jinja2/visitor.py +../../../third_party/markupsafe/__init__.py +../../../third_party/markupsafe/_compat.py +../../../third_party/markupsafe/_native.py +../../gn_helpers.py +compile_resources.py +util/__init__.py +util/build_utils.py +util/md5_check.py +util/resource_utils.py diff --git a/chromium/build/android/gyp/copy_ex.py b/chromium/build/android/gyp/copy_ex.py index a9f6a9f44bb..48d1b26df18 100755 --- a/chromium/build/android/gyp/copy_ex.py +++ b/chromium/build/android/gyp/copy_ex.py @@ -35,8 +35,14 @@ def CopyFile(f, dest, deps): dest = os.path.join(dest, os.path.basename(f)) deps.append(f) - if os.path.isfile(dest) and filecmp.cmp(dest, f, shallow=False): - return + + if os.path.isfile(dest): + if filecmp.cmp(dest, f, shallow=False): + return + # The shutil.copy() below would fail if the file does not have write + # permissions. Deleting the file has similar costs to modifying the + # permissions. + os.unlink(dest) shutil.copy(f, dest) diff --git a/chromium/build/android/gyp/copy_ex.pydeps b/chromium/build/android/gyp/copy_ex.pydeps new file mode 100644 index 00000000000..e0fb31eaa9b --- /dev/null +++ b/chromium/build/android/gyp/copy_ex.pydeps @@ -0,0 +1,7 @@ +# Generated by running: +# build/print_python_deps.py --root build/android/gyp --output build/android/gyp/copy_ex.pydeps build/android/gyp/copy_ex.py +../../gn_helpers.py +copy_ex.py +util/__init__.py +util/build_utils.py +util/md5_check.py diff --git a/chromium/build/android/gyp/create_apk_operations_script.pydeps b/chromium/build/android/gyp/create_apk_operations_script.pydeps new file mode 100644 index 00000000000..9d4dcb8fe5b --- /dev/null +++ b/chromium/build/android/gyp/create_apk_operations_script.pydeps @@ -0,0 +1,3 @@ +# Generated by running: +# build/print_python_deps.py --root build/android/gyp --output build/android/gyp/create_apk_operations_script.pydeps build/android/gyp/create_apk_operations_script.py +create_apk_operations_script.py diff --git a/chromium/build/android/gyp/create_app_bundle.pydeps b/chromium/build/android/gyp/create_app_bundle.pydeps new file mode 100644 index 00000000000..fef04fab53a --- /dev/null +++ b/chromium/build/android/gyp/create_app_bundle.pydeps @@ -0,0 +1,30 @@ +# Generated by running: +# build/print_python_deps.py --root build/android/gyp --output build/android/gyp/create_app_bundle.pydeps build/android/gyp/create_app_bundle.py +../../../third_party/jinja2/__init__.py +../../../third_party/jinja2/_compat.py +../../../third_party/jinja2/bccache.py +../../../third_party/jinja2/compiler.py +../../../third_party/jinja2/defaults.py +../../../third_party/jinja2/environment.py +../../../third_party/jinja2/exceptions.py +../../../third_party/jinja2/filters.py +../../../third_party/jinja2/idtracking.py +../../../third_party/jinja2/lexer.py +../../../third_party/jinja2/loaders.py +../../../third_party/jinja2/nodes.py +../../../third_party/jinja2/optimizer.py +../../../third_party/jinja2/parser.py +../../../third_party/jinja2/runtime.py +../../../third_party/jinja2/tests.py +../../../third_party/jinja2/utils.py +../../../third_party/jinja2/visitor.py +../../../third_party/markupsafe/__init__.py +../../../third_party/markupsafe/_compat.py +../../../third_party/markupsafe/_native.py +../../gn_helpers.py +bundletool.py +create_app_bundle.py +util/__init__.py +util/build_utils.py +util/md5_check.py +util/resource_utils.py diff --git a/chromium/build/android/gyp/create_bundle_wrapper_script.py b/chromium/build/android/gyp/create_bundle_wrapper_script.py new file mode 100755 index 00000000000..04108363e3f --- /dev/null +++ b/chromium/build/android/gyp/create_bundle_wrapper_script.py @@ -0,0 +1,94 @@ +#!/usr/bin/env python +# Copyright 2018 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. + +"""Create a wrapper script to manage an Android App Bundle.""" + +import argparse +import os +import string +import sys + +from util import build_utils + +SCRIPT_TEMPLATE = string.Template("""\ +#!/usr/bin/env python +# +# This file was generated by build/android/gyp/create_bundle_wrapper_script.py + +import os +import sys + +def main(): + script_directory = os.path.dirname(__file__) + resolve = lambda p: p if p is None else os.path.abspath(os.path.join( + script_directory, p)) + sys.path.append(resolve(${WRAPPED_SCRIPT_DIR})) + import apk_operations + + apk_operations.RunForBundle(output_directory=resolve(${OUTPUT_DIR}), + bundle_path=resolve(${BUNDLE_PATH}), + bundle_apks_path=resolve(${BUNDLE_APKS_PATH}), + aapt2_path=resolve(${AAPT2_PATH}), + keystore_path=resolve(${KEYSTORE_PATH}), + keystore_password=${KEYSTORE_PASSWORD}, + keystore_alias=${KEY_NAME}, + package_name=${PACKAGE_NAME}, + command_line_flags_file=${FLAGS_FILE}, + proguard_mapping_path=resolve(${MAPPING_PATH}), + target_cpu=${TARGET_CPU}) + +if __name__ == '__main__': + sys.exit(main()) +""") + + +def main(args): + args = build_utils.ExpandFileArgs(args) + parser = argparse.ArgumentParser() + parser.add_argument('--script-output-path', required=True, + help='Output path for executable script.') + parser.add_argument('--bundle-path', required=True) + parser.add_argument('--bundle-apks-path', required=True) + parser.add_argument('--package-name', required=True) + parser.add_argument('--aapt2-path', required=True) + parser.add_argument('--keystore-path', required=True) + parser.add_argument('--keystore-password', required=True) + parser.add_argument('--key-name', required=True) + parser.add_argument('--command-line-flags-file') + parser.add_argument('--proguard-mapping-path') + parser.add_argument('--target-cpu') + args = parser.parse_args(args) + + def relativize(path): + """Returns the path relative to the output script directory.""" + if path is None: + return path + return os.path.relpath(path, os.path.dirname(args.script_output_path)) + + wrapped_script_dir = os.path.join(os.path.dirname(__file__), os.path.pardir) + wrapped_script_dir = relativize(wrapped_script_dir) + + with open(args.script_output_path, 'w') as script: + script_dict = { + 'WRAPPED_SCRIPT_DIR': repr(wrapped_script_dir), + 'OUTPUT_DIR': repr(relativize('.')), + 'BUNDLE_PATH': repr(relativize(args.bundle_path)), + 'BUNDLE_APKS_PATH': repr(relativize(args.bundle_apks_path)), + 'PACKAGE_NAME': repr(args.package_name), + 'AAPT2_PATH': repr(relativize(args.aapt2_path)), + 'KEYSTORE_PATH': repr(relativize(args.keystore_path)), + 'KEYSTORE_PASSWORD': repr(args.keystore_password), + 'KEY_NAME': repr(args.key_name), + 'MAPPING_PATH': repr(relativize(args.proguard_mapping_path)), + 'FLAGS_FILE': repr(args.command_line_flags_file), + 'TARGET_CPU': repr(args.target_cpu), + } + script.write(SCRIPT_TEMPLATE.substitute(script_dict)) + os.chmod(args.script_output_path, 0750) + return 0 + + +if __name__ == '__main__': + sys.exit(main(sys.argv[1:])) diff --git a/chromium/build/android/gyp/create_bundle_wrapper_script.pydeps b/chromium/build/android/gyp/create_bundle_wrapper_script.pydeps new file mode 100644 index 00000000000..5c87801e253 --- /dev/null +++ b/chromium/build/android/gyp/create_bundle_wrapper_script.pydeps @@ -0,0 +1,7 @@ +# Generated by running: +# build/print_python_deps.py --root build/android/gyp --output build/android/gyp/create_bundle_wrapper_script.pydeps build/android/gyp/create_bundle_wrapper_script.py +../../gn_helpers.py +create_bundle_wrapper_script.py +util/__init__.py +util/build_utils.py +util/md5_check.py diff --git a/chromium/build/android/gyp/create_dist_jar.py b/chromium/build/android/gyp/create_dist_jar.py index 2e06478fae8..7f78935a47d 100755 --- a/chromium/build/android/gyp/create_dist_jar.py +++ b/chromium/build/android/gyp/create_dist_jar.py @@ -24,7 +24,8 @@ def main(args): build_utils.MergeZips(options.output, input_jars) if options.depfile: - build_utils.WriteDepfile(options.depfile, options.output, input_jars) + build_utils.WriteDepfile(options.depfile, options.output, input_jars, + add_pydeps=False) if __name__ == '__main__': diff --git a/chromium/build/android/gyp/create_dist_jar.pydeps b/chromium/build/android/gyp/create_dist_jar.pydeps new file mode 100644 index 00000000000..f4224d7f99d --- /dev/null +++ b/chromium/build/android/gyp/create_dist_jar.pydeps @@ -0,0 +1,7 @@ +# Generated by running: +# build/print_python_deps.py --root build/android/gyp --output build/android/gyp/create_dist_jar.pydeps build/android/gyp/create_dist_jar.py +../../gn_helpers.py +create_dist_jar.py +util/__init__.py +util/build_utils.py +util/md5_check.py diff --git a/chromium/build/android/gyp/create_java_binary_script.pydeps b/chromium/build/android/gyp/create_java_binary_script.pydeps new file mode 100644 index 00000000000..96d79bf609e --- /dev/null +++ b/chromium/build/android/gyp/create_java_binary_script.pydeps @@ -0,0 +1,7 @@ +# Generated by running: +# build/print_python_deps.py --root build/android/gyp --output build/android/gyp/create_java_binary_script.pydeps build/android/gyp/create_java_binary_script.py +../../gn_helpers.py +create_java_binary_script.py +util/__init__.py +util/build_utils.py +util/md5_check.py diff --git a/chromium/build/android/gyp/create_stack_script.pydeps b/chromium/build/android/gyp/create_stack_script.pydeps new file mode 100644 index 00000000000..7bddb156f40 --- /dev/null +++ b/chromium/build/android/gyp/create_stack_script.pydeps @@ -0,0 +1,7 @@ +# Generated by running: +# build/print_python_deps.py --root build/android/gyp --output build/android/gyp/create_stack_script.pydeps build/android/gyp/create_stack_script.py +../../gn_helpers.py +create_stack_script.py +util/__init__.py +util/build_utils.py +util/md5_check.py diff --git a/chromium/build/android/gyp/create_test_runner_script.pydeps b/chromium/build/android/gyp/create_test_runner_script.pydeps new file mode 100644 index 00000000000..4b8876bc943 --- /dev/null +++ b/chromium/build/android/gyp/create_test_runner_script.pydeps @@ -0,0 +1,7 @@ +# Generated by running: +# build/print_python_deps.py --root build/android/gyp --output build/android/gyp/create_test_runner_script.pydeps build/android/gyp/create_test_runner_script.py +../../gn_helpers.py +create_test_runner_script.py +util/__init__.py +util/build_utils.py +util/md5_check.py diff --git a/chromium/build/android/gyp/create_tool_wrapper.pydeps b/chromium/build/android/gyp/create_tool_wrapper.pydeps new file mode 100644 index 00000000000..75b8326e70b --- /dev/null +++ b/chromium/build/android/gyp/create_tool_wrapper.pydeps @@ -0,0 +1,3 @@ +# Generated by running: +# build/print_python_deps.py --root build/android/gyp --output build/android/gyp/create_tool_wrapper.pydeps build/android/gyp/create_tool_wrapper.py +create_tool_wrapper.py diff --git a/chromium/build/android/gyp/desugar.pydeps b/chromium/build/android/gyp/desugar.pydeps new file mode 100644 index 00000000000..a40f3aa7ddd --- /dev/null +++ b/chromium/build/android/gyp/desugar.pydeps @@ -0,0 +1,7 @@ +# Generated by running: +# build/print_python_deps.py --root build/android/gyp --output build/android/gyp/desugar.pydeps build/android/gyp/desugar.py +../../gn_helpers.py +desugar.py +util/__init__.py +util/build_utils.py +util/md5_check.py diff --git a/chromium/build/android/gyp/dex.pydeps b/chromium/build/android/gyp/dex.pydeps new file mode 100644 index 00000000000..0e18d02a460 --- /dev/null +++ b/chromium/build/android/gyp/dex.pydeps @@ -0,0 +1,7 @@ +# Generated by running: +# build/print_python_deps.py --root build/android/gyp --output build/android/gyp/dex.pydeps build/android/gyp/dex.py +../../gn_helpers.py +dex.py +util/__init__.py +util/build_utils.py +util/md5_check.py diff --git a/chromium/build/android/gyp/dist_aar.py b/chromium/build/android/gyp/dist_aar.py index 6dc38c488a6..ed823f18b7b 100755 --- a/chromium/build/android/gyp/dist_aar.py +++ b/chromium/build/android/gyp/dist_aar.py @@ -124,7 +124,8 @@ def main(args): if options.depfile: all_inputs = (options.jars + options.dependencies_res_zips + options.r_text_files + options.proguard_configs) - build_utils.WriteDepfile(options.depfile, options.output, all_inputs) + build_utils.WriteDepfile(options.depfile, options.output, all_inputs, + add_pydeps=False) if __name__ == '__main__': diff --git a/chromium/build/android/gyp/dist_aar.pydeps b/chromium/build/android/gyp/dist_aar.pydeps new file mode 100644 index 00000000000..da5ea8da23d --- /dev/null +++ b/chromium/build/android/gyp/dist_aar.pydeps @@ -0,0 +1,7 @@ +# Generated by running: +# build/print_python_deps.py --root build/android/gyp --output build/android/gyp/dist_aar.pydeps build/android/gyp/dist_aar.py +../../gn_helpers.py +dist_aar.py +util/__init__.py +util/build_utils.py +util/md5_check.py diff --git a/chromium/build/android/gyp/emma_instr.pydeps b/chromium/build/android/gyp/emma_instr.pydeps new file mode 100644 index 00000000000..88f752a0f9d --- /dev/null +++ b/chromium/build/android/gyp/emma_instr.pydeps @@ -0,0 +1,7 @@ +# Generated by running: +# build/print_python_deps.py --root build/android/gyp --output build/android/gyp/emma_instr.pydeps build/android/gyp/emma_instr.py +../../gn_helpers.py +emma_instr.py +util/__init__.py +util/build_utils.py +util/md5_check.py diff --git a/chromium/build/android/gyp/filter_zip.pydeps b/chromium/build/android/gyp/filter_zip.pydeps new file mode 100644 index 00000000000..67c989cf885 --- /dev/null +++ b/chromium/build/android/gyp/filter_zip.pydeps @@ -0,0 +1,7 @@ +# Generated by running: +# build/print_python_deps.py --root build/android/gyp --output build/android/gyp/filter_zip.pydeps build/android/gyp/filter_zip.py +../../gn_helpers.py +filter_zip.py +util/__init__.py +util/build_utils.py +util/md5_check.py diff --git a/chromium/build/android/gyp/gcc_preprocess.py b/chromium/build/android/gyp/gcc_preprocess.py index 8c5c404c744..8b3444c2b01 100755 --- a/chromium/build/android/gyp/gcc_preprocess.py +++ b/chromium/build/android/gyp/gcc_preprocess.py @@ -47,7 +47,7 @@ def main(args): DoGcc(options) if options.depfile: - build_utils.WriteDepfile(options.depfile, options.output) + build_utils.WriteDepfile(options.depfile, options.output, add_pydeps=False) if __name__ == '__main__': diff --git a/chromium/build/android/gyp/gcc_preprocess.pydeps b/chromium/build/android/gyp/gcc_preprocess.pydeps new file mode 100644 index 00000000000..64e776b6338 --- /dev/null +++ b/chromium/build/android/gyp/gcc_preprocess.pydeps @@ -0,0 +1,7 @@ +# Generated by running: +# build/print_python_deps.py --root build/android/gyp --output build/android/gyp/gcc_preprocess.pydeps build/android/gyp/gcc_preprocess.py +../../gn_helpers.py +gcc_preprocess.py +util/__init__.py +util/build_utils.py +util/md5_check.py diff --git a/chromium/build/android/gyp/generate_proguarded_module_jar.py b/chromium/build/android/gyp/generate_proguarded_module_jar.py new file mode 100755 index 00000000000..97b3027a51e --- /dev/null +++ b/chromium/build/android/gyp/generate_proguarded_module_jar.py @@ -0,0 +1,159 @@ +#!/usr/bin/env python +# +# Copyright (c) 2018 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. + +"""Extracts a bundle module's classes from jar created in the synchronized +proguarding step and packages them into a new jar. + +Synchronized proguarding means that, when several app modules are combined into +an app bundle, all un-optimized jars for all modules are grouped and sent to a +single proguard command, which generates a single, common, intermediate +optimized jar, and its mapping file. + +This script is used to extract, from this synchronized proguard jar, all the +optimized classes corresponding to a single module, into a new .jar file. The +latter will be compiled later into the module's dex file. + +For this, the script reads the module's un-obfuscated class names from the +module's unoptimized jars. Then, it maps those to obfuscated class names using +the proguard mapping file. Finally, it extracts the module's class files from +the proguarded jar and zips them into a new module jar. """ + +import argparse +import os +import sys +import zipfile + +from util import build_utils + +MANIFEST = """Manifest-Version: 1.0 +Created-By: generate_proguarded_module_jar.py +""" + + +# TODO(tiborg): Share with merge_jar_info_files.py. +def _FullJavaNameFromClassFilePath(path): + if not path.endswith('.class'): + return '' + path = os.path.splitext(path)[0] + parts = [] + while path: + # Use split to be platform independent. + head, tail = os.path.split(path) + path = head + parts.append(tail) + parts.reverse() # Package comes first + return '.'.join(parts) + + +def main(args): + args = build_utils.ExpandFileArgs(args) + parser = argparse.ArgumentParser() + build_utils.AddDepfileOption(parser) + parser.add_argument( + '--proguarded-jar', + required=True, + help='Path to input jar produced by synchronized proguarding') + parser.add_argument( + '--proguard-mapping', + required=True, + help='Path to input proguard mapping produced by synchronized ' + 'proguarding') + parser.add_argument( + '--module-input-jars', + required=True, + help='GN-list of input paths to un-optimized jar files for the current ' + 'module. The optimized versions of their .class files will go into ' + 'the output jar.') + parser.add_argument( + '--output-jar', + required=True, + help='Path to output jar file containing the module\'s optimized class ' + 'files') + parser.add_argument( + '--is-base-module', + action='store_true', + help='Inidcates to extract class files for a base module') + options = parser.parse_args(args) + options.module_input_jars = build_utils.ParseGnList(options.module_input_jars) + + # Read class names of the currently processed module. + classes = set() + for module_jar in options.module_input_jars: + with zipfile.ZipFile(module_jar) as zip_info: + for path in zip_info.namelist(): + fully_qualified_name = _FullJavaNameFromClassFilePath(path) + if fully_qualified_name: + classes.add(fully_qualified_name) + + # Parse the proguarding mapping to be able to map un-obfuscated to obfuscated + # names. + # Proguard mapping files have the following format: + # + # {un-obfuscated class name 1} -> {obfuscated class name 1}: + # {un-obfuscated member name 1} -> {obfuscated member name 1} + # ... + # {un-obfuscated class name 2} -> {obfuscated class name 2}: + # ... + # ... + obfuscation_map = {} + with open(options.proguard_mapping, 'r') as proguard_mapping_file: + for line in proguard_mapping_file: + # Skip indented lines since they map member names and not class names. + if line.startswith(' '): + continue + line = line.strip() + # Skip empty lines. + if not line: + continue + assert line.endswith(':') + full, obfuscated = line.strip(':').split(' -> ') + assert full + assert obfuscated + obfuscation_map[full] = obfuscated + + # Collect the obfuscated names of classes, which should go into the currently + # processed module. + obfuscated_module_classes = set( + obfuscation_map[c] for c in classes if c in obfuscation_map) + + # Collect horizontally merged classes to later make sure that those only go + # into the base module. Merging classes horizontally means that proguard took + # two classes that don't inherit from each other and merged them into one. + horiz_merged_classes = set() + obfuscated_classes = sorted(obfuscation_map.values()) + prev_obfuscated_class = None + for obfuscated_class in obfuscated_classes: + if prev_obfuscated_class and obfuscated_class == prev_obfuscated_class: + horiz_merged_classes.add(obfuscated_class) + prev_obfuscated_class = obfuscated_class + + # Move horizontally merged classes into the base module. + if options.is_base_module: + obfuscated_module_classes |= horiz_merged_classes + else: + obfuscated_module_classes -= horiz_merged_classes + + # Extract module class files from proguarded jar and store them in a module + # split jar. + with zipfile.ZipFile( + os.path.abspath(options.output_jar), 'w', + zipfile.ZIP_DEFLATED) as output_jar: + with zipfile.ZipFile(os.path.abspath(options.proguarded_jar), + 'r') as proguarded_jar: + for obfuscated_class in obfuscated_module_classes: + class_path = obfuscated_class.replace('.', '/') + '.class' + class_file_content = proguarded_jar.read(class_path) + output_jar.writestr(class_path, class_file_content) + output_jar.writestr('META-INF/MANIFEST.MF', MANIFEST) + + if options.depfile: + build_utils.WriteDepfile( + options.depfile, options.output_jar, options.module_input_jars + + [options.proguard_mapping, options.proguarded_jar], add_pydeps=False) + + +if __name__ == '__main__': + main(sys.argv[1:]) diff --git a/chromium/build/android/gyp/generate_proguarded_module_jar.pydeps b/chromium/build/android/gyp/generate_proguarded_module_jar.pydeps new file mode 100644 index 00000000000..6d52b4ec543 --- /dev/null +++ b/chromium/build/android/gyp/generate_proguarded_module_jar.pydeps @@ -0,0 +1,7 @@ +# Generated by running: +# build/print_python_deps.py --root build/android/gyp --output build/android/gyp/generate_proguarded_module_jar.pydeps build/android/gyp/generate_proguarded_module_jar.py +../../gn_helpers.py +generate_proguarded_module_jar.py +util/__init__.py +util/build_utils.py +util/md5_check.py diff --git a/chromium/build/android/gyp/generate_resource_rewriter.py b/chromium/build/android/gyp/generate_resource_rewriter.py index 82ddc21dc15..ba635a293d5 100755 --- a/chromium/build/android/gyp/generate_resource_rewriter.py +++ b/chromium/build/android/gyp/generate_resource_rewriter.py @@ -107,4 +107,3 @@ def main(): if __name__ == '__main__': sys.exit(main()) - diff --git a/chromium/build/android/gyp/ijar.pydeps b/chromium/build/android/gyp/ijar.pydeps new file mode 100644 index 00000000000..ca10697c1f2 --- /dev/null +++ b/chromium/build/android/gyp/ijar.pydeps @@ -0,0 +1,7 @@ +# Generated by running: +# build/print_python_deps.py --root build/android/gyp --output build/android/gyp/ijar.pydeps build/android/gyp/ijar.py +../../gn_helpers.py +ijar.py +util/__init__.py +util/build_utils.py +util/md5_check.py diff --git a/chromium/build/android/gyp/java_cpp_enum.py b/chromium/build/android/gyp/java_cpp_enum.py index afb48430fa2..e737441005f 100755 --- a/chromium/build/android/gyp/java_cpp_enum.py +++ b/chromium/build/android/gyp/java_cpp_enum.py @@ -447,7 +447,7 @@ def DoMain(argv): build_utils.AddToZipHermetic(srcjar, output_path, data=data) if options.depfile: - build_utils.WriteDepfile(options.depfile, options.srcjar) + build_utils.WriteDepfile(options.depfile, options.srcjar, add_pydeps=False) if __name__ == '__main__': diff --git a/chromium/build/android/gyp/java_cpp_enum.pydeps b/chromium/build/android/gyp/java_cpp_enum.pydeps new file mode 100644 index 00000000000..32c8de534db --- /dev/null +++ b/chromium/build/android/gyp/java_cpp_enum.pydeps @@ -0,0 +1,7 @@ +# Generated by running: +# build/print_python_deps.py --root build/android/gyp --output build/android/gyp/java_cpp_enum.pydeps build/android/gyp/java_cpp_enum.py +../../gn_helpers.py +java_cpp_enum.py +util/__init__.py +util/build_utils.py +util/md5_check.py diff --git a/chromium/build/android/gyp/java_google_api_keys.py b/chromium/build/android/gyp/java_google_api_keys.py index f57e0b3a978..349821a8fce 100755 --- a/chromium/build/android/gyp/java_google_api_keys.py +++ b/chromium/build/android/gyp/java_google_api_keys.py @@ -121,4 +121,3 @@ def _DoMain(argv): if __name__ == '__main__': _DoMain(sys.argv[1:]) - diff --git a/chromium/build/android/gyp/javac.py b/chromium/build/android/gyp/javac.py index b5ae57a6d5a..0e1aad00922 100755 --- a/chromium/build/android/gyp/javac.py +++ b/chromium/build/android/gyp/javac.py @@ -96,6 +96,7 @@ ERRORPRONE_WARNINGS_TO_ERROR = [ 'MissingFail', 'MissingOverride', 'NarrowingCompoundAssignment', + 'OrphanedFormatString', 'ParameterName', 'ParcelableCreator', 'ReferenceEquality', @@ -248,7 +249,7 @@ def _CreateInfoFile(java_files, options, srcjar_files): info_data[fully_qualified_name] = java_file # Skip aidl srcjars since they don't indent code correctly. source = srcjar_files.get(java_file, java_file) - if source.endswith('_aidl.srcjar'): + if '_aidl.srcjar' in source: continue assert not options.chromium_code or len(class_names) == 1, ( 'Chromium java files must only have one class: {}'.format(source)) @@ -309,7 +310,10 @@ def _OnStaleMd5(changes, options, javac_cmd, java_files, classpath_inputs, extracted_files = build_utils.ExtractAll( srcjar, path=java_dir, pattern='*.java') for path in extracted_files: - srcjar_files[path] = srcjar + # We want the path inside the srcjar so the viewer can have a tree + # structure. + srcjar_files[path] = '{}/{}'.format( + srcjar, os.path.relpath(path, java_dir)) jar_srcs = build_utils.FindInDirectory(java_dir, '*.java') java_files.extend(jar_srcs) if changed_paths: @@ -596,7 +600,8 @@ def main(argv): input_strings=javac_cmd + classpath, output_paths=output_paths, force=force, - pass_changes=True) + pass_changes=True, + add_pydeps=False) if __name__ == '__main__': diff --git a/chromium/build/android/gyp/javac.pydeps b/chromium/build/android/gyp/javac.pydeps new file mode 100644 index 00000000000..a9d257b95f8 --- /dev/null +++ b/chromium/build/android/gyp/javac.pydeps @@ -0,0 +1,15 @@ +# Generated by running: +# build/print_python_deps.py --root build/android/gyp --output build/android/gyp/javac.pydeps build/android/gyp/javac.py +../../../third_party/colorama/src/colorama/__init__.py +../../../third_party/colorama/src/colorama/ansi.py +../../../third_party/colorama/src/colorama/ansitowin32.py +../../../third_party/colorama/src/colorama/initialise.py +../../../third_party/colorama/src/colorama/win32.py +../../../third_party/colorama/src/colorama/winterm.py +../../gn_helpers.py +jar.py +javac.py +util/__init__.py +util/build_utils.py +util/jar_info_utils.py +util/md5_check.py diff --git a/chromium/build/android/gyp/jinja_template.py b/chromium/build/android/gyp/jinja_template.py index 434d281099e..4d5c403dfe8 100755 --- a/chromium/build/android/gyp/jinja_template.py +++ b/chromium/build/android/gyp/jinja_template.py @@ -124,7 +124,8 @@ def main(): parser.add_argument('--variables', help='Variables to be made available in ' 'the template processing environment, as a GYP list ' '(e.g. --variables "channel=beta mstone=39")', default='') - build_utils.AddDepfileOption(parser) + parser.add_argument('--check-includes', action='store_true', + help='Enable inputs and includes checks.') options = parser.parse_args() inputs = build_utils.ParseGnList(options.inputs) @@ -146,15 +147,13 @@ def main(): _ProcessFiles(processor, inputs, options.inputs_base_dir, options.outputs_zip) - if options.depfile: - output = options.output or options.outputs_zip + if options.check_includes: all_inputs = set(processor.GetLoadedTemplates()) all_inputs.difference_update(inputs) all_inputs.difference_update(includes) if all_inputs: raise Exception('Found files not listed via --includes:\n' + '\n'.join(sorted(all_inputs))) - build_utils.WriteDepfile(options.depfile, output) if __name__ == '__main__': diff --git a/chromium/build/android/gyp/jinja_template.pydeps b/chromium/build/android/gyp/jinja_template.pydeps new file mode 100644 index 00000000000..a2a38176bfe --- /dev/null +++ b/chromium/build/android/gyp/jinja_template.pydeps @@ -0,0 +1,41 @@ +# Generated by running: +# build/print_python_deps.py --root build/android/gyp --output build/android/gyp/jinja_template.pydeps build/android/gyp/jinja_template.py +../../../third_party/catapult/devil/devil/__init__.py +../../../third_party/catapult/devil/devil/android/__init__.py +../../../third_party/catapult/devil/devil/android/constants/__init__.py +../../../third_party/catapult/devil/devil/android/constants/chrome.py +../../../third_party/catapult/devil/devil/android/sdk/__init__.py +../../../third_party/catapult/devil/devil/android/sdk/keyevent.py +../../../third_party/catapult/devil/devil/android/sdk/version_codes.py +../../../third_party/catapult/devil/devil/constants/__init__.py +../../../third_party/catapult/devil/devil/constants/exit_codes.py +../../../third_party/jinja2/__init__.py +../../../third_party/jinja2/_compat.py +../../../third_party/jinja2/bccache.py +../../../third_party/jinja2/compiler.py +../../../third_party/jinja2/defaults.py +../../../third_party/jinja2/environment.py +../../../third_party/jinja2/exceptions.py +../../../third_party/jinja2/filters.py +../../../third_party/jinja2/idtracking.py +../../../third_party/jinja2/lexer.py +../../../third_party/jinja2/loaders.py +../../../third_party/jinja2/nodes.py +../../../third_party/jinja2/optimizer.py +../../../third_party/jinja2/parser.py +../../../third_party/jinja2/runtime.py +../../../third_party/jinja2/tests.py +../../../third_party/jinja2/utils.py +../../../third_party/jinja2/visitor.py +../../../third_party/markupsafe/__init__.py +../../../third_party/markupsafe/_compat.py +../../../third_party/markupsafe/_native.py +../../gn_helpers.py +../pylib/__init__.py +../pylib/constants/__init__.py +../pylib/constants/host_paths.py +jinja_template.py +util/__init__.py +util/build_utils.py +util/md5_check.py +util/resource_utils.py diff --git a/chromium/build/android/gyp/lint.pydeps b/chromium/build/android/gyp/lint.pydeps new file mode 100644 index 00000000000..a8616e4d378 --- /dev/null +++ b/chromium/build/android/gyp/lint.pydeps @@ -0,0 +1,7 @@ +# Generated by running: +# build/print_python_deps.py --root build/android/gyp --output build/android/gyp/lint.pydeps build/android/gyp/lint.py +../../gn_helpers.py +lint.py +util/__init__.py +util/build_utils.py +util/md5_check.py diff --git a/chromium/build/android/gyp/main_dex_list.py b/chromium/build/android/gyp/main_dex_list.py index 9ccfea00ff9..24358590992 100755 --- a/chromium/build/android/gyp/main_dex_list.py +++ b/chromium/build/android/gyp/main_dex_list.py @@ -172,4 +172,3 @@ def _OnStaleMd5(proguard_cmd, main_dex_list_cmd, paths, main_dex_list_path, if __name__ == '__main__': sys.exit(main(sys.argv[1:])) - diff --git a/chromium/build/android/gyp/main_dex_list.pydeps b/chromium/build/android/gyp/main_dex_list.pydeps new file mode 100644 index 00000000000..8c482dfa523 --- /dev/null +++ b/chromium/build/android/gyp/main_dex_list.pydeps @@ -0,0 +1,8 @@ +# Generated by running: +# build/print_python_deps.py --root build/android/gyp --output build/android/gyp/main_dex_list.pydeps build/android/gyp/main_dex_list.py +../../gn_helpers.py +main_dex_list.py +util/__init__.py +util/build_utils.py +util/md5_check.py +util/proguard_util.py diff --git a/chromium/build/android/gyp/merge_jar_info_files.py b/chromium/build/android/gyp/merge_jar_info_files.py index 22a40a801bd..e6160f68469 100755 --- a/chromium/build/android/gyp/merge_jar_info_files.py +++ b/chromium/build/android/gyp/merge_jar_info_files.py @@ -61,7 +61,7 @@ def _MergeInfoFiles(output, jar_paths): for path in zip_info.namelist(): fully_qualified_name = _FullJavaNameFromClassFilePath(path) if fully_qualified_name: - info_data[fully_qualified_name] = jar_path + info_data[fully_qualified_name] = '{}/{}'.format(jar_path, path) jar_info_utils.WriteJarInfoFile(output, info_data) diff --git a/chromium/build/android/gyp/merge_jar_info_files.pydeps b/chromium/build/android/gyp/merge_jar_info_files.pydeps new file mode 100644 index 00000000000..710091c42fa --- /dev/null +++ b/chromium/build/android/gyp/merge_jar_info_files.pydeps @@ -0,0 +1,8 @@ +# Generated by running: +# build/print_python_deps.py --root build/android/gyp --output build/android/gyp/merge_jar_info_files.pydeps build/android/gyp/merge_jar_info_files.py +../../gn_helpers.py +merge_jar_info_files.py +util/__init__.py +util/build_utils.py +util/jar_info_utils.py +util/md5_check.py diff --git a/chromium/build/android/gyp/merge_manifest.pydeps b/chromium/build/android/gyp/merge_manifest.pydeps new file mode 100644 index 00000000000..37901962ce3 --- /dev/null +++ b/chromium/build/android/gyp/merge_manifest.pydeps @@ -0,0 +1,7 @@ +# Generated by running: +# build/print_python_deps.py --root build/android/gyp --output build/android/gyp/merge_manifest.pydeps build/android/gyp/merge_manifest.py +../../gn_helpers.py +merge_manifest.py +util/__init__.py +util/build_utils.py +util/md5_check.py diff --git a/chromium/build/android/gyp/prepare_resources.py b/chromium/build/android/gyp/prepare_resources.py index 6237c7db58d..ae7f53d0c30 100755 --- a/chromium/build/android/gyp/prepare_resources.py +++ b/chromium/build/android/gyp/prepare_resources.py @@ -297,7 +297,8 @@ def main(args): input_paths=input_paths, input_strings=input_strings, output_paths=output_paths, - depfile_deps=depfile_deps) + depfile_deps=depfile_deps, + add_pydeps=False) if __name__ == '__main__': diff --git a/chromium/build/android/gyp/prepare_resources.pydeps b/chromium/build/android/gyp/prepare_resources.pydeps new file mode 100644 index 00000000000..0e9ccfbe5ed --- /dev/null +++ b/chromium/build/android/gyp/prepare_resources.pydeps @@ -0,0 +1,30 @@ +# Generated by running: +# build/print_python_deps.py --root build/android/gyp --output build/android/gyp/prepare_resources.pydeps build/android/gyp/prepare_resources.py +../../../third_party/jinja2/__init__.py +../../../third_party/jinja2/_compat.py +../../../third_party/jinja2/bccache.py +../../../third_party/jinja2/compiler.py +../../../third_party/jinja2/defaults.py +../../../third_party/jinja2/environment.py +../../../third_party/jinja2/exceptions.py +../../../third_party/jinja2/filters.py +../../../third_party/jinja2/idtracking.py +../../../third_party/jinja2/lexer.py +../../../third_party/jinja2/loaders.py +../../../third_party/jinja2/nodes.py +../../../third_party/jinja2/optimizer.py +../../../third_party/jinja2/parser.py +../../../third_party/jinja2/runtime.py +../../../third_party/jinja2/tests.py +../../../third_party/jinja2/utils.py +../../../third_party/jinja2/visitor.py +../../../third_party/markupsafe/__init__.py +../../../third_party/markupsafe/_compat.py +../../../third_party/markupsafe/_native.py +../../gn_helpers.py +generate_v14_compatible_resources.py +prepare_resources.py +util/__init__.py +util/build_utils.py +util/md5_check.py +util/resource_utils.py diff --git a/chromium/build/android/gyp/proguard.py b/chromium/build/android/gyp/proguard.py index 5a61968c85c..90a461ac365 100755 --- a/chromium/build/android/gyp/proguard.py +++ b/chromium/build/android/gyp/proguard.py @@ -35,13 +35,16 @@ def _RemoveMethodMappings(orig_path, out_fd): for line in in_fd: if line[:1] != ' ': out_fd.write(line) + out_fd.flush() def _ParseOptions(args): parser = optparse.OptionParser() build_utils.AddDepfileOption(parser) parser.add_option('--proguard-path', - help='Path to the proguard executable.') + help='Path to the proguard.jar to use.') + parser.add_option('--r8-path', + help='Path to the R8.jar to use.') parser.add_option('--input-paths', help='Paths to the .jar files proguard should run on.') parser.add_option('--output-path', help='Path to the generated .jar file.') @@ -53,9 +56,6 @@ def _ParseOptions(args): 'included by --proguard-configs, but that should ' 'not actually be included.') parser.add_option('--mapping', help='Path to proguard mapping to apply.') - parser.add_option('--is-test', action='store_true', - help='If true, extra proguard options for instrumentation tests will be ' - 'added.') parser.add_option('--classpath', action='append', help='Classpath for proguard.') parser.add_option('--enable-dangerous-optimizations', action='store_true', @@ -82,6 +82,29 @@ def _ParseOptions(args): return options +def _CreateR8Command(options): + # TODO: R8 needs -applymapping equivalent. + cmd = [ + 'java', '-jar', options.r8_path, + '--no-desugaring', + '--classfile', + '--output', options.output_path, + '--pg-map-output', options.output_path + '.mapping', + ] + + classpath = [ + p for p in set(options.classpath) if p not in options.input_paths + ] + for lib in classpath: + cmd += ['--lib', lib] + + for config_file in options.proguard_configs: + cmd += ['--pg-conf', config_file] + + cmd += options.input_paths + return cmd + + def main(args): args = build_utils.ExpandFileArgs(args) options = _ParseOptions(args) @@ -92,36 +115,47 @@ def main(args): proguard.config_exclusions(options.proguard_config_exclusions) proguard.outjar(options.output_path) - classpath = list(set(options.classpath)) + # If a jar is part of input no need to include it as library jar. + classpath = [ + p for p in set(options.classpath) if p not in options.input_paths + ] proguard.libraryjars(classpath) proguard.verbose(options.verbose) if not options.enable_dangerous_optimizations: proguard.disable_optimizations(_DANGEROUS_OPTIMIZATIONS) - # Do not consider the temp file as an input since its name is random. - input_paths = proguard.GetInputs() - - with tempfile.NamedTemporaryFile() as f: - if options.mapping: - input_paths.append(options.mapping) - # Maintain only class name mappings in the .mapping file in order to work - # around what appears to be a ProGuard bug in -applymapping: - # method 'int closed()' is not being kept as 'a', but remapped to 'c' - _RemoveMethodMappings(options.mapping, f) - proguard.mapping(f.name) - - input_strings = proguard.build() - if f.name in input_strings: - input_strings[input_strings.index(f.name)] = '$M' - - build_utils.CallAndWriteDepfileIfStale( - proguard.CheckOutput, - options, - input_paths=input_paths, - input_strings=input_strings, - output_paths=proguard.GetOutputs(), - depfile_deps=proguard.GetDepfileDeps(), - add_pydeps=False) + # TODO(agrieve): Remove proguard usages. + if options.r8_path: + cmd = _CreateR8Command(options) + build_utils.CheckOutput(cmd) + build_utils.WriteDepfile(options.depfile, options.output_path, + inputs=proguard.GetDepfileDeps(), + add_pydeps=False) + else: + # Do not consider the temp file as an input since its name is random. + input_paths = proguard.GetInputs() + + with tempfile.NamedTemporaryFile() as f: + if options.mapping: + input_paths.append(options.mapping) + # Maintain only class name mappings in the .mapping file in order to + # work around what appears to be a ProGuard bug in -applymapping: + # method 'int close()' is not being kept as 'a', but remapped to 'c' + _RemoveMethodMappings(options.mapping, f) + proguard.mapping(f.name) + + input_strings = proguard.build() + if f.name in input_strings: + input_strings[input_strings.index(f.name)] = '$M' + + build_utils.CallAndWriteDepfileIfStale( + proguard.CheckOutput, + options, + input_paths=input_paths, + input_strings=input_strings, + output_paths=proguard.GetOutputs(), + depfile_deps=proguard.GetDepfileDeps(), + add_pydeps=False) if __name__ == '__main__': diff --git a/chromium/build/android/gyp/proguard.pydeps b/chromium/build/android/gyp/proguard.pydeps new file mode 100644 index 00000000000..6db3d7d0f78 --- /dev/null +++ b/chromium/build/android/gyp/proguard.pydeps @@ -0,0 +1,8 @@ +# Generated by running: +# build/print_python_deps.py --root build/android/gyp --output build/android/gyp/proguard.pydeps build/android/gyp/proguard.py +../../gn_helpers.py +proguard.py +util/__init__.py +util/build_utils.py +util/md5_check.py +util/proguard_util.py diff --git a/chromium/build/android/gyp/util/__init__.py b/chromium/build/android/gyp/util/__init__.py index 727e987e6b6..96196cffb27 100644 --- a/chromium/build/android/gyp/util/__init__.py +++ b/chromium/build/android/gyp/util/__init__.py @@ -1,4 +1,3 @@ # Copyright (c) 2012 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. - diff --git a/chromium/build/android/gyp/util/proguard_util.py b/chromium/build/android/gyp/util/proguard_util.py index fd657e2aa71..8a6e785c891 100644 --- a/chromium/build/android/gyp/util/proguard_util.py +++ b/chromium/build/android/gyp/util/proguard_util.py @@ -165,7 +165,7 @@ class ProguardCmdBuilder(object): # Quite useful for auditing proguard flags. for config in sorted(self._configs): out.write('#' * 80 + '\n') - out.write(config + '\n') + out.write('# ' + config + '\n') out.write('#' * 80 + '\n') with open(config) as config_file: contents = config_file.read().rstrip() @@ -175,9 +175,9 @@ class ProguardCmdBuilder(object): out.write(contents) out.write('\n\n') out.write('#' * 80 + '\n') - out.write('Command-line\n') + out.write('# Command-line\n') out.write('#' * 80 + '\n') - out.write(' '.join(cmd) + '\n') + out.write('# ' + ' '.join(cmd) + '\n') def CheckOutput(self): cmd = self.build() diff --git a/chromium/build/android/gyp/write_build_config.py b/chromium/build/android/gyp/write_build_config.py index 734921c3334..a2387da778c 100755 --- a/chromium/build/android/gyp/write_build_config.py +++ b/chromium/build/android/gyp/write_build_config.py @@ -419,15 +419,15 @@ The list of all `deps_info['java_sources_file']` entries for all library dependencies for this APK. Note: this is a list of files, where each file contains a list of Java source files. This is used for JNI registration. -* `deps_info['proguard_all_configs"]`: +* `deps_info['proguard_all_configs']`: The collection of all 'deps_info['proguard_configs']` values from this target and all its dependencies. -* `deps_info['proguard_all_extra_jars"]`: +* `deps_info['proguard_classpath_jars']`: The collection of all 'deps_info['extra_classpath_jars']` values from all dependencies. -* `deps_info['proguard_under_test_mapping"]`: +* `deps_info['proguard_under_test_mapping']`: Applicable to apks with proguard enabled that have an apk_under_test. This is the path to the apk_under_test's output proguard .mapping file. @@ -495,6 +495,10 @@ The classpath listing the jars used for annotation processors. I.e. sent as The list of annotation processor main classes. I.e. sent as `-processor' when invoking `javac`. +## <a name="android_app_bundle">Target type `android_app_bundle`</a>: + +This type corresponds to an Android app bundle (`.aab` file). + --------------- END_MARKDOWN --------------------------------------------------- """ @@ -508,8 +512,8 @@ import xml.dom.minidom from util import build_utils # Types that should never be used as a dependency of another build config. -_ROOT_TYPES = ('android_apk', 'java_binary', - 'java_annotation_processor', 'junit_binary', 'resource_rewriter') +_ROOT_TYPES = ('android_apk', 'java_binary', 'java_annotation_processor', + 'junit_binary', 'resource_rewriter', 'android_app_bundle') # Types that should not allow code deps to pass through. _RESOURCE_TYPES = ('android_assets', 'android_resources', 'system_java_library') @@ -825,15 +829,22 @@ def main(argv): parser.add_option('--shared-libraries-runtime-deps', help='Path to file containing runtime deps for shared ' 'libraries.') + parser.add_option('--native-libs', + action='append', + help='GN-list of native libraries for primary ' + 'android-abi. Can be specified multiple times.', + default=[]) parser.add_option('--secondary-abi-shared-libraries-runtime-deps', help='Path to file containing runtime deps for secondary ' 'abi shared libraries.') + parser.add_option('--secondary-native-libs', + action='append', + help='GN-list of native libraries for secondary ' + 'android-abi. Can be specified multiple times.', + default=[]) parser.add_option('--uncompress-shared-libraries', default=False, action='store_true', help='Whether to store native libraries uncompressed') - parser.add_option('--extra-shared-libraries', - help='GN-list of paths to extra native libraries stored ' - 'in the APK.') # apk options parser.add_option('--apk-path', help='Path to the target\'s apk output.') parser.add_option('--incremental-apk-path', @@ -846,7 +857,7 @@ def main(argv): help='Path to the build config of the tested apk (for an instrumentation ' 'test apk).') parser.add_option('--proguard-enabled', action='store_true', - help='Whether proguard is enabled for this apk.') + help='Whether proguard is enabled for this apk or bundle module.') parser.add_option('--proguard-configs', help='GN-list of proguard flag files to use in final apk.') parser.add_option('--proguard-output-jar-path', @@ -883,6 +894,8 @@ def main(argv): required_options_map = { 'android_apk': ['build_config', 'dex_path', 'final_dex_path'] + \ jar_path_options, + 'android_app_bundle_module': ['build_config', 'dex_path', + 'final_dex_path'] + jar_path_options, 'android_assets': ['build_config'], 'android_resources': ['build_config', 'resources_zip'], 'dist_aar': ['build_config'], @@ -894,6 +907,7 @@ def main(argv): 'junit_binary': ['build_config'], 'resource_rewriter': ['build_config'], 'system_java_library': ['build_config'], + 'android_app_bundle': ['build_config'], } required_options = required_options_map.get(options.type) if not required_options: @@ -902,14 +916,18 @@ def main(argv): build_utils.CheckOptions(options, parser, required_options) if options.apk_proto_resources: - if options.type != 'android_apk': + if options.type != 'android_app_bundle_module': raise Exception('--apk-proto-resources can only be used with ' - '--type=android_apk') + '--type=android_app_bundle_module') + + is_apk_or_module_target = options.type in ('android_apk', + 'android_app_bundle_module') if options.uncompress_shared_libraries: - if options.type != 'android_apk': + if not is_apk_or_module_target: raise Exception('--uncompressed-shared-libraries can only be used ' - 'with --type=android_apk') + 'with --type=android_apk or ' + '--type=android_app_bundle_module') if options.jar_path and options.supports_android and not options.dex_path: raise Exception('java_library that supports Android requires a dex path.') @@ -925,7 +943,7 @@ def main(argv): is_java_target = options.type in ( 'java_binary', 'junit_binary', 'java_annotation_processor', 'java_library', 'android_apk', 'dist_aar', 'dist_jar', - 'system_java_library') + 'system_java_library', 'android_app_bundle_module') deps = _DepsFromPaths( build_utils.ParseGnList(options.deps_configs), options.type) @@ -996,7 +1014,10 @@ def main(argv): else: gradle['dependent_java_projects'].append(c['path']) - if options.type == 'android_apk': + # TODO(tiborg): Remove creation of JNI info for type group and java_library + # once we can generate the JNI registration based on APK / module targets as + # opposed to groups and libraries. + if is_apk_or_module_target or options.type in ('group', 'java_library'): config['jni'] = {} all_java_sources = [c['java_sources_file'] for c in all_library_deps if 'java_sources_file' in c] @@ -1115,7 +1136,7 @@ def main(argv): if options.type in ( 'android_resources', 'android_apk', 'junit_binary', 'resource_rewriter', - 'dist_aar'): + 'dist_aar', 'android_app_bundle_module'): config['resources'] = {} config['resources']['dependency_zips'] = [ c['resources_zip'] for c in all_resources_deps] @@ -1130,7 +1151,7 @@ def main(argv): config['resources']['extra_package_names'] = extra_package_names config['resources']['extra_r_text_files'] = extra_r_text_files - if options.type == 'android_apk': + if is_apk_or_module_target: deps_dex_files = [c['dex_path'] for c in all_library_deps] if is_java_target: @@ -1149,48 +1170,95 @@ def main(argv): # The classpath used for bytecode-rewritting. javac_full_classpath = [ c['unprocessed_jar_path'] for c in all_library_deps] - # The classpath to use to run this target (or as an input to ProGuard). - java_full_classpath = [] - if options.jar_path: - java_full_classpath.append(options.jar_path) - java_full_classpath.extend(c['jar_path'] for c in all_library_deps) # Deps to add to the compile-time classpath (but not the runtime classpath). # TODO(agrieve): Might be less confusing to fold these into bootclasspath. - extra_jars = [c['unprocessed_jar_path'] + javac_extra_jars = [c['unprocessed_jar_path'] + for c in classpath_deps.Direct('java_library')] + extra_jars = [c['jar_path'] for c in classpath_deps.Direct('java_library')] if options.extra_classpath_jars: # These are .jars to add to javac classpath but not to runtime classpath. + javac_extra_jars.extend( + build_utils.ParseGnList(options.extra_classpath_jars)) extra_jars.extend(build_utils.ParseGnList(options.extra_classpath_jars)) - extra_jars = [p for p in extra_jars if p not in javac_classpath] - javac_classpath.extend(extra_jars) - javac_interface_classpath.extend(extra_jars) - javac_full_interface_classpath.extend( - p for p in extra_jars if p not in javac_full_classpath) - javac_full_classpath.extend( - p for p in extra_jars if p not in javac_full_classpath) if extra_jars: deps_info['extra_classpath_jars'] = extra_jars + javac_extra_jars = [p for p in javac_extra_jars if p not in javac_classpath] + javac_classpath.extend(javac_extra_jars) + javac_interface_classpath.extend(javac_extra_jars) + javac_full_interface_classpath.extend( + p for p in javac_extra_jars if p not in javac_full_classpath) + javac_full_classpath.extend( + p for p in javac_extra_jars if p not in javac_full_classpath) + + if is_java_target or options.type == 'android_app_bundle': + # The classpath to use to run this target (or as an input to ProGuard). + java_full_classpath = [] + if is_java_target and options.jar_path: + java_full_classpath.append(options.jar_path) + java_full_classpath.extend(c['jar_path'] for c in all_library_deps) + if options.type == 'android_app_bundle': + for d in deps.Direct('android_app_bundle_module'): + java_full_classpath.extend( + c for c in d.get('java_runtime_classpath', []) + if c not in java_full_classpath) + + system_jars = [c['jar_path'] for c in system_library_deps] + system_interface_jars = [c['interface_jar_path'] for c in system_library_deps] + if system_library_deps: + config['android'] = {} + config['android']['sdk_interface_jars'] = system_interface_jars + config['android']['sdk_jars'] = system_jars + gradle['bootclasspath'] = system_jars + if options.proguard_configs: deps_info['proguard_configs'] = ( build_utils.ParseGnList(options.proguard_configs)) - if options.type in ('android_apk', 'dist_aar', 'dist_jar'): + if options.type in ('android_apk', 'dist_aar', + 'dist_jar', 'android_app_bundle_module', 'android_app_bundle'): all_configs = deps_info.get('proguard_configs', []) - extra_jars = [] + extra_jars = list() for c in all_library_deps: all_configs.extend( p for p in c.get('proguard_configs', []) if p not in all_configs) extra_jars.extend( p for p in c.get('extra_classpath_jars', []) if p not in extra_jars) + if options.type == 'android_app_bundle': + for c in deps.Direct('android_app_bundle_module'): + all_configs.extend( + p for p in c.get('proguard_configs', []) if p not in all_configs) deps_info['proguard_all_configs'] = all_configs - deps_info['proguard_all_extra_jars'] = extra_jars - deps_info['proguard_enabled'] = options.proguard_enabled - if options.proguard_output_jar_path: - deps_info['proguard_output_jar_path'] = options.proguard_output_jar_path + if options.type == 'android_app_bundle': + for d in deps.Direct('android_app_bundle_module'): + extra_jars.extend( + c for c in d.get('proguard_classpath_jars', []) + if c not in extra_jars) + deps_info['proguard_classpath_jars'] = extra_jars + + if options.type == 'android_app_bundle': + deps_proguard_enabled = [] + deps_proguard_disabled = [] + for d in deps.Direct('android_app_bundle_module'): + if not d['java_runtime_classpath']: + # We don't care about modules that have no Java code for proguarding. + continue + if d['proguard_enabled']: + deps_proguard_enabled.append(d['name']) + else: + deps_proguard_disabled.append(d['name']) + if deps_proguard_enabled and deps_proguard_disabled: + raise Exception('Deps %s have proguard enabled while deps %s have ' + 'proguard disabled' % (deps_proguard_enabled, + deps_proguard_disabled)) + else: + deps_info['proguard_enabled'] = bool(options.proguard_enabled) + if options.proguard_output_jar_path: + deps_info['proguard_output_jar_path'] = options.proguard_output_jar_path # The java code for an instrumentation test apk is assembled differently for # ProGuard vs. non-ProGuard. @@ -1215,7 +1283,7 @@ def main(argv): # Mutating lists, so no need to explicitly re-assign to dict. all_configs.extend(p for p in tested_apk_config['proguard_all_configs'] if p not in all_configs) - extra_jars.extend(p for p in tested_apk_config['proguard_all_extra_jars'] + extra_jars.extend(p for p in tested_apk_config['proguard_classpath_jars'] if p not in extra_jars) tested_apk_config = GetDepConfig(options.tested_apk_config) deps_info['proguard_under_test_mapping'] = ( @@ -1258,20 +1326,12 @@ def main(argv): p for p in deps_dex_files if not p in tested_apk_deps_dex_files] # Dependencies for the final dex file of an apk. - if options.type == 'android_apk': + if is_apk_or_module_target: config['final_dex'] = {} dex_config = config['final_dex'] dex_config['dependency_dex_files'] = deps_dex_files dex_config['path'] = options.final_dex_path - system_jars = [c['jar_path'] for c in system_library_deps] - system_interface_jars = [c['interface_jar_path'] for c in system_library_deps] - if system_library_deps: - config['android'] = {} - config['android']['sdk_interface_jars'] = system_interface_jars - config['android']['sdk_jars'] = system_jars - gradle['bootclasspath'] = system_jars - if is_java_target: config['javac']['bootclasspath'] = system_jars config['javac']['classpath'] = javac_classpath @@ -1285,9 +1345,9 @@ def main(argv): deps_info['javac_full_classpath'] = javac_full_classpath deps_info['javac_full_interface_classpath'] = javac_full_interface_classpath - if options.type in ( - 'android_apk', 'dist_jar', 'java_binary', 'junit_binary'): - deps_info['java_runtime_classpath'] = java_full_classpath + if options.type in ('android_apk', 'dist_jar', 'java_binary', 'junit_binary', + 'android_app_bundle_module', 'android_app_bundle'): + deps_info['java_runtime_classpath'] = java_full_classpath if options.type in ('android_apk', 'dist_jar'): all_interface_jars = [] @@ -1299,7 +1359,7 @@ def main(argv): 'all_interface_jars': all_interface_jars, } - if options.type == 'android_apk': + if is_apk_or_module_target: manifest = AndroidManifest(options.android_manifest) deps_info['package_name'] = manifest.GetPackageName() if not options.tested_apk_config and manifest.GetInstrumentationElements(): @@ -1323,9 +1383,12 @@ def main(argv): secondary_abi_runtime_deps_files) secondary_abi_java_libraries_list = _CreateJavaLibrariesList( secondary_abi_library_paths) + for gn_list in options.secondary_native_libs: + secondary_abi_library_paths.extend(build_utils.ParseGnList(gn_list)) - extra_shared_libraries = build_utils.ParseGnList( - options.extra_shared_libraries) + extra_shared_libraries = [] + for gn_list in options.native_libs: + extra_shared_libraries.extend(build_utils.ParseGnList(gn_list)) all_inputs.extend(runtime_deps_files) config['native'] = { diff --git a/chromium/build/android/gyp/write_build_config.pydeps b/chromium/build/android/gyp/write_build_config.pydeps new file mode 100644 index 00000000000..e317c47cae4 --- /dev/null +++ b/chromium/build/android/gyp/write_build_config.pydeps @@ -0,0 +1,7 @@ +# Generated by running: +# build/print_python_deps.py --root build/android/gyp --output build/android/gyp/write_build_config.pydeps build/android/gyp/write_build_config.py +../../gn_helpers.py +util/__init__.py +util/build_utils.py +util/md5_check.py +write_build_config.py diff --git a/chromium/build/android/gyp/write_ordered_libraries.py b/chromium/build/android/gyp/write_ordered_libraries.py index e3d87c16bb0..92c82bb4c8c 100755 --- a/chromium/build/android/gyp/write_ordered_libraries.py +++ b/chromium/build/android/gyp/write_ordered_libraries.py @@ -109,10 +109,9 @@ def main(): only_if_changed=True) if options.depfile: - build_utils.WriteDepfile(options.depfile, options.output, libraries) + build_utils.WriteDepfile(options.depfile, options.output, libraries, + add_pydeps=False) if __name__ == '__main__': sys.exit(main()) - - diff --git a/chromium/build/android/gyp/write_ordered_libraries.pydeps b/chromium/build/android/gyp/write_ordered_libraries.pydeps new file mode 100644 index 00000000000..c2ed1fee36e --- /dev/null +++ b/chromium/build/android/gyp/write_ordered_libraries.pydeps @@ -0,0 +1,7 @@ +# Generated by running: +# build/print_python_deps.py --root build/android/gyp --output build/android/gyp/write_ordered_libraries.pydeps build/android/gyp/write_ordered_libraries.py +../../gn_helpers.py +util/__init__.py +util/build_utils.py +util/md5_check.py +write_ordered_libraries.py diff --git a/chromium/build/android/incremental_install/__init__.py b/chromium/build/android/incremental_install/__init__.py index 1aaf0e179ff..50b23dff631 100644 --- a/chromium/build/android/incremental_install/__init__.py +++ b/chromium/build/android/incremental_install/__init__.py @@ -1,4 +1,3 @@ # Copyright 2015 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. - diff --git a/chromium/build/android/incremental_install/generate_android_manifest.pydeps b/chromium/build/android/incremental_install/generate_android_manifest.pydeps new file mode 100644 index 00000000000..de92fafa9bb --- /dev/null +++ b/chromium/build/android/incremental_install/generate_android_manifest.pydeps @@ -0,0 +1,7 @@ +# Generated by running: +# build/print_python_deps.py --root build/android/incremental_install --output build/android/incremental_install/generate_android_manifest.pydeps build/android/incremental_install/generate_android_manifest.py +../../gn_helpers.py +../gyp/util/__init__.py +../gyp/util/build_utils.py +../gyp/util/md5_check.py +generate_android_manifest.py diff --git a/chromium/build/android/incremental_install/write_installer_json.py b/chromium/build/android/incremental_install/write_installer_json.py index b7e4e773adb..75bd6d1aab7 100755 --- a/chromium/build/android/incremental_install/write_installer_json.py +++ b/chromium/build/android/incremental_install/write_installer_json.py @@ -19,7 +19,6 @@ from util import build_utils def _ParseArgs(args): args = build_utils.ExpandFileArgs(args) parser = argparse.ArgumentParser() - build_utils.AddDepfileOption(parser) parser.add_argument('--output-path', help='Output path for .json file.', required=True) @@ -76,9 +75,6 @@ def main(args): with build_utils.AtomicOutput(options.output_path) as f: json.dump(data, f, indent=2, sort_keys=True) - if options.depfile: - build_utils.WriteDepfile(options.depfile, options.output_path) - if __name__ == '__main__': main(sys.argv[1:]) diff --git a/chromium/build/android/incremental_install/write_installer_json.pydeps b/chromium/build/android/incremental_install/write_installer_json.pydeps new file mode 100644 index 00000000000..851e6c5bd1b --- /dev/null +++ b/chromium/build/android/incremental_install/write_installer_json.pydeps @@ -0,0 +1,7 @@ +# Generated by running: +# build/print_python_deps.py --root build/android/incremental_install --output build/android/incremental_install/write_installer_json.pydeps build/android/incremental_install/write_installer_json.py +../../gn_helpers.py +../gyp/util/__init__.py +../gyp/util/build_utils.py +../gyp/util/md5_check.py +write_installer_json.py diff --git a/chromium/build/android/lighttpd_server.py b/chromium/build/android/lighttpd_server.py index 89a828ab54a..c77d740d66a 100755 --- a/chromium/build/android/lighttpd_server.py +++ b/chromium/build/android/lighttpd_server.py @@ -104,7 +104,7 @@ class LighttpdServer(object): break self.process.close() - if self.fixed_port or not 'in use' in server_error: + if self.fixed_port or 'in use' not in server_error: print 'Client error:', client_error print 'Server error:', server_error return False diff --git a/chromium/build/android/lint/suppressions.xml b/chromium/build/android/lint/suppressions.xml index 6e5562a5a70..c4b132f5ea3 100644 --- a/chromium/build/android/lint/suppressions.xml +++ b/chromium/build/android/lint/suppressions.xml @@ -333,10 +333,6 @@ Still reading? <!-- 2 resource sets used by clank widgets for each channel --> <ignore regexp="The resource `R.string.bookmark_widget_title.*` appears to be unused"/> <ignore regexp="The resource `R.string.search_widget_title.*` appears to be unused"/> - <!-- 3 Download location strings checked in before M68 deadline --> - <!-- TODO(xingliu): Remove these. see crbug.com/840464. --> - <ignore regexp="The resource `R.string.download_location_not_enough_space_sd_card_full` appears to be unused"/> - <ignore regexp="The resource `R.string.download_location_notification_retry*` appears to be unused"/> <!-- Endnote: Please specify number of suppressions when adding more --> </issue> <issue id="UseCompoundDrawables"> diff --git a/chromium/build/android/method_count.py b/chromium/build/android/method_count.py index 68823e15482..490887adbca 100755 --- a/chromium/build/android/method_count.py +++ b/chromium/build/android/method_count.py @@ -114,4 +114,3 @@ def main(): if __name__ == '__main__': sys.exit(main()) - diff --git a/chromium/build/android/pylib/android/__init__.py b/chromium/build/android/pylib/android/__init__.py index 7a90b532c39..a67c3501b20 100644 --- a/chromium/build/android/pylib/android/__init__.py +++ b/chromium/build/android/pylib/android/__init__.py @@ -1,4 +1,3 @@ # Copyright (c) 2016 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. - diff --git a/chromium/build/android/pylib/base/__init__.py b/chromium/build/android/pylib/base/__init__.py index 727e987e6b6..96196cffb27 100644 --- a/chromium/build/android/pylib/base/__init__.py +++ b/chromium/build/android/pylib/base/__init__.py @@ -1,4 +1,3 @@ # Copyright (c) 2012 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. - diff --git a/chromium/build/android/pylib/base/base_test_result.py b/chromium/build/android/pylib/base/base_test_result.py index af9f68f8e53..a5535322965 100644 --- a/chromium/build/android/pylib/base/base_test_result.py +++ b/chromium/build/android/pylib/base/base_test_result.py @@ -260,4 +260,3 @@ class TestRunResults(object): def DidRunPass(self): """Return whether the test run was successful.""" return not self.GetNotPass() - self.GetSkip() - diff --git a/chromium/build/android/pylib/base/test_exception.py b/chromium/build/android/pylib/base/test_exception.py index f00f0d0ee85..c98d2cb73eb 100644 --- a/chromium/build/android/pylib/base/test_exception.py +++ b/chromium/build/android/pylib/base/test_exception.py @@ -6,4 +6,3 @@ class TestException(Exception): """Base class for exceptions thrown by the test runner.""" pass - diff --git a/chromium/build/android/pylib/base/test_instance.py b/chromium/build/android/pylib/base/test_instance.py index cdf678f2d28..f0ff83019bc 100644 --- a/chromium/build/android/pylib/base/test_instance.py +++ b/chromium/build/android/pylib/base/test_instance.py @@ -32,4 +32,3 @@ class TestInstance(object): def __exit__(self, _exc_type, _exc_val, _exc_tb): self.TearDown() - diff --git a/chromium/build/android/pylib/base/test_run.py b/chromium/build/android/pylib/base/test_run.py index 9b16f890f69..59e595d926b 100644 --- a/chromium/build/android/pylib/base/test_run.py +++ b/chromium/build/android/pylib/base/test_run.py @@ -41,4 +41,3 @@ class TestRun(object): def __exit__(self, exc_type, exc_val, exc_tb): self.TearDown() - diff --git a/chromium/build/android/pylib/base/test_run_factory.py b/chromium/build/android/pylib/base/test_run_factory.py index 1a2872819d9..1f63a059c98 100644 --- a/chromium/build/android/pylib/base/test_run_factory.py +++ b/chromium/build/android/pylib/base/test_run_factory.py @@ -54,4 +54,3 @@ def CreateTestRun(args, env, test_instance, error_func): error_func('Unable to create test run for %s tests in %s environment' % (str(test_instance), str(env))) - diff --git a/chromium/build/android/pylib/base/test_server.py b/chromium/build/android/pylib/base/test_server.py index 085a51e9bae..763e1212c36 100644 --- a/chromium/build/android/pylib/base/test_server.py +++ b/chromium/build/android/pylib/base/test_server.py @@ -16,4 +16,3 @@ class TestServer(object): def TearDown(self): raise NotImplementedError - diff --git a/chromium/build/android/pylib/constants/__init__.py b/chromium/build/android/pylib/constants/__init__.py index 2101b9c1ca1..cf6ca113390 100644 --- a/chromium/build/android/pylib/constants/__init__.py +++ b/chromium/build/android/pylib/constants/__init__.py @@ -104,8 +104,6 @@ ANDROID_SDK_TOOLS = os.path.join(ANDROID_SDK_ROOT, ANDROID_NDK_ROOT = os.path.join(DIR_SOURCE_ROOT, 'third_party', 'android_ndk') -PROGUARD_ROOT = os.path.join(DIR_SOURCE_ROOT, 'third_party', 'proguard') - BAD_DEVICES_JSON = os.path.join(DIR_SOURCE_ROOT, os.environ.get('CHROMIUM_OUT_DIR', 'out'), 'bad_devices.json') diff --git a/chromium/build/android/pylib/gtest/__init__.py b/chromium/build/android/pylib/gtest/__init__.py index 727e987e6b6..96196cffb27 100644 --- a/chromium/build/android/pylib/gtest/__init__.py +++ b/chromium/build/android/pylib/gtest/__init__.py @@ -1,4 +1,3 @@ # Copyright (c) 2012 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. - diff --git a/chromium/build/android/pylib/gtest/gtest_test_instance.py b/chromium/build/android/pylib/gtest/gtest_test_instance.py index d93edc65070..cd8ddbc3921 100644 --- a/chromium/build/android/pylib/gtest/gtest_test_instance.py +++ b/chromium/build/android/pylib/gtest/gtest_test_instance.py @@ -533,7 +533,9 @@ class GtestTestInstance(test_instance.TestInstance): disabled_filter_items = [] if disabled_prefixes is None: - disabled_prefixes = ['FAILS_', 'PRE_', 'MANUAL_'] + disabled_prefixes = ['FAILS_', 'PRE_'] + if '--run-manual' not in self._flags: + disabled_prefixes += ['MANUAL_'] if not self._run_disabled: disabled_prefixes += ['DISABLED_', 'FLAKY_'] @@ -555,4 +557,3 @@ class GtestTestInstance(test_instance.TestInstance): def TearDown(self): """Do nothing.""" pass - diff --git a/chromium/build/android/pylib/gtest/gtest_test_instance_test.py b/chromium/build/android/pylib/gtest/gtest_test_instance_test.py index 3466924a0d9..a34ab84c7dd 100755 --- a/chromium/build/android/pylib/gtest/gtest_test_instance_test.py +++ b/chromium/build/android/pylib/gtest/gtest_test_instance_test.py @@ -260,4 +260,3 @@ class GtestTestInstanceTests(unittest.TestCase): if __name__ == '__main__': unittest.main(verbosity=2) - diff --git a/chromium/build/android/pylib/instrumentation/__init__.py b/chromium/build/android/pylib/instrumentation/__init__.py index 727e987e6b6..96196cffb27 100644 --- a/chromium/build/android/pylib/instrumentation/__init__.py +++ b/chromium/build/android/pylib/instrumentation/__init__.py @@ -1,4 +1,3 @@ # Copyright (c) 2012 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. - diff --git a/chromium/build/android/pylib/instrumentation/instrumentation_test_instance.py b/chromium/build/android/pylib/instrumentation/instrumentation_test_instance.py index 452b259849c..809fce60105 100644 --- a/chromium/build/android/pylib/instrumentation/instrumentation_test_instance.py +++ b/chromium/build/android/pylib/instrumentation/instrumentation_test_instance.py @@ -568,15 +568,15 @@ class InstrumentationTestInstance(test_instance.TestInstance): self._test_package = self._test_apk.GetPackageName() all_instrumentations = self._test_apk.GetAllInstrumentations() all_junit3_runner_classes = [ - x for x in all_instrumentations if ('0xffffffff' not in x.get( - 'chromium-junit4', ''))] - all_junit4_test_runner_classes = [ x for x in all_instrumentations if ('0xffffffff' in x.get( - 'chromium-junit4', ''))] + 'chromium-junit3', ''))] + all_junit4_runner_classes = [ + x for x in all_instrumentations if ('0xffffffff' not in x.get( + 'chromium-junit3', ''))] if len(all_junit3_runner_classes) > 1: logging.warning('This test apk has more than one JUnit3 instrumentation') - if len(all_junit4_test_runner_classes) > 1: + if len(all_junit4_runner_classes) > 1: logging.warning('This test apk has more than one JUnit4 instrumentation') self._junit3_runner_class = ( @@ -584,8 +584,8 @@ class InstrumentationTestInstance(test_instance.TestInstance): if all_junit3_runner_classes else self.test_apk.GetInstrumentationName()) self._junit4_runner_class = ( - all_junit4_test_runner_classes[0]['android:name'] - if all_junit4_test_runner_classes else None) + all_junit4_runner_classes[0]['android:name'] + if all_junit4_runner_classes else None) if self._junit4_runner_class: if self._test_apk_incremental_install_json: diff --git a/chromium/build/android/pylib/junit/__init__.py b/chromium/build/android/pylib/junit/__init__.py index 5cac026153c..4d6aabb953d 100644 --- a/chromium/build/android/pylib/junit/__init__.py +++ b/chromium/build/android/pylib/junit/__init__.py @@ -1,4 +1,3 @@ # Copyright 2014 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. - diff --git a/chromium/build/android/pylib/linker/__init__.py b/chromium/build/android/pylib/linker/__init__.py index af994371233..9228df89b0e 100644 --- a/chromium/build/android/pylib/linker/__init__.py +++ b/chromium/build/android/pylib/linker/__init__.py @@ -1,4 +1,3 @@ # Copyright 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. - diff --git a/chromium/build/android/pylib/linker/linker_test_instance.py b/chromium/build/android/pylib/linker/linker_test_instance.py index 1de3e17f1df..6ace7a3633c 100644 --- a/chromium/build/android/pylib/linker/linker_test_instance.py +++ b/chromium/build/android/pylib/linker/linker_test_instance.py @@ -48,4 +48,3 @@ class LinkerTestInstance(test_instance.TestInstance): def TestType(self): return 'linker' - diff --git a/chromium/build/android/pylib/local/device/local_device_gtest_run.py b/chromium/build/android/pylib/local/device/local_device_gtest_run.py index 21e9fe85121..47348834c99 100644 --- a/chromium/build/android/pylib/local/device/local_device_gtest_run.py +++ b/chromium/build/android/pylib/local/device/local_device_gtest_run.py @@ -152,6 +152,7 @@ class _ApkDelegate(object): extras[gtest_test_instance.EXTRA_SHARD_NANO_TIMEOUT] = int( kwargs['timeout'] * _SECONDS_TO_NANOS) + # pylint: disable=redefined-variable-type command_line_file = _NullContextManager() if flags: if len(flags) > _MAX_INLINE_FLAGS_LENGTH: @@ -169,6 +170,7 @@ class _ApkDelegate(object): extras[_EXTRA_TEST_LIST] = test_list_file.name else: extras[_EXTRA_TEST] = test[0] + # pylint: enable=redefined-variable-type stdout_file = device_temp_file.DeviceTempFile( device.adb, dir=device.GetExternalStoragePath(), suffix='.gtest_out') @@ -283,11 +285,13 @@ class LocalDeviceGtestRun(local_device_test_run.LocalDeviceTestRun): assert isinstance(test_instance, gtest_test_instance.GtestTestInstance) super(LocalDeviceGtestRun, self).__init__(env, test_instance) + # pylint: disable=redefined-variable-type if self._test_instance.apk: self._delegate = _ApkDelegate(self._test_instance, env.tool) elif self._test_instance.exe_dist_dir: self._delegate = _ExeDelegate(self, self._test_instance.exe_dist_dir, self._env.tool) + # pylint: enable=redefined-variable-type self._crashes = set() self._servers = collections.defaultdict(list) diff --git a/chromium/build/android/pylib/local/device/local_device_instrumentation_test_run.py b/chromium/build/android/pylib/local/device/local_device_instrumentation_test_run.py index 40b857d5fbf..de7ed933b5d 100644 --- a/chromium/build/android/pylib/local/device/local_device_instrumentation_test_run.py +++ b/chromium/build/android/pylib/local/device/local_device_instrumentation_test_run.py @@ -153,7 +153,11 @@ class LocalDeviceInstrumentationTestRun( self._replace_package_contextmanager = system_app.ReplaceSystemApp( dev, self._test_instance.replace_system_package.package, self._test_instance.replace_system_package.replacement_apk) + # Pylint is not smart enough to realize that this field has + # an __enter__ method, and will complain loudly. + # pylint: disable=no-member self._replace_package_contextmanager.__enter__() + # pylint: enable=no-member steps.append(replace_package) @@ -308,12 +312,15 @@ class LocalDeviceInstrumentationTestRun( valgrind_tools.SetChromeTimeoutScale(dev, None) if self._replace_package_contextmanager: + # See pylint-related commend above with __enter__() + # pylint: disable=no-member self._replace_package_contextmanager.__exit__(*sys.exc_info()) + # pylint: enable=no-member self._env.parallel_devices.pMap(individual_device_tear_down) def _CreateFlagChangerIfNeeded(self, device): - if not str(device) in self._flag_changers: + if str(device) not in self._flag_changers: self._flag_changers[str(device)] = flag_changer.FlagChanger( device, "test-cmdline-file") diff --git a/chromium/build/android/pylib/local/device/local_device_test_run.py b/chromium/build/android/pylib/local/device/local_device_test_run.py index 90e6b674cb0..00d715b3ade 100644 --- a/chromium/build/android/pylib/local/device/local_device_test_run.py +++ b/chromium/build/android/pylib/local/device/local_device_test_run.py @@ -220,7 +220,7 @@ class LocalDeviceTestRun(test_run.TestRun): if hash(self._GetUniqueTestName(t)) % total_shards == shard_index] def GetTool(self, device): - if not str(device) in self._tools: + if str(device) not in self._tools: self._tools[str(device)] = valgrind_tools.CreateTool( self._env.tool, device) return self._tools[str(device)] diff --git a/chromium/build/android/pylib/local/local_test_server_spawner.py b/chromium/build/android/pylib/local/local_test_server_spawner.py index 8e416fac5d0..6cd282e3a45 100644 --- a/chromium/build/android/pylib/local/local_test_server_spawner.py +++ b/chromium/build/android/pylib/local/local_test_server_spawner.py @@ -98,4 +98,3 @@ class LocalTestServerSpawner(test_server.TestServer): self.Reset() self._spawning_server.Stop() forwarder.Forwarder.UnmapDevicePort(self.port, self._device) - diff --git a/chromium/build/android/pylib/results/flakiness_dashboard/json_results_generator.py b/chromium/build/android/pylib/results/flakiness_dashboard/json_results_generator.py index 9693977e6bf..5e5f83f2a27 100644 --- a/chromium/build/android/pylib/results/flakiness_dashboard/json_results_generator.py +++ b/chromium/build/android/pylib/results/flakiness_dashboard/json_results_generator.py @@ -380,6 +380,7 @@ class JSONResultsGeneratorBase(object): urllib2.quote(self._test_type), urllib2.quote(self._master_name))) + # pylint: disable=redefined-variable-type try: # FIXME: We should talk to the network via a Host object. results_file = urllib2.urlopen(results_file_url) @@ -391,6 +392,7 @@ class JSONResultsGeneratorBase(object): error = http_error except urllib2.URLError, url_error: error = url_error + # pylint: enable=redefined-variable-type if old_results: # Strip the prefix and suffix so we can get the actual JSON object. diff --git a/chromium/build/android/pylib/results/json_results.py b/chromium/build/android/pylib/results/json_results.py index 1243691b7f8..3f87b46d8c5 100644 --- a/chromium/build/android/pylib/results/json_results.py +++ b/chromium/build/android/pylib/results/json_results.py @@ -175,4 +175,3 @@ def ParseResultsFromJson(json_results): duration=tr['elapsed_time_ms']) for tr in test_runs]) return results_list - diff --git a/chromium/build/android/pylib/results/json_results_test.py b/chromium/build/android/pylib/results/json_results_test.py index 276171353f4..e8b983b56ed 100755 --- a/chromium/build/android/pylib/results/json_results_test.py +++ b/chromium/build/android/pylib/results/json_results_test.py @@ -178,4 +178,3 @@ class JsonResultsTest(unittest.TestCase): if __name__ == '__main__': unittest.main(verbosity=2) - diff --git a/chromium/build/android/pylib/results/presentation/test_results_presentation.py b/chromium/build/android/pylib/results/presentation/test_results_presentation.py index eaae68f85b7..82d6c884700 100755 --- a/chromium/build/android/pylib/results/presentation/test_results_presentation.py +++ b/chromium/build/android/pylib/results/presentation/test_results_presentation.py @@ -268,6 +268,7 @@ def create_suite_table(results_dict): def feedback_url(result_details_link): + # pylint: disable=redefined-variable-type url_args = [ ('labels', 'Pri-2,Type-Bug,Restrict-View-Google'), ('summary', 'Result Details Feedback:'), @@ -276,6 +277,7 @@ def feedback_url(result_details_link): if result_details_link: url_args.append(('comment', 'Please check out: %s' % result_details_link)) url_args = urllib.urlencode(url_args) + # pylint: enable=redefined-variable-type return 'https://bugs.chromium.org/p/chromium/issues/entry?%s' % url_args @@ -370,6 +372,7 @@ def ui_screenshot_set(json_path): # This will be reported as an error by result_details, no need to duplicate. return None ui_screenshots = [] + # pylint: disable=too-many-nested-blocks for testsuite_run in json_object['per_iteration_data']: for _, test_runs in testsuite_run.iteritems(): for test_run in test_runs: @@ -388,6 +391,7 @@ def ui_screenshot_set(json_path): test_screenshots = json.loads( screenshot_string) ui_screenshots.extend(test_screenshots) + # pylint: enable=too-many-nested-blocks if ui_screenshots: return json.dumps(ui_screenshots) diff --git a/chromium/build/android/pylib/symbols/deobfuscator.py b/chromium/build/android/pylib/symbols/deobfuscator.py index 9d4f5fdfb4b..ac4ff7e4b4b 100644 --- a/chromium/build/android/pylib/symbols/deobfuscator.py +++ b/chromium/build/android/pylib/symbols/deobfuscator.py @@ -25,6 +25,8 @@ class Deobfuscator(object): cmd = [script_path, mapping_path] # Allow only one thread to call TransformLines() at a time. self._lock = threading.Lock() + # Ensure that only one thread attempts to kill self._proc in Close(). + self._close_lock = threading.Lock() self._closed_called = False # Assign to None so that attribute exists if Popen() throws. self._proc = None @@ -114,8 +116,11 @@ class Deobfuscator(object): return lines def Close(self): - self._closed_called = True - if not self.IsClosed(): + with self._close_lock: + needs_closing = not self.IsClosed() + self._closed_called = True + + if needs_closing: self._proc.stdin.close() self._proc.kill() self._proc.wait() diff --git a/chromium/build/android/pylib/symbols/symbol_utils.py b/chromium/build/android/pylib/symbols/symbol_utils.py new file mode 100644 index 00000000000..e4e3faac803 --- /dev/null +++ b/chromium/build/android/pylib/symbols/symbol_utils.py @@ -0,0 +1,812 @@ +# Copyright 2018 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. + +import bisect +import collections +import logging +import os +import re + +from pylib.constants import host_paths +from pylib.symbols import elf_symbolizer + + +def _AndroidAbiToCpuArch(android_abi): + """Return the Chromium CPU architecture name for a given Android ABI.""" + _ARCH_MAP = { + 'armeabi': 'arm', + 'armeabi-v7a': 'arm', + 'arm64-v8a': 'arm64', + 'x86_64': 'x64', + } + return _ARCH_MAP.get(android_abi, android_abi) + + +def _HexAddressRegexpFor(android_abi): + """Return a regexp matching hexadecimal addresses for a given Android ABI.""" + if android_abi in ['x86_64', 'arm64-v8a', 'mips64']: + width = 16 + else: + width = 8 + return '[0-9a-f]{%d}' % width + + +class HostLibraryFinder(object): + """Translate device library path to matching host unstripped library path. + + Usage is the following: + 1) Create instance. + 2) Call AddSearchDir() once or more times to add host directory path to + look for unstripped native libraries. + 3) Call Find(device_libpath) repeatedly to translate a device-specific + library path into the corresponding host path to the unstripped + version. + """ + def __init__(self): + """Initialize instance.""" + self._search_dirs = [] + self._lib_map = {} # Map of library name to host file paths. + + def AddSearchDir(self, lib_dir): + """Add a directory to the search path for host native shared libraries. + + Args: + lib_dir: host path containing native libraries. + """ + if not os.path.exists(lib_dir): + logging.warning('Ignoring missing host library directory: %s', lib_dir) + return + if not os.path.isdir(lib_dir): + logging.warning('Ignoring invalid host library directory: %s', lib_dir) + return + self._search_dirs.append(lib_dir) + self._lib_map = {} # Reset the map. + + def Find(self, device_libpath): + """Find the host file path matching a specific device library path. + + Args: + device_libpath: device-specific file path to library or executable. + Returns: + host file path to the unstripped version of the library, or None. + """ + host_lib_path = None + lib_name = os.path.basename(device_libpath) + host_lib_path = self._lib_map.get(lib_name) + if not host_lib_path: + for search_dir in self._search_dirs: + lib_path = os.path.join(search_dir, lib_name) + if os.path.exists(lib_path): + host_lib_path = lib_path + break + + if not host_lib_path: + logging.debug('Could not find host library for: %s', lib_name) + self._lib_map[lib_name] = host_lib_path + + return host_lib_path + + + +class SymbolResolver(object): + """A base class for objets that can symbolize library (path, offset) + pairs into symbol information strings. Usage is the following: + + 1) Create new instance (by calling the constructor of a derived + class, since this is only the base one). + + 2) Call SetAndroidAbi() before any call to FindSymbolInfo() in order + to set the Android CPU ABI used for symbolization. + + 3) Before the first call to FindSymbolInfo(), one can call + AddLibraryOffset(), or AddLibraryOffsets() to record a set of offsets + that you will want to symbolize later through FindSymbolInfo(). Doing + so allows some SymbolResolver derived classes to work faster (e.g. the + one that invokes the 'addr2line' program, since the latter works faster + if the offsets provided as inputs are sorted in increasing order). + + 3) Call FindSymbolInfo(path, offset) to return the corresponding + symbol information string, or None if this doesn't correspond + to anything the instance can handle. + + Note that whether the path is specific to the device or to the + host depends on the derived class implementation. + """ + def __init__(self): + self._android_abi = None + self._lib_offsets_map = collections.defaultdict(set) + + def SetAndroidAbi(self, android_abi): + """Set the Android ABI value for this instance. + + Calling this function before FindSymbolInfo() is required by some + derived class implementations. + + Args: + android_abi: Native Android CPU ABI name (e.g. 'armeabi-v7a'). + Raises: + Exception if the ABI was already set with a different value. + """ + if self._android_abi and self._android_abi != android_abi: + raise Exception('Cannot reset Android ABI to new value %s, already set ' + 'to %s' % (android_abi, self._android_abi)) + + self._android_abi = android_abi + + def AddLibraryOffset(self, lib_path, offset): + """Associate a single offset to a given device library. + + This must be called before FindSymbolInfo(), otherwise its input arguments + will be ignored. + + Args: + lib_path: A library path. + offset: An integer offset within the corresponding library that will be + symbolized by future calls to FindSymbolInfo. + """ + self._lib_offsets_map[lib_path].add(offset) + + def AddLibraryOffsets(self, lib_path, lib_offsets): + """Associate a set of wanted offsets to a given device library. + + This must be called before FindSymbolInfo(), otherwise its input arguments + will be ignored. + + Args: + lib_path: A library path. + lib_offsets: An iterable of integer offsets within the corresponding + library that will be symbolized by future calls to FindSymbolInfo. + """ + self._lib_offsets_map[lib_path].update(lib_offsets) + + # pylint: disable=unused-argument,no-self-use + def FindSymbolInfo(self, lib_path, lib_offset): + """Symbolize a device library path and offset. + + Args: + lib_path: Library path (device or host specific, depending on the + derived class implementation). + lib_offset: Integer offset within the library. + Returns: + Corresponding symbol information string, or None. + """ + # The base implementation cannot symbolize anything. + return None + # pylint: enable=unused-argument,no-self-use + + +class ElfSymbolResolver(SymbolResolver): + """A SymbolResolver that can symbolize host path + offset values using + an elf_symbolizer.ELFSymbolizer instance. + """ + def __init__(self, addr2line_path_for_tests=None): + super(ElfSymbolResolver, self).__init__() + self._addr2line_path = addr2line_path_for_tests + + # Used to cache one ELFSymbolizer instance per library path. + self._elf_symbolizer_cache = {} + + # Used to cache FindSymbolInfo() results. Maps host library paths + # to (offset -> symbol info string) dictionaries. + self._symbol_info_cache = collections.defaultdict(dict) + self._allow_symbolizer = True + + def _CreateSymbolizerFor(self, host_path): + """Create the ELFSymbolizer instance associated with a given lib path.""" + addr2line_path = self._addr2line_path + if not addr2line_path: + if not self._android_abi: + raise Exception( + 'Android CPU ABI must be set before calling FindSymbolInfo!') + + cpu_arch = _AndroidAbiToCpuArch(self._android_abi) + self._addr2line_path = host_paths.ToolPath('addr2line', cpu_arch) + + return elf_symbolizer.ELFSymbolizer( + elf_file_path=host_path, addr2line_path=self._addr2line_path, + callback=ElfSymbolResolver._Callback, inlines=True) + + def DisallowSymbolizerForTesting(self): + """Disallow FindSymbolInfo() from using a symbolizer. + + This is used during unit-testing to ensure that the offsets that were + recorded via AddLibraryOffset()/AddLibraryOffsets() are properly + symbolized, but not anything else. + """ + self._allow_symbolizer = False + + def FindSymbolInfo(self, host_path, offset): + """Override SymbolResolver.FindSymbolInfo. + + Args: + host_path: Host-specific path to the native shared library. + offset: Integer offset within the native library. + Returns: + A symbol info string, or None. + """ + offset_map = self._symbol_info_cache[host_path] + symbol_info = offset_map.get(offset) + if symbol_info: + return symbol_info + + # Create symbolizer on demand. + symbolizer = self._elf_symbolizer_cache.get(host_path) + if not symbolizer: + symbolizer = self._CreateSymbolizerFor(host_path) + self._elf_symbolizer_cache[host_path] = symbolizer + + # If there are pre-recorded offsets for this path, symbolize them now. + offsets = self._lib_offsets_map.get(host_path) + if offsets: + offset_map = {} + for pre_offset in offsets: + symbolizer.SymbolizeAsync( + pre_offset, callback_arg=(offset_map, pre_offset)) + symbolizer.WaitForIdle() + self._symbol_info_cache[host_path] = offset_map + + symbol_info = offset_map.get(offset) + if symbol_info: + return symbol_info + + if not self._allow_symbolizer: + return None + + # Symbolize single offset. Slower if addresses are not provided in + # increasing order to addr2line. + symbolizer.SymbolizeAsync(offset, + callback_arg=(offset_map, offset)) + symbolizer.WaitForIdle() + return offset_map.get(offset) + + @staticmethod + def _Callback(sym_info, callback_arg): + offset_map, offset = callback_arg + offset_map[offset] = str(sym_info) + + +class DeviceSymbolResolver(SymbolResolver): + """A SymbolResolver instance that accepts device-specific path. + + Usage is the following: + 1) Create new instance, passing a parent SymbolResolver instance that + accepts host-specific paths, and a HostLibraryFinder instance. + + 2) Optional: call AddApkOffsets() to add offsets from within an APK + that contains uncompressed native shared libraries. + + 3) Use it as any SymbolResolver instance. + """ + def __init__(self, host_resolver, host_lib_finder): + """Initialize instance. + + Args: + host_resolver: A parent SymbolResolver instance that will be used + to resolve symbols from host library paths. + host_lib_finder: A HostLibraryFinder instance used to locate + unstripped libraries on the host. + """ + super(DeviceSymbolResolver, self).__init__() + self._host_lib_finder = host_lib_finder + self._bad_device_lib_paths = set() + self._host_resolver = host_resolver + + def SetAndroidAbi(self, android_abi): + super(DeviceSymbolResolver, self).SetAndroidAbi(android_abi) + self._host_resolver.SetAndroidAbi(android_abi) + + def AddLibraryOffsets(self, device_lib_path, lib_offsets): + """Associate a set of wanted offsets to a given device library. + + This must be called before FindSymbolInfo(), otherwise its input arguments + will be ignored. + + Args: + device_lib_path: A device-specific library path. + lib_offsets: An iterable of integer offsets within the corresponding + library that will be symbolized by future calls to FindSymbolInfo. + want to symbolize. + """ + if device_lib_path in self._bad_device_lib_paths: + return + + host_lib_path = self._host_lib_finder.Find(device_lib_path) + if not host_lib_path: + # NOTE: self._bad_device_lib_paths is only used to only print this + # warning once per bad library. + logging.warning('Could not find host library matching device path: %s', + device_lib_path) + self._bad_device_lib_paths.add(device_lib_path) + return + + self._host_resolver.AddLibraryOffsets(host_lib_path, lib_offsets) + + def AddApkOffsets(self, device_apk_path, apk_offsets, apk_translator): + """Associate a set of wanted offsets to a given device APK path. + + This converts the APK-relative offsets into offsets relative to the + uncompressed libraries it contains, then calls AddLibraryOffsets() + for each one of the libraries. + + Must be called before FindSymbolInfo() as well, otherwise input arguments + will be ignored. + + Args: + device_apk_path: Device-specific APK path. + apk_offsets: Iterable of offsets within the APK file. + apk_translator: An ApkLibraryPathTranslator instance used to extract + library paths from the APK. + """ + libraries_map = collections.defaultdict(set) + for offset in apk_offsets: + lib_path, lib_offset = apk_translator.TranslatePath(device_apk_path, + offset) + libraries_map[lib_path].add(lib_offset) + + for lib_path, lib_offsets in libraries_map.iteritems(): + self.AddLibraryOffsets(lib_path, lib_offsets) + + def FindSymbolInfo(self, device_path, offset): + """Overrides SymbolResolver.FindSymbolInfo. + + Args: + device_path: Device-specific library path (e.g. + '/data/app/com.example.app-1/lib/x86/libfoo.so') + offset: Offset in device library path. + Returns: + Corresponding symbol information string, or None. + """ + host_path = self._host_lib_finder.Find(device_path) + if not host_path: + return None + + return self._host_resolver.FindSymbolInfo(host_path, offset) + + +class MemoryMap(object): + """Models the memory map of a given process. Usage is: + + 1) Create new instance, passing the Android ABI. + + 2) Call TranslateLine() whenever you want to detect and translate any + memory map input line. + + 3) Otherwise, it is possible to parse the whole memory map input with + ParseLines(), then call FindSectionForAddress() repeatedly in order + to translate a memory address into the corresponding mapping and + file information tuple (e.g. to symbolize stack entries). + """ + + # A named tuple describing interesting memory map line items. + # Fields: + # addr_start: Mapping start address in memory. + # file_offset: Corresponding file offset. + # file_size: Corresponding mapping size in bytes. + # file_path: Input file path. + # match: Corresponding regular expression match object. + LineTuple = collections.namedtuple('MemoryMapLineTuple', + 'addr_start,file_offset,file_size,' + 'file_path, match') + + # A name tuple describing a memory map section. + # Fields: + # address: Memory address. + # size: Size in bytes in memory + # offset: Starting file offset. + # path: Input file path. + SectionTuple = collections.namedtuple('MemoryMapSection', + 'address,size,offset,path') + + def __init__(self, android_abi): + """Initializes instance. + + Args: + android_abi: Android CPU ABI name (e.g. 'armeabi-v7a') + """ + hex_addr = _HexAddressRegexpFor(android_abi) + + # pylint: disable=line-too-long + # A regular expression used to match memory map entries which look like: + # b278c000-b2790fff r-- 4fda000 5000 /data/app/com.google.android.apps.chrome-2/base.apk + # pylint: enable=line-too-long + self._re_map_section = re.compile( + r'\s*(?P<addr_start>' + hex_addr + r')-(?P<addr_end>' + hex_addr + ')' + + r'\s+' + + r'(?P<perm>...)\s+' + + r'(?P<file_offset>[0-9a-f]+)\s+' + + r'(?P<file_size>[0-9a-f]+)\s*' + + r'(?P<file_path>[^ \t]+)?') + + self._addr_map = [] # Sorted list of (address, size, path, offset) tuples. + self._sorted_addresses = [] # Sorted list of address fields in _addr_map. + self._in_section = False + + def TranslateLine(self, line, apk_path_translator): + """Try to translate a memory map input line, if detected. + + This only takes care of converting mapped APK file path and offsets + into a corresponding uncompressed native library file path + new offsets, + e.g. '..... <offset> <size> /data/.../base.apk' gets + translated into '.... <new-offset> <size> /data/.../base.apk!lib/libfoo.so' + + This function should always work, even if ParseLines() was not called + previously. + + Args: + line: Input memory map / tombstone line. + apk_translator: An ApkLibraryPathTranslator instance, used to map + APK offsets into uncompressed native libraries + new offsets. + Returns: + Translated memory map line, if relevant, or unchanged input line + otherwise. + """ + t = self._ParseLine(line.rstrip()) + if not t: + return line + + new_path, new_offset = apk_path_translator.TranslatePath( + t.file_path, t.file_offset) + + if new_path == t.file_path: + return line + + pos = t.match.start('file_path') + return '%s%s (offset 0x%x)%s' % (line[0:pos], new_path, new_offset, + line[t.match.end('file_path'):]) + + def ParseLines(self, input_lines, in_section=False): + """Parse a list of input lines and extract the APK memory map out of it. + + Args: + input_lines: list, or iterable, of input lines. + in_section: Optional. If true, considers that the input lines are + already part of the memory map. Otherwise, wait until the start of + the section appears in the input before trying to record data. + Returns: + True iff APK-related memory map entries were found. False otherwise. + """ + addr_list = [] # list of (address, size, file_path, file_offset) tuples. + self._in_section = in_section + for line in input_lines: + t = self._ParseLine(line.rstrip()) + if not t: + continue + + addr_list.append(t) + + self._addr_map = sorted(addr_list, + lambda x, y: cmp(x.addr_start, y.addr_start)) + self._sorted_addresses = [e.addr_start for e in self._addr_map] + return bool(self._addr_map) + + def _ParseLine(self, line): + """Used internally to recognized memory map input lines. + + Args: + line: Input logcat or tomstone line. + Returns: + A LineTuple instance on success, or None on failure. + """ + if not self._in_section: + self._in_section = line.startswith('memory map:') + return None + + m = self._re_map_section.match(line) + if not m: + self._in_section = False # End of memory map section + return None + + # Only accept .apk and .so files that are not from the system partitions. + file_path = m.group('file_path') + if not file_path: + return None + + if file_path.startswith('/system') or file_path.startswith('/vendor'): + return None + + if not (file_path.endswith('.apk') or file_path.endswith('.so')): + return None + + addr_start = int(m.group('addr_start'), 16) + file_offset = int(m.group('file_offset'), 16) + file_size = int(m.group('file_size'), 16) + + return self.LineTuple(addr_start, file_offset, file_size, file_path, m) + + def Dump(self): + """Print memory map for debugging.""" + print 'MEMORY MAP [' + for t in self._addr_map: + print '[%08x-%08x %08x %08x %s]' % ( + t.addr_start, t.addr_start + t.file_size, t.file_size, t.file_offset, + t.file_path) + print '] MEMORY MAP' + + def FindSectionForAddress(self, addr): + """Find the map section corresponding to a specific memory address. + + Call this method only after using ParseLines() was called to extract + relevant information from the memory map. + + Args: + addr: Memory address + Returns: + A SectionTuple instance on success, or None on failure. + """ + pos = bisect.bisect_right(self._sorted_addresses, addr) + if pos > 0: + # All values in [0,pos) are <= addr, just ensure that the last + # one contains the address as well. + entry = self._addr_map[pos - 1] + if entry.addr_start + entry.file_size > addr: + return self.SectionTuple(entry.addr_start, entry.file_size, + entry.file_offset, entry.file_path) + return None + + +class BacktraceTranslator(object): + """Translates backtrace-related lines in a tombstone or crash report. + + Usage is the following: + 1) Create new instance with appropriate arguments. + 2) If the tombstone / logcat input is available, one can call + FindLibraryOffsets() in order to detect which library offsets + will need to be symbolized during a future parse. Doing so helps + speed up the ELF symbolizer. + 3) For each tombstone/logcat input line, call TranslateLine() to + try to detect and symbolize backtrace lines. + """ + + # A named tuple for relevant input backtrace lines. + # Fields: + # rel_pc: Instruction pointer, relative to offset in library start. + # location: Library or APK file path. + # offset: Load base of executable code in library or apk file path. + # match: The corresponding regular expression match object. + # Note: + # The actual instruction pointer always matches the position at + # |offset + rel_pc| in |location|. + LineTuple = collections.namedtuple('BacktraceLineTuple', + 'rel_pc,location,offset,match') + + def __init__(self, android_abi, apk_translator): + """Initialize instance. + + Args: + android_abi: Android CPU ABI name (e.g. 'armeabi-v7a'). + apk_translator: ApkLibraryPathTranslator instance used to convert + mapped APK file offsets into uncompressed library file paths with + new offsets. + """ + hex_addr = _HexAddressRegexpFor(android_abi) + + # A regular expression used to match backtrace lines. + self._re_backtrace = re.compile( + r'.*#(?P<frame>[0-9]{2})\s+' + + r'(..)\s+' + + r'(?P<rel_pc>' + hex_addr + r')\s+' + + r'(?P<location>[^ \t]+)' + + r'(\s+\(offset 0x(?P<offset>[0-9a-f]+)\))?') + + # In certain cases, offset will be provided as <location>+0x<offset> + # instead of <location> (offset 0x<offset>). This is a regexp to detect + # this. + self._re_location_offset = re.compile( + r'.*\+0x(?P<offset>[0-9a-f]+)$') + + self._apk_translator = apk_translator + self._in_section = False + + def _ParseLine(self, line): + """Used internally to detect and decompose backtrace input lines. + + Args: + line: input tombstone line. + Returns: + A LineTuple instance on success, None on failure. + """ + if not self._in_section: + self._in_section = line.startswith('backtrace:') + return None + + line = line.rstrip() + m = self._re_backtrace.match(line) + if not m: + self._in_section = False + return None + + location = m.group('location') + offset = m.group('offset') + if not offset: + m2 = self._re_location_offset.match(location) + if m2: + offset = m2.group('offset') + location = location[0:m2.start('offset') - 3] + + if not offset: + return None + + offset = int(offset, 16) + rel_pc = int(m.group('rel_pc'), 16) + + # Two cases to consider here: + # + # * If this is a library file directly mapped in memory, then |rel_pc| + # if the direct offset within the library, and doesn't need any kind + # of adjustement. + # + # * If this is a library mapped directly from an .apk file, then + # |rel_pc| is the offset in the APK, and |offset| happens to be the + # load base of the corresponding library. + # + if location.endswith('.so'): + # For a native library directly mapped from the file system, + return self.LineTuple(rel_pc, location, offset, m) + + if location.endswith('.apk'): + # For a native library inside an memory-mapped APK file, + new_location, new_offset = self._apk_translator.TranslatePath( + location, offset) + + return self.LineTuple(rel_pc, new_location, new_offset, m) + + # Ignore anything else (e.g. .oat or .odex files). + return None + + def FindLibraryOffsets(self, input_lines, in_section=False): + """Parse a tombstone's backtrace section and find all library offsets in it. + + Args: + input_lines: List or iterables of intput tombstone lines. + in_section: Optional. If True, considers that the stack section has + already started. + Returns: + A dictionary mapping device library paths to sets of offsets within + then. + """ + self._in_section = in_section + result = collections.defaultdict(set) + for line in input_lines: + t = self._ParseLine(line) + if not t: + continue + + result[t.location].add(t.offset + t.rel_pc) + return result + + def TranslateLine(self, line, symbol_resolver): + """Symbolize backtrace line if recognized. + + Args: + line: input backtrace line. + symbol_resolver: symbol resolver instance to use. This method will + call its FindSymbolInfo(device_lib_path, lib_offset) method to + convert offsets into symbol informations strings. + Returns: + Translated line (unchanged if not recognized as a back trace). + """ + t = self._ParseLine(line) + if not t: + return line + + symbol_info = symbol_resolver.FindSymbolInfo(t.location, + t.offset + t.rel_pc) + if not symbol_info: + symbol_info = 'offset 0x%x' % t.offset + + pos = t.match.start('location') + pos2 = t.match.end('offset') + 1 + if pos2 <= 0: + pos2 = t.match.end('location') + return '%s%s (%s)%s' % (line[:pos], t.location, symbol_info, line[pos2:]) + + +class StackTranslator(object): + """Translates stack-related lines in a tombstone or crash report.""" + + # A named tuple describing relevant stack input lines. + # Fields: + # address: Address as it appears in the stack. + # lib_path: Library path where |address| is mapped. + # lib_offset: Library load base offset. for |lib_path|. + # match: Corresponding regular expression match object. + LineTuple = collections.namedtuple('StackLineTuple', + 'address, lib_path, lib_offset, match') + + def __init__(self, android_abi, memory_map, apk_translator): + """Initialize instance.""" + hex_addr = _HexAddressRegexpFor(android_abi) + + # pylint: disable=line-too-long + # A regular expression used to recognize stack entries like: + # + # #05 bf89a180 bf89a1e4 [stack] + # bf89a1c8 a0c01c51 /data/app/com.google.android.apps.chrome-2/base.apk + # bf89a080 00000000 + # ........ ........ + # pylint: enable=line-too-long + self._re_stack_line = re.compile( + r'\s+(?P<frame_number>#[0-9]+)?\s*' + + r'(?P<stack_addr>' + hex_addr + r')\s+' + + r'(?P<stack_value>' + hex_addr + r')' + + r'(\s+(?P<location>[^ \t]+))?') + + self._re_stack_abbrev = re.compile(r'\s+[.]+\s+[.]+') + + self._memory_map = memory_map + self._apk_translator = apk_translator + self._in_section = False + + def _ParseLine(self, line): + """Check a given input line for a relevant _re_stack_line match. + + Args: + line: input tombstone line. + Returns: + A LineTuple instance on success, None on failure. + """ + line = line.rstrip() + if not self._in_section: + self._in_section = line.startswith('stack:') + return None + + m = self._re_stack_line.match(line) + if not m: + if not self._re_stack_abbrev.match(line): + self._in_section = False + return None + + location = m.group('location') + if not location: + return None + + if not location.endswith('.apk') and not location.endswith('.so'): + return None + + addr = int(m.group('stack_value'), 16) + t = self._memory_map.FindSectionForAddress(addr) + if t is None: + return None + + lib_path = t.path + lib_offset = t.offset + (addr - t.address) + + if lib_path.endswith('.apk'): + lib_path, lib_offset = self._apk_translator.TranslatePath( + lib_path, lib_offset) + + return self.LineTuple(addr, lib_path, lib_offset, m) + + def FindLibraryOffsets(self, input_lines, in_section=False): + """Parse a tombstone's stack section and find all library offsets in it. + + Args: + input_lines: List or iterables of intput tombstone lines. + in_section: Optional. If True, considers that the stack section has + already started. + Returns: + A dictionary mapping device library paths to sets of offsets within + then. + """ + result = collections.defaultdict(set) + self._in_section = in_section + for line in input_lines: + t = self._ParseLine(line) + if t: + result[t.lib_path].add(t.lib_offset) + return result + + def TranslateLine(self, line, symbol_resolver=None): + """Try to translate a line of the stack dump.""" + t = self._ParseLine(line) + if not t: + return line + + symbol_info = symbol_resolver.FindSymbolInfo(t.lib_path, t.lib_offset) + if not symbol_info: + return line + + pos = t.match.start('location') + pos2 = t.match.end('location') + return '%s%s (%s)%s' % (line[:pos], t.lib_path, symbol_info, line[pos2:]) diff --git a/chromium/build/android/pylib/symbols/symbol_utils_unittest.py b/chromium/build/android/pylib/symbols/symbol_utils_unittest.py new file mode 100644 index 00000000000..d350c17489b --- /dev/null +++ b/chromium/build/android/pylib/symbols/symbol_utils_unittest.py @@ -0,0 +1,944 @@ +# Copyright 2018 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. + +import collections +import contextlib +import logging +import os +import re +import shutil +import tempfile +import unittest + +from pylib.symbols import apk_native_libs_unittest +from pylib.symbols import mock_addr2line +from pylib.symbols import symbol_utils + +_MOCK_ELF_DATA = apk_native_libs_unittest.MOCK_ELF_DATA + +_MOCK_A2L_PATH = os.path.join(os.path.dirname(mock_addr2line.__file__), + 'mock_addr2line') + + +# pylint: disable=line-too-long + +# list of (start_offset, end_offset, size, libpath) tuples corresponding +# to the content of base.apk. This was taken from an x86 ChromeModern.apk +# component build. +_TEST_APK_LIBS = [ + (0x01331000, 0x013696bc, 0x000386bc, 'libaccessibility.cr.so'), + (0x0136a000, 0x013779c4, 0x0000d9c4, 'libanimation.cr.so'), + (0x01378000, 0x0137f7e8, 0x000077e8, 'libapdu.cr.so'), + (0x01380000, 0x0155ccc8, 0x001dccc8, 'libbase.cr.so'), + (0x0155d000, 0x015ab98c, 0x0004e98c, 'libbase_i18n.cr.so'), + (0x015ac000, 0x015dff4c, 0x00033f4c, 'libbindings.cr.so'), + (0x015e0000, 0x015f5a54, 0x00015a54, 'libbindings_base.cr.so'), + (0x015f6000, 0x0160d770, 0x00017770, 'libblink_android_mojo_bindings_shared.cr.so'), + (0x0160e000, 0x01731960, 0x00123960, 'libblink_common.cr.so'), + (0x01732000, 0x0174ce54, 0x0001ae54, 'libblink_controller.cr.so'), + (0x0174d000, 0x0318c528, 0x01a3f528, 'libblink_core.cr.so'), + (0x0318d000, 0x03191700, 0x00004700, 'libblink_core_mojo_bindings_shared.cr.so'), + (0x03192000, 0x03cd7918, 0x00b45918, 'libblink_modules.cr.so'), + (0x03cd8000, 0x03d137d0, 0x0003b7d0, 'libblink_mojo_bindings_shared.cr.so'), + (0x03d14000, 0x03d2670c, 0x0001270c, 'libblink_offscreen_canvas_mojo_bindings_shared.cr.so'), + (0x03d27000, 0x046c7054, 0x009a0054, 'libblink_platform.cr.so'), + (0x046c8000, 0x0473fbfc, 0x00077bfc, 'libbluetooth.cr.so'), + (0x04740000, 0x04878f40, 0x00138f40, 'libboringssl.cr.so'), + (0x04879000, 0x0498466c, 0x0010b66c, 'libc++_shared.so'), + (0x04985000, 0x0498d93c, 0x0000893c, 'libcaptive_portal.cr.so'), + (0x0498e000, 0x049947cc, 0x000067cc, 'libcapture_base.cr.so'), + (0x04995000, 0x04b39f18, 0x001a4f18, 'libcapture_lib.cr.so'), + (0x04b3a000, 0x04b488ec, 0x0000e8ec, 'libcbor.cr.so'), + (0x04b49000, 0x04e9ea5c, 0x00355a5c, 'libcc.cr.so'), + (0x04e9f000, 0x04ed6404, 0x00037404, 'libcc_animation.cr.so'), + (0x04ed7000, 0x04ef5ab4, 0x0001eab4, 'libcc_base.cr.so'), + (0x04ef6000, 0x04fd9364, 0x000e3364, 'libcc_blink.cr.so'), + (0x04fda000, 0x04fe2758, 0x00008758, 'libcc_debug.cr.so'), + (0x04fe3000, 0x0500ae0c, 0x00027e0c, 'libcc_ipc.cr.so'), + (0x0500b000, 0x05078f38, 0x0006df38, 'libcc_paint.cr.so'), + (0x05079000, 0x0507e734, 0x00005734, 'libcdm_manager.cr.so'), + (0x0507f000, 0x06f4d744, 0x01ece744, 'libchrome.cr.so'), + (0x06f54000, 0x06feb830, 0x00097830, 'libchromium_sqlite3.cr.so'), + (0x06fec000, 0x0706f554, 0x00083554, 'libclient.cr.so'), + (0x07070000, 0x0708da60, 0x0001da60, 'libcloud_policy_proto_generated_compile.cr.so'), + (0x0708e000, 0x07121f28, 0x00093f28, 'libcodec.cr.so'), + (0x07122000, 0x07134ab8, 0x00012ab8, 'libcolor_space.cr.so'), + (0x07135000, 0x07138614, 0x00003614, 'libcommon.cr.so'), + (0x07139000, 0x0717c938, 0x00043938, 'libcompositor.cr.so'), + (0x0717d000, 0x0923d78c, 0x020c078c, 'libcontent.cr.so'), + (0x0923e000, 0x092ae87c, 0x0007087c, 'libcontent_common_mojo_bindings_shared.cr.so'), + (0x092af000, 0x092be718, 0x0000f718, 'libcontent_public_common_mojo_bindings_shared.cr.so'), + (0x092bf000, 0x092d9a20, 0x0001aa20, 'libcrash_key.cr.so'), + (0x092da000, 0x092eda58, 0x00013a58, 'libcrcrypto.cr.so'), + (0x092ee000, 0x092f16e0, 0x000036e0, 'libdevice_base.cr.so'), + (0x092f2000, 0x092fe8d8, 0x0000c8d8, 'libdevice_event_log.cr.so'), + (0x092ff000, 0x093026a4, 0x000036a4, 'libdevice_features.cr.so'), + (0x09303000, 0x093f1220, 0x000ee220, 'libdevice_gamepad.cr.so'), + (0x093f2000, 0x09437f54, 0x00045f54, 'libdevice_vr_mojo_bindings.cr.so'), + (0x09438000, 0x0954c168, 0x00114168, 'libdevice_vr_mojo_bindings_blink.cr.so'), + (0x0954d000, 0x0955d720, 0x00010720, 'libdevice_vr_mojo_bindings_shared.cr.so'), + (0x0955e000, 0x0956b9c0, 0x0000d9c0, 'libdevices.cr.so'), + (0x0956c000, 0x0957cae8, 0x00010ae8, 'libdiscardable_memory_client.cr.so'), + (0x0957d000, 0x09588854, 0x0000b854, 'libdiscardable_memory_common.cr.so'), + (0x09589000, 0x0959cbb4, 0x00013bb4, 'libdiscardable_memory_service.cr.so'), + (0x0959d000, 0x095b6b90, 0x00019b90, 'libdisplay.cr.so'), + (0x095b7000, 0x095be930, 0x00007930, 'libdisplay_types.cr.so'), + (0x095bf000, 0x095c46c4, 0x000056c4, 'libdisplay_util.cr.so'), + (0x095c5000, 0x095f54a4, 0x000304a4, 'libdomain_reliability.cr.so'), + (0x095f6000, 0x0966fe08, 0x00079e08, 'libembedder.cr.so'), + (0x09670000, 0x096735f8, 0x000035f8, 'libembedder_switches.cr.so'), + (0x09674000, 0x096a3460, 0x0002f460, 'libevents.cr.so'), + (0x096a4000, 0x096b6d40, 0x00012d40, 'libevents_base.cr.so'), + (0x096b7000, 0x0981a778, 0x00163778, 'libffmpeg.cr.so'), + (0x0981b000, 0x09945c94, 0x0012ac94, 'libfido.cr.so'), + (0x09946000, 0x09a330dc, 0x000ed0dc, 'libfingerprint.cr.so'), + (0x09a34000, 0x09b53170, 0x0011f170, 'libfreetype_harfbuzz.cr.so'), + (0x09b54000, 0x09bc5c5c, 0x00071c5c, 'libgcm.cr.so'), + (0x09bc6000, 0x09cc8584, 0x00102584, 'libgeolocation.cr.so'), + (0x09cc9000, 0x09cdc8d4, 0x000138d4, 'libgeometry.cr.so'), + (0x09cdd000, 0x09cec8b4, 0x0000f8b4, 'libgeometry_skia.cr.so'), + (0x09ced000, 0x09d10e14, 0x00023e14, 'libgesture_detection.cr.so'), + (0x09d11000, 0x09d7595c, 0x0006495c, 'libgfx.cr.so'), + (0x09d76000, 0x09d7d7cc, 0x000077cc, 'libgfx_ipc.cr.so'), + (0x09d7e000, 0x09d82708, 0x00004708, 'libgfx_ipc_buffer_types.cr.so'), + (0x09d83000, 0x09d89748, 0x00006748, 'libgfx_ipc_color.cr.so'), + (0x09d8a000, 0x09d8f6f4, 0x000056f4, 'libgfx_ipc_geometry.cr.so'), + (0x09d90000, 0x09d94754, 0x00004754, 'libgfx_ipc_skia.cr.so'), + (0x09d95000, 0x09d9869c, 0x0000369c, 'libgfx_switches.cr.so'), + (0x09d99000, 0x09dba0ac, 0x000210ac, 'libgin.cr.so'), + (0x09dbb000, 0x09e0a8cc, 0x0004f8cc, 'libgl_in_process_context.cr.so'), + (0x09e0b000, 0x09e17a18, 0x0000ca18, 'libgl_init.cr.so'), + (0x09e18000, 0x09ee34e4, 0x000cb4e4, 'libgl_wrapper.cr.so'), + (0x09ee4000, 0x0a1a2e00, 0x002bee00, 'libgles2.cr.so'), + (0x0a1a3000, 0x0a24556c, 0x000a256c, 'libgles2_implementation.cr.so'), + (0x0a246000, 0x0a267038, 0x00021038, 'libgles2_utils.cr.so'), + (0x0a268000, 0x0a3288e4, 0x000c08e4, 'libgpu.cr.so'), + (0x0a329000, 0x0a3627ec, 0x000397ec, 'libgpu_ipc_service.cr.so'), + (0x0a363000, 0x0a388a18, 0x00025a18, 'libgpu_util.cr.so'), + (0x0a389000, 0x0a506d8c, 0x0017dd8c, 'libhost.cr.so'), + (0x0a507000, 0x0a6f0ec0, 0x001e9ec0, 'libicui18n.cr.so'), + (0x0a6f1000, 0x0a83b4c8, 0x0014a4c8, 'libicuuc.cr.so'), + (0x0a83c000, 0x0a8416e4, 0x000056e4, 'libinterfaces_shared.cr.so'), + (0x0a842000, 0x0a87e2a0, 0x0003c2a0, 'libipc.cr.so'), + (0x0a87f000, 0x0a88c98c, 0x0000d98c, 'libipc_mojom.cr.so'), + (0x0a88d000, 0x0a8926e4, 0x000056e4, 'libipc_mojom_shared.cr.so'), + (0x0a893000, 0x0a8a1e18, 0x0000ee18, 'libkeyed_service_content.cr.so'), + (0x0a8a2000, 0x0a8b4a30, 0x00012a30, 'libkeyed_service_core.cr.so'), + (0x0a8b5000, 0x0a930a80, 0x0007ba80, 'libleveldatabase.cr.so'), + (0x0a931000, 0x0a9b3908, 0x00082908, 'libmanager.cr.so'), + (0x0a9b4000, 0x0aea9bb4, 0x004f5bb4, 'libmedia.cr.so'), + (0x0aeaa000, 0x0b08cb88, 0x001e2b88, 'libmedia_blink.cr.so'), + (0x0b08d000, 0x0b0a4728, 0x00017728, 'libmedia_devices_mojo_bindings_shared.cr.so'), + (0x0b0a5000, 0x0b1943ec, 0x000ef3ec, 'libmedia_gpu.cr.so'), + (0x0b195000, 0x0b2d07d4, 0x0013b7d4, 'libmedia_mojo_services.cr.so'), + (0x0b2d1000, 0x0b2d4760, 0x00003760, 'libmessage_center.cr.so'), + (0x0b2d5000, 0x0b2e0938, 0x0000b938, 'libmessage_support.cr.so'), + (0x0b2e1000, 0x0b2f3ad0, 0x00012ad0, 'libmetrics_cpp.cr.so'), + (0x0b2f4000, 0x0b313bb8, 0x0001fbb8, 'libmidi.cr.so'), + (0x0b314000, 0x0b31b848, 0x00007848, 'libmojo_base_lib.cr.so'), + (0x0b31c000, 0x0b3329f8, 0x000169f8, 'libmojo_base_mojom.cr.so'), + (0x0b333000, 0x0b34b98c, 0x0001898c, 'libmojo_base_mojom_blink.cr.so'), + (0x0b34c000, 0x0b354700, 0x00008700, 'libmojo_base_mojom_shared.cr.so'), + (0x0b355000, 0x0b3608b0, 0x0000b8b0, 'libmojo_base_shared_typemap_traits.cr.so'), + (0x0b361000, 0x0b3ad454, 0x0004c454, 'libmojo_edk.cr.so'), + (0x0b3ae000, 0x0b3c4a20, 0x00016a20, 'libmojo_edk_ports.cr.so'), + (0x0b3c5000, 0x0b3d38a0, 0x0000e8a0, 'libmojo_mojom_bindings.cr.so'), + (0x0b3d4000, 0x0b3da6e8, 0x000066e8, 'libmojo_mojom_bindings_shared.cr.so'), + (0x0b3db000, 0x0b3e27f0, 0x000077f0, 'libmojo_public_system.cr.so'), + (0x0b3e3000, 0x0b3fa9fc, 0x000179fc, 'libmojo_public_system_cpp.cr.so'), + (0x0b3fb000, 0x0b407728, 0x0000c728, 'libmojom_core_shared.cr.so'), + (0x0b408000, 0x0b421744, 0x00019744, 'libmojom_platform_shared.cr.so'), + (0x0b422000, 0x0b43451c, 0x0001251c, 'libnative_theme.cr.so'), + (0x0b435000, 0x0baaa1bc, 0x006751bc, 'libnet.cr.so'), + (0x0baab000, 0x0bac3c08, 0x00018c08, 'libnet_with_v8.cr.so'), + (0x0bac4000, 0x0bb74670, 0x000b0670, 'libnetwork_cpp.cr.so'), + (0x0bb75000, 0x0bbaee8c, 0x00039e8c, 'libnetwork_cpp_base.cr.so'), + (0x0bbaf000, 0x0bd21844, 0x00172844, 'libnetwork_service.cr.so'), + (0x0bd22000, 0x0bd256e4, 0x000036e4, 'libnetwork_session_configurator.cr.so'), + (0x0bd26000, 0x0bd33734, 0x0000d734, 'libonc.cr.so'), + (0x0bd34000, 0x0bd9ce18, 0x00068e18, 'libperfetto.cr.so'), + (0x0bd9d000, 0x0bda4854, 0x00007854, 'libplatform.cr.so'), + (0x0bda5000, 0x0bec5ce4, 0x00120ce4, 'libpolicy_component.cr.so'), + (0x0bec6000, 0x0bf5ab58, 0x00094b58, 'libpolicy_proto.cr.so'), + (0x0bf5b000, 0x0bf86fbc, 0x0002bfbc, 'libprefs.cr.so'), + (0x0bf87000, 0x0bfa5d74, 0x0001ed74, 'libprinting.cr.so'), + (0x0bfa6000, 0x0bfe0e80, 0x0003ae80, 'libprotobuf_lite.cr.so'), + (0x0bfe1000, 0x0bff0a18, 0x0000fa18, 'libproxy_config.cr.so'), + (0x0bff1000, 0x0c0f6654, 0x00105654, 'libpublic.cr.so'), + (0x0c0f7000, 0x0c0fa6a4, 0x000036a4, 'librange.cr.so'), + (0x0c0fb000, 0x0c118058, 0x0001d058, 'libraster.cr.so'), + (0x0c119000, 0x0c133d00, 0x0001ad00, 'libresource_coordinator_cpp.cr.so'), + (0x0c134000, 0x0c1396a0, 0x000056a0, 'libresource_coordinator_cpp_base.cr.so'), + (0x0c13a000, 0x0c1973b8, 0x0005d3b8, 'libresource_coordinator_public_mojom.cr.so'), + (0x0c198000, 0x0c2033e8, 0x0006b3e8, 'libresource_coordinator_public_mojom_blink.cr.so'), + (0x0c204000, 0x0c219744, 0x00015744, 'libresource_coordinator_public_mojom_shared.cr.so'), + (0x0c21a000, 0x0c21e700, 0x00004700, 'libsandbox.cr.so'), + (0x0c21f000, 0x0c22f96c, 0x0001096c, 'libsandbox_services.cr.so'), + (0x0c230000, 0x0c249d58, 0x00019d58, 'libseccomp_bpf.cr.so'), + (0x0c24a000, 0x0c24e714, 0x00004714, 'libseccomp_starter_android.cr.so'), + (0x0c24f000, 0x0c4ae9f0, 0x0025f9f0, 'libservice.cr.so'), + (0x0c4af000, 0x0c4c3ae4, 0x00014ae4, 'libservice_manager_cpp.cr.so'), + (0x0c4c4000, 0x0c4cb708, 0x00007708, 'libservice_manager_cpp_types.cr.so'), + (0x0c4cc000, 0x0c4fbe30, 0x0002fe30, 'libservice_manager_mojom.cr.so'), + (0x0c4fc000, 0x0c532e78, 0x00036e78, 'libservice_manager_mojom_blink.cr.so'), + (0x0c533000, 0x0c53669c, 0x0000369c, 'libservice_manager_mojom_constants.cr.so'), + (0x0c537000, 0x0c53e85c, 0x0000785c, 'libservice_manager_mojom_constants_blink.cr.so'), + (0x0c53f000, 0x0c542668, 0x00003668, 'libservice_manager_mojom_constants_shared.cr.so'), + (0x0c543000, 0x0c54d700, 0x0000a700, 'libservice_manager_mojom_shared.cr.so'), + (0x0c54e000, 0x0c8fc6ec, 0x003ae6ec, 'libsessions.cr.so'), + (0x0c8fd000, 0x0c90a924, 0x0000d924, 'libshared_memory_support.cr.so'), + (0x0c90b000, 0x0c9148ec, 0x000098ec, 'libshell_dialogs.cr.so'), + (0x0c915000, 0x0cf8de70, 0x00678e70, 'libskia.cr.so'), + (0x0cf8e000, 0x0cf978bc, 0x000098bc, 'libsnapshot.cr.so'), + (0x0cf98000, 0x0cfb7d9c, 0x0001fd9c, 'libsql.cr.so'), + (0x0cfb8000, 0x0cfbe744, 0x00006744, 'libstartup_tracing.cr.so'), + (0x0cfbf000, 0x0d19b4e4, 0x001dc4e4, 'libstorage_browser.cr.so'), + (0x0d19c000, 0x0d2a773c, 0x0010b73c, 'libstorage_common.cr.so'), + (0x0d2a8000, 0x0d2ac6fc, 0x000046fc, 'libsurface.cr.so'), + (0x0d2ad000, 0x0d2baa98, 0x0000da98, 'libtracing.cr.so'), + (0x0d2bb000, 0x0d2f36b0, 0x000386b0, 'libtracing_cpp.cr.so'), + (0x0d2f4000, 0x0d326e70, 0x00032e70, 'libtracing_mojom.cr.so'), + (0x0d327000, 0x0d33270c, 0x0000b70c, 'libtracing_mojom_shared.cr.so'), + (0x0d333000, 0x0d46d804, 0x0013a804, 'libui_android.cr.so'), + (0x0d46e000, 0x0d4cb3f8, 0x0005d3f8, 'libui_base.cr.so'), + (0x0d4cc000, 0x0d4dbc40, 0x0000fc40, 'libui_base_ime.cr.so'), + (0x0d4dc000, 0x0d4e58d4, 0x000098d4, 'libui_data_pack.cr.so'), + (0x0d4e6000, 0x0d51d1e0, 0x000371e0, 'libui_devtools.cr.so'), + (0x0d51e000, 0x0d52b984, 0x0000d984, 'libui_message_center_cpp.cr.so'), + (0x0d52c000, 0x0d539a48, 0x0000da48, 'libui_touch_selection.cr.so'), + (0x0d53a000, 0x0d55bc60, 0x00021c60, 'liburl.cr.so'), + (0x0d55c000, 0x0d55f6b4, 0x000036b4, 'liburl_ipc.cr.so'), + (0x0d560000, 0x0d5af110, 0x0004f110, 'liburl_matcher.cr.so'), + (0x0d5b0000, 0x0d5e2fac, 0x00032fac, 'libuser_manager.cr.so'), + (0x0d5e3000, 0x0d5e66e4, 0x000036e4, 'libuser_prefs.cr.so'), + (0x0d5e7000, 0x0e3e1cc8, 0x00dfacc8, 'libv8.cr.so'), + (0x0e3e2000, 0x0e400ae0, 0x0001eae0, 'libv8_libbase.cr.so'), + (0x0e401000, 0x0e4d91d4, 0x000d81d4, 'libviz_common.cr.so'), + (0x0e4da000, 0x0e4df7e4, 0x000057e4, 'libviz_resource_format.cr.so'), + (0x0e4e0000, 0x0e5b7120, 0x000d7120, 'libweb_dialogs.cr.so'), + (0x0e5b8000, 0x0e5c7a18, 0x0000fa18, 'libwebdata_common.cr.so'), + (0x0e5c8000, 0x0e61bfe4, 0x00053fe4, 'libwtf.cr.so'), +] + + +# A small memory map fragment extracted from a tombstone for a process that +# had loaded the APK corresponding to _TEST_APK_LIBS above. +_TEST_MEMORY_MAP = r'''memory map: +12c00000-12ccafff rw- 0 cb000 /dev/ashmem/dalvik-main space (deleted) +12ccb000-130cafff rw- cb000 400000 /dev/ashmem/dalvik-main space (deleted) +130cb000-32bfffff --- 4cb000 1fb35000 /dev/ashmem/dalvik-main space (deleted) +32c00000-32c00fff rw- 0 1000 /dev/ashmem/dalvik-main space 1 (deleted) +32c01000-52bfffff --- 1000 1ffff000 /dev/ashmem/dalvik-main space 1 (deleted) +6f3b8000-6fd90fff rw- 0 9d9000 /data/dalvik-cache/x86/system@framework@boot.art +6fd91000-71c42fff r-- 0 1eb2000 /data/dalvik-cache/x86/system@framework@boot.oat +71c43000-7393efff r-x 1eb2000 1cfc000 /data/dalvik-cache/x86/system@framework@boot.oat (load base 0x71c43000) +7393f000-7393ffff rw- 3bae000 1000 /data/dalvik-cache/x86/system@framework@boot.oat +73940000-73a1bfff rw- 0 dc000 /dev/ashmem/dalvik-zygote space (deleted) +73a1c000-73a1cfff rw- 0 1000 /dev/ashmem/dalvik-non moving space (deleted) +73a1d000-73a2dfff rw- 1000 11000 /dev/ashmem/dalvik-non moving space (deleted) +73a2e000-77540fff --- 12000 3b13000 /dev/ashmem/dalvik-non moving space (deleted) +77541000-7793ffff rw- 3b25000 3ff000 /dev/ashmem/dalvik-non moving space (deleted) +923aa000-92538fff r-- 8a9000 18f000 /data/app/com.example.app-2/base.apk +92539000-9255bfff r-- 0 23000 /data/data/com.example.app/app_data/paks/es.pak@162db1c6689 +9255c000-92593fff r-- 213000 38000 /data/app/com.example.app-2/base.apk +92594000-925c0fff r-- 87d000 2d000 /data/app/com.example.app-2/base.apk +925c1000-927d3fff r-- a37000 213000 /data/app/com.example.app-2/base.apk +927d4000-92e07fff r-- 24a000 634000 /data/app/com.example.app-2/base.apk +92e08000-92e37fff r-- a931000 30000 /data/app/com.example.app-2/base.apk +92e38000-92e86fff r-x a961000 4f000 /data/app/com.example.app-2/base.apk +92e87000-92e8afff rw- a9b0000 4000 /data/app/com.example.app-2/base.apk +92e8b000-92e8bfff rw- 0 1000 +92e8c000-92e9dfff r-- d5b0000 12000 /data/app/com.example.app-2/base.apk +92e9e000-92ebcfff r-x d5c2000 1f000 /data/app/com.example.app-2/base.apk +92ebd000-92ebefff rw- d5e1000 2000 /data/app/com.example.app-2/base.apk +92ebf000-92ebffff rw- 0 1000 +''' + +# list of (address, size, path, offset) tuples that must appear in +# _TEST_MEMORY_MAP. Not all sections need to be listed. +_TEST_MEMORY_MAP_SECTIONS = [ + (0x923aa000, 0x18f000, '/data/app/com.example.app-2/base.apk', 0x8a9000), + (0x9255c000, 0x038000, '/data/app/com.example.app-2/base.apk', 0x213000), + (0x92594000, 0x02d000, '/data/app/com.example.app-2/base.apk', 0x87d000), + (0x925c1000, 0x213000, '/data/app/com.example.app-2/base.apk', 0xa37000), +] + +_EXPECTED_TEST_MEMORY_MAP = r'''memory map: +12c00000-12ccafff rw- 0 cb000 /dev/ashmem/dalvik-main space (deleted) +12ccb000-130cafff rw- cb000 400000 /dev/ashmem/dalvik-main space (deleted) +130cb000-32bfffff --- 4cb000 1fb35000 /dev/ashmem/dalvik-main space (deleted) +32c00000-32c00fff rw- 0 1000 /dev/ashmem/dalvik-main space 1 (deleted) +32c01000-52bfffff --- 1000 1ffff000 /dev/ashmem/dalvik-main space 1 (deleted) +6f3b8000-6fd90fff rw- 0 9d9000 /data/dalvik-cache/x86/system@framework@boot.art +6fd91000-71c42fff r-- 0 1eb2000 /data/dalvik-cache/x86/system@framework@boot.oat +71c43000-7393efff r-x 1eb2000 1cfc000 /data/dalvik-cache/x86/system@framework@boot.oat (load base 0x71c43000) +7393f000-7393ffff rw- 3bae000 1000 /data/dalvik-cache/x86/system@framework@boot.oat +73940000-73a1bfff rw- 0 dc000 /dev/ashmem/dalvik-zygote space (deleted) +73a1c000-73a1cfff rw- 0 1000 /dev/ashmem/dalvik-non moving space (deleted) +73a1d000-73a2dfff rw- 1000 11000 /dev/ashmem/dalvik-non moving space (deleted) +73a2e000-77540fff --- 12000 3b13000 /dev/ashmem/dalvik-non moving space (deleted) +77541000-7793ffff rw- 3b25000 3ff000 /dev/ashmem/dalvik-non moving space (deleted) +923aa000-92538fff r-- 8a9000 18f000 /data/app/com.example.app-2/base.apk +92539000-9255bfff r-- 0 23000 /data/data/com.example.app/app_data/paks/es.pak@162db1c6689 +9255c000-92593fff r-- 213000 38000 /data/app/com.example.app-2/base.apk +92594000-925c0fff r-- 87d000 2d000 /data/app/com.example.app-2/base.apk +925c1000-927d3fff r-- a37000 213000 /data/app/com.example.app-2/base.apk +927d4000-92e07fff r-- 24a000 634000 /data/app/com.example.app-2/base.apk +92e08000-92e37fff r-- a931000 30000 /data/app/com.example.app-2/base.apk!lib/libmanager.cr.so (offset 0x0) +92e38000-92e86fff r-x a961000 4f000 /data/app/com.example.app-2/base.apk!lib/libmanager.cr.so (offset 0x30000) +92e87000-92e8afff rw- a9b0000 4000 /data/app/com.example.app-2/base.apk!lib/libmanager.cr.so (offset 0x7f000) +92e8b000-92e8bfff rw- 0 1000 +92e8c000-92e9dfff r-- d5b0000 12000 /data/app/com.example.app-2/base.apk!lib/libuser_manager.cr.so (offset 0x0) +92e9e000-92ebcfff r-x d5c2000 1f000 /data/app/com.example.app-2/base.apk!lib/libuser_manager.cr.so (offset 0x12000) +92ebd000-92ebefff rw- d5e1000 2000 /data/app/com.example.app-2/base.apk!lib/libuser_manager.cr.so (offset 0x31000) +92ebf000-92ebffff rw- 0 1000 +''' + +# Example stack section, taken from the same tombstone that _TEST_MEMORY_MAP +# was extracted from. +_TEST_STACK = r'''stack: + bf89a070 b7439468 /system/lib/libc.so + bf89a074 bf89a1e4 [stack] + bf89a078 932d4000 /data/app/com.example.app-2/base.apk + bf89a07c b73bfbc9 /system/lib/libc.so (pthread_mutex_lock+65) + bf89a080 00000000 + bf89a084 4000671c /dev/ashmem/dalvik-main space 1 (deleted) + bf89a088 932d1d86 /data/app/com.example.app-2/base.apk + bf89a08c b743671c /system/lib/libc.so + bf89a090 b77f8c00 /system/bin/linker + bf89a094 b743cc90 + bf89a098 932d1d4a /data/app/com.example.app-2/base.apk + bf89a09c b73bf271 /system/lib/libc.so (__pthread_internal_find(long)+65) + bf89a0a0 b743cc90 + bf89a0a4 bf89a0b0 [stack] + bf89a0a8 bf89a0b8 [stack] + bf89a0ac 00000008 + ........ ........ + #00 bf89a0b0 00000006 + bf89a0b4 00000002 + bf89a0b8 b743671c /system/lib/libc.so + bf89a0bc b73bf5d9 /system/lib/libc.so (pthread_kill+71) + #01 bf89a0c0 00006937 + bf89a0c4 00006937 + bf89a0c8 00000006 + bf89a0cc b77fd3a9 /system/bin/app_process32 (sigprocmask+141) + bf89a0d0 00000002 + bf89a0d4 bf89a0ec [stack] + bf89a0d8 00000000 + bf89a0dc b743671c /system/lib/libc.so + bf89a0e0 bf89a12c [stack] + bf89a0e4 bf89a1e4 [stack] + bf89a0e8 932d1d4a /data/app/com.example.app-2/base.apk + bf89a0ec b7365206 /system/lib/libc.so (raise+37) + #02 bf89a0f0 b77f8c00 /system/bin/linker + bf89a0f4 00000006 + bf89a0f8 b7439468 /system/lib/libc.so + bf89a0fc b743671c /system/lib/libc.so + bf89a100 bf89a12c [stack] + bf89a104 b743671c /system/lib/libc.so + bf89a108 bf89a12c [stack] + bf89a10c b735e9e5 /system/lib/libc.so (abort+81) + #03 bf89a110 00000006 + bf89a114 bf89a12c [stack] + bf89a118 00000000 + bf89a11c b55a3d3b /system/lib/libprotobuf-cpp-lite.so (google::protobuf::internal::DefaultLogHandler(google::protobuf::LogLevel, char const*, int, std::__1::basic_string<char, std::__1::char_traits<char>, std::__1::allocator<char> > const&)+99) + bf89a120 b7439468 /system/lib/libc.so + bf89a124 b55ba38d /system/lib/libprotobuf-cpp-lite.so + bf89a128 b55ba408 /system/lib/libprotobuf-cpp-lite.so + bf89a12c ffffffdf + bf89a130 0000003d + bf89a134 adfedf00 [anon:libc_malloc] + bf89a138 bf89a158 [stack] + #04 bf89a13c a0cee7f0 /data/app/com.example.app-2/base.apk + bf89a140 b55c1cb0 /system/lib/libprotobuf-cpp-lite.so + bf89a144 bf89a1e4 [stack] +''' + +# Expected value of _TEST_STACK after translation of addresses in the APK +# into offsets into libraries. +_EXPECTED_STACK = r'''stack: + bf89a070 b7439468 /system/lib/libc.so + bf89a074 bf89a1e4 [stack] + bf89a078 932d4000 /data/app/com.example.app-2/base.apk + bf89a07c b73bfbc9 /system/lib/libc.so (pthread_mutex_lock+65) + bf89a080 00000000 + bf89a084 4000671c /dev/ashmem/dalvik-main space 1 (deleted) + bf89a088 932d1d86 /data/app/com.example.app-2/base.apk + bf89a08c b743671c /system/lib/libc.so + bf89a090 b77f8c00 /system/bin/linker + bf89a094 b743cc90 + bf89a098 932d1d4a /data/app/com.example.app-2/base.apk + bf89a09c b73bf271 /system/lib/libc.so (__pthread_internal_find(long)+65) + bf89a0a0 b743cc90 + bf89a0a4 bf89a0b0 [stack] + bf89a0a8 bf89a0b8 [stack] + bf89a0ac 00000008 + ........ ........ + #00 bf89a0b0 00000006 + bf89a0b4 00000002 + bf89a0b8 b743671c /system/lib/libc.so + bf89a0bc b73bf5d9 /system/lib/libc.so (pthread_kill+71) + #01 bf89a0c0 00006937 + bf89a0c4 00006937 + bf89a0c8 00000006 + bf89a0cc b77fd3a9 /system/bin/app_process32 (sigprocmask+141) + bf89a0d0 00000002 + bf89a0d4 bf89a0ec [stack] + bf89a0d8 00000000 + bf89a0dc b743671c /system/lib/libc.so + bf89a0e0 bf89a12c [stack] + bf89a0e4 bf89a1e4 [stack] + bf89a0e8 932d1d4a /data/app/com.example.app-2/base.apk + bf89a0ec b7365206 /system/lib/libc.so (raise+37) + #02 bf89a0f0 b77f8c00 /system/bin/linker + bf89a0f4 00000006 + bf89a0f8 b7439468 /system/lib/libc.so + bf89a0fc b743671c /system/lib/libc.so + bf89a100 bf89a12c [stack] + bf89a104 b743671c /system/lib/libc.so + bf89a108 bf89a12c [stack] + bf89a10c b735e9e5 /system/lib/libc.so (abort+81) + #03 bf89a110 00000006 + bf89a114 bf89a12c [stack] + bf89a118 00000000 + bf89a11c b55a3d3b /system/lib/libprotobuf-cpp-lite.so (google::protobuf::internal::DefaultLogHandler(google::protobuf::LogLevel, char const*, int, std::__1::basic_string<char, std::__1::char_traits<char>, std::__1::allocator<char> > const&)+99) + bf89a120 b7439468 /system/lib/libc.so + bf89a124 b55ba38d /system/lib/libprotobuf-cpp-lite.so + bf89a128 b55ba408 /system/lib/libprotobuf-cpp-lite.so + bf89a12c ffffffdf + bf89a130 0000003d + bf89a134 adfedf00 [anon:libc_malloc] + bf89a138 bf89a158 [stack] + #04 bf89a13c a0cee7f0 /data/app/com.example.app-2/base.apk + bf89a140 b55c1cb0 /system/lib/libprotobuf-cpp-lite.so + bf89a144 bf89a1e4 [stack] +''' + +_TEST_BACKTRACE = r'''backtrace: + #00 pc 00084126 /system/lib/libc.so (tgkill+22) + #01 pc 000815d8 /system/lib/libc.so (pthread_kill+70) + #02 pc 00027205 /system/lib/libc.so (raise+36) + #03 pc 000209e4 /system/lib/libc.so (abort+80) + #04 pc 0000cf73 /system/lib/libprotobuf-cpp-lite.so (google::protobuf::internal::LogMessage::Finish()+117) + #05 pc 0000cf8e /system/lib/libprotobuf-cpp-lite.so (google::protobuf::internal::LogFinisher::operator=(google::protobuf::internal::LogMessage&)+26) + #06 pc 0000d27f /system/lib/libprotobuf-cpp-lite.so (google::protobuf::internal::VerifyVersion(int, int, char const*)+574) + #07 pc 007cd236 /data/app/com.google.android.apps.chrome-2/base.apk (offset 0x598d000) + #08 pc 000111a9 /data/app/com.google.android.apps.chrome-2/base.apk (offset 0xbfc2000) + #09 pc 00013228 /data/app/com.google.android.apps.chrome-2/base.apk (offset 0xbfc2000) + #10 pc 000131de /data/app/com.google.android.apps.chrome-2/base.apk (offset 0xbfc2000) + #11 pc 007cd2d8 /data/app/com.google.android.apps.chrome-2/base.apk (offset 0x598d000) + #12 pc 007cd956 /data/app/com.google.android.apps.chrome-2/base.apk (offset 0x598d000) + #13 pc 007c2d4a /data/app/com.google.android.apps.chrome-2/base.apk (offset 0x598d000) + #14 pc 009fc9f1 /data/app/com.google.android.apps.chrome-2/base.apk (offset 0x598d000) + #15 pc 009fc8ea /data/app/com.google.android.apps.chrome-2/base.apk (offset 0x598d000) + #16 pc 00561c63 /data/app/com.google.android.apps.chrome-2/base.apk (offset 0x598d000) + #17 pc 0106fbdb /data/app/com.google.android.apps.chrome-2/base.apk (offset 0x598d000) + #18 pc 004d7371 /data/app/com.google.android.apps.chrome-2/base.apk (offset 0x598d000) + #19 pc 004d8159 /data/app/com.google.android.apps.chrome-2/base.apk (offset 0x598d000) + #20 pc 004d7b96 /data/app/com.google.android.apps.chrome-2/base.apk (offset 0x598d000) + #21 pc 004da4b6 /data/app/com.google.android.apps.chrome-2/base.apk (offset 0x598d000) + #22 pc 005ab66c /data/app/com.google.android.apps.chrome-2/base.apk (offset 0x7daa000) + #23 pc 005afca2 /data/app/com.google.android.apps.chrome-2/base.apk (offset 0x7daa000) + #24 pc 0000cae8 /data/app/com.google.android.apps.chrome-2/base.apk (offset 0x598d000) + #25 pc 00ce864f /data/app/com.google.android.apps.chrome-2/base.apk (offset 0x7daa000) + #26 pc 00ce8dfa /data/app/com.google.android.apps.chrome-2/base.apk (offset 0x7daa000) + #27 pc 00ce74c6 /data/app/com.google.android.apps.chrome-2/base.apk (offset 0x7daa000) + #28 pc 00004616 /data/app/com.google.android.apps.chrome-2/base.apk (offset 0x961e000) + #29 pc 00ce8215 /data/app/com.google.android.apps.chrome-2/base.apk (offset 0x7daa000) + #30 pc 0013d8c7 /system/lib/libart.so (art_quick_generic_jni_trampoline+71) + #31 pc 00137c52 /system/lib/libart.so (art_quick_invoke_static_stub+418) + #32 pc 00143651 /system/lib/libart.so (art::ArtMethod::Invoke(art::Thread*, unsigned int*, unsigned int, art::JValue*, char const*)+353) + #33 pc 005e06ae /system/lib/libart.so (artInterpreterToCompiledCodeBridge+190) + #34 pc 00328b5d /system/lib/libart.so (bool art::interpreter::DoCall<false, false>(art::ArtMethod*, art::Thread*, art::ShadowFrame&, art::Instruction const*, unsigned short, art::JValue*)+445) + #35 pc 0032cfc0 /system/lib/libart.so (bool art::interpreter::DoInvoke<(art::InvokeType)0, false, false>(art::Thread*, art::ShadowFrame&, art::Instruction const*, unsigned short, art::JValue*)+160) + #36 pc 000fc703 /system/lib/libart.so (art::JValue art::interpreter::ExecuteGotoImpl<false, false>(art::Thread*, art::DexFile::CodeItem const*, art::ShadowFrame&, art::JValue)+29891) + #37 pc 00300af7 /system/lib/libart.so (artInterpreterToInterpreterBridge+188) + #38 pc 00328b5d /system/lib/libart.so (bool art::interpreter::DoCall<false, false>(art::ArtMethod*, art::Thread*, art::ShadowFrame&, art::Instruction const*, unsigned short, art::JValue*)+445) + #39 pc 0032cfc0 /system/lib/libart.so (bool art::interpreter::DoInvoke<(art::InvokeType)0, false, false>(art::Thread*, art::ShadowFrame&, art::Instruction const*, unsigned short, art::JValue*)+160) + #40 pc 000fc703 /system/lib/libart.so (art::JValue art::interpreter::ExecuteGotoImpl<false, false>(art::Thread*, art::DexFile::CodeItem const*, art::ShadowFrame&, art::JValue)+29891) + #41 pc 00300af7 /system/lib/libart.so (artInterpreterToInterpreterBridge+188) + #42 pc 00328b5d /system/lib/libart.so (bool art::interpreter::DoCall<false, false>(art::ArtMethod*, art::Thread*, art::ShadowFrame&, art::Instruction const*, unsigned short, art::JValue*)+445) + #43 pc 0032ebf9 /system/lib/libart.so (bool art::interpreter::DoInvoke<(art::InvokeType)2, false, false>(art::Thread*, art::ShadowFrame&, art::Instruction const*, unsigned short, art::JValue*)+297) + #44 pc 000fc955 /system/lib/libart.so (art::JValue art::interpreter::ExecuteGotoImpl<false, false>(art::Thread*, art::DexFile::CodeItem const*, art::ShadowFrame&, art::JValue)+30485) + #45 pc 00300af7 /system/lib/libart.so (artInterpreterToInterpreterBridge+188) + #46 pc 00328b5d /system/lib/libart.so (bool art::interpreter::DoCall<false, false>(art::ArtMethod*, art::Thread*, art::ShadowFrame&, art::Instruction const*, unsigned short, art::JValue*)+445) + #47 pc 0033090c /system/lib/libart.so (bool art::interpreter::DoInvoke<(art::InvokeType)4, false, false>(art::Thread*, art::ShadowFrame&, art::Instruction const*, unsigned short, art::JValue*)+636) + #48 pc 000fc67f /system/lib/libart.so (art::JValue art::interpreter::ExecuteGotoImpl<false, false>(art::Thread*, art::DexFile::CodeItem const*, art::ShadowFrame&, art::JValue)+29759) + #49 pc 00300700 /system/lib/libart.so (art::interpreter::EnterInterpreterFromEntryPoint(art::Thread*, art::DexFile::CodeItem const*, art::ShadowFrame*)+128) + #50 pc 00667c73 /system/lib/libart.so (artQuickToInterpreterBridge+808) + #51 pc 0013d98d /system/lib/libart.so (art_quick_to_interpreter_bridge+77) + #52 pc 7264bc5b /data/dalvik-cache/x86/system@framework@boot.oat (offset 0x1eb2000) +''' + +_EXPECTED_BACKTRACE = r'''backtrace: + #00 pc 00084126 /system/lib/libc.so (tgkill+22) + #01 pc 000815d8 /system/lib/libc.so (pthread_kill+70) + #02 pc 00027205 /system/lib/libc.so (raise+36) + #03 pc 000209e4 /system/lib/libc.so (abort+80) + #04 pc 0000cf73 /system/lib/libprotobuf-cpp-lite.so (google::protobuf::internal::LogMessage::Finish()+117) + #05 pc 0000cf8e /system/lib/libprotobuf-cpp-lite.so (google::protobuf::internal::LogFinisher::operator=(google::protobuf::internal::LogMessage&)+26) + #06 pc 0000d27f /system/lib/libprotobuf-cpp-lite.so (google::protobuf::internal::VerifyVersion(int, int, char const*)+574) + #07 pc 007cd236 /data/app/com.google.android.apps.chrome-2/base.apk!lib/libchrome.cr.so (offset 0x90e000) + #08 pc 000111a9 /data/app/com.google.android.apps.chrome-2/base.apk!lib/libprotobuf_lite.cr.so (offset 0x1c000) + #09 pc 00013228 /data/app/com.google.android.apps.chrome-2/base.apk!lib/libprotobuf_lite.cr.so (offset 0x1c000) + #10 pc 000131de /data/app/com.google.android.apps.chrome-2/base.apk!lib/libprotobuf_lite.cr.so (offset 0x1c000) + #11 pc 007cd2d8 /data/app/com.google.android.apps.chrome-2/base.apk!lib/libchrome.cr.so (offset 0x90e000) + #12 pc 007cd956 /data/app/com.google.android.apps.chrome-2/base.apk!lib/libchrome.cr.so (offset 0x90e000) + #13 pc 007c2d4a /data/app/com.google.android.apps.chrome-2/base.apk!lib/libchrome.cr.so (offset 0x90e000) + #14 pc 009fc9f1 /data/app/com.google.android.apps.chrome-2/base.apk!lib/libchrome.cr.so (offset 0x90e000) + #15 pc 009fc8ea /data/app/com.google.android.apps.chrome-2/base.apk!lib/libchrome.cr.so (offset 0x90e000) + #16 pc 00561c63 /data/app/com.google.android.apps.chrome-2/base.apk!lib/libchrome.cr.so (offset 0x90e000) + #17 pc 0106fbdb /data/app/com.google.android.apps.chrome-2/base.apk!lib/libchrome.cr.so (offset 0x90e000) + #18 pc 004d7371 /data/app/com.google.android.apps.chrome-2/base.apk!lib/libchrome.cr.so (offset 0x90e000) + #19 pc 004d8159 /data/app/com.google.android.apps.chrome-2/base.apk!lib/libchrome.cr.so (offset 0x90e000) + #20 pc 004d7b96 /data/app/com.google.android.apps.chrome-2/base.apk!lib/libchrome.cr.so (offset 0x90e000) + #21 pc 004da4b6 /data/app/com.google.android.apps.chrome-2/base.apk!lib/libchrome.cr.so (offset 0x90e000) + #22 pc 005ab66c /data/app/com.google.android.apps.chrome-2/base.apk!lib/libcontent.cr.so (offset 0xc2d000) + #23 pc 005afca2 /data/app/com.google.android.apps.chrome-2/base.apk!lib/libcontent.cr.so (offset 0xc2d000) + #24 pc 0000cae8 /data/app/com.google.android.apps.chrome-2/base.apk!lib/libchrome.cr.so (offset 0x90e000) + #25 pc 00ce864f /data/app/com.google.android.apps.chrome-2/base.apk!lib/libcontent.cr.so (offset 0xc2d000) + #26 pc 00ce8dfa /data/app/com.google.android.apps.chrome-2/base.apk!lib/libcontent.cr.so (offset 0xc2d000) + #27 pc 00ce74c6 /data/app/com.google.android.apps.chrome-2/base.apk!lib/libcontent.cr.so (offset 0xc2d000) + #28 pc 00004616 /data/app/com.google.android.apps.chrome-2/base.apk!lib/libembedder.cr.so (offset 0x28000) + #29 pc 00ce8215 /data/app/com.google.android.apps.chrome-2/base.apk!lib/libcontent.cr.so (offset 0xc2d000) + #30 pc 0013d8c7 /system/lib/libart.so (art_quick_generic_jni_trampoline+71) + #31 pc 00137c52 /system/lib/libart.so (art_quick_invoke_static_stub+418) + #32 pc 00143651 /system/lib/libart.so (art::ArtMethod::Invoke(art::Thread*, unsigned int*, unsigned int, art::JValue*, char const*)+353) + #33 pc 005e06ae /system/lib/libart.so (artInterpreterToCompiledCodeBridge+190) + #34 pc 00328b5d /system/lib/libart.so (bool art::interpreter::DoCall<false, false>(art::ArtMethod*, art::Thread*, art::ShadowFrame&, art::Instruction const*, unsigned short, art::JValue*)+445) + #35 pc 0032cfc0 /system/lib/libart.so (bool art::interpreter::DoInvoke<(art::InvokeType)0, false, false>(art::Thread*, art::ShadowFrame&, art::Instruction const*, unsigned short, art::JValue*)+160) + #36 pc 000fc703 /system/lib/libart.so (art::JValue art::interpreter::ExecuteGotoImpl<false, false>(art::Thread*, art::DexFile::CodeItem const*, art::ShadowFrame&, art::JValue)+29891) + #37 pc 00300af7 /system/lib/libart.so (artInterpreterToInterpreterBridge+188) + #38 pc 00328b5d /system/lib/libart.so (bool art::interpreter::DoCall<false, false>(art::ArtMethod*, art::Thread*, art::ShadowFrame&, art::Instruction const*, unsigned short, art::JValue*)+445) + #39 pc 0032cfc0 /system/lib/libart.so (bool art::interpreter::DoInvoke<(art::InvokeType)0, false, false>(art::Thread*, art::ShadowFrame&, art::Instruction const*, unsigned short, art::JValue*)+160) + #40 pc 000fc703 /system/lib/libart.so (art::JValue art::interpreter::ExecuteGotoImpl<false, false>(art::Thread*, art::DexFile::CodeItem const*, art::ShadowFrame&, art::JValue)+29891) + #41 pc 00300af7 /system/lib/libart.so (artInterpreterToInterpreterBridge+188) + #42 pc 00328b5d /system/lib/libart.so (bool art::interpreter::DoCall<false, false>(art::ArtMethod*, art::Thread*, art::ShadowFrame&, art::Instruction const*, unsigned short, art::JValue*)+445) + #43 pc 0032ebf9 /system/lib/libart.so (bool art::interpreter::DoInvoke<(art::InvokeType)2, false, false>(art::Thread*, art::ShadowFrame&, art::Instruction const*, unsigned short, art::JValue*)+297) + #44 pc 000fc955 /system/lib/libart.so (art::JValue art::interpreter::ExecuteGotoImpl<false, false>(art::Thread*, art::DexFile::CodeItem const*, art::ShadowFrame&, art::JValue)+30485) + #45 pc 00300af7 /system/lib/libart.so (artInterpreterToInterpreterBridge+188) + #46 pc 00328b5d /system/lib/libart.so (bool art::interpreter::DoCall<false, false>(art::ArtMethod*, art::Thread*, art::ShadowFrame&, art::Instruction const*, unsigned short, art::JValue*)+445) + #47 pc 0033090c /system/lib/libart.so (bool art::interpreter::DoInvoke<(art::InvokeType)4, false, false>(art::Thread*, art::ShadowFrame&, art::Instruction const*, unsigned short, art::JValue*)+636) + #48 pc 000fc67f /system/lib/libart.so (art::JValue art::interpreter::ExecuteGotoImpl<false, false>(art::Thread*, art::DexFile::CodeItem const*, art::ShadowFrame&, art::JValue)+29759) + #49 pc 00300700 /system/lib/libart.so (art::interpreter::EnterInterpreterFromEntryPoint(art::Thread*, art::DexFile::CodeItem const*, art::ShadowFrame*)+128) + #50 pc 00667c73 /system/lib/libart.so (artQuickToInterpreterBridge+808) + #51 pc 0013d98d /system/lib/libart.so (art_quick_to_interpreter_bridge+77) + #52 pc 7264bc5b /data/dalvik-cache/x86/system@framework@boot.oat (offset 0x1eb2000) +''' + +_EXPECTED_BACKTRACE_OFFSETS_MAP = { + '/data/app/com.google.android.apps.chrome-2/base.apk!lib/libprotobuf_lite.cr.so': + set([ + 0x1c000 + 0x111a9, + 0x1c000 + 0x13228, + 0x1c000 + 0x131de, + ]), + + '/data/app/com.google.android.apps.chrome-2/base.apk!lib/libchrome.cr.so': + set([ + 0x90e000 + 0x7cd236, + 0x90e000 + 0x7cd2d8, + 0x90e000 + 0x7cd956, + 0x90e000 + 0x7c2d4a, + 0x90e000 + 0x9fc9f1, + 0x90e000 + 0x9fc8ea, + 0x90e000 + 0x561c63, + 0x90e000 + 0x106fbdb, + 0x90e000 + 0x4d7371, + 0x90e000 + 0x4d8159, + 0x90e000 + 0x4d7b96, + 0x90e000 + 0x4da4b6, + 0x90e000 + 0xcae8, + ]), + '/data/app/com.google.android.apps.chrome-2/base.apk!lib/libcontent.cr.so': + set([ + 0xc2d000 + 0x5ab66c, + 0xc2d000 + 0x5afca2, + 0xc2d000 + 0xce864f, + 0xc2d000 + 0xce8dfa, + 0xc2d000 + 0xce74c6, + 0xc2d000 + 0xce8215, + ]), + '/data/app/com.google.android.apps.chrome-2/base.apk!lib/libembedder.cr.so': + set([ + 0x28000 + 0x4616, + ]) +} + +# pylint: enable=line-too-long + +_ONE_MB = 1024 * 1024 +_TEST_SYMBOL_DATA = { + # Regular symbols + 0: 'mock_sym_for_addr_0 [mock_src/libmock1.so.c:0]', + 0x1000: 'mock_sym_for_addr_4096 [mock_src/libmock1.so.c:4096]', + + # Symbols without source file path. + _ONE_MB: 'mock_sym_for_addr_1048576 [??:0]', + _ONE_MB + 0x8234: 'mock_sym_for_addr_1081908 [??:0]', + + # Unknown symbol. + 2 * _ONE_MB: '?? [??:0]', + + # Inlined symbol. + 3 * _ONE_MB: + 'mock_sym_for_addr_3145728_inner [mock_src/libmock1.so.c:3145728]', +} + +@contextlib.contextmanager +def _TempDir(): + dirname = tempfile.mkdtemp() + try: + yield dirname + finally: + shutil.rmtree(dirname) + + +def _TouchFile(path): + # Create parent directories. + try: + os.makedirs(os.path.dirname(path)) + except OSError: + pass + with open(path, 'a'): + os.utime(path, None) + +class MockApkTranslator(object): + """A mock ApkLibraryPathTranslator object used for testing.""" + + # Regex that matches the content of APK native library map files generated + # with apk_lib_dump.py. + _RE_MAP_FILE = re.compile( + r'0x(?P<file_start>[0-9a-f]+)\s+' + + r'0x(?P<file_end>[0-9a-f]+)\s+' + + r'0x(?P<file_size>[0-9a-f]+)\s+' + + r'0x(?P<lib_path>[0-9a-f]+)\s+') + + def __init__(self, test_apk_libs=None): + """Initialize instance. + + Args: + test_apk_libs: Optional list of (file_start, file_end, size, lib_path) + tuples, like _TEST_APK_LIBS for example. This will be used to + implement TranslatePath(). + """ + self._apk_libs = [] + if test_apk_libs: + self._AddLibEntries(test_apk_libs) + + def _AddLibEntries(self, entries): + self._apk_libs = sorted(self._apk_libs + entries, + lambda x, y: cmp(x[0], y[0])) + + def ReadMapFile(self, file_path): + """Read an .apk.native-libs file that was produced with apk_lib_dump.py. + + Args: + file_path: input path to .apk.native-libs file. Its format is + essentially: 0x<start> 0x<end> 0x<size> <library-path> + """ + new_libs = [] + with open(file_path) as f: + for line in f.readlines(): + m = MockApkTranslator._RE_MAP_FILE.match(line) + if m: + file_start = int(m.group('file_start'), 16) + file_end = int(m.group('file_end'), 16) + file_size = int(m.group('file_size'), 16) + lib_path = m.group('lib_path') + # Sanity check + if file_start + file_size != file_end: + logging.warning('%s: Inconsistent (start, end, size) values ' + '(0x%x, 0x%x, 0x%x)', + file_path, file_start, file_end, file_size) + else: + new_libs.append((file_start, file_end, file_size, lib_path)) + + self._AddLibEntries(new_libs) + + def TranslatePath(self, lib_path, lib_offset): + """Translate an APK file path + offset into a library path + offset.""" + min_pos = 0 + max_pos = len(self._apk_libs) + while min_pos < max_pos: + mid_pos = (min_pos + max_pos) / 2 + mid_entry = self._apk_libs[mid_pos] + mid_offset = mid_entry[0] + mid_size = mid_entry[2] + if lib_offset < mid_offset: + max_pos = mid_pos + elif lib_offset >= mid_offset + mid_size: + min_pos = mid_pos + 1 + else: + # Found it + new_path = '%s!lib/%s' % (lib_path, mid_entry[3]) + new_offset = lib_offset - mid_offset + return (new_path, new_offset) + + return lib_path, lib_offset + + +class HostLibraryFinderTest(unittest.TestCase): + + def testEmpty(self): + finder = symbol_utils.HostLibraryFinder() + self.assertIsNone(finder.Find('/data/data/com.example.app-1/lib/libfoo.so')) + self.assertIsNone( + finder.Find('/data/data/com.example.app-1/base.apk!lib/libfoo.so')) + + + def testSimpleDirectory(self): + finder = symbol_utils.HostLibraryFinder() + with _TempDir() as tmp_dir: + host_libfoo_path = os.path.join(tmp_dir, 'libfoo.so') + host_libbar_path = os.path.join(tmp_dir, 'libbar.so') + _TouchFile(host_libfoo_path) + _TouchFile(host_libbar_path) + + finder.AddSearchDir(tmp_dir) + + # Regular library path (extracted at installation by the PackageManager). + # Note that the extraction path has changed between Android releases, + # i.e. it can be /data/app/, /data/data/ or /data/app-lib/ depending + # on the system. + self.assertEqual( + host_libfoo_path, + finder.Find('/data/app-lib/com.example.app-1/lib/libfoo.so')) + + # Verify that the path doesn't really matter + self.assertEqual( + host_libfoo_path, + finder.Find('/whatever/what.apk!lib/libfoo.so')) + + self.assertEqual( + host_libbar_path, + finder.Find('/data/data/com.example.app-1/lib/libbar.so')) + + self.assertIsNone( + finder.Find('/data/data/com.example.app-1/lib/libunknown.so')) + + + def testMultipleDirectories(self): + with _TempDir() as tmp_dir: + # Create the following files: + # <tmp_dir>/aaa/ + # libfoo.so + # <tmp_dir>/bbb/ + # libbar.so + # libfoo.so (this one should never be seen because 'aaa' + # shall be first in the search path list). + # + aaa_dir = os.path.join(tmp_dir, 'aaa') + bbb_dir = os.path.join(tmp_dir, 'bbb') + os.makedirs(aaa_dir) + os.makedirs(bbb_dir) + + host_libfoo_path = os.path.join(aaa_dir, 'libfoo.so') + host_libbar_path = os.path.join(bbb_dir, 'libbar.so') + host_libfoo2_path = os.path.join(bbb_dir, 'libfoo.so') + + _TouchFile(host_libfoo_path) + _TouchFile(host_libbar_path) + _TouchFile(host_libfoo2_path) + + finder = symbol_utils.HostLibraryFinder() + finder.AddSearchDir(aaa_dir) + finder.AddSearchDir(bbb_dir) + + self.assertEqual( + host_libfoo_path, + finder.Find('/data/data/com.example.app-1/lib/libfoo.so')) + + self.assertEqual( + host_libfoo_path, + finder.Find('/data/whatever/base.apk!lib/libfoo.so')) + + self.assertEqual( + host_libbar_path, + finder.Find('/data/data/com.example.app-1/lib/libbar.so')) + + self.assertIsNone( + finder.Find('/data/data/com.example.app-1/lib/libunknown.so')) + + +class ElfSymbolResolverTest(unittest.TestCase): + + def testCreation(self): + resolver = symbol_utils.ElfSymbolResolver( + addr2line_path_for_tests=_MOCK_A2L_PATH) + self.assertTrue(resolver) + + def testWithSimpleOffsets(self): + resolver = symbol_utils.ElfSymbolResolver( + addr2line_path_for_tests=_MOCK_A2L_PATH) + resolver.SetAndroidAbi('ignored-abi') + + for addr, expected_sym in _TEST_SYMBOL_DATA.iteritems(): + self.assertEqual(resolver.FindSymbolInfo('/some/path/libmock1.so', addr), + expected_sym) + + def testWithPreResolvedSymbols(self): + resolver = symbol_utils.ElfSymbolResolver( + addr2line_path_for_tests=_MOCK_A2L_PATH) + resolver.SetAndroidAbi('ignored-abi') + resolver.AddLibraryOffsets('/some/path/libmock1.so', + _TEST_SYMBOL_DATA.keys()) + + resolver.DisallowSymbolizerForTesting() + + for addr, expected_sym in _TEST_SYMBOL_DATA.iteritems(): + sym_info = resolver.FindSymbolInfo('/some/path/libmock1.so', addr) + self.assertIsNotNone(sym_info, 'None symbol info for addr %x' % addr) + self.assertEqual( + sym_info, expected_sym, + 'Invalid symbol info for addr %x [%s] expected [%s]' % ( + addr, sym_info, expected_sym)) + + +class MemoryMapTest(unittest.TestCase): + + def testCreation(self): + mem_map = symbol_utils.MemoryMap('test-abi32') + self.assertIsNone(mem_map.FindSectionForAddress(0)) + + def testParseLines(self): + mem_map = symbol_utils.MemoryMap('test-abi32') + mem_map.ParseLines(_TEST_MEMORY_MAP.splitlines()) + for exp_addr, exp_size, exp_path, exp_offset in _TEST_MEMORY_MAP_SECTIONS: + text = '(addr:%x, size:%x, path:%s, offset=%x)' % ( + exp_addr, exp_size, exp_path, exp_offset) + + t = mem_map.FindSectionForAddress(exp_addr) + self.assertTrue(t, 'Could not find %s' % text) + self.assertEqual(t.address, exp_addr) + self.assertEqual(t.size, exp_size) + self.assertEqual(t.offset, exp_offset) + self.assertEqual(t.path, exp_path) + + def testTranslateLine(self): + android_abi = 'test-abi' + apk_translator = MockApkTranslator(_TEST_APK_LIBS) + mem_map = symbol_utils.MemoryMap(android_abi) + for line, expected_line in zip(_TEST_MEMORY_MAP.splitlines(), + _EXPECTED_TEST_MEMORY_MAP.splitlines()): + self.assertEqual(mem_map.TranslateLine(line, apk_translator), + expected_line) + +class StackTranslatorTest(unittest.TestCase): + + def testSimpleStack(self): + android_abi = 'test-abi32' + mem_map = symbol_utils.MemoryMap(android_abi) + mem_map.ParseLines(_TEST_MEMORY_MAP) + apk_translator = MockApkTranslator(_TEST_APK_LIBS) + stack_translator = symbol_utils.StackTranslator(android_abi, mem_map, + apk_translator) + input_stack = _TEST_STACK.splitlines() + expected_stack = _EXPECTED_STACK.splitlines() + self.assertEqual(len(input_stack), len(expected_stack)) + for stack_line, expected_line in zip(input_stack, expected_stack): + new_line = stack_translator.TranslateLine(stack_line) + self.assertEqual(new_line, expected_line) + + +class MockSymbolResolver(symbol_utils.SymbolResolver): + + # A regex matching a symbol definition as it appears in a test symbol file. + # Format is: <hex-offset> <whitespace> <symbol-string> + _RE_SYMBOL_DEFINITION = re.compile( + r'(?P<offset>[0-9a-f]+)\s+(?P<symbol>.*)') + + def __init__(self): + super(MockSymbolResolver, self).__init__() + self._map = collections.defaultdict(dict) + + def AddTestLibrarySymbols(self, lib_name, offsets_map): + """Add a new test entry for a given library name. + + Args: + lib_name: Library name (e.g. 'libfoo.so') + offsets_map: A mapping from offsets to symbol info strings. + """ + self._map[lib_name] = offsets_map + + def ReadTestFile(self, file_path, lib_name): + """Read a single test symbol file, matching a given library. + + Args: + file_path: Input file path. + lib_name: Library name these symbols correspond to (e.g. 'libfoo.so') + """ + with open(file_path) as f: + for line in f.readlines(): + line = line.rstrip() + m = MockSymbolResolver._RE_SYMBOL_DEFINITION.match(line) + if m: + offset = int(m.group('offset')) + symbol = m.group('symbol') + self._map[lib_name][offset] = symbol + + def ReadTestFilesInDir(self, dir_path, file_suffix): + """Read all symbol test files in a given directory. + + Args: + dir_path: Directory path. + file_suffix: File suffix used to detect test symbol files. + """ + for filename in os.listdir(dir_path): + if filename.endswith(file_suffix): + lib_name = filename[:-len(file_suffix)] + self.ReadTestFile(os.path.join(dir_path, filename), lib_name) + + def FindSymbolInfo(self, device_path, device_offset): + """Implement SymbolResolver.FindSymbolInfo.""" + lib_name = os.path.basename(device_path) + offsets = self._map.get(lib_name) + if not offsets: + return None + + return offsets.get(device_offset) + + +class BacktraceTranslatorTest(unittest.TestCase): + + def testEmpty(self): + android_abi = 'test-abi' + apk_translator = MockApkTranslator() + backtrace_translator = symbol_utils.BacktraceTranslator(android_abi, + apk_translator) + self.assertTrue(backtrace_translator) + + def testFindLibraryOffsets(self): + android_abi = 'test-abi' + apk_translator = MockApkTranslator(_TEST_APK_LIBS) + backtrace_translator = symbol_utils.BacktraceTranslator(android_abi, + apk_translator) + input_backtrace = _EXPECTED_BACKTRACE.splitlines() + expected_lib_offsets_map = _EXPECTED_BACKTRACE_OFFSETS_MAP + offset_map = backtrace_translator.FindLibraryOffsets(input_backtrace) + for lib_path, offsets in offset_map.iteritems(): + self.assertTrue(lib_path in expected_lib_offsets_map, + '%s is not in expected library-offsets map!' % lib_path) + sorted_offsets = sorted(offsets) + sorted_expected_offsets = sorted(expected_lib_offsets_map[lib_path]) + self.assertEqual(sorted_offsets, sorted_expected_offsets, + '%s has invalid offsets %s expected %s' % ( + lib_path, sorted_offsets, sorted_expected_offsets)) + + def testTranslateLine(self): + android_abi = 'test-abi' + apk_translator = MockApkTranslator(_TEST_APK_LIBS) + backtrace_translator = symbol_utils.BacktraceTranslator(android_abi, + apk_translator) + input_backtrace = _TEST_BACKTRACE.splitlines() + expected_backtrace = _EXPECTED_BACKTRACE.splitlines() + self.assertEqual(len(input_backtrace), len(expected_backtrace)) + for trace_line, expected_line in zip(input_backtrace, expected_backtrace): + line = backtrace_translator.TranslateLine(trace_line, + MockSymbolResolver()) + self.assertEqual(line, expected_line) + + +if __name__ == '__main__': + unittest.main() diff --git a/chromium/build/android/pylib/utils/app_bundle_utils.py b/chromium/build/android/pylib/utils/app_bundle_utils.py new file mode 100644 index 00000000000..946e62661ba --- /dev/null +++ b/chromium/build/android/pylib/utils/app_bundle_utils.py @@ -0,0 +1,66 @@ +# Copyright 2018 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. + +import logging +import os +import sys + +sys.path.append(os.path.join(os.path.dirname(__file__), '..', '..', 'gyp')) + +from util import build_utils +from util import md5_check +import bundletool + +def GenerateBundleApks(bundle_path, bundle_apks_path, aapt2_path, + keystore_path, keystore_password, keystore_alias): + """Generate an .apks archive from a an app bundle if needed. + + Args: + bundle_path: Input bundle file path. + bundle_apks_path: Output bundle .apks archive path. Name must end with + '.apks' or this operation will fail. + aapt2_path: Path to aapt2 build tool. + keystore_path: Path to keystore. + keystore_password: Keystore password, as a string. + keystore_alias: Keystore signing key alias. + """ + # NOTE: BUNDLETOOL_JAR_PATH is added to input_strings, rather than + # input_paths, to speed up MD5 computations by about 400ms (the .jar file + # contains thousands of class files which are checked independently, + # resulting in an .md5.stamp of more than 60000 lines!). + input_paths = [ + bundle_path, + aapt2_path, + keystore_path + ] + input_strings = [ + keystore_password, + keystore_alias, + bundletool.BUNDLETOOL_JAR_PATH, + # NOTE: BUNDLETOOL_VERSION is already part of BUNDLETOOL_JAR_PATH, but + # it's simpler to assume that this may not be the case in the future. + bundletool.BUNDLETOOL_VERSION + ] + output_paths = [bundle_apks_path] + + def rebuild(): + logging.info('Building %s', os.path.basename(bundle_apks_path)) + with build_utils.AtomicOutput(bundle_apks_path) as tmp_apks: + cmd_args = [ + 'java', '-jar', bundletool.BUNDLETOOL_JAR_PATH, 'build-apks', + '--aapt2=%s' % aapt2_path, + '--output=%s' % tmp_apks.name, + '--bundle=%s' % bundle_path, + '--ks=%s' % keystore_path, + '--ks-pass=pass:%s' % keystore_password, + '--ks-key-alias=%s' % keystore_alias, + '--overwrite', + ] + build_utils.CheckOutput(cmd_args) + + md5_check.CallAndRecordIfStale( + rebuild, + input_paths=input_paths, + input_strings=input_strings, + output_paths=output_paths) diff --git a/chromium/build/android/pylib/utils/device_dependencies.py b/chromium/build/android/pylib/utils/device_dependencies.py index 6481d43881f..bccc1c37a67 100644 --- a/chromium/build/android/pylib/utils/device_dependencies.py +++ b/chromium/build/android/pylib/utils/device_dependencies.py @@ -16,6 +16,7 @@ _BLACKLIST = [ re.compile(r'.*\.py'), # Some test_support targets include python deps. re.compile(r'.*\.stamp'), # Stamp files should never be included. re.compile(r'.*\.apk'), # Should be installed separately. + re.compile(r'.*lib.java/.*'), # Never need java intermediates. # Chrome external extensions config file. re.compile(r'.*external_extensions\.json'), diff --git a/chromium/build/android/pylib/utils/google_storage_helper.py b/chromium/build/android/pylib/utils/google_storage_helper.py index 3101d71439a..d184810517a 100644 --- a/chromium/build/android/pylib/utils/google_storage_helper.py +++ b/chromium/build/android/pylib/utils/google_storage_helper.py @@ -79,10 +79,7 @@ def exists(name, bucket): cmd = [_GSUTIL_PATH, '-q', 'stat', gs_path] return_code = cmd_helper.RunCmd(cmd) - if return_code == 0: - return True - else: - return False + return return_code == 0 # TODO(jbudorick): Delete this function. Only one user of it. diff --git a/chromium/build/android/pylib/utils/logdog_helper.py b/chromium/build/android/pylib/utils/logdog_helper.py index 58fe7814bea..68a7ba57ab7 100644 --- a/chromium/build/android/pylib/utils/logdog_helper.py +++ b/chromium/build/android/pylib/utils/logdog_helper.py @@ -92,4 +92,3 @@ def get_viewer_url(name): def get_logdog_client(): logging.info('Getting logdog client.') return bootstrap.ButlerBootstrap.probe().stream_client() - diff --git a/chromium/build/android/pylib/utils/maven_downloader.py b/chromium/build/android/pylib/utils/maven_downloader.py index c5b0badf29c..c60b0140acc 100755 --- a/chromium/build/android/pylib/utils/maven_downloader.py +++ b/chromium/build/android/pylib/utils/maven_downloader.py @@ -36,7 +36,8 @@ class MavenDownloader(object): _REMOTE_REPO = 'https://maven.google.com' # Default Maven repository. - _DEFAULT_REPO_PATH = os.path.join(os.getenv('HOME'), '.m2', 'repository') + _DEFAULT_REPO_PATH = os.path.join( + os.path.expanduser('~'), '.m2', 'repository') def __init__(self, debug=False): self._repo_path = MavenDownloader._DEFAULT_REPO_PATH diff --git a/chromium/build/android/pylib/utils/proguard.py b/chromium/build/android/pylib/utils/proguard.py index c243ce9c9f3..2d439a52c32 100644 --- a/chromium/build/android/pylib/utils/proguard.py +++ b/chromium/build/android/pylib/utils/proguard.py @@ -31,15 +31,13 @@ _PROGUARD_ELEMENT_RES = [ _PROGUARD_INDENT_WIDTH = 2 _PROGUARD_ANNOTATION_VALUE_RE = re.compile(r'^(\s*?)- \S+? \[(.*)\]$') -_PROGUARD_PATH_SDK = os.path.join( - constants.PROGUARD_ROOT, 'lib', 'proguard.jar') -_PROGUARD_PATH_BUILT = ( - os.path.join(os.environ['ANDROID_BUILD_TOP'], 'external', 'proguard', - 'lib', 'proguard.jar') - if 'ANDROID_BUILD_TOP' in os.environ else None) -_PROGUARD_PATH = ( - _PROGUARD_PATH_SDK if os.path.exists(_PROGUARD_PATH_SDK) - else _PROGUARD_PATH_BUILT) + +def _GetProguardPath(): + # Use the one in lib.java rather than source tree because it is the one that + # is added to swarming .isolate files. + return os.path.join( + constants.GetOutDirectory(), 'lib.java', 'third_party', 'proguard', + 'proguard603.jar') def Dump(jar_path): @@ -96,7 +94,7 @@ def Dump(jar_path): with tempfile.NamedTemporaryFile() as proguard_output: cmd_helper.GetCmdStatusAndOutput([ 'java', - '-jar', _PROGUARD_PATH, + '-jar', _GetProguardPath(), '-injars', jar_path, '-dontshrink', '-dontoptimize', '-dontobfuscate', '-dontpreverify', '-dump', proguard_output.name]) diff --git a/chromium/build/android/pylib/valgrind_tools.py b/chromium/build/android/pylib/valgrind_tools.py index 3dc2488b269..4c27b083b7a 100644 --- a/chromium/build/android/pylib/valgrind_tools.py +++ b/chromium/build/android/pylib/valgrind_tools.py @@ -127,4 +127,3 @@ def PushFilesForTool(tool_name, device): print 'Unknown tool %s, available tools: %s' % ( tool_name, ', '.join(sorted(TOOL_REGISTRY.keys()))) sys.exit(1) - diff --git a/chromium/build/android/pylintrc b/chromium/build/android/pylintrc index 8005a5d276c..2a721bf2709 100644 --- a/chromium/build/android/pylintrc +++ b/chromium/build/android/pylintrc @@ -4,7 +4,7 @@ max-line-length=80 [MESSAGES CONTROL] -disable=abstract-class-not-used,bad-continuation,bad-indentation,duplicate-code,fixme,invalid-name,locally-disabled,locally-enabled,missing-docstring,star-args,too-few-public-methods,too-many-arguments,too-many-branches,too-many-instance-attributes,too-many-lines,too-many-locals,too-many-public-methods,too-many-statements, +disable=abstract-class-not-used,bad-continuation,bad-indentation,duplicate-code,fixme,invalid-name,locally-disabled,locally-enabled,missing-docstring,star-args,too-few-public-methods,too-many-arguments,too-many-branches,too-many-instance-attributes,too-many-lines,too-many-locals,too-many-public-methods,too-many-statements,wrong-import-position [REPORTS] diff --git a/chromium/build/android/resource_sizes.py b/chromium/build/android/resource_sizes.py index 6287d9842e4..d87a8e25a62 100755 --- a/chromium/build/android/resource_sizes.py +++ b/chromium/build/android/resource_sizes.py @@ -99,9 +99,9 @@ _BASE_CHART = { } _DUMP_STATIC_INITIALIZERS_PATH = os.path.join( host_paths.DIR_SOURCE_ROOT, 'tools', 'linux', 'dump-static-initializers.py') -# Pragma exists when enable_resource_whitelist_generation=true. -_RC_HEADER_RE = re.compile( - r'^#define (?P<name>\w+) (?:_Pragma\(.*?\) )?(?P<id>\d+)$') +# Macro definitions look like (something, 123) when +# enable_resource_whitelist_generation=true. +_RC_HEADER_RE = re.compile(r'^#define (?P<name>\w+).* (?P<id>\d+)\)?$') _RE_NON_LANGUAGE_PAK = re.compile(r'^assets/.*(resources|percent)\.pak$') _RE_COMPRESSED_LANGUAGE_PAK = re.compile( r'\.lpak$|^assets/(?!stored-locales/).*(?!resources|percent)\.pak$') diff --git a/chromium/build/android/stacktrace/java_deobfuscate_test.py b/chromium/build/android/stacktrace/java_deobfuscate_test.py index 58ab1e8f48a..6ee40ce5b5d 100755 --- a/chromium/build/android/stacktrace/java_deobfuscate_test.py +++ b/chromium/build/android/stacktrace/java_deobfuscate_test.py @@ -6,10 +6,14 @@ """Tests for java_deobfuscate.""" import argparse +import os import subprocess import sys import tempfile +import unittest +# Set by command-line argument. +_JAVA_DEOBFUSCATE_PATH = None LINE_PREFIXES = [ '', @@ -59,44 +63,75 @@ this.was.Deobfuscated: Error message """.splitlines(True) -def _RunTest(bin_path, map_file, prefix): - cmd = [bin_path, map_file] - payload = TEST_DATA - expected_output = EXPECTED_OUTPUT +class JavaDeobfuscateTest(unittest.TestCase): - payload = [prefix + x for x in payload] - expected_output = [prefix + x for x in expected_output] + def __init__(self, *args, **kwargs): + super(JavaDeobfuscateTest, self).__init__(*args, **kwargs) + self._map_file = None - proc = subprocess.Popen(cmd, stdin=subprocess.PIPE, stdout=subprocess.PIPE) - actual_output = proc.communicate(''.join(payload))[0].splitlines(True) - any_unexpected_failures = False - for actual, expected in zip(actual_output, expected_output): - if actual == expected: - sys.stdout.write('Good: ' + actual) - elif actual.replace('bar', 'someMethod') == expected: - # TODO(agrieve): Fix ReTrace's ability to deobfuscated methods. - sys.stdout.write('Fine: ' + actual) - else: - sys.stdout.write('BAD: ' + actual) - any_unexpected_failures = True - return not any_unexpected_failures + def setUp(self): + self._map_file = tempfile.NamedTemporaryFile() + self._map_file.write(TEST_MAP) + self._map_file.flush() + def tearDown(self): + if self._map_file: + self._map_file.close() -def main(): - parser = argparse.ArgumentParser() - parser.add_argument('path_to_java_deobfuscate') - args = parser.parse_args() + def _testImpl(self, input_lines=None, expected_output_lines=None, + prefix=''): + self.assertTrue(bool(input_lines) == bool(expected_output_lines)) + + if not input_lines: + input_lines = [prefix + x for x in TEST_DATA] + if not expected_output_lines: + expected_output_lines = [prefix + x for x in EXPECTED_OUTPUT] + + cmd = [_JAVA_DEOBFUSCATE_PATH, self._map_file.name] + proc = subprocess.Popen(cmd, stdin=subprocess.PIPE, stdout=subprocess.PIPE) + proc_output, _ = proc.communicate(''.join(input_lines)) + actual_output_lines = proc_output.splitlines(True) + for actual, expected in zip(actual_output_lines, expected_output_lines): + self.assertTrue( + actual == expected or actual.replace('bar', 'someMethod') == expected, + msg=''.join([ + 'Deobfuscation failed.\n', + ' actual: %s' % actual, + ' expected: %s' % expected])) + + def testNoPrefix(self): + self._testImpl(prefix='') - with tempfile.NamedTemporaryFile() as map_file: - map_file.write(TEST_MAP) - map_file.flush() - passed = True - for prefix in LINE_PREFIXES: - if not _RunTest(args.path_to_java_deobfuscate, map_file.name, prefix): - passed = False - print 'Result:', 'PASS' if passed else 'FAIL' - sys.exit(int(not passed)) + def testThreadtimePrefix(self): + self._testImpl(prefix='09-08 14:38:35.535 18029 18084 E qcom_sensors_hal: ') + + def testStandardPrefix(self): + self._testImpl(prefix='W/GCM (15158): ') + + def testStandardPrefixWithPadding(self): + self._testImpl(prefix='W/GCM ( 158): ') + + @unittest.skip('causes java_deobfuscate to hang, see crbug.com/876539') + def testIndefiniteHang(self): + # Test for crbug.com/876539. + self._testImpl( + input_lines=[ + 'VFY: unable to resolve virtual method 2: LFOO;' + + '.onDescendantInvalidated ' + + '(Landroid/view/View;Landroid/view/View;)V', + ], + expected_output_lines=[ + 'VFY: unable to resolve virtual method 2: Lthis.was.Deobfuscated;' + + '.onDescendantInvalidated ' + + '(Landroid/view/View;Landroid/view/View;)V', + ]) if __name__ == '__main__': - main() + parser = argparse.ArgumentParser() + parser.add_argument('--java-deobfuscate-path', type=os.path.realpath, + required=True) + known_args, unittest_args = parser.parse_known_args() + _JAVA_DEOBFUSCATE_PATH = known_args.java_deobfuscate_path + unittest_args = [sys.argv[0]] + unittest_args + unittest.main(argv=unittest_args) diff --git a/chromium/build/android/test_runner.py b/chromium/build/android/test_runner.py index a83d9ab6950..8512accd1b9 100755 --- a/chromium/build/android/test_runner.py +++ b/chromium/build/android/test_runner.py @@ -25,6 +25,7 @@ import unittest # See http://crbug.com/724524 and https://bugs.python.org/issue7980. import _strptime # pylint: disable=unused-import +# pylint: disable=ungrouped-imports from pylib.constants import host_paths if host_paths.DEVIL_PATH not in sys.path: @@ -49,7 +50,6 @@ from pylib.utils import logging_utils from py_utils import contextlib_ext - _DEVIL_STATIC_CONFIG_FILE = os.path.abspath(os.path.join( host_paths.DIR_SOURCE_ROOT, 'build', 'android', 'devil_config.json')) @@ -212,10 +212,12 @@ def AddCommonOptions(parser): def ProcessCommonOptions(args): """Processes and handles all common options.""" run_tests_helper.SetLogLevel(args.verbose_count, add_handler=False) + # pylint: disable=redefined-variable-type if args.verbose_count > 0: handler = logging_utils.ColorStreamHandler() else: handler = logging.StreamHandler(sys.stdout) + # pylint: enable=redefined-variable-type handler.setFormatter(run_tests_helper.CustomFormatter()) logging.getLogger().addHandler(handler) @@ -429,6 +431,7 @@ def AddInstrumentationTestOptions(parser): split_arg = arg.split(',') if len(split_arg) != 2: raise argparse.ArgumentError( + arg, 'Expected two comma-separated strings for --replace-system-package, ' 'received %d' % len(split_arg)) PackageReplacement = collections.namedtuple('PackageReplacement', diff --git a/chromium/build/check_gn_headers_whitelist.txt b/chromium/build/check_gn_headers_whitelist.txt index 9547f354b76..a435ceb6207 100644 --- a/chromium/build/check_gn_headers_whitelist.txt +++ b/chromium/build/check_gn_headers_whitelist.txt @@ -51,7 +51,6 @@ chrome/browser/component_updater/component_installer_errors.h chrome/browser/download/download_file_icon_extractor.h chrome/browser/extensions/api/networking_cast_private/chrome_networking_cast_private_delegate.h chrome/browser/extensions/api/omnibox/omnibox_api_testbase.h -chrome/browser/extensions/api/socket/mock_tcp_client_socket.h chrome/browser/mac/bluetooth_utility.h chrome/browser/media/router/mojo/media_route_provider_util_win.h chrome/browser/media/webrtc/desktop_media_list_ash.h @@ -61,7 +60,6 @@ chrome/browser/media_galleries/media_file_system_context.h chrome/browser/notifications/displayed_notifications_dispatch_callback.h chrome/browser/permissions/permission_queue_controller.h chrome/browser/prefs/active_profile_pref_service.h -chrome/browser/rlz/chrome_rlz_tracker_delegate.h chrome/browser/ui/android/content_settings/subresource_filter_infobar_delegate.h chrome/browser/ui/app_icon_loader_delegate.h chrome/browser/ui/app_list/app_list_syncable_service_factory.h @@ -235,7 +233,6 @@ remoting/protocol/video_feedback_stub.h remoting/protocol/video_stream.h sandbox/linux/system_headers/capability.h services/service_manager/public/c/main.h -services/ui/ws/ids.h skia/ext/convolver_mips_dspr2.h skia/ext/skia_commit_hash.h testing/gmock_mutant.h @@ -346,7 +343,6 @@ third_party/woff2/src/port.h third_party/yasm/source/config/linux/config.h third_party/yasm/source/config/linux/libyasm-stdint.h third_party/zlib/contrib/minizip/crypt.h -tools/battor_agent/battor_protocol_types.h tools/gn/ordered_set.h tools/ipc_fuzzer/message_lib/all_message_null_macros.h ui/app_list/app_list_export.h @@ -362,7 +358,6 @@ ui/gl/GL/glextchromium.h ui/gl/gl_bindings_api_autogen_egl.h ui/gl/gl_bindings_api_autogen_gl.h ui/gl/gl_bindings_api_autogen_glx.h -ui/gl/gl_bindings_api_autogen_osmesa.h ui/gl/gpu_preference.h ui/gl/gpu_switching_observer.h ui/ozone/ozone_base_export.h diff --git a/chromium/build/chromeos/PRESUBMIT.py b/chromium/build/chromeos/PRESUBMIT.py new file mode 100644 index 00000000000..5700f542bd0 --- /dev/null +++ b/chromium/build/chromeos/PRESUBMIT.py @@ -0,0 +1,24 @@ +# 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. + +"""Presubmit script for build/chromeos/. + +See http://dev.chromium.org/developers/how-tos/depottools/presubmit-scripts for +details on the presubmit API built into depot_tools. +""" + + +def CommonChecks(input_api, output_api): + return input_api.canned_checks.RunPylint( + input_api, + output_api, + pylintrc='pylintrc') + + +def CheckChangeOnUpload(input_api, output_api): + return CommonChecks(input_api, output_api) + + +def CheckChangeOnCommit(input_api, output_api): + return CommonChecks(input_api, output_api) diff --git a/chromium/build/chromeos/create_vm_test_script.py b/chromium/build/chromeos/create_vm_test_script.py index f14b81814cd..80a7dbb4467 100755 --- a/chromium/build/chromeos/create_vm_test_script.py +++ b/chromium/build/chromeos/create_vm_test_script.py @@ -10,7 +10,6 @@ build/chromeos/run_vm_test.py. import argparse import os -import re import sys @@ -42,6 +41,7 @@ if __name__ == '__main__': sys.exit(main()) """ + def main(args): parser = argparse.ArgumentParser() parser.add_argument('--script-output-path') @@ -50,9 +50,9 @@ def main(args): parser.add_argument('--runtime-deps-path') parser.add_argument('--cros-cache') parser.add_argument('--board') + parser.add_argument('--deploy-chrome', action='store_true') args = parser.parse_args(args) - def RelativizePathToScript(path): return os.path.relpath(path, os.path.dirname(args.script_output_path)) @@ -63,6 +63,7 @@ def main(args): '--board', args.board, '-v', ] + if args.test_exe: vm_test_args.extend([ 'vm-test', @@ -71,6 +72,8 @@ def main(args): ]) else: vm_test_args.append('host-cmd') + if args.deploy_chrome: + vm_test_args.append('--deploy-chrome') vm_test_path_args = [ ('--cros-cache', RelativizePathToScript(args.cros_cache)), diff --git a/chromium/build/chromeos/pylintrc b/chromium/build/chromeos/pylintrc new file mode 100644 index 00000000000..2a721bf2709 --- /dev/null +++ b/chromium/build/chromeos/pylintrc @@ -0,0 +1,15 @@ +[FORMAT] + +max-line-length=80 + +[MESSAGES CONTROL] + +disable=abstract-class-not-used,bad-continuation,bad-indentation,duplicate-code,fixme,invalid-name,locally-disabled,locally-enabled,missing-docstring,star-args,too-few-public-methods,too-many-arguments,too-many-branches,too-many-instance-attributes,too-many-lines,too-many-locals,too-many-public-methods,too-many-statements,wrong-import-position + +[REPORTS] + +reports=no + +[VARIABLES] + +dummy-variables-rgx=^_.*$|dummy diff --git a/chromium/build/chromeos/run_vm_test.py b/chromium/build/chromeos/run_vm_test.py index bbc2089c629..f392ca4e95e 100755 --- a/chromium/build/chromeos/run_vm_test.py +++ b/chromium/build/chromeos/run_vm_test.py @@ -5,16 +5,15 @@ # found in the LICENSE file. import argparse -import contextlib import json import logging import os import re import signal -import stat import sys +import tempfile -import psutil +import psutil # pylint: disable=import-error CHROMIUM_SRC_PATH = os.path.abspath(os.path.join( os.path.dirname(__file__), '..', '..')) @@ -22,268 +21,364 @@ CHROMIUM_SRC_PATH = os.path.abspath(os.path.join( # Use the android test-runner's gtest results support library for generating # output json ourselves. sys.path.insert(0, os.path.join(CHROMIUM_SRC_PATH, 'build', 'android')) -from pylib.base import base_test_result -from pylib.results import json_results +from pylib.base import base_test_result # pylint: disable=import-error +from pylib.results import json_results # pylint: disable=import-error # Use luci-py's subprocess42.py sys.path.insert( 0, os.path.join(CHROMIUM_SRC_PATH, 'tools', 'swarming_client', 'utils')) -import subprocess42 +import subprocess42 # pylint: disable=import-error CHROMITE_PATH = os.path.abspath(os.path.join( CHROMIUM_SRC_PATH, 'third_party', 'chromite')) CROS_RUN_VM_TEST_PATH = os.path.abspath(os.path.join( CHROMITE_PATH, 'bin', 'cros_run_vm_test')) +# GN target that corresponds to the cros browser sanity test. +SANITY_TEST_TARGET = 'cros_vm_sanity_test' -_FILE_BLACKLIST = [ - re.compile(r'.*build/chromeos.*'), - re.compile(r'.*build/cros_cache.*'), - re.compile(r'.*third_party/chromite.*'), -] +class TestFormatError(Exception): + pass -def read_runtime_files(runtime_deps_path, outdir): - if not runtime_deps_path: - return [] - abs_runtime_deps_path = os.path.abspath( - os.path.join(outdir, runtime_deps_path)) - with open(abs_runtime_deps_path) as runtime_deps_file: - files = [l.strip() for l in runtime_deps_file if l] - rel_file_paths = [] - for f in files: - rel_file_path = os.path.relpath( - os.path.abspath(os.path.join(outdir, f)), - os.getcwd()) - if not any(regex.match(rel_file_path) for regex in _FILE_BLACKLIST): - rel_file_paths.append(rel_file_path) +class RemoteTest(object): - return rel_file_paths + def __init__(self, args, unknown_args): + self._additional_args = unknown_args + self._path_to_outdir = args.path_to_outdir + self._test_exe = args.test_exe + self._test_launcher_summary_output = args.test_launcher_summary_output + self._vm_logs_dir = args.vm_logs_dir + self._test_env = os.environ.copy() + self._retries = 0 + self._timeout = None -def host_cmd(args, unknown_args): - if not args.cmd: - logging.error('Must specify command to run on the host.') - return 1 - elif unknown_args: - logging.error( - 'Args "%s" unsupported. Is your host command correctly formatted?', - ' '.join(unknown_args)) - return 1 + self._vm_test_cmd = [ + CROS_RUN_VM_TEST_PATH, + '--start', + '--board', args.board, + '--cache-dir', args.cros_cache, + ] + if args.vm_logs_dir: + self._vm_test_cmd += [ + '--results-src', '/var/log/', + '--results-dest-dir', args.vm_logs_dir, + ] - cros_run_vm_test_cmd = [ - CROS_RUN_VM_TEST_PATH, - '--start', - '--board', args.board, - '--cache-dir', args.cros_cache, + @property + def vm_test_cmd(self): + return self._vm_test_cmd + + def run_test(self): + # Traps SIGTERM and kills all child processes of cros_run_vm_test when it's + # caught. This will allow us to capture logs from the VM if a test hangs + # and gets timeout-killed by swarming. See also: + # https://chromium.googlesource.com/infra/luci/luci-py/+/master/appengine/swarming/doc/Bot.md#graceful-termination_aka-the-sigterm-and-sigkill-dance + test_proc = None + def _kill_child_procs(trapped_signal, _): + logging.warning( + 'Received signal %d. Killing child processes of test.', + trapped_signal) + if not test_proc or not test_proc.pid: + # This shouldn't happen? + logging.error('Test process not running.') + return + for child in psutil.Process(test_proc.pid).children(): + logging.warning('Killing process %s', child) + child.kill() + + signal.signal(signal.SIGTERM, _kill_child_procs) + + for i in xrange(self._retries+1): + logging.info('########################################') + logging.info('Test attempt #%d', i) + logging.info('########################################') + test_proc = subprocess42.Popen( + self._vm_test_cmd, stdout=sys.stdout, stderr=sys.stderr, + env=self._test_env) + try: + test_proc.wait(timeout=self._timeout) + except subprocess42.TimeoutExpired: + logging.error('Test timed out. Sending SIGTERM.') + # SIGTERM the proc and wait 10s for it to close. + test_proc.terminate() + try: + test_proc.wait(timeout=10) + except subprocess42.TimeoutExpired: + # If it hasn't closed in 10s, SIGKILL it. + logging.error('Test did not exit in time. Sending SIGKILL.') + test_proc.kill() + test_proc.wait() + logging.info('Test exitted with %d.', test_proc.returncode) + if test_proc.returncode == 0: + break + + self.post_run(test_proc.returncode) + return test_proc.returncode + + def post_run(self, return_code): + raise NotImplementedError() + + +class GTestTest(RemoteTest): + + _FILE_BLACKLIST = [ + re.compile(r'.*build/chromeos.*'), + re.compile(r'.*build/cros_cache.*'), + re.compile(r'.*third_party/chromite.*'), ] - if args.verbose: - cros_run_vm_test_cmd.append('--debug') - cros_run_vm_test_cmd += [ - '--host-cmd', - '--', - ] + args.cmd + def __init__(self, args, unknown_args): + super(GTestTest, self).__init__(args, unknown_args) + + self._runtime_deps_path = args.runtime_deps_path + self._vpython_dir = args.vpython_dir + + self._test_launcher_shard_index = args.test_launcher_shard_index + self._test_launcher_total_shards = args.test_launcher_total_shards + + self._on_vm_script = None + + def build_test_command(self): + # To keep things easy for us, ensure both types of output locations are + # the same. + if self._test_launcher_summary_output and self._vm_logs_dir: + json_out_dir = os.path.dirname(self._test_launcher_summary_output) or '.' + if os.path.abspath(json_out_dir) != os.path.abspath(self._vm_logs_dir): + raise TestFormatError( + '--test-launcher-summary-output and --vm-logs-dir must point to ' + 'the same directory.') + + if self._test_launcher_summary_output: + result_dir, result_file = os.path.split( + self._test_launcher_summary_output) + # If args.test_launcher_summary_output is a file in cwd, result_dir will + # be an empty string, so replace it with '.' when this is the case so + # cros_run_vm_test can correctly handle it. + if not result_dir: + result_dir = '.' + vm_result_file = '/tmp/%s' % result_file + self._vm_test_cmd += [ + '--results-src', vm_result_file, + '--results-dest-dir', result_dir, + ] - logging.info('Running the following command:') - logging.info(' '.join(cros_run_vm_test_cmd)) + # Build the shell script that will be used on the VM to invoke the test. + vm_test_script_contents = ['#!/bin/sh'] - return subprocess42.call( - cros_run_vm_test_cmd, stdout=sys.stdout, stderr=sys.stderr) + # /home is mounted with "noexec" in the VM, but some of our tools + # and tests use the home dir as a workspace (eg: vpython downloads + # python binaries to ~/.vpython-root). /tmp doesn't have this + # restriction, so change the location of the home dir for the + # duration of the test. + vm_test_script_contents.append('export HOME=/tmp') + if self._vpython_dir: + vpython_spec_path = os.path.relpath( + os.path.join(CHROMIUM_SRC_PATH, '.vpython'), + self._path_to_outdir) + # Initialize the vpython cache. This can take 10-20s, and some tests + # can't afford to wait that long on the first invocation. + vm_test_script_contents.extend([ + 'export PATH=$PATH:$PWD/%s' % (self._vpython_dir), + 'vpython -vpython-spec %s -vpython-tool install' % ( + vpython_spec_path), + ]) + + test_invocation = ( + './%s --test-launcher-shard-index=%d ' + '--test-launcher-total-shards=%d' % ( + self._test_exe, self._test_launcher_shard_index, + self._test_launcher_total_shards) + ) + if self._test_launcher_summary_output: + test_invocation += ' --test-launcher-summary-output=%s' % vm_result_file + if self._additional_args: + test_invocation += ' %s' % ' '.join(self._additional_args) + vm_test_script_contents.append(test_invocation) + + logging.info('Running the following command in the VM:') + logging.info('\n'.join(vm_test_script_contents)) + fd, tmp_path = tempfile.mkstemp(suffix='.sh', dir=self._path_to_outdir) + os.fchmod(fd, 0755) + with os.fdopen(fd, 'wb') as f: + f.write('\n'.join(vm_test_script_contents)) + self._on_vm_script = tmp_path + + runtime_files = [os.path.relpath(self._on_vm_script)] + runtime_files += self._read_runtime_files() + if self._vpython_dir: + # --vpython-dir is relative to the out dir, but --files expects paths + # relative to src dir, so fix the path up a bit. + runtime_files.append( + os.path.relpath( + os.path.abspath(os.path.join(self._path_to_outdir, + self._vpython_dir)), + CHROMIUM_SRC_PATH)) + # TODO(bpastene): Add the vpython spec to the test's runtime deps instead + # of handling it here. + runtime_files.append('.vpython') + + # Since we're pushing files, we need to set the cwd. + self._vm_test_cmd.extend( + ['--cwd', os.path.relpath(self._path_to_outdir, CHROMIUM_SRC_PATH)]) + for f in runtime_files: + self._vm_test_cmd.extend(['--files', f]) + + self._vm_test_cmd += [ + # Some tests fail as root, so run as the less privileged user 'chronos'. + '--as-chronos', + '--cmd', + '--', + './' + os.path.relpath(self._on_vm_script, self._path_to_outdir) + ] -def vm_test(args, unknown_args): - is_sanity_test = args.test_exe == 'cros_vm_sanity_test' - - # To keep things easy for us, ensure both types of output locations are - # the same. - if args.test_launcher_summary_output and args.vm_logs_dir: - json_output_dir = os.path.dirname(args.test_launcher_summary_output) or '.' - if os.path.abspath(json_output_dir) != os.path.abspath(args.vm_logs_dir): - logging.error( - '--test-launcher-summary-output and --vm-logs-dir must point to ' - 'the same directory.') - return 1 + def _read_runtime_files(self): + if not self._runtime_deps_path: + return [] - cros_run_vm_test_cmd = [ - CROS_RUN_VM_TEST_PATH, - '--start', - '--board', args.board, - '--cache-dir', args.cros_cache, - ] + abs_runtime_deps_path = os.path.abspath( + os.path.join(self._path_to_outdir, self._runtime_deps_path)) + with open(abs_runtime_deps_path) as runtime_deps_file: + files = [l.strip() for l in runtime_deps_file if l] + rel_file_paths = [] + for f in files: + rel_file_path = os.path.relpath( + os.path.abspath(os.path.join(self._path_to_outdir, f))) + if not any(regex.match(rel_file_path) for regex in self._FILE_BLACKLIST): + rel_file_paths.append(rel_file_path) + return rel_file_paths - # cros_run_vm_test has trouble with relative paths that go up directories, so - # cd to src/, which should be the root of all data deps. - os.chdir(CHROMIUM_SRC_PATH) + def post_run(self, _): + if self._on_vm_script: + os.remove(self._on_vm_script) - runtime_files = read_runtime_files( - args.runtime_deps_path, args.path_to_outdir) - if args.vpython_dir: - # --vpython-dir is relative to the out dir, but --files expects paths - # relative to src dir, so fix the path up a bit. - runtime_files.append( - os.path.relpath( - os.path.abspath(os.path.join(args.path_to_outdir, - args.vpython_dir)), - CHROMIUM_SRC_PATH)) - runtime_files.append('.vpython') - - # If we're pushing files, we need to set the cwd. - if runtime_files: - cros_run_vm_test_cmd.extend( - ['--cwd', os.path.relpath(args.path_to_outdir, CHROMIUM_SRC_PATH)]) - for f in runtime_files: - cros_run_vm_test_cmd.extend(['--files', f]) - - if args.vm_logs_dir: - cros_run_vm_test_cmd += [ - '--results-src', '/var/log/', - '--results-dest-dir', args.vm_logs_dir, - ] - if args.test_launcher_summary_output and not is_sanity_test: - result_dir, result_file = os.path.split(args.test_launcher_summary_output) - # If args.test_launcher_summary_output is a file in cwd, result_dir will be - # an empty string, so replace it with '.' when this is the case so - # cros_run_vm_test can correctly handle it. - if not result_dir: - result_dir = '.' - vm_result_file = '/tmp/%s' % result_file - cros_run_vm_test_cmd += [ - '--results-src', vm_result_file, - '--results-dest-dir', result_dir, - ] +class BrowserSanityTest(RemoteTest): + + def __init__(self, args, unknown_args): + super(BrowserSanityTest, self).__init__(args, unknown_args) + + # 5 min should be enough time for the sanity test to pass. + self._retries = 2 + self._timeout = 300 + + def build_test_command(self): + if '--gtest_filter=%s' % SANITY_TEST_TARGET in self._additional_args: + logging.info( + 'GTest filtering not supported for the sanity test. The ' + '--gtest_filter arg will be ignored.') + self._additional_args.remove('--gtest_filter=%s' % SANITY_TEST_TARGET) + + if self._additional_args: + raise TestFormatError( + 'Sanity test should not have additional args: %s' % ( + self._additional_args)) - if is_sanity_test: # run_cros_vm_test's default behavior when no cmd is specified is the sanity # test that's baked into the VM image. This test smoke-checks the system # browser, so deploy our locally-built chrome to the VM before testing. - cros_run_vm_test_cmd += [ + self._vm_test_cmd += [ '--deploy', - '--build-dir', os.path.relpath(args.path_to_outdir, CHROMIUM_SRC_PATH), + '--build-dir', os.path.relpath(self._path_to_outdir, CHROMIUM_SRC_PATH), ] + + # deploy_chrome needs a set of GN args used to build chrome to determine if + # certain libraries need to be pushed to the VM. It looks for the args via + # an env var. To trigger the default deploying behavior, give it a dummy set + # of args. + # TODO(crbug.com/823996): Make the GN-dependent deps controllable via cmd + # line args. + if not self._test_env.get('GN_ARGS'): + self._test_env['GN_ARGS'] = 'is_chromeos = true' + self._test_env['PATH'] = ( + self._test_env['PATH'] + ':' + os.path.join(CHROMITE_PATH, 'bin')) + + def post_run(self, return_code): + # Create a simple json results file for the sanity test if needed. The + # results will contain only one test (SANITY_TEST_TARGET), and will + # either be a PASS or FAIL depending on the return code of cros_run_vm_test. + if self._test_launcher_summary_output: + result = (base_test_result.ResultType.FAIL if return_code else + base_test_result.ResultType.PASS) + sanity_test_result = base_test_result.BaseTestResult( + SANITY_TEST_TARGET, result) + run_results = base_test_result.TestRunResults() + run_results.AddResult(sanity_test_result) + with open(self._test_launcher_summary_output, 'w') as f: + json.dump(json_results.GenerateResultsDict([run_results]), f) + + +def vm_test(args, unknown_args): + # cros_run_vm_test has trouble with relative paths that go up directories, + # so cd to src/, which should be the root of all data deps. + os.chdir(CHROMIUM_SRC_PATH) + + # pylint: disable=redefined-variable-type + # TODO: Remove the above when depot_tool's pylint is updated to include the + # fix to https://github.com/PyCQA/pylint/issues/710. + if args.test_exe == SANITY_TEST_TARGET: + test = BrowserSanityTest(args, unknown_args) else: - pre_test_cmds = [ - # /home is mounted with "noexec" in the VM, but some of our tools - # and tests use the home dir as a workspace (eg: vpython downloads - # python binaries to ~/.vpython-root). /tmp doesn't have this - # restriction, so change the location of the home dir for the - # duration of the test. - 'export HOME=/tmp', '\;', - ] - if args.vpython_dir: - vpython_spec_path = os.path.relpath( - os.path.join(CHROMIUM_SRC_PATH, '.vpython'), - args.path_to_outdir) - pre_test_cmds += [ - # Backslash is needed to prevent $PATH from getting prematurely - # executed on the host. - 'export PATH=\$PATH:\$PWD/%s' % args.vpython_dir, '\;', - # Initialize the vpython cache. This can take 10-20s, and some tests - # can't afford to wait that long on the first invocation. - 'vpython', '-vpython-spec', vpython_spec_path, '-vpython-tool', - 'install', '\;', - ] - cros_run_vm_test_cmd += [ - # Some tests fail as root, so run as the less privileged user 'chronos'. - '--as-chronos', - '--cmd', - '--', - # Wrap the cmd to run in the VM around quotes (") so that the - # interpreter on the host doesn't stop at any ";" or "&&" tokens in the - # cmd. - '"', - ] + pre_test_cmds + [ - './' + args.test_exe, - '--test-launcher-shard-index=%d' % args.test_launcher_shard_index, - '--test-launcher-total-shards=%d' % args.test_launcher_total_shards, - ] + unknown_args + [ - '"', - ] + test = GTestTest(args, unknown_args) + + test.build_test_command() + logging.info('Running the following command on the host:') + logging.info(' '.join(test.vm_test_cmd)) + + return test.run_test() + + +def host_cmd(args, unknown_args): + if not args.cmd: + raise TestFormatError('Must specify command to run on the host.') + elif unknown_args: + raise TestFormatError( + 'Args "%s" unsupported. Is your host command correctly formatted?' % ( + ' '.join(unknown_args))) + elif args.deploy_chrome and not args.path_to_outdir: + raise TestFormatError( + '--path-to-outdir must be specified if --deploy-chrome is passed.') + + cros_run_vm_test_cmd = [ + CROS_RUN_VM_TEST_PATH, + '--start', + '--board', args.board, + '--cache-dir', args.cros_cache, + ] + if args.verbose: + cros_run_vm_test_cmd.append('--debug') - if args.test_launcher_summary_output and not is_sanity_test: + test_env = os.environ.copy() + if args.deploy_chrome: cros_run_vm_test_cmd += [ - '--test-launcher-summary-output=%s' % vm_result_file, + '--deploy', + '--build-dir', os.path.abspath(args.path_to_outdir), ] + # If we're deploying, push chromite/bin's deploy_chrome onto PATH. + test_env['PATH'] = ( + test_env['PATH'] + ':' + os.path.join(CHROMITE_PATH, 'bin')) + # deploy_chrome needs a set of GN args used to build chrome to determine if + # certain libraries need to be pushed to the VM. It looks for the args via + # an env var. To trigger the default deploying behavior, give it a dummy set + # of args. + # TODO(crbug.com/823996): Make the GN-dependent deps controllable via cmd + # line args. + if not test_env.get('GN_ARGS'): + test_env['GN_ARGS'] = 'is_chromeos = true' + + cros_run_vm_test_cmd += [ + '--host-cmd', + '--', + ] + args.cmd logging.info('Running the following command:') logging.info(' '.join(cros_run_vm_test_cmd)) - # deploy_chrome needs a set of GN args used to build chrome to determine if - # certain libraries need to be pushed to the VM. It looks for the args via an - # env var. To trigger the default deploying behavior, give it a dummy set of - # args. - # TODO(crbug.com/823996): Make the GN-dependent deps controllable via cmd-line - # args. - env_copy = os.environ.copy() - if not env_copy.get('GN_ARGS'): - env_copy['GN_ARGS'] = 'is_chromeos = true' - env_copy['PATH'] = env_copy['PATH'] + ':' + os.path.join(CHROMITE_PATH, 'bin') - - # Traps SIGTERM and kills all child processes of cros_run_vm_test when it's - # caught. This will allow us to capture logs from the VM if a test hangs - # and gets timeout-killed by swarming. See also: - # https://chromium.googlesource.com/infra/luci/luci-py/+/master/appengine/swarming/doc/Bot.md#graceful-termination_aka-the-sigterm-and-sigkill-dance - test_proc = None - def _kill_child_procs(trapped_signal, _): - logging.warning( - 'Received signal %d. Killing child processes of test.', trapped_signal) - if not test_proc or not test_proc.pid: - # This shouldn't happen? - logging.error('Test process not running.') - return - for child in psutil.Process(test_proc.pid).children(): - logging.warning('Killing process %s', child) - child.kill() - - # Standard GTests should handle retries and timeouts themselves. - retries, timeout = 0, None - if is_sanity_test: - # 5 min should be enough time for the sanity test to pass. - retries, timeout = 2, 300 - signal.signal(signal.SIGTERM, _kill_child_procs) - - for i in xrange(retries+1): - logging.info('########################################') - logging.info('Test attempt #%d', i) - logging.info('########################################') - test_proc = subprocess42.Popen( - cros_run_vm_test_cmd, stdout=sys.stdout, stderr=sys.stderr, - env=env_copy) - try: - test_proc.wait(timeout=timeout) - except subprocess42.TimeoutExpired: - logging.error('Test timed out. Sending SIGTERM.') - # SIGTERM the proc and wait 10s for it to close. - test_proc.terminate() - try: - test_proc.wait(timeout=10) - except subprocess42.TimeoutExpired: - # If it hasn't closed in 10s, SIGKILL it. - logging.error('Test did not exit in time. Sending SIGKILL.') - test_proc.kill() - test_proc.wait() - logging.info('Test exitted with %d.', test_proc.returncode) - if test_proc.returncode == 0: - break - - rc = test_proc.returncode - - # Create a simple json results file for the sanity test if needed. The results - # will contain only one test ('cros_vm_sanity_test'), and will either be a - # PASS or FAIL depending on the return code of cros_run_vm_test above. - if args.test_launcher_summary_output and is_sanity_test: - result = (base_test_result.ResultType.FAIL if rc else - base_test_result.ResultType.PASS) - sanity_test_result = base_test_result.BaseTestResult( - 'cros_vm_sanity_test', result) - run_results = base_test_result.TestRunResults() - run_results.AddResult(sanity_test_result) - with open(args.test_launcher_summary_output, 'w') as f: - json.dump(json_results.GenerateResultsDict([run_results]), f) - - return rc + return subprocess42.call( + cros_run_vm_test_cmd, stdout=sys.stdout, stderr=sys.stderr, env=test_env) def main(): @@ -301,6 +396,14 @@ def main(): host_cmd_parser.set_defaults(func=host_cmd) host_cmd_parser.add_argument( '--cros-cache', type=str, required=True, help='Path to cros cache.') + host_cmd_parser.add_argument( + '--path-to-outdir', type=os.path.realpath, + help='Path to output directory, all of whose contents will be deployed ' + 'to the device.') + host_cmd_parser.add_argument( + '--deploy-chrome', action='store_true', + help='Will deploy a locally built Chrome binary to the VM before running ' + 'the host-cmd.') host_cmd_parser.add_argument('cmd', nargs=argparse.REMAINDER) # VM-side test args. vm_test_parser = subparsers.add_parser( @@ -312,11 +415,11 @@ def main(): vm_test_parser.add_argument( '--test-exe', type=str, required=True, help='Path to test executable to run inside VM. If the value is ' - '"cros_vm_sanity_test", the sanity test that ships with the VM ' + '%s, the sanity test that ships with the VM ' 'image runs instead. This test smokes-check the system browser ' '(eg: loads a simple webpage, executes some javascript), so a ' 'fully-built Chrome binary that can get deployed to the VM is ' - 'expected to available in the out-dir.') + 'expected to be available in the out-dir.' % SANITY_TEST_TARGET) # GTest args. Some are passed down to the test binary in the VM. Others are # parsed here since they might need tweaking or special handling. diff --git a/chromium/build/compute_build_timestamp.py b/chromium/build/compute_build_timestamp.py new file mode 100755 index 00000000000..a7191bb24c9 --- /dev/null +++ b/chromium/build/compute_build_timestamp.py @@ -0,0 +1,120 @@ +#!/usr/bin/env python +# Copyright 2018 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. +"""Returns a timestamp that approximates the build date. + +build_type impacts the timestamp generated, both relative to the date of the +last recent commit: +- default: the build date is set to the most recent first Sunday of a month at + 5:00am. The reason is that it is a time where invalidating the build cache + shouldn't have major reprecussions (due to lower load). +- official: the build date is set to the current date at 5:00am, or the day + before if the current time is before 5:00am. +Either way, it is guaranteed to be in the past and always in UTC. +""" + +# The requirements for the timestamp: +# (1) for the purposes of continuous integration, longer duration +# between cache invalidation is better, but >=1mo is preferable. +# (2) for security purposes, timebombs would ideally be as close to +# the actual time of the build as possible. It must be in the past. +# (3) HSTS certificate pinning is valid for 70 days. To make CI builds enforce +# HTST pinning, <=1mo is preferable. +# +# On Windows, the timestamp is also written in the PE/COFF file header of +# executables of dlls. That timestamp and the executable's file size are +# the only two pieces of information that identify a given executable on +# the symbol server, so rarely changing timestamps can cause conflicts there +# as well. We only upload symbols for official builds to the symbol server. + +import argparse +import calendar +import datetime +import doctest +import os +import sys + + +THIS_DIR = os.path.abspath(os.path.dirname(__file__)) + + +def GetFirstSundayOfMonth(year, month): + """Returns the first sunday of the given month of the given year. + + >>> GetFirstSundayOfMonth(2016, 2) + 7 + >>> GetFirstSundayOfMonth(2016, 3) + 6 + >>> GetFirstSundayOfMonth(2000, 1) + 2 + """ + weeks = calendar.Calendar().monthdays2calendar(year, month) + # Return the first day in the first week that is a Sunday. + return [date_day[0] for date_day in weeks[0] if date_day[1] == 6][0] + + +def GetBuildDate(build_type, utc_now): + """Gets the approximate build date given the specific build type. + + >>> GetBuildDate('default', datetime.datetime(2016, 2, 6, 1, 2, 3)) + datetime.datetime(2016, 1, 3, 1, 2, 3) + >>> GetBuildDate('default', datetime.datetime(2016, 2, 7, 5)) + datetime.datetime(2016, 2, 7, 5, 0) + >>> GetBuildDate('default', datetime.datetime(2016, 2, 8, 5)) + datetime.datetime(2016, 2, 7, 5, 0) + >>> GetBuildDate('official', datetime.datetime(2016, 2, 8, 5)) + datetime.datetime(2016, 2, 8, 5, 0) + """ + day = utc_now.day + month = utc_now.month + year = utc_now.year + if build_type != 'official': + first_sunday = GetFirstSundayOfMonth(year, month) + # If our build is after the first Sunday, we've already refreshed our build + # cache on a quiet day, so just use that day. + # Otherwise, take the first Sunday of the previous month. + if day >= first_sunday: + day = first_sunday + else: + month -= 1 + if month == 0: + month = 12 + year -= 1 + day = GetFirstSundayOfMonth(year, month) + return datetime.datetime( + year, month, day, utc_now.hour, utc_now.minute, utc_now.second) + + +def main(): + if doctest.testmod()[0]: + return 1 + argument_parser = argparse.ArgumentParser() + argument_parser.add_argument( + 'build_type', help='The type of build', choices=('official', 'default')) + args = argument_parser.parse_args() + + # The mtime of the revision in build/util/LASTCHANGE is stored in a file + # next to it. Read it, to get a deterministic time close to "now". + # That date is then modified as described at the top of the file so that + # it changes less frequently than with every commit. + # This intentionally always uses build/util/LASTCHANGE's commit time even if + # use_dummy_lastchange is set. + lastchange_file = os.path.join(THIS_DIR, 'util', 'LASTCHANGE.committime') + last_commit_timestamp = int(open(lastchange_file).read()) + now = datetime.datetime.utcfromtimestamp(last_commit_timestamp) + + if now.hour < 5: + # The time is locked at 5:00 am in UTC to cause the build cache + # invalidation to not happen exactly at midnight. Use the same calculation + # as the day before. + # See //base/build_time.cc. + now = now - datetime.timedelta(days=1) + now = datetime.datetime(now.year, now.month, now.day, 5, 0, 0) + build_date = GetBuildDate(args.build_type, now) + print int(calendar.timegm(build_date.utctimetuple())) + return 0 + + +if __name__ == '__main__': + sys.exit(main()) diff --git a/chromium/build/config/BUILD.gn b/chromium/build/config/BUILD.gn index 997cdc85ec9..b3cb81ca05a 100644 --- a/chromium/build/config/BUILD.gn +++ b/chromium/build/config/BUILD.gn @@ -277,7 +277,7 @@ config("default_libs") { } # Only //build/config/BUILDCONFIG.gn should reference this. -group("executable_and_loadable_module_and_shared_library_deps") { +group("common_deps") { public_deps = [] if (using_sanitizer) { @@ -301,6 +301,27 @@ group("executable_and_loadable_module_and_shared_library_deps") { } } +group("executable_deps") { + public_deps = [ + ":common_deps", + ] + if (export_libcxxabi_from_executables) { + public_deps += [ "//buildtools/third_party/libc++abi" ] + } +} + +group("loadable_module_deps") { + public_deps = [ + ":common_deps", + ] +} + +group("shared_library_deps") { + public_deps = [ + ":common_deps", + ] +} + # Executable configs ----------------------------------------------------------- # Windows linker setup for EXEs and DLLs. diff --git a/chromium/build/config/BUILDCONFIG.gn b/chromium/build/config/BUILDCONFIG.gn index fcc00ee0e49..387fdb2795a 100644 --- a/chromium/build/config/BUILDCONFIG.gn +++ b/chromium/build/config/BUILDCONFIG.gn @@ -522,7 +522,6 @@ default_compiler_configs = [ "//build/config/compiler:afdo", "//build/config/compiler:afdo_optimize_size", "//build/config/compiler:compiler", - "//build/config/compiler:clang_stackrealign", "//build/config/compiler:compiler_arm_fpu", "//build/config/compiler:compiler_arm_thumb", "//build/config/compiler:chromium_code", @@ -530,6 +529,7 @@ default_compiler_configs = [ "//build/config/compiler:default_optimization", "//build/config/compiler:default_stack_frames", "//build/config/compiler:default_symbols", + "//build/config/compiler:export_dynamic", "//build/config/compiler:no_exceptions", "//build/config/compiler:no_rtti", "//build/config/compiler:runtime_library", @@ -577,10 +577,6 @@ if (is_clang && !is_nacl) { ] } -if (is_desktop_linux) { - default_compiler_configs += [ "//build/config/linux:export_dynamic" ] -} - # Debug/release-related defines. if (is_debug) { default_compiler_configs += [ "//build/config:debug" ] @@ -651,20 +647,20 @@ set_defaults("loadable_module") { # # Variables # no_default_deps: If true, no standard dependencies will be added. -foreach(target_type, +foreach(_target_type, [ "executable", "loadable_module", "shared_library", ]) { - template(target_type) { - target(target_type, target_name) { + template(_target_type) { + target(_target_type, target_name) { forward_variables_from(invoker, "*", [ "no_default_deps" ]) if (!defined(deps)) { deps = [] } if (!defined(invoker.no_default_deps) || !invoker.no_default_deps) { - deps += [ "//build/config:executable_and_loadable_module_and_shared_library_deps" ] + deps += [ "//build/config:${_target_type}_deps" ] } } } diff --git a/chromium/build/config/allocator.gni b/chromium/build/config/allocator.gni index 709f80f3563..6a144e1bde0 100644 --- a/chromium/build/config/allocator.gni +++ b/chromium/build/config/allocator.gni @@ -32,6 +32,9 @@ declare_args() { # Partition alloc is included by default except iOS. use_partition_alloc = !is_ios + + # Use the new tcmalloc. It's relevant only when use_allocator == "tcmalloc". + use_new_tcmalloc = false } if (is_nacl) { diff --git a/chromium/build/config/android/BUILD.gn b/chromium/build/config/android/BUILD.gn index dbf6e4a99a5..5ebde213fbe 100644 --- a/chromium/build/config/android/BUILD.gn +++ b/chromium/build/config/android/BUILD.gn @@ -3,6 +3,7 @@ # found in the LICENSE file. import("//build/config/android/config.gni") +import("//build/config/compiler/compiler.gni") import("//build/config/c++/c++.gni") import("//build/config/sanitizers/sanitizers.gni") @@ -81,12 +82,6 @@ config("compiler") { rebase_path("$android_ndk_root/sysroot/usr/include/$abi_target", root_build_dir), "-D__ANDROID_API__=$compile_api_level", - - # Temporary workaround for third party dependencies requiring this to be - # defined. - # TODO(crbug.com/771171): Remove this once the third party deps have been - # fixed to be compatible with newer NDK versions - "-D__NDK_FPABI__=", ] ldflags += [ "--target=$abi_target" ] @@ -194,12 +189,14 @@ config("executable_config") { config("hide_all_but_jni_onload") { ldflags = [ "-Wl,--version-script=" + rebase_path( - "//build/android/android_only_explicit_jni_exports.lst") ] + "//build/android/android_only_explicit_jni_exports.lst", + root_build_dir) ] } config("hide_all_but_jni") { ldflags = [ "-Wl,--version-script=" + - rebase_path("//build/android/android_only_jni_exports.lst") ] + rebase_path("//build/android/android_only_jni_exports.lst", + root_build_dir) ] } config("lld_pack_relocations") { @@ -210,5 +207,10 @@ config("lld_pack_relocations") { config("default_orderfile_instrumentation") { if (use_order_profiling) { cflags = [ "-finstrument-function-entry-bare" ] + if (use_thin_lto) { + # TODO(pcc): This should not be necessary. Remove once + # https://reviews.llvm.org/D50017 lands and gets rolled in. + ldflags = [ "-Wl,-u,__cyg_profile_func_enter_bare" ] + } } } diff --git a/chromium/build/config/android/chrome_version.gni b/chromium/build/config/android/chrome_version.gni new file mode 100644 index 00000000000..1531bf21701 --- /dev/null +++ b/chromium/build/config/android/chrome_version.gni @@ -0,0 +1,16 @@ +# Copyright 2018 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. + +import("//build/config/android/config.gni") +import("//build/util/version.gni") + +chrome_version_name = android_default_version_name +if (chrome_version_name == "Developer Build") { + # In general, let the versionName attribute in the APK be the real chromium + # version number. This is important for WebView/Monochrome, as we expose this + # in an API, but we implement this for other Chrome targets for consistency. + # We check for "Developer Build" so that we don't interfere with official + # builders (which currently set the version number with this GN arg). + chrome_version_name = chrome_version_full +} diff --git a/chromium/build/config/android/config.gni b/chromium/build/config/android/config.gni index b919f1829e0..3799dad1b2f 100644 --- a/chromium/build/config/android/config.gni +++ b/chromium/build/config/android/config.gni @@ -8,6 +8,7 @@ # toolchain, this GNI file may be read and processed from within Chrome OS # toolchains. Checking |is_android| here would therefore be too restrictive. if (is_android || is_chromeos) { + import("//build/config/chromecast_build.gni") import("//build_overrides/build.gni") import("abi.gni") @@ -116,11 +117,11 @@ if (is_android || is_chromeos) { # google_play_services_package contains the path where individual client # targets (e.g. google_play_services_base_java) are located. if (!defined(google_play_services_package)) { - google_play_services_package = "//third_party/android_tools" - } - - if (!defined(android_support_library_package)) { - android_support_library_package = "//third_party/android_tools/support" + if (is_chromecast && chromecast_branding != "public") { + google_play_services_package = "//chromecast/internal/android/prebuilt/google-play-services-first-party" + } else { + google_play_services_package = "//third_party/android_tools" + } } if (!defined(system_webview_apk_target)) { @@ -167,9 +168,6 @@ if (is_android || is_chromeos) { # The password for the keystore to use for signing builds. android_keystore_password = default_android_keystore_password - # Enables verbose proguard output (summaries and unfiltered output). - proguard_verbose = false - # Java debug on Android. Having this on enables multidexing, and turning it # off will enable proguard. is_java_debug = is_debug @@ -209,13 +207,16 @@ if (is_android || is_chromeos) { # Refer to android_aar_prebuilt() for more details. update_android_aar_prebuilts = false - # When true, uses the third party libraries from //third_party/android_deps - # over the ones in other places. (instead of the support library from - # android_tools for example) - enable_android_deps_repository = true - # Turns off android lint. Useful for prototyping or for faster local builds. disable_android_lint = false + + # Location of aapt2 binary used for app bundles. For now, a more recent version + # than the one distributed with the Android SDK is required. + android_sdk_tools_bundle_aapt2 = + "//third_party/android_build_tools/aapt2/aapt2" + + # Path to r8.jar. If specified, will be used instead of ProGuard for optimization. + experimental_r8_path = "" } # We need a second declare_args block to make sure we are using the overridden @@ -353,13 +354,6 @@ if (is_android || is_chromeos) { if (android_libcpp_lib_dir == "") { android_libcpp_lib_dir = "${android_libcpp_root}/libs/${android_app_abi}" } - - declare_args() { - # Location of aapt2 binary used for app bundles. For now, a more recent version - # than the one distributed with the Android SDK is required. - android_sdk_tools_bundle_aapt2 = - "//third_party/android_build_tools/aapt2/aapt2" - } } declare_args() { diff --git a/chromium/build/config/android/internal_rules.gni b/chromium/build/config/android/internal_rules.gni index 0de3860ccf5..46c6dae1d27 100644 --- a/chromium/build/config/android/internal_rules.gni +++ b/chromium/build/config/android/internal_rules.gni @@ -6,14 +6,15 @@ # Some projects (e.g. V8) do not have non-build directories DEPS'ed in. import("//build_overrides/build.gni") import("//build/config/android/config.gni") -import("//build/config/compute_inputs_for_analyze.gni") import("//build/config/dcheck_always_on.gni") +import("//build/config/python.gni") import("//build/config/sanitizers/sanitizers.gni") assert(is_android) # These identify targets that have .build_config files (except for android_apk, -# java_binary, resource_rewriter, since we never need to depend on these). +# java_binary, resource_rewriter, android_app_bundle since we never need to +# depend on these). _java_target_whitelist = [ "*:*_java", "*:*_javalib", @@ -30,6 +31,7 @@ _java_target_whitelist = [ "*:*_resources", "*:*_grd", "*:*locale_paks", + "*_module", # TODO(agrieve): Rename targets below to match above patterns. "*android_webview/glue:glue", @@ -43,14 +45,6 @@ _java_target_blacklist = [ _default_proguard_jar_path = "//third_party/proguard/lib/proguard.jar" -# List of .py files required when scripts import build_utils.py. -# Use this for "inputs" for actions that rely on build_utils.py. -build_utils_py = [ - "//build/android/gyp/util/build_utils.py", - "//build/android/gyp/util/md5_check.py", - "//build/gn_helpers.py", -] - # Write the target's .build_config file. This is a json file that contains a # dictionary of information about how to build this target (things that # require knowledge about this target's dependencies and cannot be calculated @@ -67,7 +61,8 @@ template("write_build_config") { # consider them in dependency chains. if (_type != "android_apk" && _type != "java_binary" && _type != "resource_rewriter" && _type != "dist_jar" && - _type != "java_annotation_processor" && _type != "dist_aar") { + _type != "java_annotation_processor" && _type != "dist_aar" && + _type != "android_app_bundle") { set_sources_assignment_filter(_java_target_whitelist) _parent_invoker = invoker.invoker _target_label = @@ -88,7 +83,7 @@ template("write_build_config") { sources = [] } - action(target_name) { + action_with_pydeps(target_name) { forward_variables_from(invoker, [ "deps", @@ -103,7 +98,7 @@ template("write_build_config") { script = "//build/android/gyp/write_build_config.py" depfile = "$target_gen_dir/$target_name.d" - inputs = build_utils_py + inputs = [] outputs = [ invoker.build_config, ] @@ -289,10 +284,15 @@ template("write_build_config") { ] } + if (defined(invoker.loadable_modules) && invoker.loadable_modules != []) { + _rebased_modules = rebase_path(invoker.loadable_modules, root_build_dir) + args += [ "--native-libs=$_rebased_modules" ] + } + if (defined(invoker.extra_shared_libraries)) { _rebased_extra_shared_libraries = rebase_path(invoker.extra_shared_libraries, root_build_dir) - args += [ "--extra-shared-libraries=$_rebased_extra_shared_libraries" ] + args += [ "--native-libs=$_rebased_extra_shared_libraries" ] } if (defined(invoker.secondary_abi_shared_libraries_runtime_deps_file)) { @@ -306,6 +306,13 @@ template("write_build_config") { ] } + if (defined(invoker.secondary_abi_loadable_modules) && + invoker.secondary_abi_loadable_modules != []) { + _rebased_secondary_abi_modules = + rebase_path(invoker.secondary_abi_loadable_modules, root_build_dir) + args += [ "--secondary-native-libs=$_rebased_secondary_abi_modules" ] + } + if (defined(invoker.uncompress_shared_libraries) && invoker.uncompress_shared_libraries) { args += [ "--uncompress-shared-libraries" ] @@ -428,7 +435,7 @@ template("write_build_config") { # template("copy_ex") { set_sources_assignment_filter([]) - action(target_name) { + action_with_pydeps(target_name) { forward_variables_from(invoker, [ "data", @@ -441,9 +448,8 @@ template("copy_ex") { if (defined(invoker.sources)) { sources += invoker.sources } - inputs = build_utils_py if (defined(invoker.inputs)) { - inputs += invoker.inputs + inputs = invoker.inputs } script = "//build/android/gyp/copy_ex.py" @@ -509,7 +515,7 @@ template("test_runner_script") { } } - action(target_name) { + action_with_pydeps(target_name) { forward_variables_from(invoker, [ "data_deps", @@ -523,7 +529,6 @@ template("test_runner_script") { } script = "//build/android/gyp/create_test_runner_script.py" - inputs = build_utils_py data_deps += [ "//build/android:test_runner_py", @@ -621,25 +626,25 @@ template("test_runner_script") { "--android-manifest-path", rebase_path(invoker.android_manifest_path, root_build_dir), ] - } - - if (defined(invoker.package_name)) { + } else if (defined(invoker.package_name)) { test_runner_args += [ "--package-name", invoker.package_name, ] - - deps += [ ":${invoker.test_suite}__build_config" ] - _junit_binary_build_config = - "${target_gen_dir}/${invoker.test_suite}.build_config" - _rebased_build_config = - rebase_path("$_junit_binary_build_config", root_build_dir) - test_runner_args += [ - "--resource-zips", - "@FileArg($_rebased_build_config:resources:dependency_zips)", - ] + } else { + assert(false, "Must specify a package_name or android_manifest_path") } + deps += [ ":${invoker.test_suite}__build_config" ] + _junit_binary_build_config = + "${target_gen_dir}/${invoker.test_suite}.build_config" + _rebased_build_config = + rebase_path("$_junit_binary_build_config", root_build_dir) + test_runner_args += [ + "--resource-zips", + "@FileArg($_rebased_build_config:resources:dependency_zips)", + ] + test_runner_args += [ "--robolectric-runtime-deps-dir", rebase_path("$root_build_dir/lib.java/third_party/robolectric", @@ -715,15 +720,12 @@ template("test_runner_script") { } template("stack_script") { - forward_variables_from(invoker, [ "testonly" ]) - - _stack_target_name = invoker.stack_target_name - - action(target_name) { + action_with_pydeps(target_name) { forward_variables_from(invoker, [ "data_deps", "deps", + "testonly", ]) if (!defined(deps)) { deps = [] @@ -736,8 +738,8 @@ template("stack_script") { [ "//third_party/android_platform/development/scripts:stack_py" ] script = "//build/android/gyp/create_stack_script.py" - inputs = build_utils_py + _stack_target_name = invoker.stack_target_name _stack_script = "//third_party/android_platform/development/scripts/stack" _generated_script = "$root_build_dir/bin/stack_${_stack_target_name}" @@ -773,7 +775,7 @@ if (enable_java_templates) { android_default_aapt2_path = "$android_sdk_build_tools/aapt2" template("android_lint") { - action(target_name) { + action_with_pydeps(target_name) { forward_variables_from(invoker, [ "deps", @@ -801,10 +803,10 @@ if (enable_java_templates) { script = "//build/android/gyp/lint.py" depfile = "$target_gen_dir/$target_name.d" - inputs = build_utils_py + [ - _platform_xml_path, - _suppressions_file, - ] + inputs = [ + _platform_xml_path, + _suppressions_file, + ] outputs = [ _result_path, @@ -881,7 +883,7 @@ if (enable_java_templates) { } template("proguard") { - action(target_name) { + action_with_pydeps(target_name) { set_sources_assignment_filter([]) forward_variables_from(invoker, [ @@ -902,21 +904,17 @@ if (enable_java_templates) { _proguard_jar_path = invoker.proguard_jar_path } - inputs = build_utils_py + [ - "//build/android/gyp/util/proguard_util.py", - _proguard_jar_path, - invoker.build_config, - ] + inputs = [ + _proguard_jar_path, + invoker.build_config, + ] if (defined(invoker.inputs)) { inputs += invoker.inputs } depfile = "${target_gen_dir}/${target_name}.d" outputs = [ _output_jar_path, - "$_output_jar_path.flags", "$_output_jar_path.mapping", - "$_output_jar_path.seeds", - "$_output_jar_path.usage", ] _rebased_build_config = rebase_path(invoker.build_config, root_build_dir) args = [ @@ -927,10 +925,15 @@ if (enable_java_templates) { "--output-path", rebase_path(_output_jar_path, root_build_dir), "--classpath", + "@FileArg($_rebased_build_config:deps_info:proguard_classpath_jars)", + "--classpath", "@FileArg($_rebased_build_config:android:sdk_jars)", ] - if (proguard_verbose) { - args += [ "--verbose" ] + if (experimental_r8_path != "") { + args += [ + "--r8-path", + rebase_path(experimental_r8_path, root_build_dir), + ] } if (defined(invoker.args)) { args += invoker.args @@ -956,7 +959,7 @@ if (enable_java_templates) { # class path when the script will invoke javac. # template("java_binary_script") { - action(target_name) { + action_with_pydeps(target_name) { forward_variables_from(invoker, [ "deps", @@ -968,7 +971,9 @@ if (enable_java_templates) { _script_name = invoker.script_name script = "//build/android/gyp/create_java_binary_script.py" - inputs = build_utils_py + [ _build_config ] + inputs = [ + _build_config, + ] _java_script = "$root_build_dir/bin/$_script_name" outputs = [ _java_script, @@ -1013,7 +1018,7 @@ if (enable_java_templates) { if (_enable_multidex) { _main_dex_list_path = invoker.output + ".main_dex_list" _main_dex_list_target_name = "${target_name}__main_dex_list" - action(_main_dex_list_target_name) { + action_with_pydeps(_main_dex_list_target_name) { forward_variables_from(invoker, [ "deps", @@ -1036,13 +1041,12 @@ if (enable_java_templates) { _shrinked_android = "$android_sdk_build_tools/lib/shrinkedAndroid.jar" _dx = "$android_sdk_build_tools/lib/dx.jar" - inputs = build_utils_py + [ - "//build/android/gyp/util/proguard_util.py", - main_dex_rules, - _dx, - _proguard_jar_path, - _shrinked_android, - ] + inputs = [ + main_dex_rules, + _dx, + _proguard_jar_path, + _shrinked_android, + ] outputs = [ _main_dex_list_path, @@ -1089,7 +1093,7 @@ if (enable_java_templates) { } assert(defined(invoker.output)) - action(target_name) { + action_with_pydeps(target_name) { forward_variables_from(invoker, [ "deps", @@ -1097,7 +1101,7 @@ if (enable_java_templates) { ]) script = "//build/android/gyp/dex.py" depfile = "$target_gen_dir/$target_name.d" - inputs = build_utils_py + inputs = [] outputs = [ invoker.output, ] @@ -1145,7 +1149,7 @@ if (enable_java_templates) { } template("emma_instr") { - action(target_name) { + action_with_pydeps(target_name) { forward_variables_from(invoker, [ "deps", @@ -1158,7 +1162,7 @@ if (enable_java_templates) { _emma_jar = "${android_sdk_root}/tools/lib/emma.jar" script = "//build/android/gyp/emma_instr.py" - inputs = build_utils_py + invoker.java_files + [ + inputs = invoker.java_files + [ _emma_jar, invoker.input_jar_path, ] @@ -1266,7 +1270,7 @@ if (enable_java_templates) { _java_bytecode_rewriter_output_jar = "$target_out_dir/$target_name-bytecode-rewritten.jar" - action(_java_bytecode_rewriter_target) { + action_with_pydeps(_java_bytecode_rewriter_target) { script = "//build/android/gyp/bytecode_processor.py" _bytecode_rewriter_script = "$root_build_dir/bin/helper/java_bytecode_rewriter" @@ -1317,7 +1321,7 @@ if (enable_java_templates) { _desugar_input_jar = _previous_output_jar _desugar_output_jar = "$target_out_dir/$target_name-desugar.jar" - action(_desugar_target) { + action_with_pydeps(_desugar_target) { script = "//build/android/gyp/desugar.py" deps = _deps if (defined(invoker.deps)) { @@ -1325,11 +1329,11 @@ if (enable_java_templates) { } _desugar_jar = "//third_party/bazel/desugar/Desugar.jar" - inputs = build_utils_py + [ - _build_config, - _desugar_input_jar, - _desugar_jar, - ] + inputs = [ + _build_config, + _desugar_input_jar, + _desugar_jar, + ] outputs = [ _desugar_output_jar, ] @@ -1355,16 +1359,16 @@ if (enable_java_templates) { _filter_input_jar = _previous_output_jar _filter_output_jar = "$target_out_dir/$target_name-filtered.jar" - action(_filter_target) { + action_with_pydeps(_filter_target) { script = "//build/android/gyp/filter_zip.py" deps = _deps if (defined(invoker.deps)) { deps += invoker.deps } - inputs = build_utils_py + [ - _build_config, - _filter_input_jar, - ] + inputs = [ + _build_config, + _filter_input_jar, + ] outputs = [ _filter_output_jar, ] @@ -1446,7 +1450,7 @@ if (enable_java_templates) { } template("merge_manifests") { - action(target_name) { + action_with_pydeps(target_name) { forward_variables_from(invoker, [ "deps", @@ -1455,10 +1459,10 @@ if (enable_java_templates) { script = "//build/android/gyp/merge_manifest.py" depfile = "$target_gen_dir/$target_name.d" - inputs = build_utils_py + [ - invoker.build_config, - invoker.input_manifest, - ] + inputs = [ + invoker.build_config, + invoker.input_manifest, + ] outputs = [ invoker.output_manifest, @@ -1480,19 +1484,6 @@ if (enable_java_templates) { } } - if (compute_inputs_for_analyze) { - _prepare_resources_py = - exec_script("//build/print_python_deps.py", - [ - rebase_path("//build/android/gyp/prepare_resources.py"), - "--no-header", - "--gn-paths", - "--root", - rebase_path("//", root_build_dir), - ], - "list lines") - } - # This template is used to parse a set of resource directories and # create the R.txt, .srcjar and .resources.zip for it. # @@ -1548,7 +1539,7 @@ if (enable_java_templates) { if (defined(invoker.srcjar_path)) { _srcjar_path = invoker.srcjar_path } - action(target_name) { + action_with_pydeps(target_name) { set_sources_assignment_filter([]) forward_variables_from(invoker, [ @@ -1589,9 +1580,6 @@ if (enable_java_templates) { invoker.build_config, _android_aapt_path, ] - if (compute_inputs_for_analyze) { - inputs += _prepare_resources_py - } _rebased_all_resource_dirs = rebase_path(_all_resource_dirs, root_build_dir) @@ -1676,19 +1664,6 @@ if (enable_java_templates) { } } - if (compute_inputs_for_analyze) { - _compile_resources_py = - exec_script("//build/print_python_deps.py", - [ - rebase_path("//build/android/gyp/compile_resources.py"), - "--no-header", - "--gn-paths", - "--root", - rebase_path("//", root_build_dir), - ], - "list lines") - } - # A template that is used to compile all resources needed by a binary # (e.g. an android_apk or a junit_binary) into an intermediate .ar_ # archive. It can also generate an associated .srcjar that contains the @@ -1791,7 +1766,7 @@ if (enable_java_templates) { # _2.d for the optional processed compiled resources. # _3.d for the proto-compiled resources. - action(_compile_resources_target_name) { + action_with_pydeps(_compile_resources_target_name) { set_sources_assignment_filter([]) forward_variables_from(invoker, [ @@ -1814,9 +1789,6 @@ if (enable_java_templates) { invoker.build_config, _android_aapt_path, ] - if (compute_inputs_for_analyze) { - inputs += _compile_resources_py - } _rebased_build_config = rebase_path(invoker.build_config, root_build_dir) @@ -2027,57 +1999,6 @@ if (enable_java_templates) { } } - # Compile resources for an APK. - # - # This is very similar to compile_resources, except that it can *also* - # compile the same set of inputs using the new protocol-buffer based - # format, if proto_outut and proto_resources_target are set. - # - # Takes the same variables as compile_resources, with the following - # extras: - # - # proto_output: optional. If provided, the path to an output file that - # will contain the resources compiled in the new protocol buffer format. - # proto_resources_target: required when proto_output is set. Name of the - # target associated with compiling the protocol-buffer based resources. - # - template("compile_apk_resources") { - # First call to compile_resources() is used to generate the compiled - # resources using the standard binary xml + resources.arsc format. - compile_resources(target_name) { - forward_variables_from(invoker, - "*", - [ - "proto_format", - "proto_output", - "proto_resources_target", - ]) - } - - # The second call is optional, and is only used to compile the resources - # using the new protocol buffer based format. This omits the generation of - # R.txt, /srcjar and proguard files (performed during the first call), or - # resources post-processing. - if (defined(invoker.proto_output)) { - compile_resources(invoker.proto_resources_target) { - forward_variables_from(invoker, - "*", - [ - "output", - "post_process_script", - "proguard_file", - "proguard_file_main_dex", - "proto_output", - "proto_resources_target", - "r_text_out_path", - "srcjar_path", - ]) - output = invoker.proto_output - proto_format = true - } - } - } - # Create an apk.jar.info file by merging several .jar.info files into one. # # Variables: @@ -2089,17 +2010,16 @@ if (enable_java_templates) { _output = invoker.output _build_config = invoker.apk_build_config _rebased_build_config = rebase_path(_build_config, root_build_dir) - action(target_name) { + action_with_pydeps(target_name) { forward_variables_from(invoker, [ "testonly", "deps", ]) script = "//build/android/gyp/merge_jar_info_files.py" - inputs = build_utils_py + [ - _build_config, - "//build/android/gyp/util/jar_info_utils.py", - ] + inputs = [ + _build_config, + ] outputs = [ _output, ] @@ -2135,7 +2055,7 @@ if (enable_java_templates) { # native_libs_filearg: @FileArg() of additionally native libraries. # secondary_abi_native_libs: (optional) List of native libraries for # secondary ABI. - # secondary_abi_native_libs_filearg: (optiona). @FileArg() of additional + # secondary_abi_native_libs_filearg: (optional). @FileArg() of additional # secondary ABI native libs. # write_asset_list: Adds an extra file to the assets, which contains a list of # all other asset files. @@ -2145,7 +2065,7 @@ if (enable_java_templates) { # uncompress_shared_libraries: (optional, default false) Whether to store # native libraries inside the APK uncompressed and page-aligned. template("package_apk") { - action(target_name) { + action_with_pydeps(target_name) { forward_variables_from(invoker, [ "deps", @@ -2170,8 +2090,7 @@ if (enable_java_templates) { "//tools/android/md5sum", ] # Used when deploying APKs - inputs = build_utils_py + invoker.native_libs + [ - "//build/android/gyp/finalize_apk.py", + inputs = invoker.native_libs + [ invoker.keystore_path, invoker.packaged_resources_path, _apksigner, @@ -2249,8 +2168,8 @@ if (enable_java_templates) { args += [ "--android-abi=$android_app_abi" ] } if (defined(invoker.secondary_abi_native_libs_filearg) || - (defined(invoker.secondary_native_libs) && - invoker.secondary_native_libs != []) || + (defined(invoker.secondary_abi_loadable_modules) && + invoker.secondary_abi_loadable_modules != []) || _secondary_native_lib_placeholders != []) { assert(defined(android_app_secondary_abi)) args += [ "--secondary-android-abi=$android_app_secondary_abi" ] @@ -2269,14 +2188,8 @@ if (enable_java_templates) { args += [ "--secondary-native-lib-placeholders=$_secondary_native_lib_placeholders" ] } - # TODO (michaelbai): Remove the secondary_native_libs variable. if (defined(invoker.secondary_abi_native_libs_filearg)) { args += [ "--secondary-native-libs=${invoker.secondary_abi_native_libs_filearg}" ] - } else if (defined(invoker.secondary_native_libs) && - invoker.secondary_native_libs != []) { - inputs += invoker.secondary_native_libs - _secondary_native_libs = rebase_path(invoker.secondary_native_libs) - args += [ "--secondary-native-libs=$_secondary_native_libs" ] } if (defined(invoker.uncompress_shared_libraries) && @@ -2313,7 +2226,8 @@ if (enable_java_templates) { _native_libs = invoker.native_libs } _native_libs_even_when_incremental = [] - if (defined(invoker.native_libs_even_when_incremental)) { + if (defined(invoker.native_libs_even_when_incremental) && + invoker.native_libs_even_when_incremental != []) { _native_libs_even_when_incremental = invoker.native_libs_even_when_incremental } @@ -2336,7 +2250,7 @@ if (enable_java_templates) { "packaged_resources_path", "secondary_native_lib_placeholders", "secondary_abi_native_libs_filearg", - "secondary_native_libs", + "secondary_abi_loadable_modules", "uncompress_shared_libraries", "write_asset_list", ]) @@ -2378,16 +2292,14 @@ if (enable_java_templates) { _rebased_build_config = rebase_path(invoker.assets_build_config, root_build_dir) - action(_incremental_compile_resources_target_name) { + action_with_pydeps(_incremental_compile_resources_target_name) { deps = _incremental_deps script = "//build/android/incremental_install/generate_android_manifest.py" - inputs = build_utils_py + [ - # Save on a depfile by listing only .py dep here. - "//build/android/gyp/util/build_utils.py", - _android_manifest, - invoker.packaged_resources_path, - ] + inputs = [ + _android_manifest, + invoker.packaged_resources_path, + ] outputs = [ # Output the non-compiled manifest for easy debugging (as opposed to # generating to a temp file). @@ -2417,12 +2329,9 @@ if (enable_java_templates) { forward_variables_from(invoker, [ "assets_build_config", - "secondary_native_libs", + "secondary_abi_loadable_modules", "uncompress_shared_libraries", ]) - if (!defined(uncompress_shared_libraries)) { - uncompress_shared_libraries = _load_library_from_apk - } _dex_target = "//build/android/incremental_install:bootstrap_java__dex" deps = _incremental_deps + [ ":${_incremental_compile_resources_target_name}", @@ -2452,18 +2361,6 @@ if (enable_java_templates) { } } - if (compute_inputs_for_analyze) { - _javac_py = exec_script("//build/print_python_deps.py", - [ - rebase_path("//build/android/gyp/javac.py"), - "--no-header", - "--gn-paths", - "--root", - rebase_path("//", root_build_dir), - ], - "list lines") - } - # Compile Java source files into a .jar file, potentially using an # annotation processor, and/or the errorprone compiler. # @@ -2572,7 +2469,7 @@ if (enable_java_templates) { _javac_args = invoker.javac_args } - action(target_name) { + action_with_pydeps(target_name) { script = "//build/android/gyp/javac.py" depfile = "$target_gen_dir/$target_name.d" deps = _srcjar_deps @@ -2589,9 +2486,6 @@ if (enable_java_templates) { if (invoker.java_files != []) { inputs += [ invoker.java_sources_file ] } - if (compute_inputs_for_analyze) { - inputs += _javac_py - } _rebased_build_config = rebase_path(_build_config, root_build_dir) _rebased_javac_jar_path = @@ -2664,7 +2558,7 @@ if (enable_java_templates) { # output_jar: Path to output .ijar. # template("generate_interface_jar") { - action(target_name) { + action_with_pydeps(target_name) { _ijar_target = "//third_party/ijar:ijar($host_toolchain)" _ijar_executable = get_label_info(_ijar_target, "root_out_dir") + "/ijar" forward_variables_from(invoker, @@ -2682,10 +2576,10 @@ if (enable_java_templates) { if (defined(invoker.deps)) { deps += invoker.deps } - inputs = build_utils_py + [ - invoker.input_jar, - _ijar_executable, - ] + inputs = [ + invoker.input_jar, + _ijar_executable, + ] if (defined(invoker.inputs)) { inputs += invoker.inputs } @@ -2994,31 +2888,40 @@ if (enable_java_templates) { "classpath_deps", "gradle_treat_as_prebuilt", "input_jars_paths", + "loadable_modules", "main_class", "proguard_configs", "proguard_enabled", "proguard_output_jar_path", + "secondary_abi_loadable_modules", "type", ]) - if (type == "android_apk") { + if (type == "android_apk" || type == "android_app_bundle_module") { forward_variables_from( invoker, [ "android_manifest", "android_manifest_dep", - "apk_path", - "apk_under_test", "extra_shared_libraries", "final_dex_path", - "incremental_allowed", - "incremental_apk_path", - "incremental_install_json_path", - "proto_resources_path", "secondary_abi_shared_libraries_runtime_deps_file", "shared_libraries_runtime_deps_file", "uncompress_shared_libraries", ]) } + if (type == "android_apk") { + forward_variables_from(invoker, + [ + "apk_path", + "apk_under_test", + "incremental_allowed", + "incremental_apk_path", + "incremental_install_json_path", + ]) + } + if (type == "android_app_bundle_module") { + forward_variables_from(invoker, [ "proto_resources_path" ]) + } build_config = _build_config is_prebuilt = _is_prebuilt possible_config_deps = _accumulated_deps @@ -3078,6 +2981,7 @@ if (enable_java_templates) { # TODO(agrieve): Enable lint for _has_sources rather than just _java_files. _lint_enabled = _java_files != [] && _supports_android && _chromium_code && !disable_android_lint + if (_has_sources) { _compile_java_target = "${_main_target_name}__compile_java" compile_java(_compile_java_target) { @@ -3116,7 +3020,8 @@ if (enable_java_templates) { } if (_lint_enabled) { android_lint("${_main_target_name}__lint") { - if (invoker.type == "android_apk") { + if (invoker.type == "android_apk" || + invoker.type == "android_app_bundle_module") { forward_variables_from(invoker, [ "android_manifest" ]) } else if (defined(_android_manifest_for_lint)) { android_manifest = _android_manifest_for_lint @@ -3268,11 +3173,15 @@ if (enable_java_templates) { deps = _accumulated_public_deps } _accumulated_public_deps += [ ":${target_name}__java_binary_script" ] + } + if (_is_java_binary || + (_is_annotation_processor && !defined(_final_jar_path))) { group(target_name) { forward_variables_from(invoker, [ "data", + "deps", "data_deps", "visibility", ]) @@ -3290,49 +3199,37 @@ if (enable_java_templates) { # Create a zip archive corresponding to an application bundle module. # -# Each module corresponds to the content of an existing android_apk() target -# except that the internal directory layout is slightly different, and -# resources as well as xml files are compiled into a protocol buffer format, -# instead of the regular binary xml + resources.arsc. +# Compile all the components of a given android_apk_or_module() target into a zip archive +# suitable to later create an android_app_bundle() target. This archive's format is very +# similar to that on an APK, except for a few differences in internal directory +# layouts, and the fact that resources, as well ass xml files, are compiled using a +# protocol-buffer based format (instead of the regular binary xml + resources.arsc). # # A final application bundle is built from one or more module bundle modules, # plus some configuration file. # # Variables: -# apk_target: Name of the android_apk target this module refers to. -# The archive will contain the same content, but organized slightly -# differently. +# module_zip_path: Output module path. # -# module_path: Output module path. +# build_config: Path to build_config of the android_apk_or_module() target. # -template("android_app_bundle_module") { - _apk_target = invoker.apk_target - _apk_target_name = get_label_info(_apk_target, "name") - _apk_target_gen_dir = get_label_info(_apk_target, "target_gen_dir") - - _apk_build_config = "$_apk_target_gen_dir/${_apk_target_name}.build_config" - _rebased_apk_build_config = rebase_path(_apk_build_config, root_build_dir) +# dex_path_file_arg: Path to the module's dex file passed directly to the +# creation script. Must be a rebased path or @FileArg expression. +# +template("create_android_app_bundle_module") { + _build_config = invoker.build_config + _rebased_build_config = rebase_path(_build_config, root_build_dir) - action(target_name) { + action_with_pydeps(target_name) { forward_variables_from(invoker, [ "testonly", "visibility", + "deps", ]) script = "//build/android/gyp/apkbuilder.py" depfile = "$target_gen_dir/$target_name.d" - # NOTE: Building the APK is not necessary to build the bundle module, - # only its individual components, hence depend on their intermediate - # targets itself. This also allows building the APK and the bundle module - # in parallel if necessary. - deps = [ - "${_apk_target}__build_config", - "${_apk_target}__compile_proto_resources", - "${_apk_target}__create", # Required to get final dex zip. - "${_apk_target}__merge_manifests", - ] - # NOTE: Compared to the inputs of the "package_apk" template action, # this list is much smaller, since finalize_apk is never called # by apkbuild.py --format=bundle-module. This means not using @@ -3340,34 +3237,74 @@ template("android_app_bundle_module") { # dependencies like extra native libraries are all pulled from the # .build_config through @FileArg() references (see below) and # will be listed in the generated depfile instead. - inputs = build_utils_py + [ _apk_build_config ] + inputs = [ + _build_config, + ] outputs = [ - invoker.module_path, + invoker.module_zip_path, ] args = [ "--depfile", rebase_path(depfile, root_build_dir), "--format=bundle-module", "--output-apk", - rebase_path(invoker.module_path, root_build_dir), - "--dex-file=@FileArg($_rebased_apk_build_config:final_dex:path)", + rebase_path(invoker.module_zip_path, root_build_dir), + "--dex-file=${invoker.dex_path_file_arg}", "--resource-apk=@FileArg(" + - "$_rebased_apk_build_config:deps_info:proto_resources_path)", - "--assets=@FileArg($_rebased_apk_build_config:assets)", + "$_rebased_build_config:deps_info:proto_resources_path)", + "--assets=@FileArg($_rebased_build_config:assets)", "--uncompressed-assets=@FileArg(" + - "$_rebased_apk_build_config:uncompressed_assets)", - "--native-libs=@FileArg($_rebased_apk_build_config:native:libraries)", - "--native-libs=@FileArg($_rebased_apk_build_config:native:extra_shared_libraries)", + "$_rebased_build_config:uncompressed_assets)", + "--native-libs=@FileArg($_rebased_build_config:native:libraries)", + "--native-libs=@FileArg($_rebased_build_config:native:extra_shared_libraries)", "--android-abi=$android_app_abi", "--uncompress-shared-libraries=@FileArg(" + - "$_rebased_apk_build_config:native:uncompress_shared_libraries)", + "$_rebased_build_config:native:uncompress_shared_libraries)", ] if (defined(android_app_secondary_abi)) { args += [ "--secondary-native-libs=@FileArg(" + - "$_rebased_apk_build_config:native:secondary_abi_libraries)", + "$_rebased_build_config:native:secondary_abi_libraries)", "--secondary-android-abi=$android_app_secondary_abi", ] } } } + +# Extracts a bundle module's classes from jar created in the synchronized +# proguarding step and packages them into a new jar. +# +# Variables: +# proguarded_jar: Path to input jar produced by synchronized proguarding. +# proguard_mapping: Path to input proguard mapping produced by synchronized +# proguarding +# output_jar: Path to output jar file containing the module's optimized class +# files. +# build_config: Path to build config of module. +# is_base_module: True if this is processing a base module. +template("generate_proguarded_module_jar") { + _rebased_build_config = rebase_path(invoker.build_config, root_build_dir) + + action_with_pydeps(target_name) { + forward_variables_from(invoker, [ "deps" ]) + script = "//build/android/gyp/generate_proguarded_module_jar.py" + outputs = [ + invoker.output_jar, + ] + depfile = "${target_gen_dir}/${target_name}.d" + args = [ + "--depfile", + rebase_path(depfile, root_build_dir), + "--proguarded-jar", + rebase_path(invoker.proguarded_jar, root_build_dir), + "--proguard-mapping", + rebase_path(invoker.proguard_mapping, root_build_dir), + "--module-input-jars=@FileArg(${_rebased_build_config}:deps_info:java_runtime_classpath)", + "--output-jar", + rebase_path(invoker.output_jar, root_build_dir), + ] + if (defined(invoker.is_base_module) && invoker.is_base_module) { + args += [ "--is-base-module" ] + } + } +} diff --git a/chromium/build/config/android/rules.gni b/chromium/build/config/android/rules.gni index d9df932e0a8..7f44a34ad69 100644 --- a/chromium/build/config/android/rules.gni +++ b/chromium/build/config/android/rules.gni @@ -8,8 +8,8 @@ import("//build/config/android/config.gni") import("//build/config/android/internal_rules.gni") import("//build/config/clang/clang.gni") import("//build/config/compiler/compiler.gni") -import("//build/config/compute_inputs_for_analyze.gni") import("//build/config/dcheck_always_on.gni") +import("//build/config/python.gni") import("//build/config/zip.gni") import("//build/toolchain/toolchain.gni") @@ -76,7 +76,7 @@ template("create_native_executable_dist") { _find_deps_target_name = "${target_name}__find_library_dependencies" # TODO(agrieve): Extract dependent libs from GN rather than readelf. - action(_find_deps_target_name) { + action_with_pydeps(_find_deps_target_name) { deps = invoker.deps + [ ":$_runtime_deps_target_name" ] script = "//build/android/gyp/write_ordered_libraries.py" depfile = "$target_gen_dir/$target_name.d" @@ -157,7 +157,7 @@ template("create_native_executable_dist") { # target = "//pkg/foo.py" # } template("wrapper_script") { - action(target_name) { + action_with_pydeps(target_name) { _name = get_path_info(invoker.target, "name") _output = "$root_out_dir/bin/$_name" @@ -233,17 +233,14 @@ if (enable_java_templates) { } _foreach_target_name = "${target_name}__jni_gen" - action_foreach(_foreach_target_name) { + action_foreach_with_pydeps(_foreach_target_name) { script = "//base/android/jni_generator/jni_generator.py" - depfile = "$target_gen_dir/$target_name.{{source_name_part}}.d" sources = invoker.sources outputs = [ "${_jni_output_dir}/{{source_name_part}}_jni.h", ] args = [ - "--depfile", - rebase_path(depfile, root_build_dir), "--input_file={{source}}", "--ptr_type=long", "--output_dir", @@ -338,10 +335,9 @@ if (enable_java_templates) { _classname = get_path_info(_class, "name") _jni_target_name = "${target_name}__jni_${_classname}" _jni_actions += [ ":$_jni_target_name" ] - action(_jni_target_name) { + action_with_pydeps(_jni_target_name) { # The sources aren't compiled so don't check their dependencies. check_includes = false - depfile = "$target_gen_dir/$target_name.d" script = "//base/android/jni_generator/jni_generator.py" inputs = [ _jar_file, @@ -351,8 +347,6 @@ if (enable_java_templates) { ] args = [ - "--depfile", - rebase_path(depfile, root_build_dir), "--jar_file", rebase_path(_jar_file, root_build_dir), "--input_file", @@ -402,7 +396,8 @@ if (enable_java_templates) { # target: The Apk target to generate registrations for. # output: Path to the generated .h file. # exception_files: List of .java files that should be ignored when searching - # for native methods. (optional) + # for native methods. (optional) + # namespace: Registration functions will be wrapped into this. (optional) # # Example # generate_jni_registration("chrome_jni_registration") { @@ -413,15 +408,12 @@ if (enable_java_templates) { # ] # } template("generate_jni_registration") { - action(target_name) { + action_with_pydeps(target_name) { forward_variables_from(invoker, [ "testonly" ]) _build_config = get_label_info(invoker.target, "target_gen_dir") + "/" + get_label_info(invoker.target, "name") + ".build_config" _rebased_build_config = rebase_path(_build_config, root_build_dir) - _rebase_exception_java_files = - rebase_path(invoker.exception_files, root_build_dir) - script = "//base/android/jni_generator/jni_registration_generator.py" deps = [ "${invoker.target}__build_config", @@ -439,10 +431,17 @@ if (enable_java_templates) { "--sources_files=@FileArg($_rebased_build_config:jni:all_source)", "--output", rebase_path(invoker.output, root_build_dir), - "--no_register_java=$_rebase_exception_java_files", "--depfile", rebase_path(depfile, root_build_dir), ] + if (defined(invoker.exception_files)) { + _rebase_exception_java_files = + rebase_path(invoker.exception_files, root_build_dir) + args += [ "--no_register_java=$_rebase_exception_java_files" ] + } + if (defined(invoker.namespace)) { + args += [ "--namespace=${invoker.namespace}" ] + } } } @@ -494,7 +493,7 @@ if (enable_java_templates) { _base_gen_dir = "${target_gen_dir}/${target_name}/java_cpp_template" _package_path = invoker.package_path - action_foreach(_apply_gcc_target_name) { + action_foreach_with_pydeps(_apply_gcc_target_name) { forward_variables_from(invoker, [ "deps", @@ -568,7 +567,7 @@ if (enable_java_templates) { # } template("java_cpp_enum") { set_sources_assignment_filter([]) - action(target_name) { + action_with_pydeps(target_name) { forward_variables_from(invoker, [ "sources", @@ -596,19 +595,6 @@ if (enable_java_templates) { } } - if (compute_inputs_for_analyze) { - _jinja_template_pydeps = - exec_script("//build/print_python_deps.py", - [ - rebase_path("//build/android/gyp/jinja_template.py"), - "--no-header", - "--gn-paths", - "--root", - rebase_path("//", root_build_dir), - ], - "list lines") - } - # Declare a target for processing a Jinja template. # # Variables @@ -624,26 +610,20 @@ if (enable_java_templates) { # output = "$target_gen_dir/AndroidManifest.xml" # } template("jinja_template") { - forward_variables_from(invoker, [ "testonly" ]) - - action(target_name) { + action_with_pydeps(target_name) { forward_variables_from(invoker, [ "visibility", "deps", + "testonly", ]) - inputs = [ invoker.input, ] if (defined(invoker.includes)) { inputs += invoker.includes } - if (compute_inputs_for_analyze) { - inputs += _jinja_template_pydeps - } script = "//build/android/gyp/jinja_template.py" - depfile = "$target_gen_dir/$target_name.d" outputs = [ invoker.output, @@ -656,8 +636,7 @@ if (enable_java_templates) { rebase_path(invoker.input, root_build_dir), "--output", rebase_path(invoker.output, root_build_dir), - "--depfile", - rebase_path(depfile, root_build_dir), + "--check-includes", ] if (defined(invoker.includes)) { _rebased_includes = rebase_path(invoker.includes, root_build_dir) @@ -753,8 +732,6 @@ if (enable_java_templates) { # variables = ["color=red"] # } template("jinja_template_resources") { - forward_variables_from(invoker, [ "testonly" ]) - # JUnit tests use resource zip files. These must not be put in gen/ # directory or they will not be available to tester bots. _resources_zip_rebased_path = rebase_path(target_gen_dir, root_gen_dir) @@ -762,11 +739,14 @@ if (enable_java_templates) { _generating_target_name = "${target_name}__template" - action(_generating_target_name) { - forward_variables_from(invoker, [ "deps" ]) + action_with_pydeps(_generating_target_name) { + forward_variables_from(invoker, + [ + "deps", + "testonly", + ]) inputs = invoker.resources script = "//build/android/gyp/jinja_template.py" - depfile = "$target_gen_dir/$target_name.d" outputs = [ _resources_zip, @@ -779,8 +759,7 @@ if (enable_java_templates) { rebase_path(invoker.res_dir, root_build_dir), "--outputs-zip", rebase_path(_resources_zip, root_build_dir), - "--depfile", - rebase_path(depfile, root_build_dir), + "--check-includes", ] if (defined(invoker.variables)) { variables = invoker.variables @@ -789,7 +768,11 @@ if (enable_java_templates) { } android_generated_resources(target_name) { - forward_variables_from(invoker, [ "deps" ]) + forward_variables_from(invoker, + [ + "deps", + "testonly", + ]) generating_target_name = ":$_generating_target_name" generated_resources_zip = _resources_zip } @@ -1255,13 +1238,22 @@ if (enable_java_templates) { _deps += invoker.deps } + # a package name or a manifest is required to have resources. This is + # added so that junit tests that do not care about the package name can + # still use resources without having to explicitly set one. + if (defined(invoker.package_name)) { + _package_name = invoker.package_name + } else if (!defined(invoker.android_manifest_path)) { + _package_name = "org.chromium.test" + } + _prepare_resources_target = "${target_name}__prepare_resources" prepare_resources(_prepare_resources_target) { deps = _deps + [ ":$_build_config_target_name" ] build_config = _build_config srcjar_path = "${target_gen_dir}/${target_name}.srcjar" - if (defined(invoker.package_name)) { - custom_package = invoker.package_name + if (defined(_package_name)) { + custom_package = _package_name } if (defined(invoker.android_manifest_path)) { android_manifest = invoker.android_manifest_path @@ -1301,11 +1293,10 @@ if (enable_java_templates) { test_suite = invoker.target_name test_type = "junit" ignore_all_data_deps = true - forward_variables_from(invoker, - [ - "android_manifest_path", - "package_name", - ]) + forward_variables_from(invoker, [ "android_manifest_path" ]) + if (defined(_package_name)) { + package_name = _package_name + } } group(target_name) { @@ -1527,7 +1518,6 @@ if (enable_java_templates) { args = [ "--proguard-configs=@FileArg($_rebased_build_config:deps_info:proguard_all_configs)", "--input-paths=@FileArg($_rebased_build_config:deps_info:java_runtime_classpath)", - "--classpath=@FileArg($_rebased_build_config:deps_info:proguard_all_extra_jars)", ] if (defined(invoker.proguard_config_exclusions)) { _rebased_proguard_config_exclusions = @@ -1538,7 +1528,7 @@ if (enable_java_templates) { } } } else { - action(_jar_target_name) { + action_with_pydeps(_jar_target_name) { forward_variables_from(invoker, [ "data" ]) script = "//build/android/gyp/create_dist_jar.py" depfile = "$target_gen_dir/$target_name.d" @@ -1646,7 +1636,7 @@ if (enable_java_templates) { _rebased_build_config = rebase_path(_build_config, root_build_dir) - action(target_name) { + action_with_pydeps(target_name) { forward_variables_from(invoker, [ "data" ]) depfile = "$target_gen_dir/$target_name.d" deps = _deps @@ -1832,7 +1822,8 @@ if (enable_java_templates) { inputs = [ invoker.build_config, ] - _rebased_build_config = rebase_path(invoker.build_config) + _rebased_build_config = + rebase_path(invoker.build_config, root_build_dir) defines += [ "COMPRESSED_LOCALE_LIST=" + "@FileArg($_rebased_build_config:compressed_locales_java_list)", @@ -1851,21 +1842,14 @@ if (enable_java_templates) { } } - # Declare an Android apk target - # - # This target creates an Android APK containing java code, resources, assets, - # and (possibly) native libraries. + # Declare an Android app module target, which is used as the basis for an + # Android APK or an Android app bundle module. # # Supports all variables of android_library(), plus: # android_manifest: Path to AndroidManifest.xml. # android_manifest_dep: Target that generates AndroidManifest (if applicable) # png_to_webp: If true, pngs (with the exception of 9-patch) are # converted to webp during resource packaging. - # dist_ijar_path: Path to create "${target_name}_dist_ijar" target - # (used by instrumentation_test_apk). - # apk_name: Name for final apk. - # final_apk_path: Path to final built apk. Default is - # $root_out_dir/apks/$apk_name.apk. Setting this will override apk_name. # loadable_modules: List of paths to native libraries to include. Different # from |shared_libraries| in that: # * dependencies of this .so are not automatically included @@ -1875,6 +1859,8 @@ if (enable_java_templates) { # and enable_relocation_packing do not apply # Use this instead of shared_libraries when you are going to load the library # conditionally, and only when shared_libraries doesn't work for you. + # secondary_abi_loadable_modules: This is the loadable_modules analog to + # secondary_abi_shared_libraries. # shared_libraries: List shared_library targets to bundle. If these # libraries depend on other shared_library targets, those dependencies will # also be included in the apk (e.g. for is_component_build). @@ -1885,8 +1871,6 @@ if (enable_java_templates) { # (optional). # secondary_native_lib_placeholders: List of placeholder filenames to add to # the apk for the secondary ABI (optional). - # apk_under_test: For an instrumentation test apk, this is the target of the - # tested apk. # write_asset_list: Adds an extra file to the assets, which contains a list of # all other asset files. # generate_buildconfig_java: If defined and false, skip generating the @@ -1897,11 +1881,6 @@ if (enable_java_templates) { # requires_sdk_api_level_23: If defined and true, the apk is intended for # installation only on Android M or later. In these releases the system # linker does relocation unpacking, so we can enable it unconditionally. - # secondary_native_libs (deprecated): The path of native libraries for secondary - # app abi. - # proguard_jar_path: The path to proguard.jar you wish to use. If undefined, - # the proguard used will be the checked in one in //third_party/proguard. - # never_incremental: If true, |incremental_apk_by_default| will be ignored. # aapt_locale_whitelist: If set, all locales not in this list will be # stripped from resources.arsc. # exclude_xxxhdpi: Causes all drawable-xxxhdpi images to be excluded @@ -1918,29 +1897,13 @@ if (enable_java_templates) { # shared_resources_whitelist_target: Optional name of a target specifying # an input R.txt file that lists the resources that can be exported # by the APK when shared_resources or app_as_shared_lib is defined. - # - # Example - # android_apk("foo_apk") { - # android_manifest = "AndroidManifest.xml" - # java_files = [ - # "android/org/chromium/foo/FooApplication.java", - # "android/org/chromium/foo/FooActivity.java", - # ] - # deps = [ - # ":foo_support_java" - # ":foo_resources" - # ] - # srcjar_deps = [ - # ":foo_generated_enum" - # ] - # shared_libraries = [ - # ":my_shared_lib", - # ] - # } - template("android_apk") { + # uncompress_shared_libraries: True if shared libraries should be stored + # uncompressed in the APK. Must be unset or true if load_library_from_apk + # is set to true. + template("android_apk_or_module") { forward_variables_from(invoker, [ "testonly" ]) - assert(defined(invoker.final_apk_path) || defined(invoker.apk_name)) + assert(defined(invoker.final_apk_path) || defined(invoker.name)) assert(defined(invoker.android_manifest)) _gen_dir = "$target_gen_dir/$target_name" _base_path = "$_gen_dir/$target_name" @@ -1954,6 +1917,9 @@ if (enable_java_templates) { _rebased_lib_dex_path = rebase_path(_lib_dex_path, root_build_dir) _template_name = target_name + _is_bundle_module = + defined(invoker.is_bundle_module) && invoker.is_bundle_module + _enable_multidex = defined(invoker.enable_multidex) && invoker.enable_multidex if (_enable_multidex) { @@ -1961,12 +1927,13 @@ if (enable_java_templates) { } else { _final_dex_path = "$_gen_dir/classes.dex" } - _final_dex_target_name = "${_template_name}__final_dex" if (defined(invoker.final_apk_path)) { _final_apk_path = invoker.final_apk_path + } else if (!_is_bundle_module) { + _final_apk_path = "$root_build_dir/apks/${invoker.name}.apk" } else { - _final_apk_path = "$root_build_dir/apks/${invoker.apk_name}.apk" + _final_apk_path = "$root_build_dir/bundle_modules/${invoker.name}" } _final_apk_path_no_ext_list = process_file_template([ _final_apk_path ], @@ -1974,13 +1941,19 @@ if (enable_java_templates) { _final_apk_path_no_ext = _final_apk_path_no_ext_list[0] assert(_final_apk_path_no_ext != "") # Mark as used. - # resource_sizes.py needs to be able to find the unpacked resources.arsc file based on apk name. - _packaged_resources_path = - "$root_gen_dir/arsc/" + - rebase_path(_final_apk_path_no_ext, root_build_dir) + ".ap_" + if (_is_bundle_module) { + # Path to the intermediate proto-format resources zip file. + _packaged_resources_path = "$target_gen_dir/$target_name.proto.ap_" + } else { + # resource_sizes.py needs to be able to find the unpacked resources.arsc + # file based on apk name. + _packaged_resources_path = + "$root_gen_dir/arsc/" + + rebase_path(_final_apk_path_no_ext, root_build_dir) + ".ap_" + } - _incremental_install_json_path = - "$target_gen_dir/$target_name.incremental.json" + _target_dir_name = get_label_info(target_name, "dir") + _incremental_install_json_path = "$root_out_dir/gen.runtime/$_target_dir_name/$target_name.incremental.json" _version_code = android_default_version_code if (defined(invoker.version_code)) { @@ -1991,15 +1964,6 @@ if (enable_java_templates) { if (defined(invoker.version_name)) { _version_name = invoker.version_name } - _keystore_path = android_keystore_path - _keystore_name = android_keystore_name - _keystore_password = android_keystore_password - - if (defined(invoker.keystore_path)) { - _keystore_path = invoker.keystore_path - _keystore_name = invoker.keystore_name - _keystore_password = invoker.keystore_password - } _deps = [] if (defined(invoker.deps)) { @@ -2053,6 +2017,15 @@ if (enable_java_templates) { "load_library_from_apk requires use_chromium_linker " + "or requires_sdk_api_level_23") + # Make sure that uncompress_shared_libraries is set to true if + # load_library_from_apk is true. + if (defined(invoker.uncompress_shared_libraries)) { + _uncompress_shared_libraries = invoker.uncompress_shared_libraries + assert(!_load_library_from_apk || _uncompress_shared_libraries) + } else { + _uncompress_shared_libraries = _load_library_from_apk + } + # The dependency that makes the chromium linker, if any is needed. _native_libs_deps = [] _shared_libraries_is_valid = @@ -2117,7 +2090,7 @@ if (enable_java_templates) { } } else { # Must exist for instrumentation_test_apk() to depend on. - group("${_template_name}__secondary_abi_runtime_deps") { + group("${_template_name}__secondary_abi__runtime_deps") { } } @@ -2134,7 +2107,9 @@ if (enable_java_templates) { _proguard_output_jar_path = "$_base_path.proguard.jar" } + # TODO(crbug.com/864142): Allow incremental installs of bundle modules. _incremental_allowed = + !_is_bundle_module && !(defined(invoker.never_incremental) && invoker.never_incremental) _android_manifest = @@ -2161,20 +2136,7 @@ if (enable_java_templates) { } _compile_resources_target = "${_template_name}__compile_resources" - - # Path to the intermediate proto-format resources zip file. - _packaged_proto_resources_path = - "$root_gen_dir/proto_resources/" + - rebase_path(_final_apk_path_no_ext, root_build_dir) + ".proto.ap_" - - # Define another target used to generate an archive containing the - # resources compiled in protocol buffer format. This is not used by - # the APK itself, but by android_bundle_module() targets that depend - # on it. - _compile_proto_resources_target = - "${_template_name}__compile_proto_resources" - - compile_apk_resources(_compile_resources_target) { + compile_resources(_compile_resources_target) { forward_variables_from(invoker, [ "app_as_shared_lib", @@ -2190,13 +2152,6 @@ if (enable_java_templates) { version_code = _version_code version_name = _version_name - # Subtle: required to avoid GN build errors. "testonly" cannot be added - # to the forward_variables_from() above because it was already forwarded - # at the start of android_apk(). And if the assignment below is not - # performed, GN will complain that some test-only targets depend - # on non-test-only ones. - testonly = defined(testonly) && testonly - if (defined(invoker.post_process_package_resources_script)) { post_process_script = invoker.post_process_package_resources_script } @@ -2206,6 +2161,9 @@ if (enable_java_templates) { if (_enable_multidex) { proguard_file_main_dex = _generated_proguard_main_dex_config } + if (_is_bundle_module) { + proto_format = true + } output = _packaged_resources_path build_config = _build_config @@ -2226,9 +2184,6 @@ if (enable_java_templates) { "${invoker.shared_resources_whitelist_target}__compile_resources", ] } - - proto_output = _packaged_proto_resources_path - proto_resources_target = _compile_proto_resources_target } _srcjar_deps += [ ":$_compile_resources_target" ] @@ -2245,7 +2200,7 @@ if (enable_java_templates) { # TODO(agrieve): Make GN write runtime deps in dependency order so as to # not need this manual sorting step. - action(_ordered_libraries_target) { + action_with_pydeps(_ordered_libraries_target) { script = "//build/android/gyp/write_ordered_libraries.py" deps = [ ":$_build_config_target", @@ -2317,7 +2272,7 @@ if (enable_java_templates) { if (_native_libs_deps != []) { if (_use_chromium_linker) { _extra_native_libs += - [ "$root_shlib_dir/libchromium_android_linker$shlib_extension" ] + [ "$root_out_dir/libchromium_android_linker$shlib_extension" ] _extra_native_libs_deps += [ "//base/android/linker:chromium_android_linker" ] } @@ -2352,11 +2307,16 @@ if (enable_java_templates) { "classpath_deps", "emma_never_instrument", "java_files", - "no_build_hooks", "javac_args", - "uncompress_shared_libraries", + "loadable_modules", + "no_build_hooks", + "secondary_abi_loadable_modules", ]) - type = "android_apk" + if (_is_bundle_module) { + type = "android_app_bundle_module" + } else { + type = "android_apk" + } main_target_name = _template_name supports_android = true requires_android = true @@ -2366,13 +2326,17 @@ if (enable_java_templates) { final_jar_path = _jar_path dex_path = _lib_dex_path final_dex_path = _final_dex_path - apk_path = _final_apk_path - proto_resources_path = _packaged_proto_resources_path + if (_is_bundle_module) { + proto_resources_path = _packaged_resources_path + } - incremental_allowed = _incremental_allowed - incremental_apk_path = "${_final_apk_path_no_ext}_incremental.apk" - incremental_install_json_path = _incremental_install_json_path + if (!_is_bundle_module) { + apk_path = _final_apk_path + incremental_allowed = _incremental_allowed + incremental_apk_path = "${_final_apk_path_no_ext}_incremental.apk" + incremental_install_json_path = _incremental_install_json_path + } proguard_enabled = _proguard_enabled if (_proguard_enabled) { @@ -2399,6 +2363,8 @@ if (enable_java_templates) { } extra_shared_libraries = _extra_native_libs + + uncompress_shared_libraries = _uncompress_shared_libraries } # TODO(cjhopman): This is only ever needed to calculate the list of tests to @@ -2420,86 +2386,103 @@ if (enable_java_templates) { } } - if (_proguard_enabled) { - _proguard_target = "${_template_name}__proguard" - proguard(_proguard_target) { - forward_variables_from(invoker, [ "proguard_jar_path" ]) - build_config = _build_config - deps = _deps + [ - ":$_build_config_target", - ":$_compile_resources_target", - ":$_java_target", - ] - inputs = [ - _jar_path, - ] + # Dex generation for app bundle modules with proguarding enabled takes + # place later due to synchronized proguarding. For more details, + # read build/android/docs/android_app_bundles.md + if (!(_is_bundle_module && _proguard_enabled)) { + if (_proguard_enabled) { + _proguard_target = "${_template_name}__proguard" + proguard(_proguard_target) { + forward_variables_from(invoker, [ "proguard_jar_path" ]) + build_config = _build_config + deps = _deps + [ + ":$_build_config_target", + ":$_compile_resources_target", + ":$_java_target", + ] + inputs = [ + _jar_path, + ] - output_jar_path = _proguard_output_jar_path - args = [ - "--proguard-configs=@FileArg($_rebased_build_config:deps_info:proguard_all_configs)", - "--input-paths=@FileArg($_rebased_build_config:deps_info:java_runtime_classpath)", - "--classpath=@FileArg($_rebased_build_config:deps_info:proguard_all_extra_jars)", - ] - if (defined(invoker.proguard_config_exclusions)) { - _rebased_proguard_config_exclusions = - rebase_path(invoker.proguard_config_exclusions, root_build_dir) - args += [ - "--proguard-config-exclusions=$_rebased_proguard_config_exclusions", + output_jar_path = _proguard_output_jar_path + args = [ + "--proguard-configs=@FileArg($_rebased_build_config:deps_info:proguard_all_configs)", + "--input-paths=@FileArg($_rebased_build_config:deps_info:java_runtime_classpath)", + ] + if (defined(invoker.proguard_config_exclusions)) { + _rebased_proguard_config_exclusions = + rebase_path(invoker.proguard_config_exclusions, root_build_dir) + args += [ "--proguard-config-exclusions=$_rebased_proguard_config_exclusions" ] + } + if (defined(invoker.apk_under_test)) { + args += [ "--mapping=@FileArg($_rebased_build_config:deps_info:proguard_under_test_mapping)" ] + deps += [ "${invoker.apk_under_test}__proguard" ] + } + } + _dex_sources = [ _proguard_output_jar_path ] + _dex_deps = [ ":$_proguard_target" ] + + _copy_proguard_mapping_target = + "${_template_name}__copy_proguard_mapping" + copy(_copy_proguard_mapping_target) { + sources = [ + "$_proguard_output_jar_path.mapping", + ] + outputs = [ + "$_final_apk_path.mapping", + ] + deps = [ + ":$_proguard_target", ] } - } - _dex_sources = [ _proguard_output_jar_path ] - _dex_deps = [ ":$_proguard_target" ] - - _copy_proguard_mapping_target = "${_template_name}__copy_proguard_mapping" - copy(_copy_proguard_mapping_target) { - sources = [ - "$_proguard_output_jar_path.mapping", - ] - outputs = [ - "$_final_apk_path.mapping", - ] - deps = [ - ":$_proguard_target", - ] - } - } else { - if (_enable_multidex) { - # .jar already included in java_runtime_classpath. - _dex_sources = [] } else { - _dex_sources = [ _lib_dex_path ] + if (_enable_multidex) { + # .jar already included in java_runtime_classpath. + _dex_sources = [] + } else { + _dex_sources = [ _lib_dex_path ] + } + _dex_deps = [ ":$_java_target" ] } - _dex_deps = [ ":$_java_target" ] - } - - dex("$_final_dex_target_name") { - deps = _dex_deps + [ ":$_build_config_target" ] - input_jars = _dex_sources - output = _final_dex_path - enable_multidex = _enable_multidex - if (_enable_multidex) { - forward_variables_from(invoker, [ "negative_main_dex_globs" ]) - extra_main_dex_proguard_config = _generated_proguard_main_dex_config - deps += [ ":$_compile_resources_target" ] - } + _final_dex_target_name = "${_template_name}__final_dex" + dex("$_final_dex_target_name") { + deps = _dex_deps + [ ":$_build_config_target" ] + input_jars = _dex_sources + output = _final_dex_path + enable_multidex = _enable_multidex - # All deps are already included in _dex_sources when proguard is used. - if (!_proguard_enabled) { if (_enable_multidex) { - _dex_arg_key = - "${_rebased_build_config}:deps_info:java_runtime_classpath" - } else { - _dex_arg_key = - "${_rebased_build_config}:final_dex:dependency_dex_files" + forward_variables_from(invoker, [ "negative_main_dex_globs" ]) + extra_main_dex_proguard_config = _generated_proguard_main_dex_config + deps += [ ":$_compile_resources_target" ] } - build_config = _build_config - input_jars_file_arg = "@FileArg($_dex_arg_key)" + + # All deps are already included in _dex_sources when proguard is used. + if (!_proguard_enabled) { + if (_enable_multidex) { + _dex_arg_key = + "${_rebased_build_config}:deps_info:java_runtime_classpath" + } else { + _dex_arg_key = + "${_rebased_build_config}:final_dex:dependency_dex_files" + } + build_config = _build_config + input_jars_file_arg = "@FileArg($_dex_arg_key)" + } + + # http://crbug.com/725224. Fix for bots running out of memory. + use_pool = true } + } else { + # A small sanity check to help developers with a subtle point! + assert( + !defined(invoker.proguard_jar_path), + "proguard_jar_path should not be used for app bundle modules " + + "when proguard is enabled. Pass it to the android_app_bundle() " + + "target instead!") - # http://crbug.com/725224. Fix for bots running out of memory. - use_pool = true + _final_deps += [ ":$_java_target" ] } _native_libs_file_arg_dep = ":$_build_config_target" @@ -2509,8 +2492,12 @@ if (enable_java_templates) { "@FileArg($_rebased_build_config:native:secondary_abi_libraries)" assert(_secondary_abi_native_libs_file_arg != "" && _secondary_abi_native_libs_file_arg_dep != "") # Mark as used. + _all_native_libs_deps = _native_libs_deps + _extra_native_libs_deps + + [ _native_libs_file_arg_dep ] + assert(_all_native_libs_deps == _all_native_libs_deps) # Mark as used. _extra_native_libs_even_when_incremental = [] + assert(_extra_native_libs_even_when_incremental == []) # Mark as used. if (_native_libs_deps != []) { _create_stack_script_rule_name = "${_template_name}__stack_script" _final_deps += [ ":${_create_stack_script_rule_name}" ] @@ -2525,10 +2512,10 @@ if (enable_java_templates) { } # Generate .apk.jar.info files if needed. - if (defined(invoker.apk_name)) { + if (defined(invoker.name)) { _apk_jar_info_target = "${target_name}__apk_jar_info" create_apk_jar_info(_apk_jar_info_target) { - output = "$root_build_dir/size-info/${invoker.apk_name}.apk.jar.info" + output = "$root_build_dir/size-info/${invoker.name}.apk.jar.info" apk_build_config = _build_config deps = [ ":$_build_config_target", @@ -2538,83 +2525,110 @@ if (enable_java_templates) { _deps += [ ":$_apk_jar_info_target" ] } - _final_deps += [ ":${_template_name}__create" ] - create_apk("${_template_name}__create") { - forward_variables_from(invoker, - [ - "public_deps", - "secondary_native_libs", - "shared_resources", - "uncompress_shared_libraries", - "write_asset_list", - ]) - packaged_resources_path = _packaged_resources_path - apk_path = _final_apk_path - assets_build_config = _build_config - dex_path = _final_dex_path - load_library_from_apk = _load_library_from_apk + if (!_is_bundle_module) { + _keystore_path = android_keystore_path + _keystore_name = android_keystore_name + _keystore_password = android_keystore_password - # This is used to generate *.apk.pak.info files. - apk_name = invoker.apk_name + if (defined(invoker.keystore_path)) { + _keystore_path = invoker.keystore_path + _keystore_name = invoker.keystore_name + _keystore_password = invoker.keystore_password + } - keystore_name = _keystore_name - keystore_path = _keystore_path - keystore_password = _keystore_password + _create_apk_target = "${_template_name}__create" + _final_deps += [ ":$_create_apk_target" ] + create_apk("$_create_apk_target") { + forward_variables_from(invoker, + [ + "public_deps", + "shared_resources", + "write_asset_list", + ]) + packaged_resources_path = _packaged_resources_path + apk_path = _final_apk_path + assets_build_config = _build_config + dex_path = _final_dex_path + load_library_from_apk = _load_library_from_apk - incremental_allowed = _incremental_allowed - if (_incremental_allowed) { - android_manifest = _android_manifest - base_path = _base_path - } + # This is used to generate *.apk.pak.info files. + apk_name = invoker.name - # Incremental apk does not use native libs nor final dex. - incremental_deps = _deps + [ - ":$_merge_manifest_target", - ":$_build_config_target", - ":$_compile_resources_target", - ] + keystore_name = _keystore_name + keystore_path = _keystore_path + keystore_password = _keystore_password - # This target generates the input file _all_resources_zip_path. - deps = _deps + [ - ":$_merge_manifest_target", - ":$_build_config_target", - ":$_final_dex_target_name", - ":$_compile_resources_target", - ] + incremental_allowed = _incremental_allowed + if (_incremental_allowed) { + android_manifest = _android_manifest + base_path = _base_path + } - if (_native_libs_deps != [] || - _extra_native_libs_even_when_incremental != []) { - deps += _native_libs_deps + _extra_native_libs_deps + - [ _native_libs_file_arg_dep ] - native_libs_filearg = _native_libs_file_arg - native_libs = _extra_native_libs - native_libs_even_when_incremental = - _extra_native_libs_even_when_incremental - } + # Incremental apk does not use native libs nor final dex. + incremental_deps = _deps + [ + ":$_merge_manifest_target", + ":$_build_config_target", + ":$_compile_resources_target", + ] - if (_secondary_abi_native_libs_deps != []) { - deps += _secondary_abi_native_libs_deps + - [ _secondary_abi_native_libs_file_arg_dep ] - secondary_abi_native_libs_filearg = _secondary_abi_native_libs_file_arg + # This target generates the input file _all_resources_zip_path. + deps = _deps + [ + ":$_merge_manifest_target", + ":$_build_config_target", + ":$_final_dex_target_name", + ":$_compile_resources_target", + ] + + if (_native_libs_deps != [] || + _extra_native_libs_even_when_incremental != []) { + deps += _all_native_libs_deps + native_libs_filearg = _native_libs_file_arg + native_libs = _extra_native_libs + native_libs_even_when_incremental = + _extra_native_libs_even_when_incremental + } + + if (_secondary_abi_native_libs_deps != []) { + deps += _secondary_abi_native_libs_deps + + [ _secondary_abi_native_libs_file_arg_dep ] + secondary_abi_native_libs_filearg = + _secondary_abi_native_libs_file_arg + } + + # Placeholders necessary for some older devices. + # http://crbug.com/395038 + forward_variables_from(invoker, + [ + "native_lib_placeholders", + "secondary_native_lib_placeholders", + ]) + + uncompress_shared_libraries = _uncompress_shared_libraries } + } else { + # placeholder native libraries never go into bundles, since they are + # only used for pre-L Android releases. Use the invoker variable to + # avoid GN errors when the target defines them. + assert(!defined(invoker.native_lib_placeholders) || + invoker.native_lib_placeholders != []) - # Placeholders necessary for some older devices. - # http://crbug.com/395038 - forward_variables_from(invoker, - [ - "native_lib_placeholders", - "secondary_native_lib_placeholders", - ]) + _final_deps += [ + ":$_merge_manifest_target", + ":$_build_config_target", + ":$_compile_resources_target", + ] + _all_native_libs_deps + _secondary_abi_native_libs_deps } _write_installer_json_rule_name = "${_template_name}__incremental_json" - action(_write_installer_json_rule_name) { + action_with_pydeps(_write_installer_json_rule_name) { script = "//build/android/incremental_install/write_installer_json.py" - depfile = "$target_gen_dir/$target_name.d" deps = [ _native_libs_file_arg_dep, ] + data = [ + _incremental_install_json_path, + ] outputs = [ _incremental_install_json_path, ] @@ -2623,14 +2637,12 @@ if (enable_java_templates) { rebase_path(_final_apk_path_no_ext, root_build_dir) _rebased_incremental_install_json_path = rebase_path(_incremental_install_json_path, root_build_dir) - _rebased_depfile = rebase_path(depfile, root_build_dir) _dex_arg_key = "${_rebased_build_config}:final_dex:dependency_dex_files" args = [ "--apk-path=${_rebased_apk_path_no_ext}_incremental.apk", "--output-path=$_rebased_incremental_install_json_path", "--dex-file=$_rebased_lib_dex_path", "--dex-file-list=@FileArg($_dex_arg_key)", - "--depfile=$_rebased_depfile", ] if (_proguard_enabled) { args += [ "--show-proguard-warning" ] @@ -2639,8 +2651,6 @@ if (enable_java_templates) { args += [ "--native-libs=$_native_libs_file_arg" ] } if (_extra_native_libs != []) { - # Don't pass in _extra_native_libs_even_when_incremental, since these are - # end up in the apk and are not side-loaded. _rebased_extra_native_libs = rebase_path(_extra_native_libs, root_build_dir) args += [ "--native-libs=$_rebased_extra_native_libs" ] @@ -2656,7 +2666,7 @@ if (enable_java_templates) { # Generate apk operation related script. if (!defined(invoker.create_apk_script) || invoker.create_apk_script) { _apk_operations_target_name = "${target_name}__apk_operations" - action(_apk_operations_target_name) { + action_with_pydeps(_apk_operations_target_name) { _generated_script = "$root_build_dir/bin/${invoker.target_name}" script = "//build/android/gyp/create_apk_operations_script.py" outputs = [ @@ -2716,7 +2726,7 @@ if (enable_java_templates) { public_deps += _apk_operations # Make the proguard .mapping file easy to find by putting it beside the .apk. - if (_proguard_enabled) { + if (_proguard_enabled && !_is_bundle_module) { deps = [ ":$_copy_proguard_mapping_target", ] @@ -2756,6 +2766,186 @@ if (enable_java_templates) { } } + # Declare an Android APK target + # + # This target creates an Android APK containing java code, resources, assets, + # and (possibly) native libraries. + # + # Supports all variables of android_apk_or_module(), plus: + # apk_name: Name for final apk. + # + # Example + # android_apk("foo_apk") { + # android_manifest = "AndroidManifest.xml" + # java_files = [ + # "android/org/chromium/foo/FooApplication.java", + # "android/org/chromium/foo/FooActivity.java", + # ] + # deps = [ + # ":foo_support_java" + # ":foo_resources" + # ] + # srcjar_deps = [ + # ":foo_generated_enum" + # ] + # shared_libraries = [ + # ":my_shared_lib", + # ] + # } + template("android_apk") { + android_apk_or_module(target_name) { + forward_variables_from(invoker, + [ + "aapt_locale_whitelist", + "additional_jar_files", + "alternative_android_sdk_dep", + "android_manifest", + "android_manifest_dep", + "apk_under_test", + "app_as_shared_lib", + "build_hooks_android_impl_deps", + "chromium_code", + "classpath_deps", + "command_line_flags_file", + "create_apk_script", + "data", + "data_deps", + "deps", + "dist_ijar_path", + "dont_load_shared_libraries", + "emma_never_instrument", + "enable_chromium_linker_tests", + "enable_multidex", + "exclude_xxxhdpi", + "final_apk_path", + "firebase_app_id", + "generate_buildconfig_java", + "input_jars_paths", + "java_files", + "javac_args", + "keystore_name", + "keystore_password", + "keystore_path", + "load_library_from_apk", + "loadable_modules", + "native_lib_placeholders", + "native_lib_version_arg", + "native_lib_version_rule", + "negative_main_dex_globs", + "never_incremental", + "no_build_hooks", + "no_xml_namespaces", + "png_to_webp", + "post_process_package_resources_script", + "product_version_resources_dep", + "proguard_configs", + "proguard_enabled", + "proguard_jar_path", + "requires_sdk_api_level_23", + "secondary_abi_loadable_modules", + "secondary_abi_shared_libraries", + "secondary_native_lib_placeholders", + "shared_libraries", + "shared_resources", + "shared_resources_whitelist_target", + "srcjar_deps", + "support_zh_hk", + "testonly", + "uncompress_shared_libraries", + "use_chromium_linker", + "version_code", + "version_name", + "write_asset_list", + "xxxhdpi_whitelist", + ]) + is_bundle_module = false + if (defined(invoker.apk_name)) { + name = invoker.apk_name + } + } + } + + # Declare an Android app bundle module target. + # + # The module can be used for an android_apk_or_module(). + # + # Supports all variables of android_library(), plus: + # module_name: Name of the module. + # is_base_module: If defined and true, indicates that this is the bundle's + # base module (optional). + template("android_app_bundle_module") { + _is_base_module = defined(invoker.is_base_module) && invoker.is_base_module + + if (!_is_base_module) { + assert(!defined(write_asset_list)) + assert(!defined(firebase_app_id)) + assert(!defined(app_as_shared_lib)) + assert(!defined(shared_resources)) + assert(!defined(shared_resources_whitelist_target)) + assert(!defined(build_hooks_android_impl_deps)) + assert(!defined(shared_libraries)) + } + + android_apk_or_module(target_name) { + forward_variables_from(invoker, + [ + "aapt_locale_whitelist", + "additional_jar_files", + "alternative_android_sdk_dep", + "android_manifest", + "android_manifest_dep", + "app_as_shared_lib", + "chromium_code", + "classpath_deps", + "data", + "data_deps", + "deps", + "emma_never_instrument", + "enable_chromium_linker_tests", + "enable_multidex", + "exclude_xxxhdpi", + "firebase_app_id", + "input_jars_paths", + "java_files", + "javac_args", + "load_library_from_apk", + "loadable_modules", + "native_lib_placeholders", + "native_lib_version_arg", + "native_lib_version_rule", + "negative_main_dex_globs", + "no_xml_namespaces", + "png_to_webp", + "product_version_resources_dep", + "proguard_configs", + "proguard_enabled", + "proguard_jar_path", + "requires_sdk_api_level_23", + "secondary_abi_loadable_modules", + "secondary_abi_shared_libraries", + "secondary_native_lib_placeholders", + "shared_libraries", + "shared_resources", + "shared_resources_whitelist_target", + "srcjar_deps", + "support_zh_hk", + "testonly", + "uncompress_shared_libraries", + "use_chromium_linker", + "version_code", + "version_name", + "write_asset_list", + "xxxhdpi_whitelist", + ]) + is_bundle_module = true + generate_buildconfig_java = _is_base_module + no_build_hooks = !_is_base_module + if (defined(invoker.module_name)) { + name = invoker.module_name + } + } + } + # Declare an Android instrumentation test apk # # This target creates an Android instrumentation test apk. @@ -2923,14 +3113,14 @@ if (enable_java_templates) { # symbolization can be done. deps = [ ":${_apk_target_name}__runtime_deps", - ":${_apk_target_name}__secondary_abi_runtime_deps", + ":${_apk_target_name}__secondary_abi__runtime_deps", ] if (defined(invoker.apk_under_test)) { _under_test_label = get_label_info(invoker.apk_under_test, "label_no_toolchain") deps += [ "${_under_test_label}__runtime_deps", - "${_under_test_label}__secondary_abi_runtime_deps", + "${_under_test_label}__secondary_abi__runtime_deps", ] } } @@ -3018,7 +3208,7 @@ if (enable_java_templates) { shared_libraries = [ invoker.shared_library ] deps += [ ":${target_name}__runtime_deps", - ":${target_name}__secondary_abi_runtime_deps", + ":${target_name}__secondary_abi__runtime_deps", "//base:base_java", "//testing/android/reporter:reporter_java", ] @@ -3052,7 +3242,7 @@ if (enable_java_templates) { # ] # } template("android_aidl") { - action(target_name) { + action_with_pydeps(target_name) { set_sources_assignment_filter([]) forward_variables_from(invoker, [ "testonly" ]) @@ -3070,14 +3260,11 @@ if (enable_java_templates) { inputs = [ _aidl_path ] + _imports - depfile = "${target_gen_dir}/${target_name}.d" outputs = [ _srcjar_path, ] _rebased_imports = rebase_path(_imports, root_build_dir) args = [ - "--depfile", - rebase_path(depfile, root_build_dir), "--aidl-path", rebase_path(_aidl_path, root_build_dir), "--imports=$_rebased_imports", @@ -3150,7 +3337,7 @@ if (enable_java_templates) { _proto_path = invoker.proto_path _template_name = target_name - action("${_template_name}__protoc_java") { + action_with_pydeps("${_template_name}__protoc_java") { _srcjar_path = "$target_gen_dir/$target_name.srcjar" script = "//build/protoc_java.py" @@ -3263,7 +3450,7 @@ if (enable_java_templates) { " Use ignore_native_libraries = true to silence this error.") assert(_scanned_files.has_classes_jar || _scanned_files.subjars == []) - action(_unpack_target_name) { + action_with_pydeps(_unpack_target_name) { script = "//build/android/gyp/aar.py" # Unzips the AAR args = [ "extract", @@ -3424,17 +3611,16 @@ if (enable_java_templates) { # and zero or more associated android_apk. # # Variables: - # base_apk_target: Name of the android_apk target corresponding to the - # base module for this application bundle. The bundle file will include - # the same content in its base module, though in a slightly different - # format. + # base_module_target: Name of the android_app_bundle_module target + # corresponding to the base module for this application bundle. The + # bundle file will include the same content in its base module, though in + # a slightly different format. # # bundle_base_path: Optional. If set, the bundle will be output to this # directory. Defaults to "$root_build_dir/apks". # # bundle_name: Optional. If set, the bundle will be output to the - # filename "${bundle_name}.aab". Also, if generate_apks is true - # "${bundle_name}.apks" will be used. Defaults to "${target_name}". + # filename "${bundle_name}.aab". # # extra_modules: Optional list of scopes, one per extra module used by # this bundle. Each scope must have a 'name' field that specifies the @@ -3442,16 +3628,6 @@ if (enable_java_templates) { # base module), and an 'apk_target' field that specified the # corresponding android_apk target name the module is modeled on. # - # extra_module_apk_targets: Optional list of android_apk target matching - # the names listed in extra_module_names. - # - # generate_apks: Optional. If true, generate an .apks archive that - # contains all generated APK splits from the bundle. These are - # installable to a local device using the bundletool 'install-apks' - # command. - # - # NOTE: This creates a new target with the name "${target_name}_apks" - # # enable_language_splits: Optional. If true, enable APK splits based # on languages. # @@ -3465,13 +3641,33 @@ if (enable_java_templates) { # keystore_password: optional keystore password, used only when # generating APKs. # + # command_line_flags_file: Optional. If provided, named of the on-device + # file that will be used to store command-line arguments. The default + # is 'command_line_flags_file', but this is typically redefined to + # something more specific for certain bundles (e.g. the Chromium based + # APKs use 'chrome-command-line', the WebView one uses + # 'webview-command-line'). + # + # proguard_enabled: Optional. True if proguarding is enabled for this + # bundle. Default is to enable this only for release builds. Note that + # this will always perform synchronized proguarding. + # + # proguard_jar_path: Optional. Path to custom proguard jar used for + # proguarding. + # + # enable_multidex: Optional. Enable multidexing of optimized modules jars + # when using synchronized proguarding. Only applies to base module. + # + # proguard_android_sdk_dep: Optional. android_system_java_prebuilt() target + # used as a library jar for synchronized proguarding. + # # Example: # android_app_bundle("chrome_public_bundle") { - # base_apk_target = "//chrome/android:chrome_public_apk" + # base_module_target = "//chrome/android:chrome_public_apk" # extra_modules = [ - # { # NOTE: Scopes require one field per line, and no comma separators. + # { # NOTE: Scopes require one field per line, and no comma separators. # name = "my_module" - # apk_target = ":my_module_apk" + # module_target = ":my_module" # }, # ] # } @@ -3480,7 +3676,7 @@ if (enable_java_templates) { _all_modules = [ { name = "base" - apk_target = invoker.base_apk_target + module_target = invoker.base_module_target }, ] @@ -3492,46 +3688,157 @@ if (enable_java_templates) { "Missing 'name' field for extra module #${_module_count}.") assert(_module.name != "base", "Module name 'base' is reserved for the main bundle module") - assert(defined(_module.apk_target), - "Missing 'apk_target' field for extra module ${_module.name}.") + assert( + defined(_module.module_target), + "Missing 'module_target' field for extra module ${_module.name}.") } _all_modules += invoker.extra_modules } - # Generate one module .zip file per APK. - _all_module_targets = [] - _all_module_paths = [] + _proguard_enabled = + defined(invoker.proguard_enabled) && invoker.proguard_enabled + _enable_multidex = + defined(invoker.enable_multidex) && invoker.enable_multidex + assert( + _proguard_enabled || !_enable_multidex, + "Bundle only adds dexing step if synchronized proguarding is enabled.") + + # Make build config, which is required for synchronized proguarding. + _module_targets = [] + foreach(_module, _all_modules) { + _module_targets += [ _module.module_target ] + } + _build_config = "$target_gen_dir/${target_name}.build_config" + _rebased_build_config = rebase_path(_build_config, root_build_dir) + _build_config_target = "${target_name}__build_config" + if (defined(invoker.proguard_android_sdk_dep)) { + proguard_android_sdk_dep_ = invoker.proguard_android_sdk_dep + } else { + proguard_android_sdk_dep_ = "//third_party/android_tools:android_sdk_java" + } + write_build_config(_build_config_target) { + type = "android_app_bundle" + possible_config_deps = _module_targets + [ proguard_android_sdk_dep_ ] + build_config = _build_config + } + + if (_proguard_enabled) { + # Proguard all modules together to keep binary size small while still + # maintaining compatibility between modules. + _proguard_output_jar_path = + "${target_gen_dir}/${target_name}/${target_name}.proguard.jar" + _sync_proguard_target = "${target_name}__sync_proguard" + proguard(_sync_proguard_target) { + forward_variables_from(invoker, [ "proguard_jar_path" ]) + build_config = _build_config + deps = _module_targets + [ ":$_build_config_target" ] + + output_jar_path = _proguard_output_jar_path + args = [ + "--proguard-configs=@FileArg($_rebased_build_config:deps_info:proguard_all_configs)", + "--input-paths=@FileArg($_rebased_build_config:deps_info:java_runtime_classpath)", + ] + } + } + + _all_create_module_targets = [] + _all_module_zip_paths = [] _all_module_build_configs = [] foreach(_module, _all_modules) { + _module_target = _module.module_target + _module_target_name = get_label_info(_module_target, "name") + _module_target_gen_dir = get_label_info(_module_target, "target_gen_dir") + _module_build_config_target = "${_module_target}__build_config" + _module_build_config = + "$_module_target_gen_dir/${_module_target_name}.build_config" + + if (_proguard_enabled) { + # Extract optimized classes for each module and dex them. + + _module_final_dex_target = "${target_name}__${_module.name}__dex" + _module_final_dex_target_dep = ":$_module_final_dex_target" + if (_enable_multidex) { + _module_final_dex_path = + "$target_gen_dir/$target_name/${_module.name}/classes.dex.zip" + } else { + _module_final_dex_path = + "$target_gen_dir/$target_name/${_module.name}/classes.dex" + } + _module_final_dex_path_file_arg = + rebase_path(_module_final_dex_path, root_build_dir) + + _module_jar_path = + "${target_gen_dir}/${target_name}/${_module.name}.optimized.jar" + _generate_proguarded_module_jar_target = + "${target_name}__${_module.name}__module_jar" + generate_proguarded_module_jar(_generate_proguarded_module_jar_target) { + proguarded_jar = _proguard_output_jar_path + build_config = _module_build_config + proguard_mapping = "${_proguard_output_jar_path}.mapping" + output_jar = _module_jar_path + is_base_module = _module.name == "base" + deps = [ + ":${_sync_proguard_target}", + "$_module_build_config_target", + "${_module.module_target}", + ] + } + + dex(_module_final_dex_target) { + deps = [ + ":${_generate_proguarded_module_jar_target}", + ] + input_jars = [ _module_jar_path ] + output = _module_final_dex_path + + # http://crbug.com/725224. Fix for bots running out of memory. + use_pool = true + + if (_enable_multidex && _module.name == "base") { + enable_multidex = _enable_multidex + extra_main_dex_proguard_config = + "$_module_target_gen_dir/$_module_target_name/" + + "$_module_target_name.resources.main-dex-proguard.txt" + deps += [ "${_module_target}__compile_resources" ] + } + } + } else { + _module_final_dex_target_dep = "${_module_target}__final_dex" + _rebased_module_build_config = + rebase_path(_module_build_config, root_build_dir) + _module_final_dex_path_file_arg = + "@FileArg($_rebased_module_build_config:final_dex:path)" + } + + # Generate one module .zip file per bundle module. + # # Important: the bundle tool uses the module's zip filename as # the internal module name inside the final bundle, in other words, # this file *must* be named ${_module.name}.zip - _module_target = "${target_name}__module__${_module.name}" - _module_path = "$target_gen_dir/$target_name/${_module.name}.zip" - _apk_target = _module.apk_target - _apk_build_config_target = "${_apk_target}__build_config" - - android_app_bundle_module(_module_target) { - apk_target = _apk_target - module_path = _module_path - } - - # Determine the rebased path to the module's target .build_config - # In order to pass its list of uncompressed assets later. - _apk_target_name = get_label_info(_apk_target, "name") - _apk_target_gen_dir = get_label_info(_apk_target, "target_gen_dir") - _apk_build_config = - "$_apk_target_gen_dir/${_apk_target_name}.build_config" - - _all_module_targets += [ - ":$_module_target", - _apk_build_config_target, + _create_module_target = "${target_name}__${_module.name}__create" + _module_zip_path = "$target_gen_dir/$target_name/${_module.name}.zip" + + create_android_app_bundle_module(_create_module_target) { + build_config = _module_build_config + module_zip_path = _module_zip_path + dex_path_file_arg = _module_final_dex_path_file_arg + deps = [ + "$_module_build_config_target", + "$_module_final_dex_target_dep", + "$_module_target", + ] + } + + _all_create_module_targets += [ + ":$_create_module_target", + _module_build_config_target, ] - _all_module_paths += [ _module_path ] - _all_module_build_configs += [ _apk_build_config ] + _all_module_zip_paths += [ _module_zip_path ] + _all_module_build_configs += [ _module_build_config ] } - _all_rebased_module_paths = rebase_path(_all_module_paths, root_build_dir) + _all_rebased_module_zip_paths = + rebase_path(_all_module_zip_paths, root_build_dir) _bundle_name = target_name if (defined(invoker.bundle_name)) { @@ -3547,7 +3854,6 @@ if (enable_java_templates) { _rebased_bundle_path = rebase_path(_bundle_path, root_build_dir) _sign_bundle = defined(invoker.sign_bundle) && invoker.sign_bundle - _generate_apks = defined(invoker.generate_apks) && invoker.generate_apks _split_dimensions = [] if (defined(invoker.enable_language_splits) && @@ -3555,46 +3861,36 @@ if (enable_java_templates) { _split_dimensions += [ "language" ] } - if (_sign_bundle || _generate_apks) { - _keystore_path = android_keystore_path - _keystore_password = android_keystore_password - _keystore_name = android_keystore_name + _keystore_path = android_keystore_path + _keystore_password = android_keystore_password + _keystore_name = android_keystore_name - if (defined(invoker.keystore_path)) { - _keystore_path = invoker.keystore_path - _keystore_password = invoker.keystore_password - _keystore_name = invoker.keystore_name - } + if (defined(invoker.keystore_path)) { + _keystore_path = invoker.keystore_path + _keystore_password = invoker.keystore_password + _keystore_name = invoker.keystore_name + } - _rebased_keystore_path = rebase_path(_keystore_path, root_build_dir) + _rebased_keystore_path = rebase_path(_keystore_path, root_build_dir) - if (_sign_bundle) { - # For now, the same keys are used to sign the bundle and the set of - # generated APKs. In the future, signing the bundle may require a - # different set of keys. - _bundle_keystore_name = _keystore_name - } + if (_sign_bundle) { + # For now, the same keys are used to sign the bundle and the set of + # generated APKs. In the future, signing the bundle may require a + # different set of keys. + _bundle_keystore_name = _keystore_name } - # NOTE: Keep this consistent with the imports of create_app_bundle.py - _create_app_bundle_py_imports = - build_utils_py + [ - "//build/android/gyp/util/resource_utils.py", - "//build/android/gyp/bundletool.py", - ] - - _bundle_target_name = target_name - action(_bundle_target_name) { + _bundle_target_name = "${target_name}__bundle" + action_with_pydeps(_bundle_target_name) { script = "//build/android/gyp/create_app_bundle.py" - inputs = _all_module_paths + _all_module_build_configs + - _create_app_bundle_py_imports + inputs = _all_module_zip_paths + _all_module_build_configs outputs = [ _bundle_path, ] - deps = _all_module_targets + deps = _all_create_module_targets + [ ":$_build_config_target" ] args = [ "--out-bundle=$_rebased_bundle_path", - "--module-zips=$_all_rebased_module_paths", + "--module-zips=$_all_rebased_module_zip_paths", ] if (_sign_bundle) { args += [ @@ -3620,86 +3916,65 @@ if (enable_java_templates) { } } - if (_generate_apks) { - _android_aapt2_path = android_sdk_tools_bundle_aapt2 + # Generate a wrapper script for the bundle. + _android_aapt2_path = android_sdk_tools_bundle_aapt2 - _bundle_apks_target = "${target_name}_apks" - _bundle_apks_path = "$_bundle_base_path/$_bundle_name.apks" + _bundle_apks_path = "$_bundle_base_path/$_bundle_name.apks" + _bundle_wrapper_script_dir = "$root_build_dir/bin" + _bundle_wrapper_script_path = "$_bundle_wrapper_script_dir/$target_name" - # NOTE: Keep this consistent with the imports of app_bundle_to_apks.py - # note that resource_utils.py imports build_utils.py - _app_bundle_to_apks_py_imports = - build_utils_py + [ "//build/android/gyp/bundletool.py" ] + _base_module_build_config = _all_module_build_configs[0] + _base_module_build_config_target = + "${invoker.base_module_target}__build_config" + _rebased_base_module_build_config = + rebase_path(_base_module_build_config, root_build_dir) - action(_bundle_apks_target) { - script = "//build/android/gyp/app_bundle_to_apks.py" - inputs = _app_bundle_to_apks_py_imports + [ - _bundle_path, - _android_aapt2_path, - _keystore_path, - ] - outputs = [ - _bundle_apks_path, - ] - deps = [ - ":$_bundle_target_name", - ] - args = [ - "--aapt2", - rebase_path(_android_aapt2_path, root_build_dir), - "--bundle", - _rebased_bundle_path, - "--out-zip", - rebase_path(_bundle_apks_path, root_build_dir), - "--keystore-path", - _rebased_keystore_path, - "--keystore-password", - _keystore_password, - "--key-name", - _keystore_name, + action_with_pydeps("${target_name}__wrapper_script") { + script = "//build/android/gyp/create_bundle_wrapper_script.py" + inputs = [ + "//build/android/gyp/bundletool.py", + _base_module_build_config, + ] + outputs = [ + _bundle_wrapper_script_path, + ] + deps = [ + _base_module_build_config_target, + ] + args = [ + "--script-output-path", + rebase_path(_bundle_wrapper_script_path, root_build_dir), + "--package-name=@FileArg(" + + "$_rebased_base_module_build_config:deps_info:package_name)", + "--aapt2", + rebase_path(_android_aapt2_path, root_build_dir), + "--bundle-path", + _rebased_bundle_path, + "--bundle-apks-path", + rebase_path(_bundle_apks_path, root_build_dir), + "--target-cpu=$target_cpu", + "--keystore-path", + _rebased_keystore_path, + "--keystore-password", + _keystore_password, + "--key-name", + _keystore_name, + ] + if (defined(invoker.command_line_flags_file)) { + args += [ + "--command-line-flags-file", + invoker.command_line_flags_file, ] } - } - } -} - -# Compatibility wrapper to toggle android_deps usage for a dependency. -# -# This target creates a wrapper for a dependency allowing it to be loaded -# either from //third_party/android_deps or from an existing //third_party -# (or other) target. -# -# Variables -# fallback_target: Target to use when the android_deps repo is not enabled. -# android_deps_target_name: Name of the target from the android_deps repo to -# use when the repo is enabled. Is not set, the wrapper's target name will -# be used instead. -# -# Example -# prebuilt_wrapper("android_support_multidex_java") { -# android_deps_target_name = "com_android_support_multidex_java" -# fallback_target = "$android_support_library_package:$target_name" -# } -template("prebuilt_wrapper") { - if (defined(invoker.android_deps_target_name)) { - _resolved_android_deps_target_name = invoker.android_deps_target_name - } else { - _resolved_android_deps_target_name = target_name - } - if (enable_android_deps_repository) { - _resolved_target = - "//third_party/android_deps:${_resolved_android_deps_target_name}" - assert(invoker.fallback_target != "") # Mark as used. - } else { - _resolved_target = "${invoker.fallback_target}" - assert(_resolved_android_deps_target_name != "") # Mark as used. - } + # TODO(digit): Add --proguard-mapping-path argument. + } - java_group(target_name) { - forward_variables_from(invoker, [ "testonly" ]) - deps = [ - _resolved_target, - ] + group(target_name) { + deps = [ + ":${target_name}__bundle", + ":${target_name}__wrapper_script", + ] + } } } diff --git a/chromium/build/config/c++/c++.gni b/chromium/build/config/c++/c++.gni index 85ffde0ea00..1b94aaa8da5 100644 --- a/chromium/build/config/c++/c++.gni +++ b/chromium/build/config/c++/c++.gni @@ -22,21 +22,16 @@ declare_args() { # expected usage is to set use_custom_libcxx=false and # use_custom_libcxx_for_host=true in the passed in buildargs. use_custom_libcxx_for_host = false - - # ASan, MSan and TSan builds need to override operator new, operator delete, - # and some exception handling symbols, so libc++ must be a shared library to - # prevent duplicate symbol errors when linking. - # Additionally, -fsanitize=vptr requires libc++ to be a shared library - # because the ubsan runtime library that implements -fsanitize=vptr calls - # dynamic_cast with the ABI type info classes, which won't return the right - # answer if each DSO has its own copy of the ABI classes. - libcpp_is_static = !is_component_build && !is_asan && !is_msan && !is_tsan && - !is_ubsan && !is_ubsan_security && !is_ubsan_vptr } use_custom_libcxx = use_custom_libcxx || (use_custom_libcxx_for_host && current_cpu == host_cpu) use_custom_libcxx = use_custom_libcxx && !is_nacl +# libc++abi needs to be exported from executables to be picked up by shared +# libraries on certian instrumented builds. +export_libcxxabi_from_executables = + use_custom_libcxx && !is_component_build && (is_asan || is_ubsan_vptr) + libcxx_prefix = "//buildtools/third_party/libc++/trunk" libcxxabi_prefix = "//buildtools/third_party/libc++abi/trunk" diff --git a/chromium/build/config/chromecast_build.gni b/chromium/build/config/chromecast_build.gni index d4869d7abf1..61870e4a0b3 100644 --- a/chromium/build/config/chromecast_build.gni +++ b/chromium/build/config/chromecast_build.gni @@ -10,6 +10,10 @@ declare_args() { # Linux and Android. is_chromecast = false + # chromecast_branding is used to include or exclude Google-branded components. + # Set it to "public" for a Chromium build. + chromecast_branding = "public" + # Set this true for an audio-only Chromecast build. is_cast_audio_only = false } diff --git a/chromium/build/config/chromeos/rules.gni b/chromium/build/config/chromeos/rules.gni index eae196e64b6..28b03c8a234 100644 --- a/chromium/build/config/chromeos/rules.gni +++ b/chromium/build/config/chromeos/rules.gni @@ -9,6 +9,12 @@ declare_args() { cros_sdk_version = "" } +# Creates a script at $generated_script that can be used to launch a cros VM +# and optionally run a test within it. +# Args: +# generated_script: Path to place the generated script. +# deploy_chrome: If true, deploys a locally built chrome located in the root +# build dir to the VM after launching it. template("generate_vm_runner_script") { _cache_path_prefix = "//build/cros_cache/chrome-sdk/tarballs/${cros_board}+${cros_sdk_version}" @@ -64,8 +70,14 @@ template("generate_vm_runner_script") { rebase_path("//build/cros_cache/", root_build_dir), "--board", cros_board, + "--output-directory", + rebase_path(root_out_dir, root_build_dir), ] + if (defined(invoker.deploy_chrome) && invoker.deploy_chrome) { + args += [ "--deploy-chrome" ] + } + # When --test-exe is specified, run_vm_test will push the exe to the VM and # execute it. Otherwise it wraps a host-side command and just takes care # launching & tearing-down the VM. @@ -73,8 +85,6 @@ template("generate_vm_runner_script") { args += [ "--test-exe", rebase_path(invoker.test_exe, root_build_dir), - "--output-directory", - rebase_path(root_out_dir, root_build_dir), ] if (defined(invoker.runtime_deps_file)) { args += [ diff --git a/chromium/build/config/compiler/BUILD.gn b/chromium/build/config/compiler/BUILD.gn index 959a5923174..d1bb5597f20 100644 --- a/chromium/build/config/compiler/BUILD.gn +++ b/chromium/build/config/compiler/BUILD.gn @@ -92,11 +92,12 @@ declare_args() { auto_profile_path = "" # Optimize symbol files for maximizing goma cache hit rate. This is on by - # default only when goma is enabled on Linux because setting this to true may - # make it harder to debug binaries. + # default when goma is enabled on Linux and Windows. + # But setting this to true may make it harder to debug binaries on Linux. # See below reference for detail. # https://chromium.googlesource.com/chromium/src/+/master/docs/linux_debugging.md#Source-level-debug-with-fdebug_compilation_dir - strip_absolute_paths_from_debug_symbols = is_linux && use_goma + strip_absolute_paths_from_debug_symbols = + (is_linux || (is_win && use_lld)) && use_goma # Allow projects that wish to stay on C++11 to override Chromium's default. use_cxx11 = false @@ -128,6 +129,15 @@ declare_args() { # Turn this on to use ghash feature of lld for faster debug link on Windows. # http://blog.llvm.org/2018/01/improving-link-time-on-windows-with.html use_ghash = false + + # Whether to enable ThinLTO optimizations. Turning ThinLTO optimizations on + # can substantially increase link time and binary size, but they generally + # also make binaries a fair bit faster. + # + # TODO(gbiv): We disable optimizations by default on most platforms because + # the space overhead is too great. We should use some mixture of profiles and + # optimization settings to better tune the size increase. + thin_lto_enable_optimizations = is_chromeos } declare_args() { @@ -167,7 +177,7 @@ if (gold_path == false) { } if (use_debug_fission == "default") { - use_debug_fission = is_debug && !is_android && !is_win && + use_debug_fission = is_debug && !is_android && !is_fuchsia && !is_win && (use_gold || use_lld) && cc_wrapper == "" } @@ -380,7 +390,10 @@ config("compiler") { "-Wl,-z,now", "-Wl,-z,relro", ] - if (!using_sanitizer) { + + # Compiler instrumentation can introduce dependencies in DSOs to symbols in + # the executable they are loaded into, so they are unresolved at link-time. + if (!using_sanitizer && !is_safestack) { ldflags += [ "-Wl,-z,defs", "-Wl,--as-needed", @@ -508,7 +521,6 @@ config("compiler") { } # Makes builds independent of absolute file path. - # clang-cl (used if is_win) doesn't expose this flag. # Currently disabled for nacl since its toolchain lacks this flag (too old). # TODO(zforman): Once nacl's toolchain is updated, remove check. if (symbol_level != 0 && is_clang && !is_nacl && !is_mac && !is_ios && @@ -524,6 +536,11 @@ config("compiler") { "-Xclang", ".", ] + + if (is_win && use_lld) { + # Absolutize source file path for PDB. + ldflags += [ "/PDBSourcePath:" + rebase_path(root_build_dir) ] + } } # Tells the compiler not to use absolute paths when passing the default @@ -542,16 +559,34 @@ config("compiler") { cxx11_override = use_cxx11 } - # gnu11/gnu++11 instead of c11/c++11 is needed because some code uses typeof() - # (a GNU extension). - # TODO(thakis): Eventually switch this to c++11 instead, - # http://crbug.com/427584 - cflags_c += [ "-std=gnu11" ] + if (is_clang) { + standard_prefix = "c" + + # Since we build with -std=c* and not -std=gnu*, _GNU_SOURCE will not be + # defined by the compiler. However, lots of code relies on the + # non-standard features that _GNU_SOURCE enables, so define it manually. + defines += [ "_GNU_SOURCE" ] + + if (is_nacl) { + # Undefine __STRICT_ANSI__ to get non-standard features which would + # otherwise not be enabled by NaCl's sysroots. + cflags += [ "-U__STRICT_ANSI__" ] + } + } else { + # Gcc does not support ##__VA_ARGS__ when in standards-conforming mode, + # but we use this feature in several places in Chromium. + # TODO(thomasanderson): Replace usages of ##__VA_ARGS__ with the + # standard-compliant __VA_OPT__ added by C++20, and switch the gcc build + # to -std=c*. + standard_prefix = "gnu" + } + + cflags_c += [ "-std=${standard_prefix}11" ] if (cxx11_override) { # Override Chromium's default for projects that wish to stay on C++11. - cflags_cc += [ "-std=gnu++11" ] + cflags_cc += [ "-std=${standard_prefix}++11" ] } else { - cflags_cc += [ "-std=gnu++14" ] + cflags_cc += [ "-std=${standard_prefix}++14" ] } } else if (!is_win && !is_nacl) { if (target_os == "android") { @@ -587,26 +622,28 @@ config("compiler") { # example by disabling the optimize configuration. # TODO(pcc): Make this conditional on is_official_build rather than on gn # flags for specific features. - if (!is_debug && use_thin_lto && current_toolchain == default_toolchain) { + if (!is_debug && use_thin_lto && + (current_toolchain == default_toolchain || + (is_android && defined(android_secondary_abi_toolchain) && + current_toolchain == android_secondary_abi_toolchain))) { assert(use_lld || target_os == "chromeos", "gold plugin only supported with ChromeOS") cflags += [ "-flto=thin" ] - # Limit the size of the ThinLTO cache to the lesser of 10% of available disk - # space, 10GB and 100000 files. - if (use_lld) { - cache_policy = - "cache_size=10%:cache_size_bytes=10g:cache_size_files=100000" + if (thin_lto_enable_optimizations) { + lto_opt_level = 2 + } else { + lto_opt_level = 0 } + if (is_win) { - # This is a straight translation of the non-Windows flags below. + # This is a straight translation of the non-Windows flags below, + # except we do not use the ThinLTO cache, which leaks temporary + # files on Windows (https://crbug.com/871962). ldflags += [ - "/opt:lldlto=0", + "/opt:lldlto=" + lto_opt_level, "/opt:lldltojobs=8", - "/lldltocache:" + - rebase_path("$root_out_dir/thinlto-cache", root_build_dir), - "/lldltocachepolicy:$cache_policy", ] } else { ldflags += [ "-flto=thin" ] @@ -615,6 +652,10 @@ config("compiler") { # linker jobs. This is still suboptimal to a potential dynamic # resource allocation scheme, but should be good enough. if (use_lld) { + # Limit the size of the ThinLTO cache to the lesser of 10% of available disk + # space, 10GB and 100000 files. + cache_policy = + "cache_size=10%:cache_size_bytes=10g:cache_size_files=100000" ldflags += [ "-Wl,--thinlto-jobs=8", "-Wl,--thinlto-cache-dir=" + @@ -624,12 +665,22 @@ config("compiler") { } else { ldflags += [ "-Wl,-plugin-opt,jobs=8" ] } - } - # Disable optimization for now because they increase binary size by too - # much. - if (use_lld && (is_android || (is_linux && !is_chromeos))) { - ldflags += [ "-Wl,--lto-O0" ] + if (use_lld) { + ldflags += [ "-Wl,--lto-O" + lto_opt_level ] + if (thin_lto_enable_optimizations) { + if (is_android) { + # TODO(gbiv): We ideally shouldn't need to specify this; ThinLTO + # should be able to better manage binary size increases on its own. + ldflags += [ + "-Wl,-mllvm", + "-Wl,-import-instr-limit=5", + ] + } + } + } else { + not_needed([ "lto_opt_level" ]) + } } # TODO(pcc): Re-enable this flag on Android. This will require libc++ to be @@ -877,6 +928,7 @@ config("compiler_cpu_abi") { cflags += [ "-m${mips_float_abi}-float" ] } else if (current_cpu == "mips64el") { + cflags += [ "-D__SANE_USERSPACE_TYPES__" ] ldflags += [ "-Wl,--hash-style=sysv" ] if (custom_toolchain == "") { if (is_clang) { @@ -1074,20 +1126,6 @@ config("compiler_codegen") { asmflags = cflags } -# This is separate from :compiler_codegen (and not even a sub-config there) -# so that some targets can remove it from the list with: -# configs -= [ "//build/config/compiler:clang_stackrealign" ] -# See https://crbug.com/556393 for details of where it must be avoided. -config("clang_stackrealign") { - if (is_clang && current_cpu == "x86" && is_linux) { - cflags = [ - # Align the stack on 16-byte boundaries, http://crbug.com/418554. - "-mstack-alignment=16", - "-mstackrealign", - ] - } -} - config("clang_revision") { if (is_clang && clang_base_path == default_clang_base_path) { update_args = [ @@ -1308,7 +1346,6 @@ config("default_warnings") { # http://crbug.com/588506 - Conversion suppressions waiting on Clang # -Wconversion. - "/wd4018", # 'expression' : signed/unsigned mismatch "/wd4245", # 'conversion' : conversion from 'type1' to 'type2', # signed/unsigned mismatch @@ -1447,9 +1484,6 @@ config("default_warnings") { cflags += [ # TODO(thakis): https://crbug.com/604888 "-Wno-undefined-var-template", - - # TODO(hans): https://crbug.com/637306 - "-Wno-address-of-packed-member", ] if (current_toolchain == host_toolchain || !use_xcode_clang || xcode_version_int >= 930) { @@ -1637,6 +1671,19 @@ config("no_rtti") { } } +# export_dynamic --------------------------------------------------------------- +# +# Ensures all exported symbols are added to the dynamic symbol table. This is +# necessary to expose Chrome's custom operator new() and operator delete() (and +# other memory-related symbols) to libraries. Otherwise, they might +# (de)allocate memory on a different heap, which would spell trouble if pointers +# to heap-allocated memory are passed over shared library boundaries. +config("export_dynamic") { + if (is_desktop_linux || export_libcxxabi_from_executables) { + ldflags = [ "-rdynamic" ] + } +} + # thin_archive ----------------------------------------------------------------- # # Enables thin archives on posix. Regular archives directly include the object @@ -2222,6 +2269,15 @@ config("minimal_symbols") { # Linker symbols for backtraces only. cflags = [] ldflags = [ "/DEBUG" ] + + # For win/asan, get stack traces with full line numbers. + # AddressSanitizerTests.TestAddressSanitizer needs this, and since + # win/asan isn't a default cq bot the build time hit is ok. + if (is_clang && using_sanitizer) { + # -gline-tables-only is the same as -g1, but clang-cl only exposes the + # former. + cflags += [ "-gline-tables-only" ] + } } else { cflags = [] if (target_cpu == "arm") { diff --git a/chromium/build/config/compiler/compiler.gni b/chromium/build/config/compiler/compiler.gni index 0b13302021b..4a6fd985fb4 100644 --- a/chromium/build/config/compiler/compiler.gni +++ b/chromium/build/config/compiler/compiler.gni @@ -43,7 +43,10 @@ declare_args() { # Enables support for ThinLTO, which links 3x-10x faster than full LTO. See # also http://blog.llvm.org/2016/06/thinlto-scalable-and-incremental-lto.html - use_thin_lto = is_cfi + # NOTE: See http://crbug.com/871722 to understand why this is disabled for + # 32-bit Android/ARM + use_thin_lto = + is_cfi || (is_android && is_official_build && target_cpu != "arm") # Tell VS to create a PDB that references information in .obj files rather # than copying it all. This should improve linker performance. mspdbcmf.exe @@ -80,7 +83,7 @@ exclude_unwind_tables = # Linux & Mac favor speed over size. # TODO(brettw) it's weird that Mac and desktop Linux are different. We should # explore favoring size over speed in this case as well. -optimize_for_size = is_android || is_ios +optimize_for_size = is_android || is_ios || is_fuchsia declare_args() { # Whether we should consider the profile we're using to be accurate. Accurate @@ -209,7 +212,9 @@ if (symbol_level == -1) { # them off, but keep them on for Official builds and Chromecast builds. symbol_level = 2 } else if (using_sanitizer) { - # Sanitizers require symbols for filename suppressions to work. + # Sanitizers need line table info for stack traces. They don't need type + # info or variable info, so we can leave that out to speed up the build. + # Sanitizers also require symbols for filename suppressions to work. symbol_level = 1 } else { symbol_level = 0 diff --git a/chromium/build/config/coverage/BUILD.gn b/chromium/build/config/coverage/BUILD.gn index fb37787ccbf..6fd4fd5fe25 100644 --- a/chromium/build/config/coverage/BUILD.gn +++ b/chromium/build/config/coverage/BUILD.gn @@ -17,10 +17,25 @@ config("default_coverage") { "-mllvm", "-limited-coverage-experimental=true", ] - ldflags = [ "-fprofile-instr-generate" ] + ldflags = [] if (!is_win) { + ldflags += [ "-fprofile-instr-generate" ] cflags += [ "-fno-use-cxa-atexit" ] + } else { + # Windows directly calls link.exe instead of the compiler driver when + # linking. Hence, pass the runtime libraries instead of + # -fsanitize=address. + # TODO(rnk): Come up with a more uniform approach for linking against + # compiler-rt for sanitizers and coverage. + if (target_cpu == "x64") { + ldflags += [ "clang_rt.profile-x86_64.lib" ] + } else if (target_cpu == "x86") { + ldflags += [ "clang_rt.profile-i386.lib" ] + } else { + assert(false && + "use_clang_coverage=true not supported yet for this target_cpu") + } } } } diff --git a/chromium/build/config/fuchsia/BUILD.gn b/chromium/build/config/fuchsia/BUILD.gn index ab88b6eac0b..bb26045fe18 100644 --- a/chromium/build/config/fuchsia/BUILD.gn +++ b/chromium/build/config/fuchsia/BUILD.gn @@ -34,11 +34,11 @@ config("compiler") { # patches, we might want to make tools/clang/scripts/update.py build it # and bundle it with the clang package instead of using the library from # the SDK, https://crbug.com/724204 - # Note: Intentionally 7.0.0 instead of $clang_version because the clang + # Note: Intentionally 8.0.0 instead of $clang_version because the clang # version of the toolchain_libs directory in the Fuchsia SDK can be # different from the version of Chromium's clang. "-resource-dir", - rebase_path(fuchsia_sdk, root_build_dir) + "/toolchain_libs/clang/7.0.0", + rebase_path(fuchsia_sdk, root_build_dir) + "/toolchain_libs/clang/8.0.0", # The stack defaults to 256k on Fuchsia (see # https://fuchsia.googlesource.com/zircon/+/master/system/private/zircon/stack.h#9), @@ -121,8 +121,7 @@ action("blobstore_extended_qcow2") { ] args = [ - rebase_path("//third_party/fuchsia-sdk/sdk/qemu/bin/qemu-img", - root_build_dir), + rebase_path("${qemu_root}/bin/qemu-img", root_build_dir), "convert", "-f", "raw", diff --git a/chromium/build/config/fuchsia/build_manifest.py b/chromium/build/config/fuchsia/build_manifest.py index 4896c1e92bd..db0db8cbae8 100644 --- a/chromium/build/config/fuchsia/build_manifest.py +++ b/chromium/build/config/fuchsia/build_manifest.py @@ -179,10 +179,13 @@ def BuildManifest(root_dir, out_dir, app_name, app_filename, # Compute the set of dynamic libraries used by the application or its # transitive dependencies (dist libs and components), and merge the result # with |expanded_files| so that they are included in the manifest. - expanded_files = expanded_files.union( - ComputeTransitiveLibDeps( - app_filename, - {os.path.basename(f): f for f in expanded_files.union(dist_libs)})) + + # TODO(https://crbug.com/861931): Temporarily just include all |dist_libs|. + #expanded_files = expanded_files.union( + # ComputeTransitiveLibDeps( + # app_filename, + # {os.path.basename(f): f for f in expanded_files.union(dist_libs)})) + expanded_files = expanded_files.union(dist_libs) # Format and write out the manifest contents. app_found = False diff --git a/chromium/build/config/fuchsia/config.gni b/chromium/build/config/fuchsia/config.gni index 52ca5e07adf..165153b2b55 100644 --- a/chromium/build/config/fuchsia/config.gni +++ b/chromium/build/config/fuchsia/config.gni @@ -17,3 +17,6 @@ if (current_cpu == "arm64") { } else { assert(false, "No libraries available for architecture: $current_cpu") } + +# Compute the qemu path. +qemu_root = "//third_party/qemu-${host_os}-${host_cpu}" diff --git a/chromium/build/config/fuchsia/rules.gni b/chromium/build/config/fuchsia/rules.gni index 85c9265f8c4..5194707b5c5 100644 --- a/chromium/build/config/fuchsia/rules.gni +++ b/chromium/build/config/fuchsia/rules.gni @@ -51,10 +51,13 @@ template("fuchsia_package_runner") { deps = [ "//build/config/fuchsia:blobstore_extended_qcow2", - "//testing/buildbot/filters:fuchsia_filters", invoker.package, ] + if (defined(invoker.deps)) { + deps += invoker.deps + } + script = "//build/fuchsia/create_runner_script.py" outputs = [ @@ -66,6 +69,7 @@ template("fuchsia_package_runner") { _manifest_path, "//build/fuchsia/", "//build/util/lib/", + "${qemu_root}/", "${fuchsia_sdk}/", ] diff --git a/chromium/build/config/fuchsia/sandbox_policy b/chromium/build/config/fuchsia/sandbox_policy index 9419bdd2b34..bbf871d30b1 100644 --- a/chromium/build/config/fuchsia/sandbox_policy +++ b/chromium/build/config/fuchsia/sandbox_policy @@ -1,4 +1,4 @@ { - "features": [ "persistent-storage", "root-ssl-certificates", "system-temp" ] + "features": [ "persistent-storage", "root-ssl-certificates", "system-temp", + "deprecated-all-services", "vulkan" ] } - diff --git a/chromium/build/config/fuchsia/testing_sandbox_policy b/chromium/build/config/fuchsia/testing_sandbox_policy index 9d4db8f6faa..9da8b2213ae 100644 --- a/chromium/build/config/fuchsia/testing_sandbox_policy +++ b/chromium/build/config/fuchsia/testing_sandbox_policy @@ -1,5 +1,5 @@ { - "features": [ "persistent-storage", "root-ssl-certificates", "system-temp"], + "features": [ "persistent-storage", "root-ssl-certificates", "system-temp", + "deprecated-all-services", "vulkan" ], "dev": ["null", "zero"] } - diff --git a/chromium/build/config/gcc/BUILD.gn b/chromium/build/config/gcc/BUILD.gn index b6f4f5f2a93..365cbf90f09 100644 --- a/chromium/build/config/gcc/BUILD.gn +++ b/chromium/build/config/gcc/BUILD.gn @@ -51,14 +51,6 @@ config("symbol_visibility_default") { # step will put the directory where the build generates shared libraries into # the rpath. # -# It's important that this *not* be used for release builds we push out. -# Chrome uses some setuid binaries, and hard links preserve setuid bits. An -# unprivileged user could gain root privileges by hardlinking a setuid -# executable and then adding in whatever binaries they want to run into the lib -# directory. -# -# Example bug: https://bugs.debian.org/cgi-bin/bugreport.cgi?bug=520126 -# # This is required for component builds since the build generates many shared # libraries in the build directory that we expect to be automatically loaded. # It will be automatically applied in this case by :executable_ldconfig. @@ -73,11 +65,7 @@ config("symbol_visibility_default") { config("rpath_for_built_shared_libraries") { if (!is_android) { # Note: Android doesn't support rpath. - if (shlib_subdir != ".") { - rpath_link = "${shlib_subdir}/" - } else { - rpath_link = "." - } + rpath_link = "." if (current_toolchain != default_toolchain || gcc_target_rpath == "") { ldflags = [ # Want to pass "\$". GN will re-escape as required for ninja. @@ -98,10 +86,6 @@ config("rpath_for_built_shared_libraries") { # Settings for executables. config("executable_ldconfig") { - # WARNING! //sandbox/linux:chrome_sandbox will not pick up this - # config, because it is a setuid binary that needs special flags. - # If you add things to this config, make sure you check to see - # if they should be added to that target as well. ldflags = [] if (is_android) { ldflags += [ @@ -110,8 +94,8 @@ config("executable_ldconfig") { ] } else { # See the rpath_for... config above for why this is necessary for component - # builds. Sanitizers use a custom libc++ where this is also necessary. - if (is_component_build || using_sanitizer || !libcpp_is_static) { + # builds. + if (is_component_build) { configs = [ ":rpath_for_built_shared_libraries" ] } if (current_cpu == "mipsel" || current_cpu == "mips64el") { @@ -124,9 +108,6 @@ config("executable_ldconfig") { # relative to the build directory. ${root_out_dir} will be a # subdirectory of ${root_build_dir} when cross compiling. _rpath_link = rebase_path(root_out_dir, root_build_dir) - if (shlib_subdir != ".") { - _rpath_link += "/$shlib_subdir" - } ldflags += [ "-Wl,-rpath-link=$_rpath_link", diff --git a/chromium/build/config/ios/ios_sdk.gni b/chromium/build/config/ios/ios_sdk.gni index 35de13b28ef..c9dff44add6 100644 --- a/chromium/build/config/ios/ios_sdk.gni +++ b/chromium/build/config/ios/ios_sdk.gni @@ -133,8 +133,11 @@ if (ios_enable_code_signing && !use_ios_simulator) { find_signing_identity_args, "list lines") if (_ios_identities == []) { - print("Tried to prepare a device build without specifying a code signing") - print("identity and could not detect one automatically either.") + print("Automatic code signing identity selection was enabled but could") + print("not find exactly one code signing identity matching") + print("$ios_code_signing_identity_description. Check that your keychain") + print("is accessible and that there is a valid code signing identity") + print("listed by `xcrun security find-identity -v -p codesigning`") print("TIP: Simulator builds don't require code signing...") assert(false) } else { @@ -163,4 +166,4 @@ if (ios_enable_code_signing && !use_ios_simulator) { } } -assert(xcode_version_int >= 900, "Xcode 9 is required.") +assert(xcode_version_int >= 1000, "Xcode 10 is required.") diff --git a/chromium/build/config/ios/rules.gni b/chromium/build/config/ios/rules.gni index 02725177aa8..063b964c09d 100644 --- a/chromium/build/config/ios/rules.gni +++ b/chromium/build/config/ios/rules.gni @@ -7,6 +7,11 @@ import("//build/config/mac/base_rules.gni") import("//build/config/mac/symbols.gni") import("//build/toolchain/toolchain.gni") +# Constants corresponding to the bundle type identifier for XCTest and XCUITest +# targets. +_ios_xcode_xctest_bundle_id = "com.apple.product-type.bundle.unit-test" +_ios_xcode_xcuitest_bundle_id = "com.apple.product-type.bundle.ui-testing" + # Invokes lipo on multiple arch-specific binaries to create a fat binary. # # Arguments @@ -210,8 +215,8 @@ template("create_signed_bundle") { if (defined(invoker.xcode_test_application_name)) { assert( - invoker.product_type == "com.apple.product-type.bundle.unit-test" || - invoker.product_type == "com.apple.product-type.bundle.ui-testing", + invoker.product_type == _ios_xcode_xctest_bundle_id || + invoker.product_type == _ios_xcode_xcuitest_bundle_id, "xcode_test_application_name can be only defined for Xcode unit or ui test target.") } @@ -285,7 +290,6 @@ template("create_signed_bundle") { "public_deps", "testonly", "visibility", - "xcode_extra_attributes", "xcode_test_application_name", ]) @@ -299,6 +303,15 @@ template("create_signed_bundle") { public_deps = [] } + xcode_extra_attributes = { + IPHONEOS_DEPLOYMENT_TARGET = ios_deployment_target + + # If invoker has defined extra attributes, they override the defaults. + if (defined(invoker.xcode_extra_attributes)) { + forward_variables_from(invoker.xcode_extra_attributes, "*") + } + } + if (defined(invoker.bundle_binary_target)) { public_deps += [ invoker.bundle_binary_target ] } @@ -1574,8 +1587,8 @@ template("ios_xctest_bundle") { assert(defined(invoker.deps), "deps must be defined for $target_name") assert(defined(invoker.product_type), "product_type must be defined for $target_name") - assert(invoker.product_type == "com.apple.product-type.bundle.unit-test" || - invoker.product_type == "com.apple.product-type.bundle.ui-testing", + assert(invoker.product_type == _ios_xcode_xctest_bundle_id || + invoker.product_type == _ios_xcode_xcuitest_bundle_id, "product_type defined for $target_name is invalid.") assert(defined(invoker.host_target), "host_target must be defined for $target_name") @@ -1712,9 +1725,18 @@ template("ios_xctest_bundle") { # For XCUITest, Xcode requires specifying the host application name via # the TEST_TARGET_NAME attribute. - if (invoker.product_type == "com.apple.product-type.bundle.ui-testing") { + if (invoker.product_type == _ios_xcode_xcuitest_bundle_id) { TEST_TARGET_NAME = invoker.xcode_test_application_name } + + # For XCTest, Xcode requires specifying the host application path via + # both BUNDLE_LOADER and TEST_HOST attributes. + if (invoker.product_type == _ios_xcode_xctest_bundle_id) { + BUNDLE_LOADER = "\$(TEST_HOST)" + TEST_HOST = + "\$(BUILT_PRODUCTS_DIR)/${invoker.xcode_test_application_name}" + + ".app/${invoker.xcode_test_application_name}" + } } deps = [ @@ -1773,7 +1795,7 @@ template("ios_xctest_test") { ios_xctest_bundle(_xctest_target) { output_name = _xctest_output - product_type = "com.apple.product-type.bundle.unit-test" + product_type = _ios_xcode_xctest_bundle_id host_target = _host_target xcode_test_application_name = _host_output @@ -2011,7 +2033,7 @@ template("ios_xcuitest_test") { ios_xctest_bundle(_xcuitest_module_target) { forward_variables_from(invoker, [ "xcode_test_application_name" ]) - product_type = "com.apple.product-type.bundle.ui-testing" + product_type = _ios_xcode_xcuitest_bundle_id host_target = _xcuitest_runner_target output_name = _xcuitest_module_output diff --git a/chromium/build/config/linux/atk/BUILD.gn b/chromium/build/config/linux/atk/BUILD.gn index 89eedff121b..59c06f8ee2c 100644 --- a/chromium/build/config/linux/atk/BUILD.gn +++ b/chromium/build/config/linux/atk/BUILD.gn @@ -3,7 +3,6 @@ # found in the LICENSE file. import("//build/config/features.gni") -import("//build/config/linux/gtk/gtk.gni") import("//build/config/linux/pkg_config.gni") import("//build/config/ui.gni") @@ -18,18 +17,20 @@ if (use_atk) { } pkg_config("atk_base") { - packages = [ "atk" ] + packages = [ + "atk", + "atk-bridge-2.0", + ] atk_lib_dir = exec_script(pkg_config_script, pkg_config_args + [ "--libdir", "atk", ], "string") - defines = [ "ATK_LIB_DIR=\"$atk_lib_dir\"" ] - if (use_gtk3) { - packages += [ "atk-bridge-2.0" ] - defines += [ "USE_ATK_BRIDGE" ] - } + defines = [ + "ATK_LIB_DIR=\"$atk_lib_dir\"", + "USE_ATK_BRIDGE", + ] } # gn orders flags on a target before flags from configs. The default config diff --git a/chromium/build/config/linux/gtk/BUILD.gn b/chromium/build/config/linux/gtk/BUILD.gn index deae4d3455a..a2b40d82674 100644 --- a/chromium/build/config/linux/gtk/BUILD.gn +++ b/chromium/build/config/linux/gtk/BUILD.gn @@ -7,10 +7,18 @@ import("//build/config/linux/pkg_config.gni") assert(is_linux, "This file should only be referenced on Linux") -# The target in this file will automatically reference GTK2 or GTK3 depending -# on the state of the build flag. Some builds reference both 2 and 3, and some -# builds reference neither, so both need to be available but in different -# directories so pkg-config is only run when necessary. +# GN doesn't check visibility for configs so we give this an obviously internal +# name to discourage random targets from accidentally depending on this and +# bypassing the GTK target's visibility. +pkg_config("gtk_internal_config") { + # Gtk requires gmodule, but it does not list it as a dependency in some + # misconfigured systems. + packages = [ + "gmodule-2.0", + "gtk+-${gtk_version}.0", + "gthread-2.0", + ] +} # Basically no parts of Chrome should depend on GTK. To prevent accidents, the # parts that explicitly need GTK are whitelisted on this target. @@ -27,15 +35,18 @@ group("gtk") { "//remoting/host:remoting_me2me_host_static", "//remoting/test:it2me_standalone_host_main", "//webrtc/examples:peerconnection_client", + "//chrome/browser/ui/libgtkui:*", ] - if (use_gtk3) { - public_deps = [ - "//build/config/linux/gtk3", - ] - } else { - public_deps = [ - "//build/config/linux/gtk2", - ] - } + public_configs = [ ":gtk_internal_config" ] +} + +# Depend on "gtkprint" to get this. +pkg_config("gtkprint_internal_config") { + packages = [ "gtk+-unix-print-${gtk_version}.0" ] +} + +group("gtkprint") { + visibility = [ "//chrome/browser/ui/libgtkui:*" ] + public_configs = [ ":gtkprint_internal_config" ] } diff --git a/chromium/build/config/linux/gtk/gtk.gni b/chromium/build/config/linux/gtk/gtk.gni index 53e943e14d2..1e0e6ace0f3 100644 --- a/chromium/build/config/linux/gtk/gtk.gni +++ b/chromium/build/config/linux/gtk/gtk.gni @@ -1,12 +1,10 @@ -# Copyright 2016 The Chromium Authors. All rights reserved. +# Copyright 2018 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. -# Include this file if you need to know at build time whether we're compiling -# against GTK 2 or 3. But in most cases you can just depend on -# //build/config/linux/gtk and it will switch for you. - declare_args() { - # Whether to compile against GTKv3 instead of GTKv2. - use_gtk3 = true + # The (major) version of GTK to build against. + gtk_version = 3 } + +assert(gtk_version >= 3 && gtk_version <= 4) diff --git a/chromium/build/config/linux/gtk2/BUILD.gn b/chromium/build/config/linux/gtk2/BUILD.gn deleted file mode 100644 index 010d592df4a..00000000000 --- a/chromium/build/config/linux/gtk2/BUILD.gn +++ /dev/null @@ -1,43 +0,0 @@ -# Copyright 2015 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. - -import("//build/config/linux/pkg_config.gni") - -assert(is_linux, "This file should only be referenced on Linux") - -# Depend on //build/config/linux/gtk2 to use GTKv2. Depend on -# //build/config/linux/gtk to get GTK 2 or 3 depending on the build flags. -# -# GN doesn't check visibility for configs so we give this an obviously internal -# name to discourage random targets from accidentally depending on this and -# bypassing the GTK target's visibility. -pkg_config("gtk2_internal_config") { - # Gtk requires gmodule, but it does not list it as a dependency in some - # misconfigured systems. - packages = [ - "gmodule-2.0", - "gtk+-2.0", - "gthread-2.0", - ] -} - -# Basically no parts of Chrome should depend on GTK. To prevent accidents, the -# parts that explicitly need GTK2 are whitelisted on this target. -group("gtk2") { - visibility = [ - "//build/config/linux/gtk", - "//chrome/browser/ui/libgtkui:*", - ] - public_configs = [ ":gtk2_internal_config" ] -} - -# Depend on "gtkprint" to get this. -pkg_config("gtkprint2_internal_config") { - packages = [ "gtk+-unix-print-2.0" ] -} - -group("gtkprint2") { - visibility = [ "//chrome/browser/ui/libgtkui:libgtk2ui" ] - public_configs = [ ":gtkprint2_internal_config" ] -} diff --git a/chromium/build/config/linux/gtk3/BUILD.gn b/chromium/build/config/linux/gtk3/BUILD.gn deleted file mode 100644 index 0cfd05f3193..00000000000 --- a/chromium/build/config/linux/gtk3/BUILD.gn +++ /dev/null @@ -1,43 +0,0 @@ -# Copyright 2015 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. - -import("//build/config/linux/pkg_config.gni") - -assert(is_linux, "This file should only be referenced on Linux") - -# Depend on //build/config/linux/gtk3 to use GTKv3. Depend on -# //build/config/linux/gtk to get GTK 2 or 3 depending on the build flags. -# -# GN doesn't check visibility for configs so we give this an obviously internal -# name to discourage random targets from accidentally depending on this and -# bypassing the GTK target's visibility. -pkg_config("gtk3_internal_config") { - # Gtk requires gmodule, but it does not list it as a dependency in some - # misconfigured systems. - packages = [ - "gmodule-2.0", - "gtk+-3.0", - "gthread-2.0", - ] -} - -# Basically no parts of Chrome should depend on GTK. To prevent accidents, the -# parts that explicitly need GTK3 are whitelisted on this target. -group("gtk3") { - visibility = [ - "//build/config/linux/gtk", - "//chrome/browser/ui/libgtkui:*", - ] - public_configs = [ ":gtk3_internal_config" ] -} - -# Depend on "gtkprint3" to get this. -pkg_config("gtkprint3_internal_config") { - packages = [ "gtk+-unix-print-3.0" ] -} - -group("gtkprint3") { - visibility = [ "//chrome/browser/ui/libgtkui:libgtk3ui" ] - public_configs = [ ":gtkprint3_internal_config" ] -} diff --git a/chromium/build/secondary/third_party/nss/BUILD.gn b/chromium/build/config/linux/nss/BUILD.gn index 5788f3e5d6d..5788f3e5d6d 100644 --- a/chromium/build/secondary/third_party/nss/BUILD.gn +++ b/chromium/build/config/linux/nss/BUILD.gn diff --git a/chromium/build/config/linux/pkg_config.gni b/chromium/build/config/linux/pkg_config.gni index 53ee353af8b..428e44ac0a0 100644 --- a/chromium/build/config/linux/pkg_config.gni +++ b/chromium/build/config/linux/pkg_config.gni @@ -103,11 +103,15 @@ template("pkg_config") { pkgresult = exec_script(pkg_config_script, args, "value") cflags = pkgresult[1] - # We want the system include paths to use -isystem instead of -I to suppress - # warnings in those headers. foreach(include, pkgresult[0]) { - include_relativized = rebase_path(include, root_build_dir) - cflags += [ "-isystem$include_relativized" ] + if (use_sysroot) { + # We want the system include paths to use -isystem instead of -I to + # suppress warnings in those headers. + include_relativized = rebase_path(include, root_build_dir) + cflags += [ "-isystem$include_relativized" ] + } else { + cflags += [ "-I$include" ] + } } if (!defined(invoker.ignore_libs) || !invoker.ignore_libs) { diff --git a/chromium/build/config/mac/rules.gni b/chromium/build/config/mac/rules.gni index 987266117ab..d9f4b6e6733 100644 --- a/chromium/build/config/mac/rules.gni +++ b/chromium/build/config/mac/rules.gni @@ -360,6 +360,10 @@ template("mac_framework_bundle") { # TODO(sdefresne): should we have a framework_dirs similar to lib_dirs # and include_dirs to avoid duplicate values on the command-line. visibility = [ ":$_framework_target" ] + cflags = [ + "-F", + rebase_path("$root_out_dir/.", root_build_dir), + ] ldflags = [ "-F", rebase_path("$root_out_dir/.", root_build_dir), diff --git a/chromium/build/config/posix/BUILD.gn b/chromium/build/config/posix/BUILD.gn index 91405fd7e56..43655a6eb87 100644 --- a/chromium/build/config/posix/BUILD.gn +++ b/chromium/build/config/posix/BUILD.gn @@ -35,12 +35,12 @@ config("runtime_library") { libs = [] if (use_custom_libcxx) { - if (libcpp_is_static) { + if (!is_component_build) { # Don't leak any symbols on a static build. - defines += [ - "_LIBCPP_DISABLE_VISIBILITY_ANNOTATIONS", - "_LIBCXXABI_DISABLE_VISIBILITY_ANNOTATIONS", - ] + defines += [ "_LIBCPP_DISABLE_VISIBILITY_ANNOTATIONS" ] + if (!export_libcxxabi_from_executables) { + defines += [ "_LIBCXXABI_DISABLE_VISIBILITY_ANNOTATIONS" ] + } } if (!is_clang) { # Gcc has a built-in abs() definition with default visibility. diff --git a/chromium/build/config/python.gni b/chromium/build/config/python.gni index e24025f68fd..4e71e87886b 100644 --- a/chromium/build/config/python.gni +++ b/chromium/build/config/python.gni @@ -59,3 +59,108 @@ template("python_library") { } } } + +# A template used for actions that execute a Python script, which has an +# associated .pydeps file. In other words: +# +# - This is very similar to just an action(), except that |script| must point +# to a Python script (e.g. "//build/.../foo.py") that has a corresponding +# .pydeps file in the source tree (e.g. "//build/.../foo.pydeps"). +# +# - The .pydeps file contains a list of python dependencies (imports really) +# and is generated _manually_ by using a command like: +# +# build/print_python_deps.py --inplace build/android/gyp/foo.py +# +template("action_with_pydeps") { + # Read the .pydeps file now. Note that this is done everytime this + # template is called, but benchmarking doesn't show any impact on overall + # 'gn gen' speed anyway. + _pydeps_file = invoker.script + "deps" + _pydeps_raw = read_file(_pydeps_file, "list lines") + + # Filter out comments. + # This is a bit convoluted to preserve the value of sources if defined. + _old_sources = [] + if (defined(sources)) { + _old_sources = sources + } + set_sources_assignment_filter([ "#*" ]) + sources = _pydeps_raw + _pydeps = sources + set_sources_assignment_filter([]) + sources = _old_sources + + action(target_name) { + # Forward all variables. Ensure that testonly and visibility are forwarded + # explicitly, since this performs recursive scope lookups, which is + # required to ensure their definition from scopes above the caller are + # properly handled. All other variables are forwarded with "*", which + # doesn't perform recursive lookups at all. See https://crbug.com/862232 + forward_variables_from(invoker, + [ + "testonly", + "visibility", + ]) + forward_variables_from(invoker, + "*", + [ + "testonly", + "visibility", + ]) + + if (!defined(inputs)) { + inputs = [] + } + + # Dependencies are listed relative to the script directory, but inputs + # expects paths that are relative to the current BUILD.gn + _script_dir = get_path_info(script, "dir") + inputs += rebase_path(_pydeps, ".", _script_dir) + } +} + +template("action_foreach_with_pydeps") { + _pydeps_file = invoker.script + "deps" + _pydeps_raw = read_file(_pydeps_file, "list lines") + + # Filter out comments. + # This is a bit convoluted to preserve the value of sources if defined. + _old_sources = [] + if (defined(sources)) { + _old_sources = sources + } + set_sources_assignment_filter([ "#*" ]) + sources = _pydeps_raw + _pydeps = sources + set_sources_assignment_filter([]) + sources = _old_sources + + action_foreach(target_name) { + # Forward all variables. Ensure that testonly and visibility are forwarded + # explicitly, since this performs recursive scope lookups, which is + # required to ensure their definition from scopes above the caller are + # properly handled. All other variables are forwarded with "*", which + # doesn't perform recursive lookups at all. See https://crbug.com/862232 + forward_variables_from(invoker, + [ + "testonly", + "visibility", + ]) + forward_variables_from(invoker, + "*", + [ + "testonly", + "visibility", + ]) + + if (!defined(inputs)) { + inputs = [] + } + + # Dependencies are listed relative to the script directory, but inputs + # expects paths that are relative to the current BUILD.gn + _script_dir = get_path_info(script, "dir") + inputs += rebase_path(_pydeps, ".", _script_dir) + } +} diff --git a/chromium/build/config/sanitizers/BUILD.gn b/chromium/build/config/sanitizers/BUILD.gn index ba5edc1c2f4..2ad0304f177 100644 --- a/chromium/build/config/sanitizers/BUILD.gn +++ b/chromium/build/config/sanitizers/BUILD.gn @@ -197,9 +197,16 @@ config("default_sanitizer_ldflags") { if (is_ubsan_vptr) { ldflags += [ "-fsanitize=vptr" ] } + if (is_safestack) { + ldflags += [ "-fsanitize=safe-stack" ] + } if (use_sanitizer_coverage) { - ldflags += [ "-fsanitize-coverage=$sanitizer_coverage_flags" ] + if (use_libfuzzer) { + ldflags += [ "-fsanitize=fuzzer-no-link" ] + } else { + ldflags += [ "-fsanitize-coverage=$sanitizer_coverage_flags" ] + } } if (is_cfi && current_toolchain == default_toolchain) { @@ -249,25 +256,16 @@ config("default_sanitizer_ldflags") { config("common_sanitizer_flags") { cflags = [] - # Sanitizers need line table info for stack traces. They don't need type info - # or variable info, so we can leave that out to speed up the build (unless - # it's explicitly asked for by setting |sanitizer_keep_symbols| to true). if (using_sanitizer) { assert(is_clang, "sanitizers only supported with clang") assert(!is_official_build, "sanitizers not supported in official builds") - if (!sanitizer_no_symbols) { - if (!sanitizer_keep_symbols) { - cflags += [ "-gline-tables-only" ] - } - - cflags += [ - # Column info in debug data confuses Visual Studio's debugger, so don't - # use this by default. However, clusterfuzz needs it for good - # attribution of reports to CLs, so turn it on there. - "-gcolumn-info", - ] - } + cflags += [ + # Column info in debug data confuses Visual Studio's debugger, so don't + # use this by default. However, clusterfuzz needs it for good + # attribution of reports to CLs, so turn it on there. + "-gcolumn-info", + ] # Frame pointers are controlled in //build/config/compiler:default_stack_frames } @@ -384,19 +382,24 @@ config("cfi_icall_generalize_pointers") { config("coverage_flags") { cflags = [] if (use_sanitizer_coverage) { - cflags += [ - "-fsanitize-coverage=$sanitizer_coverage_flags", - "-mllvm", - "-sanitizer-coverage-prune-blocks=1", - ] - if (current_cpu == "arm") { - # http://crbug.com/517105 + # Used by sandboxing code to allow coverage dump to be written on the disk. + defines = [ "SANITIZER_COVERAGE" ] + if (use_libfuzzer) { + cflags += [ "-fsanitize=fuzzer-no-link" ] + } else { cflags += [ + "-fsanitize-coverage=$sanitizer_coverage_flags", "-mllvm", - "-sanitizer-coverage-block-threshold=0", + "-sanitizer-coverage-prune-blocks=1", ] + if (current_cpu == "arm") { + # http://crbug.com/517105 + cflags += [ + "-mllvm", + "-sanitizer-coverage-block-threshold=0", + ] + } } - defines = [ "SANITIZER_COVERAGE" ] } } @@ -421,6 +424,12 @@ config("msan_flags") { } } +config("safestack_flags") { + if (is_safestack) { + cflags = [ "-fsanitize=safe-stack" ] + } +} + config("tsan_flags") { if (is_tsan) { assert(is_linux, "tsan only supported on linux x86_64") @@ -536,6 +545,7 @@ all_sanitizer_configs = [ ":cfi_flags", ":lsan_flags", ":msan_flags", + ":safestack_flags", ":tsan_flags", ":ubsan_flags", ":ubsan_no_recover", diff --git a/chromium/build/config/sanitizers/sanitizers.gni b/chromium/build/config/sanitizers/sanitizers.gni index 1c6218641cc..84ce878aaf7 100644 --- a/chromium/build/config/sanitizers/sanitizers.gni +++ b/chromium/build/config/sanitizers/sanitizers.gni @@ -33,6 +33,9 @@ declare_args() { # Compile for Undefined Behaviour Sanitizer's vptr checks. is_ubsan_vptr = false + # Compile with SafeStack shadow stack support. + is_safestack = false + # Track where uninitialized memory originates from. From fastest to slowest: # 0 - no tracking, 1 - track only the initial allocation site, 2 - track the # chain of stores leading from allocation site to use site. @@ -97,21 +100,13 @@ declare_args() { # Value for -fsanitize-coverage flag. Setting this causes # use_sanitizer_coverage to be enabled. - # Default value when unset and use_fuzzing_engine=true: + # This flag is not used for libFuzzer (use_libfuzzer=true). Instead, we use: + # -fsanitize=fuzzer-no-link + # Default value when unset and use_afl=true: # trace-pc-guard # Default value when unset and use_sanitizer_coverage=true: # trace-pc-guard,indirect-calls sanitizer_coverage_flags = "" - - # Keep symbol level when building with sanitizers. When sanitizers are - # enabled, the default is to compile with the minimum debug info level - # necessary, overriding any other symbol level arguments that may be set. - # Setting this to true prevents this. - sanitizer_keep_symbols = false - - # Builds fuzzer/sanitizers without symbols. Use with symbol_level=0. - # Useful for reducing binary size when building with use_clang_coverage=true. - sanitizer_no_symbols = false } # Disable sanitizers for non-default toolchains. @@ -163,9 +158,9 @@ if (use_fuzzing_engine && sanitizer_coverage_flags == "") { sanitizer_coverage_flags = "trace-pc-guard,indirect-calls" } -# Whether we are linking against a sanitizer runtime library. Among other -# things, this changes the default symbol level and other settings in order to -# prepare to create stack traces "live" using the sanitizer runtime. +# Whether we are linking against a debugging sanitizer runtime library. Among +# other things, this changes the default symbol level and other settings in +# order to prepare to create stack traces "live" using the sanitizer runtime. using_sanitizer = is_asan || is_lsan || is_tsan || is_msan || is_ubsan || is_ubsan_null || is_ubsan_vptr || is_ubsan_security || use_sanitizer_coverage || use_cfi_diag @@ -176,6 +171,9 @@ assert(!using_sanitizer || is_clang, assert(!is_cfi || is_clang, "is_cfi requires setting is_clang = true in 'gn args'") +assert(!is_safestack || is_clang, + "is_safestack requires setting is_clang = true in 'gn args'") + prebuilt_instrumented_libraries_available = is_msan && (msan_track_origins == 0 || msan_track_origins == 2) diff --git a/chromium/build/config/sysroot.gni b/chromium/build/config/sysroot.gni index d5daf2df2e4..701c66082e6 100644 --- a/chromium/build/config/sysroot.gni +++ b/chromium/build/config/sysroot.gni @@ -68,10 +68,8 @@ if (current_os == target_os && current_cpu == target_cpu && sysroot = ios_sdk_path } else if (is_fuchsia) { import("//build/config/fuchsia/config.gni") - if (current_cpu == "arm64") { - sysroot = fuchsia_sdk + "/sysroot/aarch64-fuchsia" - } else if (current_cpu == "x64") { - sysroot = fuchsia_sdk + "/sysroot/x86_64-fuchsia" + if (current_cpu == "arm64" || current_cpu == "x64") { + sysroot = fuchsia_sdk + "/arch/$current_cpu/sysroot" } else { sysroot = "" } diff --git a/chromium/build/config/win/BUILD.gn b/chromium/build/config/win/BUILD.gn index 02895ad354a..09e28990e15 100644 --- a/chromium/build/config/win/BUILD.gn +++ b/chromium/build/config/win/BUILD.gn @@ -8,6 +8,7 @@ import("//build/config/clang/clang.gni") import("//build/config/compiler/compiler.gni") import("//build/config/sanitizers/sanitizers.gni") import("//build/config/win/visual_studio_version.gni") +import("//build/timestamp.gni") import("//build/toolchain/goma.gni") import("//build/toolchain/toolchain.gni") @@ -36,6 +37,16 @@ declare_args() { # "server" - Windows Server Applications # "desktop" - Windows Desktop Applications target_winuwp_family = "app" + + # Set this to use clang style diagnostics format. Available only on clang. + # Tune this on for the editor integrations like Emacs compilation mode that + # match clang style error messages. + # E.g.: + # Without this, clang emits a diagnostic message like this: + # foo/bar.cc(12,34): error: something went wrong + # and with this switch, clang emits it like this: + # foo/bar.cc:12:34: error: something went wrong + use_clang_diagnostics_format = false } # This is included by reference in the //build/config/compiler config that @@ -92,6 +103,15 @@ config("compiler") { ] } + if (is_clang && use_clang_diagnostics_format) { + cflags += [ + "-Xclang", + "-fdiagnostics-format", + "-Xclang", + "clang", + ] + } + # Clang runtime libraries, such as the sanitizer runtimes, live here. lib_dirs = [ "$clang_base_path/lib/clang/$clang_version/lib/windows" ] } @@ -106,12 +126,23 @@ config("compiler") { cflags += [ "/Brepro" ] } + ldflags = [] + + if (use_lld) { + # lld defaults to writing the current time in the pe/coff header. + # For build reproducibility, pass an explicit timestamp. See + # build/compute_build_timestamp.py for how the timestamp is chosen. + # (link.exe also writes the current time, but it doesn't have a flag to + # override that behavior.) + ldflags += [ "/TIMESTAMP:" + build_timestamp ] + } + if (!is_debug && !is_component_build) { # Enable standard linker optimizations like GC (/OPT:REF) and ICF in static # release builds. These are implied by /PROFILE below, but /PROFILE is # incompatible with /debug:fastlink and LLD ignores it as of this writing. # Release builds always want these optimizations, so enable them explicitly. - ldflags = [ + ldflags += [ "/OPT:REF", "/OPT:ICF", "/INCREMENTAL:NO", @@ -222,7 +253,7 @@ config("runtime_library") { if (use_custom_libcxx) { cflags_cc += [ "-I" + rebase_path("$libcxx_prefix/include", root_build_dir) ] - if (libcpp_is_static) { + if (!is_component_build) { defines += [ "_LIBCPP_DISABLE_VISIBILITY_ANNOTATIONS" ] } diff --git a/chromium/build/dotfile_settings.gni b/chromium/build/dotfile_settings.gni index 8382c75f24f..4242ec69504 100644 --- a/chromium/build/dotfile_settings.gni +++ b/chromium/build/dotfile_settings.gni @@ -24,6 +24,7 @@ build_dotfile_settings = { "//build/config/sysroot.gni", "//build/config/win/BUILD.gn", "//build/config/win/visual_studio_version.gni", + "//build/timestamp.gni", "//build/toolchain/BUILD.gn", "//build/toolchain/concurrent_links.gni", "//build/toolchain/mac/BUILD.gn", diff --git a/chromium/build/experimental/install-build-deps.py b/chromium/build/experimental/install-build-deps.py index a286a4e8de2..a7447117471 100755 --- a/chromium/build/experimental/install-build-deps.py +++ b/chromium/build/experimental/install-build-deps.py @@ -63,7 +63,6 @@ _packages_dev = ( 'libglib2.0-dev', 'libglu1-mesa-dev', 'libgnome-keyring-dev', - 'libgtk2.0-dev', 'libkrb5-dev', 'libnspr4-dev', 'libnss3-dev', @@ -124,7 +123,6 @@ _packages_lib = ( 'libfreetype6', 'libglib2.0-0', 'libgnome-keyring0', - 'libgtk2.0-0', 'libpam0g', 'libpango1.0-0', 'libpci3', @@ -160,7 +158,6 @@ _packages_dbg = ( 'libcairo2-dbg', 'libfontconfig1-dbg', 'libglib2.0-0-dbg', - 'libgtk2.0-0-dbg', 'libpango1.0-0-dbg', 'libpcre3-dbg', 'libpixman-1-0-dbg', @@ -220,7 +217,6 @@ _packages_nacl = ( 'libgconf-2-4:i386', 'libglib2.0-0:i386', 'libgpm2:i386', - 'libgtk2.0-0:i386', 'libncurses5:i386', 'libnss3:i386', 'libpango1.0-0:i386', diff --git a/chromium/build/fuchsia/boot_data.py b/chromium/build/fuchsia/boot_data.py index e70128c7ec3..64998661c3d 100644 --- a/chromium/build/fuchsia/boot_data.py +++ b/chromium/build/fuchsia/boot_data.py @@ -26,7 +26,9 @@ Host * ServerAliveCountMax 5 ControlMaster auto ControlPersist 1m - ControlPath /tmp/ssh-%r@%h:%p""" + ControlPath /tmp/ssh-%r@%h:%p + ConnectTimeout 5 + """ FVM_TYPE_QCOW = 'qcow' FVM_TYPE_SPARSE = 'sparse' @@ -83,7 +85,7 @@ def _MakeQcowDisk(output_dir, disk_path): """Creates a QEMU copy-on-write version of |disk_path| in the output directory.""" - qimg_path = os.path.join(common.SDK_ROOT, 'qemu', 'bin', 'qemu-img') + qimg_path = os.path.join(common.GetQemuRootForPlatform(), 'bin', 'qemu-img') output_path = os.path.join(output_dir, os.path.basename(disk_path) + '.qcow2') subprocess.check_call([qimg_path, 'create', '-q', '-f', 'qcow2', @@ -114,6 +116,9 @@ def ConfigureDataFVM(output_dir, output_type): sparse/compressed FVM file.""" logging.debug('Building /data partition FVM file.') + # minfs expects absolute paths(bug: + # https://fuchsia.atlassian.net/browse/ZX-2397) + output_dir = os.path.abspath(output_dir) with tempfile.NamedTemporaryFile() as data_file: # Build up the minfs partition data and install keys into it. ssh_config, ssh_data = _ProvisionSSH(output_dir) diff --git a/chromium/build/fuchsia/common.py b/chromium/build/fuchsia/common.py index 51a68414219..20c89e5422d 100644 --- a/chromium/build/fuchsia/common.py +++ b/chromium/build/fuchsia/common.py @@ -3,6 +3,8 @@ # found in the LICENSE file. import os +import platform +import sys DIR_SOURCE_ROOT = os.path.abspath( os.path.join(os.path.dirname(__file__), os.pardir, os.pardir)) @@ -16,3 +18,24 @@ def EnsurePathExists(path): raise IOError('Missing file: ' + path) return path + +def GetHostOsFromPlatform(): + host_platform = sys.platform + if host_platform.startswith('linux'): + return 'linux' + elif host_platform.startswith('darwin'): + return 'mac' + raise Exception('Unsupported host platform: %s' % host_platform) + +def GetHostArchFromPlatform(): + host_arch = platform.machine() + if host_arch == 'x86_64': + return 'x64' + elif host_arch == 'aarch64': + return 'arm64' + raise Exception('Unsupported host architecture: %s' % host_arch) + +def GetQemuRootForPlatform(): + return os.path.join(DIR_SOURCE_ROOT, 'third_party', + 'qemu-' + GetHostOsFromPlatform() + '-' + + GetHostArchFromPlatform()) diff --git a/chromium/build/fuchsia/common_args.py b/chromium/build/fuchsia/common_args.py index 25e909f4c6b..27f37ddb501 100644 --- a/chromium/build/fuchsia/common_args.py +++ b/chromium/build/fuchsia/common_args.py @@ -44,6 +44,9 @@ def AddCommonArgs(arg_parser): common_args.add_argument('--ssh-config', '-F', help='The path to the SSH configuration used for ' 'connecting to the target device.') + common_args.add_argument('--system-log-file', + help='File to write system logs to. Specify - to ' + 'log to stdout.') common_args.add_argument('--exclude-system-logs', action='store_false', dest='include_system_logs', @@ -51,7 +54,9 @@ def AddCommonArgs(arg_parser): common_args.add_argument('--verbose', '-v', default=False, action='store_true', help='Enable debug-level logging.') - + common_args.add_argument('--qemu-cpu-cores', type=int, default=4, + help='Sets the number of CPU cores to provide if ' + 'launching in a VM with QEMU.'), def ConfigureLogging(args): """Configures the logging level based on command line |args|.""" @@ -74,8 +79,16 @@ def GetDeploymentTargetForArgs(args): """Constructs a deployment target object using parameters taken from command line arguments.""" + if args.system_log_file == '-': + system_log_file = sys.stdout + elif args.system_log_file: + system_log_file = open(args.system_log_file, 'w') + else: + system_log_file = None + if not args.device: - return QemuTarget(args.output_directory, args.target_cpu) + return QemuTarget(args.output_directory, args.target_cpu, + args.qemu_cpu_cores, system_log_file) else: - return DeviceTarget(args.output_directory, args.target_cpu, - args.host, args.port, args.ssh_config) + return DeviceTarget(args.output_directory, args.target_cpu, args.host, + args.port, args.ssh_config, system_log_file) diff --git a/chromium/build/fuchsia/device_target.py b/chromium/build/fuchsia/device_target.py index 34bc99f5e1d..013f1762969 100644 --- a/chromium/build/fuchsia/device_target.py +++ b/chromium/build/fuchsia/device_target.py @@ -8,6 +8,7 @@ import boot_data import logging import os import subprocess +import sys import target import time import uuid @@ -17,9 +18,12 @@ from common import SDK_ROOT, EnsurePathExists CONNECT_RETRY_COUNT = 20 CONNECT_RETRY_WAIT_SECS = 1 +# Number of failed connection attempts before redirecting system logs to stdout. +CONNECT_RETRY_COUNT_BEFORE_LOGGING = 10 + class DeviceTarget(target.Target): def __init__(self, output_dir, target_cpu, host=None, port=None, - ssh_config=None): + ssh_config=None, system_log_file=None): """output_dir: The directory which will contain the files that are generated to support the deployment. target_cpu: The CPU architecture of the deployment target. Can be @@ -33,6 +37,8 @@ class DeviceTarget(target.Target): self._port = 22 self._auto = not host or not ssh_config self._new_instance = True + self._system_log_file = system_log_file + self._loglistener = None if self._auto: self._ssh_config_path = EnsurePathExists( @@ -44,6 +50,10 @@ class DeviceTarget(target.Target): self._port = port self._new_instance = False + def __exit__(self, exc_type, exc_val, exc_tb): + if self._loglistener: + self._loglistener.kill() + def __Discover(self, node_name): """Returns the IP address and port of a Fuchsia instance discovered on the local area network.""" @@ -93,8 +103,16 @@ class DeviceTarget(target.Target): logging.debug(' '.join(bootserver_command)) subprocess.check_call(bootserver_command) + # Start loglistener to save system logs. + if self._system_log_file: + loglistener_path = os.path.join(SDK_ROOT, 'tools', 'loglistener') + self._loglistener = subprocess.Popen( + [loglistener_path, node_name], + stdout=self._system_log_file, + stderr=subprocess.STDOUT, stdin=open(os.devnull)) + logging.debug('Waiting for device to join network.') - for _ in xrange(CONNECT_RETRY_COUNT): + for retry in xrange(CONNECT_RETRY_COUNT): self._host = self.__Discover(node_name) if self._host: break diff --git a/chromium/build/fuchsia/linux.sdk.sha1 b/chromium/build/fuchsia/linux.sdk.sha1 new file mode 100644 index 00000000000..0029006c4d6 --- /dev/null +++ b/chromium/build/fuchsia/linux.sdk.sha1 @@ -0,0 +1 @@ +785befe984ce9119b1dae7b3696bff178a524756
\ No newline at end of file diff --git a/chromium/build/fuchsia/mac.sdk.sha1 b/chromium/build/fuchsia/mac.sdk.sha1 new file mode 100644 index 00000000000..c0ce08a5845 --- /dev/null +++ b/chromium/build/fuchsia/mac.sdk.sha1 @@ -0,0 +1 @@ +61465d3f598a8ad7e6cde3f6505684c63d5361de
\ No newline at end of file diff --git a/chromium/build/fuchsia/qemu_target.py b/chromium/build/fuchsia/qemu_target.py index aa356d34386..5376528e1c1 100644 --- a/chromium/build/fuchsia/qemu_target.py +++ b/chromium/build/fuchsia/qemu_target.py @@ -11,9 +11,10 @@ import os import platform import socket import subprocess +import sys import time -from common import SDK_ROOT, EnsurePathExists +from common import GetQemuRootForPlatform, EnsurePathExists # Virtual networking configuration data for QEMU. @@ -33,7 +34,7 @@ def _GetAvailableTcpPort(): class QemuTarget(target.Target): - def __init__(self, output_dir, target_cpu, + def __init__(self, output_dir, target_cpu, cpu_cores, system_log_file, ram_size_mb=2048): """output_dir: The directory which will contain the files that are generated to support the QEMU deployment. @@ -42,6 +43,8 @@ class QemuTarget(target.Target): super(QemuTarget, self).__init__(output_dir, target_cpu) self._qemu_process = None self._ram_size_mb = ram_size_mb + self._system_log_file = system_log_file + self._cpu_cores = cpu_cores def __enter__(self): return self @@ -49,28 +52,31 @@ class QemuTarget(target.Target): # Used by the context manager to ensure that QEMU is killed when the Python # process exits. def __exit__(self, exc_type, exc_val, exc_tb): - if self.IsStarted(): - self.Shutdown() + if self._IsQemuStillRunning(): + logging.info('Shutting down QEMU.') + self._qemu_process.kill() def Start(self): - qemu_path = os.path.join(SDK_ROOT, 'qemu', 'bin', - 'qemu-system-' + self._GetTargetSdkArch()) + qemu_path = os.path.join(GetQemuRootForPlatform(), 'bin', + 'qemu-system-' + self._GetTargetSdkLegacyArch()) kernel_args = boot_data.GetKernelArgs(self._output_dir) # TERM=dumb tells the guest OS to not emit ANSI commands that trigger # noisy ANSI spew from the user's terminal emulator. kernel_args.append('TERM=dumb') + # Enable logging to the serial port. This is a temporary fix to investigate + # the root cause for https://crbug.com/869753 . + kernel_args.append('kernel.serial=legacy') + qemu_command = [qemu_path, '-m', str(self._ram_size_mb), '-nographic', - '-kernel', EnsurePathExists( - boot_data.GetTargetFile(self._GetTargetSdkArch(), - 'zircon.bin')), + '-kernel', EnsurePathExists(self._GetTargetKernelPath()), '-initrd', EnsurePathExists( boot_data.GetTargetFile(self._GetTargetSdkArch(), 'bootdata-blob.bin')), - '-smp', '4', + '-smp', str(self._cpu_cores), # Attach the blobstore and data volumes. Use snapshot mode to discard # any changes. @@ -94,24 +100,27 @@ class QemuTarget(target.Target): ] # Configure the machine & CPU to emulate, based on the target architecture. - # Enable lightweight virtualization (KVM) if the host and guest OS run on - # the same architecture. if self._target_cpu == 'arm64': qemu_command.extend([ '-machine','virt', '-cpu', 'cortex-a53', ]) netdev_type = 'virtio-net-pci' - if platform.machine() == 'aarch64': - qemu_command.append('-enable-kvm') else: qemu_command.extend([ '-machine', 'q35', - '-cpu', 'host,migratable=no', ]) netdev_type = 'e1000' - if platform.machine() == 'x86_64': + + # On Linux, enable lightweight virtualization (KVM) if the host and guest + # architectures are the same. + if sys.platform.startswith('linux'): + if self._target_cpu == 'arm64' and platform.machine() == 'aarch64': qemu_command.append('-enable-kvm') + elif self._target_cpu == 'x64' and platform.machine() == 'x86_64': + qemu_command.extend([ + '-enable-kvm', '-cpu', 'host,migratable=no', + ]) # Configure virtual network. It is used in the tests to connect to # testserver running on the host. @@ -133,22 +142,35 @@ class QemuTarget(target.Target): logging.debug('Launching QEMU.') logging.debug(' '.join(qemu_command)) - stdio_flags = {'stdin': open(os.devnull), - 'stdout': open(os.devnull), - 'stderr': open(os.devnull)} - self._qemu_process = subprocess.Popen(qemu_command, **stdio_flags) - self._WaitUntilReady(); + # Zircon sends debug logs to serial port (see kernel.serial=legacy flag + # above). Serial port is redirected to a file through QEMU stdout. + # This approach is used instead of loglistener to debug + # https://crbug.com/86975 . + if self._system_log_file: + stdout = self._system_log_file + stderr = subprocess.STDOUT + else: + stdout = open(os.devnull) + stderr = sys.stderr - def Shutdown(self): - logging.info('Shutting down QEMU.') - self._qemu_process.kill() + self._qemu_process = subprocess.Popen(qemu_command, stdin=open(os.devnull), + stdout=stdout, stderr=stderr) + self._WaitUntilReady(); - def GetQemuStdout(self): - return self._qemu_process.stdout + def _IsQemuStillRunning(self): + return os.waitpid(self._qemu_process.pid, os.WNOHANG)[0] == 0 def _GetEndpoint(self): + if not self._IsQemuStillRunning(): + raise Exception('QEMU quit unexpectedly.') return ('localhost', self._host_ssh_port) def _GetSshConfigPath(self): return boot_data.GetSSHConfigPath(self._output_dir) + def _GetTargetKernelPath(self): + kernel_name = 'zircon.bin' + if self._GetTargetSdkArch() == 'arm64': + kernel_name = 'qemu-zircon.bin' + return boot_data.GetTargetFile(self._GetTargetSdkArch(), + kernel_name) diff --git a/chromium/build/fuchsia/run_package.py b/chromium/build/fuchsia/run_package.py index 6a63e15d987..d61deb649f3 100644 --- a/chromium/build/fuchsia/run_package.py +++ b/chromium/build/fuchsia/run_package.py @@ -10,12 +10,13 @@ import json import logging import multiprocessing import os +import select import shutil import subprocess +import sys import tempfile import threading import uuid -import select from symbolizer import FilterStream @@ -40,47 +41,33 @@ def _ReadMergedLines(streams): signals EOF. Absolute output ordering is not guaranteed.""" assert len(streams) > 0 - poll = select.poll() streams_by_fd = {} primary_fd = streams[0].fileno() for s in streams: - poll.register(s.fileno(), select.POLLIN) streams_by_fd[s.fileno()] = s - try: - while primary_fd != None: - events = poll.poll(1) - for fileno, event in events: - if event & select.POLLIN: - yield streams_by_fd[fileno].readline() - - elif event & select.POLLHUP: - poll.unregister(fileno) - del streams_by_fd[fileno] - - if fileno == primary_fd: - primary_fd = None - finally: - for fd_to_cleanup, _ in streams_by_fd.iteritems(): - poll.unregister(fd_to_cleanup) + while primary_fd != None: + rlist, _, _ = select.select(streams_by_fd, [], [], 0.1) + for fileno in rlist: + line = streams_by_fd[fileno].readline() + if line: + yield line + elif fileno == primary_fd: + primary_fd = None + else: + del streams_by_fd[fileno] def DrainStreamToStdout(stream, quit_event): """Outputs the contents of |stream| until |quit_event| is set.""" - poll = select.poll() - poll.register(stream.fileno(), select.POLLIN) - try: - while not quit_event.is_set(): - events = poll.poll(1) - for fileno, event in events: - if event & select.POLLIN: - print stream.readline().rstrip() - elif event & select.POLLHUP: - break - - finally: - poll.unregister(stream.fileno()) + while not quit_event.is_set(): + rlist, _, _ = select.select([ stream ], [], [], 0.1) + if rlist: + line = rlist[0].readline() + if not line: + return + print line.rstrip() def RunPackage(output_dir, target, package_path, package_name, package_deps, diff --git a/chromium/build/fuchsia/sdk.sha1 b/chromium/build/fuchsia/sdk.sha1 deleted file mode 100644 index 980afd99349..00000000000 --- a/chromium/build/fuchsia/sdk.sha1 +++ /dev/null @@ -1 +0,0 @@ -138f39e8ec632173fa8d82466242bf36032cdcce
\ No newline at end of file diff --git a/chromium/build/fuchsia/target.py b/chromium/build/fuchsia/target.py index 8eb5fcf72cb..db52f3a5938 100644 --- a/chromium/build/fuchsia/target.py +++ b/chromium/build/fuchsia/target.py @@ -2,14 +2,14 @@ # Use of this source code is governed by a BSD-style license that can be # found in the LICENSE file. +import boot_data +import common import logging -import os import remote_cmd -import subprocess import sys -import tempfile import time + _SHUTDOWN_CMD = ['dm', 'poweroff'] _ATTACH_MAX_RETRIES = 10 _ATTACH_RETRY_INTERVAL = 1 @@ -134,10 +134,8 @@ class Target(object): def _GetTargetSdkArch(self): """Returns the Fuchsia SDK architecture name for the target CPU.""" - if self._target_cpu == 'arm64': - return 'aarch64' - elif self._target_cpu == 'x64': - return 'x86_64' + if self._target_cpu == 'arm64' or self._target_cpu == 'x64': + return self._target_cpu raise FuchsiaTargetException('Unknown target_cpu:' + self._target_cpu) def _AssertIsStarted(self): @@ -145,7 +143,8 @@ class Target(object): def _WaitUntilReady(self, retries=_ATTACH_MAX_RETRIES): logging.info('Connecting to Fuchsia using SSH.') - for _ in xrange(retries+1): + + for retry in xrange(retries + 1): host, port = self._GetEndpoint() if remote_cmd.RunSsh(self._GetSshConfigPath(), host, port, ['true'], True) == 0: @@ -153,13 +152,17 @@ class Target(object): self._started = True return True time.sleep(_ATTACH_RETRY_INTERVAL) + logging.error('Timeout limit reached.') + raise FuchsiaTargetException('Couldn\'t connect using SSH.') def _GetSshConfigPath(self, path): raise NotImplementedError - def _GetTargetSdkArch(self): + # TODO: remove this once all instances of architecture names have been + # converted to the new naming pattern. + def _GetTargetSdkLegacyArch(self): """Returns the Fuchsia SDK architecture name for the target CPU.""" if self._target_cpu == 'arm64': return 'aarch64' diff --git a/chromium/build/fuchsia/update_sdk.py b/chromium/build/fuchsia/update_sdk.py index e3253524e77..9dfd7df8fcf 100755 --- a/chromium/build/fuchsia/update_sdk.py +++ b/chromium/build/fuchsia/update_sdk.py @@ -13,7 +13,7 @@ import sys import tarfile import tempfile -SDK_HASH_FILE = os.path.join(os.path.dirname(__file__), 'sdk.sha1') +from common import GetHostOsFromPlatform, GetHostArchFromPlatform REPOSITORY_ROOT = os.path.abspath(os.path.join( os.path.dirname(__file__), '..', '..')) @@ -24,6 +24,14 @@ import find_depot_tools SDK_SUBDIRS = ["arch", "pkg", "qemu", "sysroot", "target", "toolchain_libs", "tools"] +def GetSdkHashForPlatform(): + filename = '{platform}.sdk.sha1'.format(platform = GetHostOsFromPlatform()) + return os.path.join(os.path.dirname(__file__), filename) + +def GetBucketForPlatform(): + return 'gs://fuchsia/sdk/{platform}-amd64/'.format( + platform = GetHostOsFromPlatform()) + def EnsureDirExists(path): if not os.path.exists(path): @@ -63,11 +71,12 @@ def main(): # there. Cleanup(os.path.join(REPOSITORY_ROOT, 'third_party', 'fuchsia-sdk')) - with open(SDK_HASH_FILE, 'r') as f: + hash_file = GetSdkHashForPlatform() + with open(hash_file, 'r') as f: sdk_hash = f.read().strip() if not sdk_hash: - print >>sys.stderr, 'No SHA1 found in %s' % SDK_HASH_FILE + print >>sys.stderr, 'No SHA1 found in %s' % hash_file return 1 output_dir = os.path.join(REPOSITORY_ROOT, 'third_party', 'fuchsia-sdk', @@ -89,9 +98,8 @@ def main(): os.close(fd) try: - bucket = 'gs://fuchsia/sdk/linux-amd64/' cmd = [os.path.join(find_depot_tools.DEPOT_TOOLS_PATH, 'gsutil.py'), - 'cp', bucket + sdk_hash, tmp] + 'cp', GetBucketForPlatform() + sdk_hash, tmp] subprocess.check_call(cmd) with open(tmp, 'rb') as f: EnsureDirExists(output_dir) diff --git a/chromium/build/get_syzygy_binaries.py b/chromium/build/get_syzygy_binaries.py deleted file mode 100755 index 09b11997087..00000000000 --- a/chromium/build/get_syzygy_binaries.py +++ /dev/null @@ -1,529 +0,0 @@ -#!/usr/bin/env python -# Copyright 2014 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. - -"""A utility script for downloading versioned Syzygy binaries.""" - -import hashlib -import errno -import json -import logging -import optparse -import os -import re -import shutil -import stat -import sys -import subprocess -import tempfile -import time -import zipfile - - -_LOGGER = logging.getLogger(os.path.basename(__file__)) - -# The relative path where official builds are archived in their GS bucket. -_SYZYGY_ARCHIVE_PATH = ('/builds/official/%(revision)s') - -# A JSON file containing the state of the download directory. If this file and -# directory state do not agree, then the binaries will be downloaded and -# installed again. -_STATE = '.state' - -# This matches an integer (an SVN revision number) or a SHA1 value (a GIT hash). -# The archive exclusively uses lowercase GIT hashes. -_REVISION_RE = re.compile('^(?:\d+|[a-f0-9]{40})$') - -# This matches an MD5 hash. -_MD5_RE = re.compile('^[a-f0-9]{32}$') - -# List of reources to be downloaded and installed. These are tuples with the -# following format: -# (basename, logging name, relative installation path, extraction filter) -_RESOURCES = [ - ('benchmark.zip', 'benchmark', '', None), - ('binaries.zip', 'binaries', 'exe', None), - ('symbols.zip', 'symbols', 'exe', - lambda x: x.filename.endswith('.dll.pdb'))] - - -# Name of the MS DIA dll that we need to copy to the binaries directory. -_DIA_DLL_NAME = "msdia140.dll" - - -def _LoadState(output_dir): - """Loads the contents of the state file for a given |output_dir|, returning - None if it doesn't exist. - """ - path = os.path.join(output_dir, _STATE) - if not os.path.exists(path): - _LOGGER.debug('No state file found.') - return None - with open(path, 'rb') as f: - _LOGGER.debug('Reading state file: %s', path) - try: - return json.load(f) - except ValueError: - _LOGGER.debug('Invalid state file.') - return None - - -def _SaveState(output_dir, state, dry_run=False): - """Saves the |state| dictionary to the given |output_dir| as a JSON file.""" - path = os.path.join(output_dir, _STATE) - _LOGGER.debug('Writing state file: %s', path) - if dry_run: - return - with open(path, 'wb') as f: - f.write(json.dumps(state, sort_keys=True, indent=2)) - - -def _Md5(path): - """Returns the MD5 hash of the file at |path|, which must exist.""" - return hashlib.md5(open(path, 'rb').read()).hexdigest() - - -def _StateIsValid(state): - """Returns true if the given state structure is valid.""" - if not isinstance(state, dict): - _LOGGER.debug('State must be a dict.') - return False - r = state.get('revision', None) - if not isinstance(r, basestring) or not _REVISION_RE.match(r): - _LOGGER.debug('State contains an invalid revision.') - return False - c = state.get('contents', None) - if not isinstance(c, dict): - _LOGGER.debug('State must contain a contents dict.') - return False - for (relpath, md5) in c.iteritems(): - if not isinstance(relpath, basestring) or len(relpath) == 0: - _LOGGER.debug('State contents dict contains an invalid path.') - return False - if not isinstance(md5, basestring) or not _MD5_RE.match(md5): - _LOGGER.debug('State contents dict contains an invalid MD5 digest.') - return False - return True - - -def _BuildActualState(stored, revision, output_dir): - """Builds the actual state using the provided |stored| state as a template. - Only examines files listed in the stored state, causing the script to ignore - files that have been added to the directories locally. |stored| must be a - valid state dictionary. - """ - contents = {} - state = { 'revision': revision, 'contents': contents } - for relpath, md5 in stored['contents'].iteritems(): - abspath = os.path.abspath(os.path.join(output_dir, relpath)) - if os.path.isfile(abspath): - m = _Md5(abspath) - contents[relpath] = m - - return state - - -def _StatesAreConsistent(stored, actual): - """Validates whether two state dictionaries are consistent. Both must be valid - state dictionaries. Additional entries in |actual| are ignored. - """ - if stored['revision'] != actual['revision']: - _LOGGER.debug('Mismatched revision number.') - return False - cont_stored = stored['contents'] - cont_actual = actual['contents'] - for relpath, md5 in cont_stored.iteritems(): - if relpath not in cont_actual: - _LOGGER.debug('Missing content: %s', relpath) - return False - if md5 != cont_actual[relpath]: - _LOGGER.debug('Modified content: %s', relpath) - return False - return True - - -def _GetCurrentState(revision, output_dir): - """Loads the current state and checks to see if it is consistent. Returns - a tuple (state, bool). The returned state will always be valid, even if an - invalid state is present on disk. - """ - stored = _LoadState(output_dir) - if not _StateIsValid(stored): - _LOGGER.debug('State is invalid.') - # Return a valid but empty state. - return ({'revision': '0', 'contents': {}}, False) - actual = _BuildActualState(stored, revision, output_dir) - # If the script has been modified consider the state invalid. - path = os.path.join(output_dir, _STATE) - if os.path.getmtime(__file__) > os.path.getmtime(path): - return (stored, False) - # Otherwise, explicitly validate the state. - if not _StatesAreConsistent(stored, actual): - return (stored, False) - return (stored, True) - - -def _DirIsEmpty(path): - """Returns true if the given directory is empty, false otherwise.""" - for root, dirs, files in os.walk(path): - return not dirs and not files - - -def _RmTreeHandleReadOnly(func, path, exc): - """An error handling function for use with shutil.rmtree. This will - detect failures to remove read-only files, and will change their properties - prior to removing them. This is necessary on Windows as os.remove will return - an access error for read-only files, and git repos contain read-only - pack/index files. - """ - excvalue = exc[1] - if func in (os.rmdir, os.remove) and excvalue.errno == errno.EACCES: - _LOGGER.debug('Removing read-only path: %s', path) - os.chmod(path, stat.S_IRWXU | stat.S_IRWXG | stat.S_IRWXO) - func(path) - else: - raise - - -def _RmTree(path): - """A wrapper of shutil.rmtree that handles read-only files.""" - shutil.rmtree(path, ignore_errors=False, onerror=_RmTreeHandleReadOnly) - - -def _CleanState(output_dir, state, dry_run=False): - """Cleans up files/directories in |output_dir| that are referenced by - the given |state|. Raises an error if there are local changes. Returns a - dictionary of files that were deleted. - """ - _LOGGER.debug('Deleting files from previous installation.') - deleted = {} - - # Generate a list of files to delete, relative to |output_dir|. - contents = state['contents'] - files = sorted(contents.keys()) - - # Try to delete the files. Keep track of directories to delete as well. - dirs = {} - for relpath in files: - fullpath = os.path.join(output_dir, relpath) - fulldir = os.path.dirname(fullpath) - dirs[fulldir] = True - if os.path.exists(fullpath): - # If somehow the file has become a directory complain about it. - if os.path.isdir(fullpath): - raise Exception('Directory exists where file expected: %s' % fullpath) - - # Double check that the file doesn't have local changes. If it does - # then refuse to delete it. - if relpath in contents: - stored_md5 = contents[relpath] - actual_md5 = _Md5(fullpath) - if actual_md5 != stored_md5: - raise Exception('File has local changes: %s' % fullpath) - - # The file is unchanged so it can safely be deleted. - _LOGGER.debug('Deleting file "%s".', fullpath) - deleted[relpath] = True - if not dry_run: - os.unlink(fullpath) - - # Sort directories from longest name to shortest. This lets us remove empty - # directories from the most nested paths first. - dirs = sorted(dirs.keys(), key=lambda x: len(x), reverse=True) - for p in dirs: - if os.path.exists(p) and _DirIsEmpty(p): - _LOGGER.debug('Deleting empty directory "%s".', p) - if not dry_run: - _RmTree(p) - - return deleted - - -def _FindGsUtil(): - """Looks for depot_tools and returns the absolute path to gsutil.py.""" - for path in os.environ['PATH'].split(os.pathsep): - path = os.path.abspath(path) - git_cl = os.path.join(path, 'git_cl.py') - gs_util = os.path.join(path, 'gsutil.py') - if os.path.exists(git_cl) and os.path.exists(gs_util): - return gs_util - return None - - -def _GsUtil(*cmd): - """Runs the given command in gsutil with exponential backoff and retries.""" - gs_util = _FindGsUtil() - cmd = [sys.executable, gs_util] + list(cmd) - - retries = 3 - timeout = 4 # Seconds. - while True: - _LOGGER.debug('Running %s', cmd) - prog = subprocess.Popen(cmd, shell=False) - prog.communicate() - - # Stop retrying on success. - if prog.returncode == 0: - return - - # Raise a permanent failure if retries have been exhausted. - if retries == 0: - raise RuntimeError('Command "%s" returned %d.' % (cmd, prog.returncode)) - - _LOGGER.debug('Sleeping %d seconds and trying again.', timeout) - time.sleep(timeout) - retries -= 1 - timeout *= 2 - - -def _Download(resource): - """Downloads the given GS resource to a temporary file, returning its path.""" - tmp = tempfile.mkstemp(suffix='syzygy_archive') - os.close(tmp[0]) - tmp_file = tmp[1] - url = 'gs://syzygy-archive' + resource - if sys.platform == 'cygwin': - # Change temporary path to Windows path for gsutil - def winpath(path): - return subprocess.check_output(['cygpath', '-w', path]).strip() - tmp_file = winpath(tmp_file) - _GsUtil('cp', url, tmp_file) - return tmp[1] - - -def _MaybeCopyDIABinaries(options, contents): - """Try to copy the DIA DLL to the binaries exe directory.""" - toolchain_data_file = os.path.join(os.path.dirname(__file__), - 'win_toolchain.json') - if not os.path.exists(toolchain_data_file): - _LOGGER.debug('Toolchain JSON data file doesn\'t exist, skipping.') - return - with open(toolchain_data_file) as temp_f: - toolchain_data = json.load(temp_f) - if not os.path.isdir(toolchain_data['path']): - _LOGGER.error('The toolchain JSON file is invalid.') - return - dia_sdk_binaries_dir = os.path.join(toolchain_data['path'], 'DIA SDK', 'bin') - dia_dll = os.path.join(dia_sdk_binaries_dir, _DIA_DLL_NAME) - if not os.path.exists(dia_dll): - _LOGGER.debug('%s is missing, skipping.') - return - dia_dll_dest = os.path.join(options.output_dir, 'exe', _DIA_DLL_NAME) - _LOGGER.debug('Copying %s to %s.' % (dia_dll, dia_dll_dest)) - if not options.dry_run: - shutil.copy(dia_dll, dia_dll_dest) - contents[os.path.relpath(dia_dll_dest, options.output_dir)] = ( - _Md5(dia_dll_dest)) - - -def _InstallBinaries(options, deleted={}): - """Installs Syzygy binaries. This assumes that the output directory has - already been cleaned, as it will refuse to overwrite existing files.""" - contents = {} - state = { 'revision': options.revision, 'contents': contents } - archive_path = _SYZYGY_ARCHIVE_PATH % { 'revision': options.revision } - if options.resources: - resources = [(resource, resource, '', None) - for resource in options.resources] - else: - resources = _RESOURCES - for (base, name, subdir, filt) in resources: - # Create the output directory if it doesn't exist. - fulldir = os.path.join(options.output_dir, subdir) - if os.path.isfile(fulldir): - raise Exception('File exists where a directory needs to be created: %s' % - fulldir) - if not os.path.exists(fulldir): - _LOGGER.debug('Creating directory: %s', fulldir) - if not options.dry_run: - os.makedirs(fulldir) - - # Download and read the archive. - resource = archive_path + '/' + base - _LOGGER.debug('Retrieving %s archive at "%s".', name, resource) - path = _Download(resource) - - _LOGGER.debug('Unzipping %s archive.', name) - with open(path, 'rb') as data: - archive = zipfile.ZipFile(data) - for entry in archive.infolist(): - if not filt or filt(entry): - fullpath = os.path.normpath(os.path.join(fulldir, entry.filename)) - relpath = os.path.relpath(fullpath, options.output_dir) - if os.path.exists(fullpath): - # If in a dry-run take into account the fact that the file *would* - # have been deleted. - if options.dry_run and relpath in deleted: - pass - else: - raise Exception('Path already exists: %s' % fullpath) - - # Extract the file and update the state dictionary. - _LOGGER.debug('Extracting "%s".', fullpath) - if not options.dry_run: - archive.extract(entry.filename, fulldir) - md5 = _Md5(fullpath) - contents[relpath] = md5 - if sys.platform == 'cygwin': - os.chmod(fullpath, os.stat(fullpath).st_mode | stat.S_IXUSR) - - _LOGGER.debug('Removing temporary file "%s".', path) - os.remove(path) - - if options.copy_dia_binaries: - # Try to copy the DIA binaries to the binaries directory. - _MaybeCopyDIABinaries(options, contents) - - return state - - -def _ParseCommandLine(): - """Parses the command-line and returns an options structure.""" - option_parser = optparse.OptionParser() - option_parser.add_option('--dry-run', action='store_true', default=False, - help='If true then will simply list actions that would be performed.') - option_parser.add_option('--force', action='store_true', default=False, - help='Force an installation even if the binaries are up to date.') - option_parser.add_option('--no-cleanup', action='store_true', default=False, - help='Allow installation on non-Windows platforms, and skip the forced ' - 'cleanup step.') - option_parser.add_option('--output-dir', type='string', - help='The path where the binaries will be replaced. Existing binaries ' - 'will only be overwritten if not up to date.') - option_parser.add_option('--overwrite', action='store_true', default=False, - help='If specified then the installation will happily delete and rewrite ' - 'the entire output directory, blasting any local changes.') - option_parser.add_option('--revision', type='string', - help='The SVN revision or GIT hash associated with the required version.') - option_parser.add_option('--revision-file', type='string', - help='A text file containing an SVN revision or GIT hash.') - option_parser.add_option('--resource', type='string', action='append', - dest='resources', help='A resource to be downloaded.') - option_parser.add_option('--verbose', dest='log_level', action='store_const', - default=logging.INFO, const=logging.DEBUG, - help='Enables verbose logging.') - option_parser.add_option('--quiet', dest='log_level', action='store_const', - default=logging.INFO, const=logging.ERROR, - help='Disables all output except for errors.') - option_parser.add_option('--copy-dia-binaries', action='store_true', - default=False, help='If true then the DIA dll will get copied into the ' - 'binaries directory if it\'s available.') - options, args = option_parser.parse_args() - if args: - option_parser.error('Unexpected arguments: %s' % args) - if not options.output_dir: - option_parser.error('Must specify --output-dir.') - if not options.revision and not options.revision_file: - option_parser.error('Must specify one of --revision or --revision-file.') - if options.revision and options.revision_file: - option_parser.error('Must not specify both --revision and --revision-file.') - - # Configure logging. - logging.basicConfig(level=options.log_level) - - # If a revision file has been specified then read it. - if options.revision_file: - options.revision = open(options.revision_file, 'rb').read().strip() - _LOGGER.debug('Parsed revision "%s" from file "%s".', - options.revision, options.revision_file) - - # Ensure that the specified SVN revision or GIT hash is valid. - if not _REVISION_RE.match(options.revision): - option_parser.error('Must specify a valid SVN or GIT revision.') - - # This just makes output prettier to read. - options.output_dir = os.path.normpath(options.output_dir) - - return options - - -def _RemoveOrphanedFiles(options): - """This is run on non-Windows systems to remove orphaned files that may have - been downloaded by a previous version of this script. - """ - # Reconfigure logging to output info messages. This will allow inspection of - # cleanup status on non-Windows buildbots. - _LOGGER.setLevel(logging.INFO) - - output_dir = os.path.abspath(options.output_dir) - - # We only want to clean up the folder in 'src/third_party/syzygy', and we - # expect to be called with that as an output directory. This is an attempt to - # not start deleting random things if the script is run from an alternate - # location, or not called from the gclient hooks. - expected_syzygy_dir = os.path.abspath(os.path.join( - os.path.dirname(__file__), '..', 'third_party', 'syzygy')) - expected_output_dir = os.path.join(expected_syzygy_dir, 'binaries') - if expected_output_dir != output_dir: - _LOGGER.info('Unexpected output directory, skipping cleanup.') - return - - if not os.path.isdir(expected_syzygy_dir): - _LOGGER.info('Output directory does not exist, skipping cleanup.') - return - - def OnError(function, path, excinfo): - """Logs error encountered by shutil.rmtree.""" - _LOGGER.error('Error when running %s(%s)', function, path, exc_info=excinfo) - - _LOGGER.info('Removing orphaned files from %s', expected_syzygy_dir) - if not options.dry_run: - shutil.rmtree(expected_syzygy_dir, True, OnError) - - -def main(): - options = _ParseCommandLine() - - if options.dry_run: - _LOGGER.debug('Performing a dry-run.') - - # We only care about Windows platforms, as the Syzygy binaries aren't used - # elsewhere. However, there was a short period of time where this script - # wasn't gated on OS types, and those OSes downloaded and installed binaries. - # This will cleanup orphaned files on those operating systems. - if sys.platform not in ('win32', 'cygwin'): - if options.no_cleanup: - _LOGGER.debug('Skipping usual cleanup for non-Windows platforms.') - else: - return _RemoveOrphanedFiles(options) - - # Load the current installation state, and validate it against the - # requested installation. - state, is_consistent = _GetCurrentState(options.revision, options.output_dir) - - # Decide whether or not an install is necessary. - if options.force: - _LOGGER.debug('Forcing reinstall of binaries.') - elif is_consistent: - # Avoid doing any work if the contents of the directory are consistent. - _LOGGER.debug('State unchanged, no reinstall necessary.') - return - - # Under normal logging this is the only only message that will be reported. - _LOGGER.info('Installing revision %s Syzygy binaries.', - options.revision[0:12]) - - # Clean up the old state to begin with. - deleted = [] - if options.overwrite: - if os.path.exists(options.output_dir): - # If overwrite was specified then take a heavy-handed approach. - _LOGGER.debug('Deleting entire installation directory.') - if not options.dry_run: - _RmTree(options.output_dir) - else: - # Otherwise only delete things that the previous installation put in place, - # and take care to preserve any local changes. - deleted = _CleanState(options.output_dir, state, options.dry_run) - - # Install the new binaries. In a dry-run this will actually download the - # archives, but it won't write anything to disk. - state = _InstallBinaries(options, deleted) - - # Build and save the state for the directory. - _SaveState(options.output_dir, state, options.dry_run) - - -if __name__ == '__main__': - main() diff --git a/chromium/build/install-build-deps.sh b/chromium/build/install-build-deps.sh index 8fbf0317171..c0e0e0acf41 100755 --- a/chromium/build/install-build-deps.sh +++ b/chromium/build/install-build-deps.sh @@ -118,6 +118,7 @@ fi # Packages needed for development dev_list="\ + binutils bison bzip2 cdbs @@ -132,7 +133,6 @@ dev_list="\ git-core git-svn gperf - libappindicator-dev libappindicator3-dev libasound2-dev libbrlapi-dev @@ -148,7 +148,6 @@ dev_list="\ libglib2.0-dev libglu1-mesa-dev libgnome-keyring-dev - libgtk2.0-dev libgtk-3-dev libkrb5-dev libnspr4-dev @@ -204,7 +203,6 @@ chromeos_lib_list="libpulse0 libbz2-1.0" # List of required run-time libraries common_lib_list="\ - libappindicator1 libappindicator3-1 libasound2 libatk1.0-0 @@ -218,7 +216,6 @@ common_lib_list="\ libfreetype6 libglib2.0-0 libgnome-keyring0 - libgtk2.0-0 libgtk-3-0 libpam0g libpango1.0-0 @@ -274,6 +271,8 @@ backwards_compatible_list="\ language-pack-fr language-pack-he language-pack-zh-hant + libappindicator-dev + libappindicator1 libappindicator3-1:i386 libdconf-dev libdconf-dev:i386 @@ -288,6 +287,9 @@ backwards_compatible_list="\ libgl1-mesa-dev libgl1-mesa-glx:i386 libgles2-mesa-dev + libgtk2.0-0 + libgtk2.0-0:i386 + libgtk2.0-dev mesa-common-dev msttcorefonts ttf-dejavu-core @@ -384,7 +386,6 @@ nacl_list="\ libfontconfig1:i386 libglib2.0-0:i386 libgpm2:i386 - libgtk2.0-0:i386 libgtk-3-0:i386 libncurses5:i386 lib32ncurses5-dev diff --git a/chromium/build/linux/chrome.safestack.map b/chromium/build/linux/chrome.safestack.map new file mode 100644 index 00000000000..76b9f5bc45d --- /dev/null +++ b/chromium/build/linux/chrome.safestack.map @@ -0,0 +1,93 @@ +# This is a separate SafeStack version script to avoid accidentally exporting +# a pthread_create symbol in the default build +{ +global: + __bss_start; + __data_start; + data_start; + _edata; + _end; + _IO_stdin_used; + + # Initialization and finalization functions for static global + # variables. + _fini; + _init; + __libc_csu_fini; + __libc_csu_init; + + # Chrome's main function. Exported for historical purposes. + ChromeMain; + + # Program entry point. + _start; + + # Memory allocation symbols. We want chrome and any libraries to + # share the same heap, so it is correct to export these symbols. + calloc; + cfree; + free; + __free_hook; + __libc_calloc; + __libc_cfree; + __libc_free; + __libc_malloc; + __libc_memalign; + __libc_pvalloc; + __libc_realloc; + __libc_valloc; + mallinfo; + malloc; + __malloc_hook; + malloc_size; + malloc_stats; + malloc_usable_size; + mallopt; + memalign; + __memalign_hook; + __posix_memalign; + posix_memalign; + pvalloc; + realloc; + __realloc_hook; + valloc; + + # Various flavors of operator new and operator delete. + _ZdaPv; + _ZdaPvm; + _ZdaPvmSt11align_val_t; + _ZdaPvRKSt9nothrow_t; + _ZdaPvSt11align_val_t; + _ZdaPvSt11align_val_tRKSt9nothrow_t; + _ZdlPv; + _ZdlPvm; + _ZdlPvmSt11align_val_t; + _ZdlPvRKSt9nothrow_t; + _ZdlPvSt11align_val_t; + _ZdlPvSt11align_val_tRKSt9nothrow_t; + _Znam; + _ZnamRKSt9nothrow_t; + _ZnamSt11align_val_t; + _ZnamSt11align_val_tRKSt9nothrow_t; + _Znwm; + _ZnwmRKSt9nothrow_t; + _ZnwmSt11align_val_t; + _ZnwmSt11align_val_tRKSt9nothrow_t; + + # Various flavors of localtime(). These are exported by the chrome + # sandbox to intercept calls to localtime(), which would otherwise + # fail in untrusted processes that don't have permission to read + # /etc/localtime. These overrides forward the request to the browser + # process, which uses dlsym(localtime) to make the real calls. + localtime; + localtime64; + localtime64_r; + localtime_r; + + # The SafeStack runtime overrides thread creation routines to allocate shadow + # stacks on thread creation. + pthread_create; + +local: + *; +}; diff --git a/chromium/build/linux/sysroot_scripts/packagelist.sid.amd64 b/chromium/build/linux/sysroot_scripts/packagelist.sid.amd64 index 68fba9feb73..9447c2d2555 100644 --- a/chromium/build/linux/sysroot_scripts/packagelist.sid.amd64 +++ b/chromium/build/linux/sysroot_scripts/packagelist.sid.amd64 @@ -1,85 +1,91 @@ -http://ftp.us.debian.org/debian/pool/main/a/alsa-lib/libasound2_1.1.3-5_amd64.deb -http://ftp.us.debian.org/debian/pool/main/a/alsa-lib/libasound2-dev_1.1.3-5_amd64.deb +http://ftp.us.debian.org/debian/pool/main/a/alsa-lib/libasound2_1.1.6-1_amd64.deb +http://ftp.us.debian.org/debian/pool/main/a/alsa-lib/libasound2-dev_1.1.6-1_amd64.deb http://ftp.us.debian.org/debian/pool/main/a/atk1.0/libatk1.0-0_2.28.1-1_amd64.deb http://ftp.us.debian.org/debian/pool/main/a/atk1.0/libatk1.0-dev_2.28.1-1_amd64.deb http://ftp.us.debian.org/debian/pool/main/a/at-spi2-atk/libatk-bridge2.0-0_2.26.2-1_amd64.deb http://ftp.us.debian.org/debian/pool/main/a/at-spi2-atk/libatk-bridge2.0-dev_2.26.2-1_amd64.deb -http://ftp.us.debian.org/debian/pool/main/a/at-spi2-core/libatspi2.0-0_2.28.0-1_amd64.deb -http://ftp.us.debian.org/debian/pool/main/a/at-spi2-core/libatspi2.0-dev_2.28.0-1_amd64.deb +http://ftp.us.debian.org/debian/pool/main/a/at-spi2-core/libatspi2.0-0_2.28.0-3_amd64.deb +http://ftp.us.debian.org/debian/pool/main/a/at-spi2-core/libatspi2.0-dev_2.28.0-3_amd64.deb http://ftp.us.debian.org/debian/pool/main/a/attr/libattr1_2.4.47-2+b2_amd64.deb -http://ftp.us.debian.org/debian/pool/main/a/audit/libaudit1_2.8.2-1_amd64.deb -http://ftp.us.debian.org/debian/pool/main/a/avahi/libavahi-client3_0.7-3.1_amd64.deb -http://ftp.us.debian.org/debian/pool/main/a/avahi/libavahi-common3_0.7-3.1_amd64.deb -http://ftp.us.debian.org/debian/pool/main/b/bluez/libbluetooth3_5.47-1+b1_amd64.deb -http://ftp.us.debian.org/debian/pool/main/b/bluez/libbluetooth-dev_5.47-1+b1_amd64.deb -http://ftp.us.debian.org/debian/pool/main/b/brltty/libbrlapi0.6_5.6-3_amd64.deb -http://ftp.us.debian.org/debian/pool/main/b/brltty/libbrlapi-dev_5.6-3_amd64.deb -http://ftp.us.debian.org/debian/pool/main/c/cairo/libcairo2_1.15.10-2_amd64.deb -http://ftp.us.debian.org/debian/pool/main/c/cairo/libcairo2-dev_1.15.10-2_amd64.deb -http://ftp.us.debian.org/debian/pool/main/c/cairo/libcairo-gobject2_1.15.10-2_amd64.deb -http://ftp.us.debian.org/debian/pool/main/c/cairo/libcairo-script-interpreter2_1.15.10-2_amd64.deb +http://ftp.us.debian.org/debian/pool/main/a/audit/libaudit1_2.8.3-1+b1_amd64.deb +http://ftp.us.debian.org/debian/pool/main/a/avahi/libavahi-client3_0.7-4_amd64.deb +http://ftp.us.debian.org/debian/pool/main/a/avahi/libavahi-common3_0.7-4_amd64.deb +http://ftp.us.debian.org/debian/pool/main/b/bluez/libbluetooth3_5.50-1_amd64.deb +http://ftp.us.debian.org/debian/pool/main/b/bluez/libbluetooth-dev_5.50-1_amd64.deb +http://ftp.us.debian.org/debian/pool/main/b/brltty/libbrlapi0.6_5.6-5_amd64.deb +http://ftp.us.debian.org/debian/pool/main/b/brltty/libbrlapi-dev_5.6-5_amd64.deb +http://ftp.us.debian.org/debian/pool/main/c/cairo/libcairo2_1.15.10-3_amd64.deb +http://ftp.us.debian.org/debian/pool/main/c/cairo/libcairo2-dev_1.15.10-3_amd64.deb +http://ftp.us.debian.org/debian/pool/main/c/cairo/libcairo-gobject2_1.15.10-3_amd64.deb +http://ftp.us.debian.org/debian/pool/main/c/cairo/libcairo-script-interpreter2_1.15.10-3_amd64.deb http://ftp.us.debian.org/debian/pool/main/c/colord/libcolord2_1.3.3-2_amd64.deb -http://ftp.us.debian.org/debian/pool/main/c/cups/libcups2_2.2.7-2_amd64.deb -http://ftp.us.debian.org/debian/pool/main/c/cups/libcups2-dev_2.2.7-2_amd64.deb -http://ftp.us.debian.org/debian/pool/main/c/cups/libcupsimage2_2.2.7-2_amd64.deb -http://ftp.us.debian.org/debian/pool/main/c/cups/libcupsimage2-dev_2.2.7-2_amd64.deb -http://ftp.us.debian.org/debian/pool/main/d/db5.3/libdb5.3_5.3.28-13.1+b1_amd64.deb -http://ftp.us.debian.org/debian/pool/main/d/dbus-glib/libdbus-glib-1-2_0.110-2_amd64.deb -http://ftp.us.debian.org/debian/pool/main/d/dbus/libdbus-1-3_1.12.6-2_amd64.deb -http://ftp.us.debian.org/debian/pool/main/d/dbus/libdbus-1-dev_1.12.6-2_amd64.deb -http://ftp.us.debian.org/debian/pool/main/e/e2fsprogs/comerr-dev_2.1-1.44.1-1_amd64.deb -http://ftp.us.debian.org/debian/pool/main/e/e2fsprogs/libcom-err2_1.44.1-1_amd64.deb -http://ftp.us.debian.org/debian/pool/main/e/elfutils/libelf1_0.170-0.3_amd64.deb -http://ftp.us.debian.org/debian/pool/main/e/elfutils/libelf-dev_0.170-0.3_amd64.deb -http://ftp.us.debian.org/debian/pool/main/e/expat/libexpat1_2.2.5-3_amd64.deb -http://ftp.us.debian.org/debian/pool/main/e/expat/libexpat1-dev_2.2.5-3_amd64.deb -http://ftp.us.debian.org/debian/pool/main/f/flac/libflac8_1.3.2-1_amd64.deb -http://ftp.us.debian.org/debian/pool/main/f/flac/libflac-dev_1.3.2-1_amd64.deb -http://ftp.us.debian.org/debian/pool/main/f/fontconfig/libfontconfig1_2.12.6-0.1_amd64.deb -http://ftp.us.debian.org/debian/pool/main/f/fontconfig/libfontconfig1-dev_2.12.6-0.1_amd64.deb +http://ftp.us.debian.org/debian/pool/main/c/cups/libcups2_2.2.8-5_amd64.deb +http://ftp.us.debian.org/debian/pool/main/c/cups/libcups2-dev_2.2.8-5_amd64.deb +http://ftp.us.debian.org/debian/pool/main/c/cups/libcupsimage2_2.2.8-5_amd64.deb +http://ftp.us.debian.org/debian/pool/main/c/cups/libcupsimage2-dev_2.2.8-5_amd64.deb +http://ftp.us.debian.org/debian/pool/main/d/db5.3/libdb5.3_5.3.28+dfsg1-0.1_amd64.deb +http://ftp.us.debian.org/debian/pool/main/d/dbus-glib/libdbus-glib-1-2_0.110-3_amd64.deb +http://ftp.us.debian.org/debian/pool/main/d/dbus/libdbus-1-3_1.12.10-1_amd64.deb +http://ftp.us.debian.org/debian/pool/main/d/dbus/libdbus-1-dev_1.12.10-1_amd64.deb +http://ftp.us.debian.org/debian/pool/main/e/e2fsprogs/comerr-dev_2.1-1.44.4-1_amd64.deb +http://ftp.us.debian.org/debian/pool/main/e/e2fsprogs/libcom-err2_1.44.4-1_amd64.deb +http://ftp.us.debian.org/debian/pool/main/e/elfutils/libelf1_0.170-0.5_amd64.deb +http://ftp.us.debian.org/debian/pool/main/e/elfutils/libelf-dev_0.170-0.5_amd64.deb +http://ftp.us.debian.org/debian/pool/main/e/expat/libexpat1_2.2.6-1_amd64.deb +http://ftp.us.debian.org/debian/pool/main/e/expat/libexpat1-dev_2.2.6-1_amd64.deb +http://ftp.us.debian.org/debian/pool/main/f/flac/libflac8_1.3.2-3_amd64.deb +http://ftp.us.debian.org/debian/pool/main/f/flac/libflac-dev_1.3.2-3_amd64.deb +http://ftp.us.debian.org/debian/pool/main/f/fontconfig/libfontconfig1_2.13.0-5_amd64.deb +http://ftp.us.debian.org/debian/pool/main/f/fontconfig/libfontconfig1-dev_2.13.0-5_amd64.deb http://ftp.us.debian.org/debian/pool/main/f/freetype/libfreetype6_2.8.1-2_amd64.deb http://ftp.us.debian.org/debian/pool/main/f/freetype/libfreetype6-dev_2.8.1-2_amd64.deb -http://ftp.us.debian.org/debian/pool/main/f/fribidi/libfribidi0_0.19.7-2_amd64.deb -http://ftp.us.debian.org/debian/pool/main/g/gcc-6/libasan3_6.4.0-15_amd64.deb -http://ftp.us.debian.org/debian/pool/main/g/gcc-6/libgcc-6-dev_6.4.0-15_amd64.deb -http://ftp.us.debian.org/debian/pool/main/g/gcc-6/libstdc++-6-dev_6.4.0-15_amd64.deb -http://ftp.us.debian.org/debian/pool/main/g/gcc-7/libcilkrts5_7.3.0-14_amd64.deb -http://ftp.us.debian.org/debian/pool/main/g/gcc-7/libubsan0_7.3.0-14_amd64.deb -http://ftp.us.debian.org/debian/pool/main/g/gcc-8/libatomic1_8-20180402-1_amd64.deb -http://ftp.us.debian.org/debian/pool/main/g/gcc-8/libgcc1_8-20180402-1_amd64.deb -http://ftp.us.debian.org/debian/pool/main/g/gcc-8/libgomp1_8-20180402-1_amd64.deb -http://ftp.us.debian.org/debian/pool/main/g/gcc-8/libitm1_8-20180402-1_amd64.deb -http://ftp.us.debian.org/debian/pool/main/g/gcc-8/liblsan0_8-20180402-1_amd64.deb -http://ftp.us.debian.org/debian/pool/main/g/gcc-8/libmpx2_8-20180402-1_amd64.deb -http://ftp.us.debian.org/debian/pool/main/g/gcc-8/libquadmath0_8-20180402-1_amd64.deb -http://ftp.us.debian.org/debian/pool/main/g/gcc-8/libstdc++6_8-20180402-1_amd64.deb -http://ftp.us.debian.org/debian/pool/main/g/gcc-8/libtsan0_8-20180402-1_amd64.deb -http://ftp.us.debian.org/debian/pool/main/g/gdk-pixbuf/libgdk-pixbuf2.0-0_2.36.11-2_amd64.deb -http://ftp.us.debian.org/debian/pool/main/g/gdk-pixbuf/libgdk-pixbuf2.0-dev_2.36.11-2_amd64.deb -http://ftp.us.debian.org/debian/pool/main/g/glib2.0/libglib2.0-0_2.56.0-6_amd64.deb -http://ftp.us.debian.org/debian/pool/main/g/glib2.0/libglib2.0-dev_2.56.0-6_amd64.deb -http://ftp.us.debian.org/debian/pool/main/g/glibc/libc6_2.27-3_amd64.deb -http://ftp.us.debian.org/debian/pool/main/g/glibc/libc6-dev_2.27-3_amd64.deb +http://ftp.us.debian.org/debian/pool/main/f/fribidi/libfribidi0_1.0.5-3_amd64.deb +http://ftp.us.debian.org/debian/pool/main/f/fribidi/libfribidi-dev_1.0.5-3_amd64.deb +http://ftp.us.debian.org/debian/pool/main/g/gcc-6/libasan3_6.4.0-20_amd64.deb +http://ftp.us.debian.org/debian/pool/main/g/gcc-6/libgcc-6-dev_6.4.0-20_amd64.deb +http://ftp.us.debian.org/debian/pool/main/g/gcc-6/libstdc++-6-dev_6.4.0-20_amd64.deb +http://ftp.us.debian.org/debian/pool/main/g/gcc-7/libcilkrts5_7.3.0-28_amd64.deb +http://ftp.us.debian.org/debian/pool/main/g/gcc-7/libubsan0_7.3.0-28_amd64.deb +http://ftp.us.debian.org/debian/pool/main/g/gcc-8/libatomic1_8.2.0-4_amd64.deb +http://ftp.us.debian.org/debian/pool/main/g/gcc-8/libgcc1_8.2.0-4_amd64.deb +http://ftp.us.debian.org/debian/pool/main/g/gcc-8/libgomp1_8.2.0-4_amd64.deb +http://ftp.us.debian.org/debian/pool/main/g/gcc-8/libitm1_8.2.0-4_amd64.deb +http://ftp.us.debian.org/debian/pool/main/g/gcc-8/liblsan0_8.2.0-4_amd64.deb +http://ftp.us.debian.org/debian/pool/main/g/gcc-8/libmpx2_8.2.0-4_amd64.deb +http://ftp.us.debian.org/debian/pool/main/g/gcc-8/libquadmath0_8.2.0-4_amd64.deb +http://ftp.us.debian.org/debian/pool/main/g/gcc-8/libstdc++6_8.2.0-4_amd64.deb +http://ftp.us.debian.org/debian/pool/main/g/gcc-8/libtsan0_8.2.0-4_amd64.deb +http://ftp.us.debian.org/debian/pool/main/g/gdk-pixbuf/libgdk-pixbuf2.0-0_2.36.12-2_amd64.deb +http://ftp.us.debian.org/debian/pool/main/g/gdk-pixbuf/libgdk-pixbuf2.0-dev_2.36.12-2_amd64.deb +http://ftp.us.debian.org/debian/pool/main/g/glib2.0/libglib2.0-0_2.56.1-2_amd64.deb +http://ftp.us.debian.org/debian/pool/main/g/glib2.0/libglib2.0-dev_2.56.1-2_amd64.deb +http://ftp.us.debian.org/debian/pool/main/g/glibc/libc6_2.27-5_amd64.deb +http://ftp.us.debian.org/debian/pool/main/g/glibc/libc6-dev_2.27-5_amd64.deb http://ftp.us.debian.org/debian/pool/main/g/gmp/libgmp10_6.1.2+dfsg-3_amd64.deb -http://ftp.us.debian.org/debian/pool/main/g/gnutls28/libgnutls28-dev_3.5.18-1_amd64.deb -http://ftp.us.debian.org/debian/pool/main/g/gnutls28/libgnutls30_3.5.18-1_amd64.deb -http://ftp.us.debian.org/debian/pool/main/g/gnutls28/libgnutls-dane0_3.5.18-1_amd64.deb -http://ftp.us.debian.org/debian/pool/main/g/gnutls28/libgnutls-openssl27_3.5.18-1_amd64.deb -http://ftp.us.debian.org/debian/pool/main/g/gnutls28/libgnutlsxx28_3.5.18-1_amd64.deb +http://ftp.us.debian.org/debian/pool/main/g/gnutls28/libgnutls28-dev_3.5.19-1_amd64.deb +http://ftp.us.debian.org/debian/pool/main/g/gnutls28/libgnutls30_3.5.19-1_amd64.deb +http://ftp.us.debian.org/debian/pool/main/g/gnutls28/libgnutls-dane0_3.5.19-1_amd64.deb +http://ftp.us.debian.org/debian/pool/main/g/gnutls28/libgnutls-openssl27_3.5.19-1_amd64.deb +http://ftp.us.debian.org/debian/pool/main/g/gnutls28/libgnutlsxx28_3.5.19-1_amd64.deb +http://ftp.us.debian.org/debian/pool/main/g/graphene/libgraphene-1.0-0_1.8.2-1_amd64.deb +http://ftp.us.debian.org/debian/pool/main/g/graphene/libgraphene-1.0-dev_1.8.2-1_amd64.deb http://ftp.us.debian.org/debian/pool/main/g/graphite2/libgraphite2-3_1.3.11-2_amd64.deb http://ftp.us.debian.org/debian/pool/main/g/graphite2/libgraphite2-dev_1.3.11-2_amd64.deb -http://ftp.us.debian.org/debian/pool/main/g/gtk+2.0/libgtk2.0-0_2.24.32-1_amd64.deb -http://ftp.us.debian.org/debian/pool/main/g/gtk+2.0/libgtk2.0-dev_2.24.32-1_amd64.deb -http://ftp.us.debian.org/debian/pool/main/g/gtk+3.0/libgtk-3-0_3.22.29-3_amd64.deb -http://ftp.us.debian.org/debian/pool/main/g/gtk+3.0/libgtk-3-dev_3.22.29-3_amd64.deb -http://ftp.us.debian.org/debian/pool/main/h/harfbuzz/libharfbuzz0b_1.7.2-1_amd64.deb -http://ftp.us.debian.org/debian/pool/main/h/harfbuzz/libharfbuzz-dev_1.7.2-1_amd64.deb -http://ftp.us.debian.org/debian/pool/main/h/harfbuzz/libharfbuzz-gobject0_1.7.2-1_amd64.deb -http://ftp.us.debian.org/debian/pool/main/h/harfbuzz/libharfbuzz-icu0_1.7.2-1_amd64.deb +http://ftp.us.debian.org/debian/pool/main/g/gtk+2.0/libgtk2.0-0_2.24.32-3_amd64.deb +http://ftp.us.debian.org/debian/pool/main/g/gtk+3.0/libgtk-3-0_3.22.30-2_amd64.deb +http://ftp.us.debian.org/debian/pool/main/g/gtk+3.0/libgtk-3-dev_3.22.30-2_amd64.deb +http://ftp.us.debian.org/debian/pool/main/g/gtk+4.0/libgtk-4-0_3.91.2-1_amd64.deb +http://ftp.us.debian.org/debian/pool/main/g/gtk+4.0/libgtk-4-dev_3.91.2-1_amd64.deb +http://ftp.us.debian.org/debian/pool/main/h/harfbuzz/libharfbuzz0b_1.8.8-2_amd64.deb +http://ftp.us.debian.org/debian/pool/main/h/harfbuzz/libharfbuzz-dev_1.8.8-2_amd64.deb +http://ftp.us.debian.org/debian/pool/main/h/harfbuzz/libharfbuzz-gobject0_1.8.8-2_amd64.deb +http://ftp.us.debian.org/debian/pool/main/h/harfbuzz/libharfbuzz-icu0_1.8.8-2_amd64.deb +http://ftp.us.debian.org/debian/pool/main/i/icu-le-hb/libicu-le-hb0_1.0.3+git161113-5_amd64.deb http://ftp.us.debian.org/debian/pool/main/i/icu/libicu57_57.1-9_amd64.deb +http://ftp.us.debian.org/debian/pool/main/i/icu/libicu60_60.2-6_amd64.deb http://ftp.us.debian.org/debian/pool/main/j/jbigkit/libjbig0_2.1-3.1+b2_amd64.deb -http://ftp.us.debian.org/debian/pool/main/j/json-glib/libjson-glib-1.0-0_1.4.2-3_amd64.deb -http://ftp.us.debian.org/debian/pool/main/k/keyutils/libkeyutils1_1.5.9-9.2_amd64.deb +http://ftp.us.debian.org/debian/pool/main/j/json-glib/libjson-glib-1.0-0_1.4.2-4_amd64.deb +http://ftp.us.debian.org/debian/pool/main/k/keyutils/libkeyutils1_1.5.9-9.3_amd64.deb http://ftp.us.debian.org/debian/pool/main/k/krb5/krb5-multidev_1.16-2_amd64.deb http://ftp.us.debian.org/debian/pool/main/k/krb5/libgssapi-krb5-2_1.16-2_amd64.deb http://ftp.us.debian.org/debian/pool/main/k/krb5/libgssrpc4_1.16-2_amd64.deb @@ -90,48 +96,50 @@ http://ftp.us.debian.org/debian/pool/main/k/krb5/libkdb5-9_1.16-2_amd64.deb http://ftp.us.debian.org/debian/pool/main/k/krb5/libkrb5-3_1.16-2_amd64.deb http://ftp.us.debian.org/debian/pool/main/k/krb5/libkrb5-dev_1.16-2_amd64.deb http://ftp.us.debian.org/debian/pool/main/k/krb5/libkrb5support0_1.16-2_amd64.deb -http://ftp.us.debian.org/debian/pool/main/liba/libappindicator/libappindicator1_0.4.92-5_amd64.deb -http://ftp.us.debian.org/debian/pool/main/liba/libappindicator/libappindicator3-1_0.4.92-5_amd64.deb -http://ftp.us.debian.org/debian/pool/main/liba/libappindicator/libappindicator3-dev_0.4.92-5_amd64.deb -http://ftp.us.debian.org/debian/pool/main/liba/libappindicator/libappindicator-dev_0.4.92-5_amd64.deb +http://ftp.us.debian.org/debian/pool/main/liba/libappindicator/libappindicator1_0.4.92-6_amd64.deb +http://ftp.us.debian.org/debian/pool/main/liba/libappindicator/libappindicator3-1_0.4.92-6_amd64.deb +http://ftp.us.debian.org/debian/pool/main/liba/libappindicator/libappindicator3-dev_0.4.92-6_amd64.deb +http://ftp.us.debian.org/debian/pool/main/liba/libappindicator/libappindicator-dev_0.4.92-6_amd64.deb http://ftp.us.debian.org/debian/pool/main/liba/libasyncns/libasyncns0_0.8-6_amd64.deb -http://ftp.us.debian.org/debian/pool/main/libb/libbsd/libbsd0_0.8.7-1_amd64.deb +http://ftp.us.debian.org/debian/pool/main/libb/libbsd/libbsd0_0.9.1-1_amd64.deb http://ftp.us.debian.org/debian/pool/main/libc/libcap2/libcap2_2.25-1.2_amd64.deb http://ftp.us.debian.org/debian/pool/main/libc/libcap2/libcap-dev_2.25-1.2_amd64.deb -http://ftp.us.debian.org/debian/pool/main/libc/libcap-ng/libcap-ng0_0.7.7-3.1+b1_amd64.deb -http://ftp.us.debian.org/debian/pool/main/libd/libdatrie/libdatrie1_0.2.10-7_amd64.deb -http://ftp.us.debian.org/debian/pool/main/libd/libdbusmenu/libdbusmenu-glib4_16.04.1+17.04.20170109.1-5_amd64.deb -http://ftp.us.debian.org/debian/pool/main/libd/libdbusmenu/libdbusmenu-glib-dev_16.04.1+17.04.20170109.1-5_amd64.deb -http://ftp.us.debian.org/debian/pool/main/libd/libdbusmenu/libdbusmenu-gtk3-4_16.04.1+17.04.20170109.1-5_amd64.deb -http://ftp.us.debian.org/debian/pool/main/libd/libdbusmenu/libdbusmenu-gtk4_16.04.1+17.04.20170109.1-5_amd64.deb -http://ftp.us.debian.org/debian/pool/main/libd/libdrm/libdrm2_2.4.91-2_amd64.deb -http://ftp.us.debian.org/debian/pool/main/libd/libdrm/libdrm-amdgpu1_2.4.91-2_amd64.deb -http://ftp.us.debian.org/debian/pool/main/libd/libdrm/libdrm-dev_2.4.91-2_amd64.deb -http://ftp.us.debian.org/debian/pool/main/libd/libdrm/libdrm-intel1_2.4.91-2_amd64.deb -http://ftp.us.debian.org/debian/pool/main/libd/libdrm/libdrm-nouveau2_2.4.91-2_amd64.deb -http://ftp.us.debian.org/debian/pool/main/libd/libdrm/libdrm-radeon1_2.4.91-2_amd64.deb +http://ftp.us.debian.org/debian/pool/main/libc/libcap-ng/libcap-ng0_0.7.9-1_amd64.deb +http://ftp.us.debian.org/debian/pool/main/libd/libdatrie/libdatrie1_0.2.12-1_amd64.deb +http://ftp.us.debian.org/debian/pool/main/libd/libdbusmenu/libdbusmenu-glib4_16.04.1+18.04.20171206-1_amd64.deb +http://ftp.us.debian.org/debian/pool/main/libd/libdbusmenu/libdbusmenu-glib-dev_16.04.1+18.04.20171206-1_amd64.deb +http://ftp.us.debian.org/debian/pool/main/libd/libdbusmenu/libdbusmenu-gtk3-4_16.04.1+18.04.20171206-1_amd64.deb +http://ftp.us.debian.org/debian/pool/main/libd/libdbusmenu/libdbusmenu-gtk4_16.04.1+18.04.20171206-1_amd64.deb +http://ftp.us.debian.org/debian/pool/main/libd/libdrm/libdrm2_2.4.93-1_amd64.deb +http://ftp.us.debian.org/debian/pool/main/libd/libdrm/libdrm-amdgpu1_2.4.93-1_amd64.deb +http://ftp.us.debian.org/debian/pool/main/libd/libdrm/libdrm-dev_2.4.93-1_amd64.deb +http://ftp.us.debian.org/debian/pool/main/libd/libdrm/libdrm-intel1_2.4.93-1_amd64.deb +http://ftp.us.debian.org/debian/pool/main/libd/libdrm/libdrm-nouveau2_2.4.93-1_amd64.deb +http://ftp.us.debian.org/debian/pool/main/libd/libdrm/libdrm-radeon1_2.4.93-1_amd64.deb http://ftp.us.debian.org/debian/pool/main/libe/libepoxy/libepoxy0_1.4.3-1_amd64.deb http://ftp.us.debian.org/debian/pool/main/libe/libepoxy/libepoxy-dev_1.4.3-1_amd64.deb http://ftp.us.debian.org/debian/pool/main/libe/libevent/libevent-2.1-6_2.1.8-stable-4_amd64.deb http://ftp.us.debian.org/debian/pool/main/libf/libffi/libffi6_3.2.1-8_amd64.deb +http://ftp.us.debian.org/debian/pool/main/libf/libffi/libffi7_3.3~rc0-6_amd64.deb http://ftp.us.debian.org/debian/pool/main/libf/libffi/libffi-dev_3.2.1-8_amd64.deb -http://ftp.us.debian.org/debian/pool/main/libg/libgcrypt20/libgcrypt20_1.8.2-2_amd64.deb -http://ftp.us.debian.org/debian/pool/main/libg/libgcrypt20/libgcrypt20-dev_1.8.2-2_amd64.deb -http://ftp.us.debian.org/debian/pool/main/libg/libglvnd/libegl1_1.0.0+git20180308-1_amd64.deb -http://ftp.us.debian.org/debian/pool/main/libg/libglvnd/libgl1_1.0.0+git20180308-1_amd64.deb -http://ftp.us.debian.org/debian/pool/main/libg/libglvnd/libgles2_1.0.0+git20180308-1_amd64.deb -http://ftp.us.debian.org/debian/pool/main/libg/libglvnd/libglvnd0_1.0.0+git20180308-1_amd64.deb -http://ftp.us.debian.org/debian/pool/main/libg/libglvnd/libglvnd-dev_1.0.0+git20180308-1_amd64.deb -http://ftp.us.debian.org/debian/pool/main/libg/libglvnd/libglx0_1.0.0+git20180308-1_amd64.deb -http://ftp.us.debian.org/debian/pool/main/libg/libglvnd/libopengl0_1.0.0+git20180308-1_amd64.deb +http://ftp.us.debian.org/debian/pool/main/libg/libgcrypt20/libgcrypt20_1.8.3-1_amd64.deb +http://ftp.us.debian.org/debian/pool/main/libg/libgcrypt20/libgcrypt20-dev_1.8.3-1_amd64.deb +http://ftp.us.debian.org/debian/pool/main/libg/libglvnd/libegl1_1.1.0-1_amd64.deb +http://ftp.us.debian.org/debian/pool/main/libg/libglvnd/libgl1_1.1.0-1_amd64.deb +http://ftp.us.debian.org/debian/pool/main/libg/libglvnd/libgles1_1.1.0-1_amd64.deb +http://ftp.us.debian.org/debian/pool/main/libg/libglvnd/libgles2_1.1.0-1_amd64.deb +http://ftp.us.debian.org/debian/pool/main/libg/libglvnd/libglvnd0_1.1.0-1_amd64.deb +http://ftp.us.debian.org/debian/pool/main/libg/libglvnd/libglvnd-dev_1.1.0-1_amd64.deb +http://ftp.us.debian.org/debian/pool/main/libg/libglvnd/libglx0_1.1.0-1_amd64.deb +http://ftp.us.debian.org/debian/pool/main/libg/libglvnd/libopengl0_1.1.0-1_amd64.deb http://ftp.us.debian.org/debian/pool/main/libg/libgnome-keyring/libgnome-keyring0_3.12.0-1+b2_amd64.deb http://ftp.us.debian.org/debian/pool/main/libg/libgnome-keyring/libgnome-keyring-dev_3.12.0-1+b2_amd64.deb -http://ftp.us.debian.org/debian/pool/main/libg/libgpg-error/libgpg-error0_1.28-2_amd64.deb -http://ftp.us.debian.org/debian/pool/main/libg/libgpg-error/libgpg-error-dev_1.28-2_amd64.deb +http://ftp.us.debian.org/debian/pool/main/libg/libgpg-error/libgpg-error0_1.32-1_amd64.deb +http://ftp.us.debian.org/debian/pool/main/libg/libgpg-error/libgpg-error-dev_1.32-1_amd64.deb http://ftp.us.debian.org/debian/pool/main/libi/libice/libice6_1.0.9-2_amd64.deb http://ftp.us.debian.org/debian/pool/main/libi/libidl/libidl-2-0_0.8.14-4_amd64.deb -http://ftp.us.debian.org/debian/pool/main/libi/libidn2/libidn2-0_2.0.4-1.1_amd64.deb -http://ftp.us.debian.org/debian/pool/main/libi/libidn/libidn11_1.33-2.1_amd64.deb +http://ftp.us.debian.org/debian/pool/main/libi/libidn2/libidn2-0_2.0.4-2.2_amd64.deb +http://ftp.us.debian.org/debian/pool/main/libi/libidn/libidn11_1.33-2.2_amd64.deb http://ftp.us.debian.org/debian/pool/main/libi/libindicator/libindicator3-7_0.5.0-3+b1_amd64.deb http://ftp.us.debian.org/debian/pool/main/libi/libindicator/libindicator7_0.5.0-3+b1_amd64.deb http://ftp.us.debian.org/debian/pool/main/libj/libjpeg-turbo/libjpeg62-turbo_1.5.2-2+b1_amd64.deb @@ -142,25 +150,26 @@ http://ftp.us.debian.org/debian/pool/main/libn/libnss-db/libnss-db_2.2.3pre1-6+b http://ftp.us.debian.org/debian/pool/main/libo/libogg/libogg0_1.3.2-1+b1_amd64.deb http://ftp.us.debian.org/debian/pool/main/libo/libogg/libogg-dev_1.3.2-1+b1_amd64.deb http://ftp.us.debian.org/debian/pool/main/libp/libpciaccess/libpciaccess0_0.14-1_amd64.deb -http://ftp.us.debian.org/debian/pool/main/libp/libpng1.6/libpng16-16_1.6.34-1_amd64.deb -http://ftp.us.debian.org/debian/pool/main/libp/libpng1.6/libpng-dev_1.6.34-1_amd64.deb +http://ftp.us.debian.org/debian/pool/main/libp/libpng1.6/libpng16-16_1.6.34-2_amd64.deb +http://ftp.us.debian.org/debian/pool/main/libp/libpng1.6/libpng-dev_1.6.34-2_amd64.deb +http://ftp.us.debian.org/debian/pool/main/libp/libpsl/libpsl5_0.20.2-1_amd64.deb http://ftp.us.debian.org/debian/pool/main/libp/libpthread-stubs/libpthread-stubs0-dev_0.3-4_amd64.deb http://ftp.us.debian.org/debian/pool/main/libr/librest/librest-0.7-0_0.8.0-2_amd64.deb -http://ftp.us.debian.org/debian/pool/main/libs/libselinux/libselinux1_2.7-2+b2_amd64.deb +http://ftp.us.debian.org/debian/pool/main/libs/libselinux/libselinux1_2.8-1+b1_amd64.deb http://ftp.us.debian.org/debian/pool/main/libs/libsm/libsm6_1.2.2-1+b3_amd64.deb http://ftp.us.debian.org/debian/pool/main/libs/libsndfile/libsndfile1_1.0.28-4_amd64.deb -http://ftp.us.debian.org/debian/pool/main/libs/libsoup2.4/libsoup2.4-1_2.62.0-1_amd64.deb -http://ftp.us.debian.org/debian/pool/main/libs/libsoup2.4/libsoup-gnome2.4-1_2.62.0-1_amd64.deb -http://ftp.us.debian.org/debian/pool/main/libt/libtasn1-6/libtasn1-6_4.13-2_amd64.deb -http://ftp.us.debian.org/debian/pool/main/libt/libthai/libthai0_0.1.27-2_amd64.deb -http://ftp.us.debian.org/debian/pool/main/libt/libtool/libltdl7_2.4.6-2_amd64.deb -http://ftp.us.debian.org/debian/pool/main/libu/libunistring/libunistring2_0.9.8-1_amd64.deb -http://ftp.us.debian.org/debian/pool/main/libv/libva/libva2_2.1.0-3_amd64.deb -http://ftp.us.debian.org/debian/pool/main/libv/libva/libva-dev_2.1.0-3_amd64.deb -http://ftp.us.debian.org/debian/pool/main/libv/libva/libva-drm2_2.1.0-3_amd64.deb -http://ftp.us.debian.org/debian/pool/main/libv/libva/libva-glx2_2.1.0-3_amd64.deb -http://ftp.us.debian.org/debian/pool/main/libv/libva/libva-wayland2_2.1.0-3_amd64.deb -http://ftp.us.debian.org/debian/pool/main/libv/libva/libva-x11-2_2.1.0-3_amd64.deb +http://ftp.us.debian.org/debian/pool/main/libs/libsoup2.4/libsoup2.4-1_2.62.2-2_amd64.deb +http://ftp.us.debian.org/debian/pool/main/libs/libsoup2.4/libsoup-gnome2.4-1_2.62.2-2_amd64.deb +http://ftp.us.debian.org/debian/pool/main/libt/libtasn1-6/libtasn1-6_4.13-3_amd64.deb +http://ftp.us.debian.org/debian/pool/main/libt/libthai/libthai0_0.1.28-1_amd64.deb +http://ftp.us.debian.org/debian/pool/main/libt/libtool/libltdl7_2.4.6-2.1_amd64.deb +http://ftp.us.debian.org/debian/pool/main/libu/libunistring/libunistring2_0.9.10-1_amd64.deb +http://ftp.us.debian.org/debian/pool/main/libv/libva/libva2_2.2.0-1_amd64.deb +http://ftp.us.debian.org/debian/pool/main/libv/libva/libva-dev_2.2.0-1_amd64.deb +http://ftp.us.debian.org/debian/pool/main/libv/libva/libva-drm2_2.2.0-1_amd64.deb +http://ftp.us.debian.org/debian/pool/main/libv/libva/libva-glx2_2.2.0-1_amd64.deb +http://ftp.us.debian.org/debian/pool/main/libv/libva/libva-wayland2_2.2.0-1_amd64.deb +http://ftp.us.debian.org/debian/pool/main/libv/libva/libva-x11-2_2.2.0-1_amd64.deb http://ftp.us.debian.org/debian/pool/main/libv/libvorbis/libvorbis0a_1.3.6-1_amd64.deb http://ftp.us.debian.org/debian/pool/main/libv/libvorbis/libvorbisenc2_1.3.6-1_amd64.deb http://ftp.us.debian.org/debian/pool/main/libv/libvpx/libvpx5_1.7.0-3_amd64.deb @@ -175,18 +184,18 @@ http://ftp.us.debian.org/debian/pool/main/libx/libx11/libx11-xcb1_1.6.5-1_amd64. http://ftp.us.debian.org/debian/pool/main/libx/libx11/libx11-xcb-dev_1.6.5-1_amd64.deb http://ftp.us.debian.org/debian/pool/main/libx/libxau/libxau6_1.0.8-1+b2_amd64.deb http://ftp.us.debian.org/debian/pool/main/libx/libxau/libxau-dev_1.0.8-1+b2_amd64.deb -http://ftp.us.debian.org/debian/pool/main/libx/libxcb/libxcb1_1.13-1_amd64.deb -http://ftp.us.debian.org/debian/pool/main/libx/libxcb/libxcb1-dev_1.13-1_amd64.deb -http://ftp.us.debian.org/debian/pool/main/libx/libxcb/libxcb-dri2-0_1.13-1_amd64.deb -http://ftp.us.debian.org/debian/pool/main/libx/libxcb/libxcb-dri3-0_1.13-1_amd64.deb -http://ftp.us.debian.org/debian/pool/main/libx/libxcb/libxcb-glx0_1.13-1_amd64.deb -http://ftp.us.debian.org/debian/pool/main/libx/libxcb/libxcb-present0_1.13-1_amd64.deb -http://ftp.us.debian.org/debian/pool/main/libx/libxcb/libxcb-render0_1.13-1_amd64.deb -http://ftp.us.debian.org/debian/pool/main/libx/libxcb/libxcb-render0-dev_1.13-1_amd64.deb -http://ftp.us.debian.org/debian/pool/main/libx/libxcb/libxcb-shm0_1.13-1_amd64.deb -http://ftp.us.debian.org/debian/pool/main/libx/libxcb/libxcb-shm0-dev_1.13-1_amd64.deb -http://ftp.us.debian.org/debian/pool/main/libx/libxcb/libxcb-sync1_1.13-1_amd64.deb -http://ftp.us.debian.org/debian/pool/main/libx/libxcb/libxcb-xfixes0_1.13-1_amd64.deb +http://ftp.us.debian.org/debian/pool/main/libx/libxcb/libxcb1_1.13-2_amd64.deb +http://ftp.us.debian.org/debian/pool/main/libx/libxcb/libxcb1-dev_1.13-2_amd64.deb +http://ftp.us.debian.org/debian/pool/main/libx/libxcb/libxcb-dri2-0_1.13-2_amd64.deb +http://ftp.us.debian.org/debian/pool/main/libx/libxcb/libxcb-dri3-0_1.13-2_amd64.deb +http://ftp.us.debian.org/debian/pool/main/libx/libxcb/libxcb-glx0_1.13-2_amd64.deb +http://ftp.us.debian.org/debian/pool/main/libx/libxcb/libxcb-present0_1.13-2_amd64.deb +http://ftp.us.debian.org/debian/pool/main/libx/libxcb/libxcb-render0_1.13-2_amd64.deb +http://ftp.us.debian.org/debian/pool/main/libx/libxcb/libxcb-render0-dev_1.13-2_amd64.deb +http://ftp.us.debian.org/debian/pool/main/libx/libxcb/libxcb-shm0_1.13-2_amd64.deb +http://ftp.us.debian.org/debian/pool/main/libx/libxcb/libxcb-shm0-dev_1.13-2_amd64.deb +http://ftp.us.debian.org/debian/pool/main/libx/libxcb/libxcb-sync1_1.13-2_amd64.deb +http://ftp.us.debian.org/debian/pool/main/libx/libxcb/libxcb-xfixes0_1.13-2_amd64.deb http://ftp.us.debian.org/debian/pool/main/libx/libxcomposite/libxcomposite1_0.4.4-2_amd64.deb http://ftp.us.debian.org/debian/pool/main/libx/libxcomposite/libxcomposite-dev_0.4.4-2_amd64.deb http://ftp.us.debian.org/debian/pool/main/libx/libxcursor/libxcursor1_1.1.15-1_amd64.deb @@ -203,17 +212,17 @@ http://ftp.us.debian.org/debian/pool/main/libx/libxi/libxi6_1.7.9-1_amd64.deb http://ftp.us.debian.org/debian/pool/main/libx/libxi/libxi-dev_1.7.9-1_amd64.deb http://ftp.us.debian.org/debian/pool/main/libx/libxinerama/libxinerama1_1.1.3-1+b3_amd64.deb http://ftp.us.debian.org/debian/pool/main/libx/libxinerama/libxinerama-dev_1.1.3-1+b3_amd64.deb -http://ftp.us.debian.org/debian/pool/main/libx/libxkbcommon/libxkbcommon0_0.8.0-1_amd64.deb -http://ftp.us.debian.org/debian/pool/main/libx/libxkbcommon/libxkbcommon-dev_0.8.0-1_amd64.deb -http://ftp.us.debian.org/debian/pool/main/libx/libxml2/libxml2_2.9.4+dfsg1-6.1_amd64.deb -http://ftp.us.debian.org/debian/pool/main/libx/libxml2/libxml2-dev_2.9.4+dfsg1-6.1_amd64.deb +http://ftp.us.debian.org/debian/pool/main/libx/libxkbcommon/libxkbcommon0_0.8.0-2_amd64.deb +http://ftp.us.debian.org/debian/pool/main/libx/libxkbcommon/libxkbcommon-dev_0.8.0-2_amd64.deb +http://ftp.us.debian.org/debian/pool/main/libx/libxml2/libxml2_2.9.4+dfsg1-7+b1_amd64.deb +http://ftp.us.debian.org/debian/pool/main/libx/libxml2/libxml2-dev_2.9.4+dfsg1-7+b1_amd64.deb http://ftp.us.debian.org/debian/pool/main/libx/libxrandr/libxrandr2_1.5.1-1_amd64.deb http://ftp.us.debian.org/debian/pool/main/libx/libxrandr/libxrandr-dev_1.5.1-1_amd64.deb http://ftp.us.debian.org/debian/pool/main/libx/libxrender/libxrender1_0.9.10-1_amd64.deb http://ftp.us.debian.org/debian/pool/main/libx/libxrender/libxrender-dev_0.9.10-1_amd64.deb http://ftp.us.debian.org/debian/pool/main/libx/libxshmfence/libxshmfence1_1.3-1_amd64.deb -http://ftp.us.debian.org/debian/pool/main/libx/libxslt/libxslt1.1_1.1.29-5_amd64.deb -http://ftp.us.debian.org/debian/pool/main/libx/libxslt/libxslt1-dev_1.1.29-5_amd64.deb +http://ftp.us.debian.org/debian/pool/main/libx/libxslt/libxslt1.1_1.1.32-2_amd64.deb +http://ftp.us.debian.org/debian/pool/main/libx/libxslt/libxslt1-dev_1.1.32-2_amd64.deb http://ftp.us.debian.org/debian/pool/main/libx/libxss/libxss1_1.2.2-1+b2_amd64.deb http://ftp.us.debian.org/debian/pool/main/libx/libxss/libxss-dev_1.2.2-1+b2_amd64.deb http://ftp.us.debian.org/debian/pool/main/libx/libxt/libxt6_1.1.5-1_amd64.deb @@ -221,79 +230,81 @@ http://ftp.us.debian.org/debian/pool/main/libx/libxt/libxt-dev_1.1.5-1_amd64.deb http://ftp.us.debian.org/debian/pool/main/libx/libxtst/libxtst6_1.2.3-1_amd64.deb http://ftp.us.debian.org/debian/pool/main/libx/libxtst/libxtst-dev_1.2.3-1_amd64.deb http://ftp.us.debian.org/debian/pool/main/libx/libxxf86vm/libxxf86vm1_1.1.4-1+b2_amd64.deb -http://ftp.us.debian.org/debian/pool/main/l/lcms2/liblcms2-2_2.9-1_amd64.deb -http://ftp.us.debian.org/debian/pool/main/l/linux/linux-libc-dev_4.15.11-1_amd64.deb -http://ftp.us.debian.org/debian/pool/main/l/lz4/liblz4-1_0.0~r131-2+b1_amd64.deb -http://ftp.us.debian.org/debian/pool/main/l/lzo2/liblzo2-2_2.08-1.2+b2_amd64.deb -http://ftp.us.debian.org/debian/pool/main/m/mesa/libegl1-mesa_17.3.7-1_amd64.deb -http://ftp.us.debian.org/debian/pool/main/m/mesa/libegl1-mesa-dev_17.3.7-1_amd64.deb -http://ftp.us.debian.org/debian/pool/main/m/mesa/libgbm1_17.3.7-1_amd64.deb -http://ftp.us.debian.org/debian/pool/main/m/mesa/libgbm-dev_17.3.7-1_amd64.deb -http://ftp.us.debian.org/debian/pool/main/m/mesa/libgl1-mesa-dev_17.3.7-1_amd64.deb -http://ftp.us.debian.org/debian/pool/main/m/mesa/libgl1-mesa-glx_17.3.7-1_amd64.deb -http://ftp.us.debian.org/debian/pool/main/m/mesa/libglapi-mesa_17.3.7-1_amd64.deb -http://ftp.us.debian.org/debian/pool/main/m/mesa/libwayland-egl1-mesa_17.3.7-1_amd64.deb -http://ftp.us.debian.org/debian/pool/main/m/mesa/mesa-common-dev_17.3.7-1_amd64.deb +http://ftp.us.debian.org/debian/pool/main/l/lcms2/liblcms2-2_2.9-2_amd64.deb +http://ftp.us.debian.org/debian/pool/main/l/linux/linux-libc-dev_4.17.17-1_amd64.deb +http://ftp.us.debian.org/debian/pool/main/l/lz4/liblz4-1_1.8.2-1_amd64.deb +http://ftp.us.debian.org/debian/pool/main/l/lzo2/liblzo2-2_2.10-0.1_amd64.deb +http://ftp.us.debian.org/debian/pool/main/m/mesa/libegl1-mesa_18.1.6-1_amd64.deb +http://ftp.us.debian.org/debian/pool/main/m/mesa/libegl1-mesa-dev_18.1.6-1_amd64.deb +http://ftp.us.debian.org/debian/pool/main/m/mesa/libgbm1_18.1.6-1_amd64.deb +http://ftp.us.debian.org/debian/pool/main/m/mesa/libgbm-dev_18.1.6-1_amd64.deb +http://ftp.us.debian.org/debian/pool/main/m/mesa/libgl1-mesa-dev_18.1.6-1_amd64.deb +http://ftp.us.debian.org/debian/pool/main/m/mesa/libgl1-mesa-glx_18.1.6-1_amd64.deb +http://ftp.us.debian.org/debian/pool/main/m/mesa/libglapi-mesa_18.1.6-1_amd64.deb +http://ftp.us.debian.org/debian/pool/main/m/mesa/libwayland-egl1-mesa_18.1.6-1_amd64.deb +http://ftp.us.debian.org/debian/pool/main/m/mesa/mesa-common-dev_18.1.6-1_amd64.deb http://ftp.us.debian.org/debian/pool/main/m/minizip/libminizip1_1.1-8+b1_amd64.deb http://ftp.us.debian.org/debian/pool/main/m/minizip/libminizip-dev_1.1-8+b1_amd64.deb http://ftp.us.debian.org/debian/pool/main/n/nettle/libhogweed4_3.4-1_amd64.deb http://ftp.us.debian.org/debian/pool/main/n/nettle/libnettle6_3.4-1_amd64.deb -http://ftp.us.debian.org/debian/pool/main/n/nspr/libnspr4_4.18-1_amd64.deb -http://ftp.us.debian.org/debian/pool/main/n/nspr/libnspr4-dev_4.18-1_amd64.deb -http://ftp.us.debian.org/debian/pool/main/n/nss/libnss3_3.35-2_amd64.deb -http://ftp.us.debian.org/debian/pool/main/n/nss/libnss3-dev_3.35-2_amd64.deb +http://ftp.us.debian.org/debian/pool/main/n/nspr/libnspr4_4.19-3_amd64.deb +http://ftp.us.debian.org/debian/pool/main/n/nspr/libnspr4-dev_4.19-3_amd64.deb +http://ftp.us.debian.org/debian/pool/main/n/nss/libnss3_3.38-1_amd64.deb +http://ftp.us.debian.org/debian/pool/main/n/nss/libnss3-dev_3.38-1_amd64.deb http://ftp.us.debian.org/debian/pool/main/o/openssl1.0/libssl1.0.2_1.0.2o-1_amd64.deb -http://ftp.us.debian.org/debian/pool/main/o/openssl/libssl1.1_1.1.0h-2_amd64.deb -http://ftp.us.debian.org/debian/pool/main/o/openssl/libssl-dev_1.1.0h-2_amd64.deb -http://ftp.us.debian.org/debian/pool/main/o/opus/libopus0_1.2.1-1_amd64.deb -http://ftp.us.debian.org/debian/pool/main/o/opus/libopus-dev_1.2.1-1_amd64.deb +http://ftp.us.debian.org/debian/pool/main/o/openssl/libssl1.1_1.1.0h-4_amd64.deb +http://ftp.us.debian.org/debian/pool/main/o/openssl/libssl-dev_1.1.0h-4_amd64.deb +http://ftp.us.debian.org/debian/pool/main/o/opus/libopus0_1.3~beta+20180518-1_amd64.deb +http://ftp.us.debian.org/debian/pool/main/o/opus/libopus-dev_1.3~beta+20180518-1_amd64.deb http://ftp.us.debian.org/debian/pool/main/o/orbit2/liborbit-2-0_2.14.19-4_amd64.deb http://ftp.us.debian.org/debian/pool/main/o/orbit2/liborbit2_2.14.19-4_amd64.deb -http://ftp.us.debian.org/debian/pool/main/p/p11-kit/libp11-kit0_0.23.10-2_amd64.deb -http://ftp.us.debian.org/debian/pool/main/p/pam/libpam0g_1.1.8-3.7_amd64.deb -http://ftp.us.debian.org/debian/pool/main/p/pam/libpam0g-dev_1.1.8-3.7_amd64.deb -http://ftp.us.debian.org/debian/pool/main/p/pango1.0/libpango-1.0-0_1.42.0-1_amd64.deb -http://ftp.us.debian.org/debian/pool/main/p/pango1.0/libpango1.0-dev_1.42.0-1_amd64.deb -http://ftp.us.debian.org/debian/pool/main/p/pango1.0/libpangocairo-1.0-0_1.42.0-1_amd64.deb -http://ftp.us.debian.org/debian/pool/main/p/pango1.0/libpangoft2-1.0-0_1.42.0-1_amd64.deb -http://ftp.us.debian.org/debian/pool/main/p/pango1.0/libpangoxft-1.0-0_1.42.0-1_amd64.deb +http://ftp.us.debian.org/debian/pool/main/p/p11-kit/libp11-kit0_0.23.13-2_amd64.deb +http://ftp.us.debian.org/debian/pool/main/p/pam/libpam0g_1.1.8-3.8_amd64.deb +http://ftp.us.debian.org/debian/pool/main/p/pam/libpam0g-dev_1.1.8-3.8_amd64.deb +http://ftp.us.debian.org/debian/pool/main/p/pango1.0/libpango-1.0-0_1.42.4-1_amd64.deb +http://ftp.us.debian.org/debian/pool/main/p/pango1.0/libpango1.0-dev_1.42.4-1_amd64.deb +http://ftp.us.debian.org/debian/pool/main/p/pango1.0/libpangocairo-1.0-0_1.42.4-1_amd64.deb +http://ftp.us.debian.org/debian/pool/main/p/pango1.0/libpangoft2-1.0-0_1.42.4-1_amd64.deb +http://ftp.us.debian.org/debian/pool/main/p/pango1.0/libpangoxft-1.0-0_1.42.4-1_amd64.deb http://ftp.us.debian.org/debian/pool/main/p/pangox-compat/libpangox-1.0-0_0.0.2-5+b2_amd64.deb http://ftp.us.debian.org/debian/pool/main/p/pciutils/libpci3_3.5.2-1_amd64.deb http://ftp.us.debian.org/debian/pool/main/p/pciutils/libpci-dev_3.5.2-1_amd64.deb -http://ftp.us.debian.org/debian/pool/main/p/pcre3/libpcre16-3_8.39-9_amd64.deb -http://ftp.us.debian.org/debian/pool/main/p/pcre3/libpcre32-3_8.39-9_amd64.deb -http://ftp.us.debian.org/debian/pool/main/p/pcre3/libpcre3_8.39-9_amd64.deb -http://ftp.us.debian.org/debian/pool/main/p/pcre3/libpcre3-dev_8.39-9_amd64.deb -http://ftp.us.debian.org/debian/pool/main/p/pcre3/libpcrecpp0v5_8.39-9_amd64.deb +http://ftp.us.debian.org/debian/pool/main/p/pcre3/libpcre16-3_8.39-11_amd64.deb +http://ftp.us.debian.org/debian/pool/main/p/pcre3/libpcre32-3_8.39-11_amd64.deb +http://ftp.us.debian.org/debian/pool/main/p/pcre3/libpcre3_8.39-11_amd64.deb +http://ftp.us.debian.org/debian/pool/main/p/pcre3/libpcre3-dev_8.39-11_amd64.deb +http://ftp.us.debian.org/debian/pool/main/p/pcre3/libpcrecpp0v5_8.39-11_amd64.deb http://ftp.us.debian.org/debian/pool/main/p/pixman/libpixman-1-0_0.34.0-2_amd64.deb http://ftp.us.debian.org/debian/pool/main/p/pixman/libpixman-1-dev_0.34.0-2_amd64.deb -http://ftp.us.debian.org/debian/pool/main/p/pulseaudio/libpulse0_11.1-4_amd64.deb -http://ftp.us.debian.org/debian/pool/main/p/pulseaudio/libpulse-dev_11.1-4_amd64.deb -http://ftp.us.debian.org/debian/pool/main/p/pulseaudio/libpulse-mainloop-glib0_11.1-4_amd64.deb -http://ftp.us.debian.org/debian/pool/main/r/re2/libre2-4_20180301+dfsg-1_amd64.deb -http://ftp.us.debian.org/debian/pool/main/r/re2/libre2-dev_20180301+dfsg-1_amd64.deb +http://ftp.us.debian.org/debian/pool/main/p/pulseaudio/libpulse0_12.0-1_amd64.deb +http://ftp.us.debian.org/debian/pool/main/p/pulseaudio/libpulse-dev_12.0-1_amd64.deb +http://ftp.us.debian.org/debian/pool/main/p/pulseaudio/libpulse-mainloop-glib0_12.0-1_amd64.deb +http://ftp.us.debian.org/debian/pool/main/r/re2/libre2-4_20180701+dfsg-1_amd64.deb +http://ftp.us.debian.org/debian/pool/main/r/re2/libre2-dev_20180701+dfsg-1_amd64.deb http://ftp.us.debian.org/debian/pool/main/s/snappy/libsnappy1v5_1.1.7-1_amd64.deb http://ftp.us.debian.org/debian/pool/main/s/snappy/libsnappy-dev_1.1.7-1_amd64.deb -http://ftp.us.debian.org/debian/pool/main/s/speech-dispatcher/libspeechd2_0.8.8-1_amd64.deb -http://ftp.us.debian.org/debian/pool/main/s/speech-dispatcher/libspeechd-dev_0.8.8-1_amd64.deb -http://ftp.us.debian.org/debian/pool/main/s/speech-dispatcher/speech-dispatcher_0.8.8-1_amd64.deb -http://ftp.us.debian.org/debian/pool/main/s/sqlite3/libsqlite3-0_3.23.0-1_amd64.deb -http://ftp.us.debian.org/debian/pool/main/s/systemd/libsystemd0_238-4_amd64.deb -http://ftp.us.debian.org/debian/pool/main/s/systemd/libudev1_238-4_amd64.deb -http://ftp.us.debian.org/debian/pool/main/s/systemd/libudev-dev_238-4_amd64.deb +http://ftp.us.debian.org/debian/pool/main/s/speech-dispatcher/libspeechd2_0.8.8-6_amd64.deb +http://ftp.us.debian.org/debian/pool/main/s/speech-dispatcher/libspeechd-dev_0.8.8-6_amd64.deb +http://ftp.us.debian.org/debian/pool/main/s/speech-dispatcher/speech-dispatcher_0.8.8-6_amd64.deb +http://ftp.us.debian.org/debian/pool/main/s/sqlite3/libsqlite3-0_3.24.0-1_amd64.deb +http://ftp.us.debian.org/debian/pool/main/s/systemd/libsystemd0_239-7_amd64.deb +http://ftp.us.debian.org/debian/pool/main/s/systemd/libudev1_239-7_amd64.deb +http://ftp.us.debian.org/debian/pool/main/s/systemd/libudev-dev_239-7_amd64.deb http://ftp.us.debian.org/debian/pool/main/t/tcp-wrappers/libwrap0_7.6.q-27_amd64.deb -http://ftp.us.debian.org/debian/pool/main/t/tiff/libtiff5_4.0.9-4_amd64.deb -http://ftp.us.debian.org/debian/pool/main/u/unbound/libunbound2_1.6.7-1_amd64.deb -http://ftp.us.debian.org/debian/pool/main/u/util-linux/libblkid1_2.31.1-0.5_amd64.deb -http://ftp.us.debian.org/debian/pool/main/u/util-linux/libmount1_2.31.1-0.5_amd64.deb -http://ftp.us.debian.org/debian/pool/main/u/util-linux/libuuid1_2.31.1-0.5_amd64.deb -http://ftp.us.debian.org/debian/pool/main/u/util-linux/uuid-dev_2.31.1-0.5_amd64.deb -http://ftp.us.debian.org/debian/pool/main/w/wayland/libwayland-client0_1.14.0-2_amd64.deb -http://ftp.us.debian.org/debian/pool/main/w/wayland/libwayland-cursor0_1.14.0-2_amd64.deb -http://ftp.us.debian.org/debian/pool/main/w/wayland/libwayland-dev_1.14.0-2_amd64.deb -http://ftp.us.debian.org/debian/pool/main/w/wayland/libwayland-server0_1.14.0-2_amd64.deb -http://ftp.us.debian.org/debian/pool/main/w/wayland-protocols/wayland-protocols_1.13-1_all.deb -http://ftp.us.debian.org/debian/pool/main/x/xft/libxft2_2.3.2-1+b2_amd64.deb +http://ftp.us.debian.org/debian/pool/main/t/tiff/libtiff5_4.0.9-6_amd64.deb +http://ftp.us.debian.org/debian/pool/main/u/unbound/libunbound2_1.7.3-1_amd64.deb +http://ftp.us.debian.org/debian/pool/main/u/util-linux/libblkid1_2.32.1-0.1_amd64.deb +http://ftp.us.debian.org/debian/pool/main/u/util-linux/libmount1_2.32.1-0.1_amd64.deb +http://ftp.us.debian.org/debian/pool/main/u/util-linux/libuuid1_2.32.1-0.1_amd64.deb +http://ftp.us.debian.org/debian/pool/main/u/util-linux/uuid-dev_2.32.1-0.1_amd64.deb +http://ftp.us.debian.org/debian/pool/main/v/vulkan/libvulkan1_1.1.73+dfsg-1_amd64.deb +http://ftp.us.debian.org/debian/pool/main/w/wayland/libwayland-client0_1.15.0-2_amd64.deb +http://ftp.us.debian.org/debian/pool/main/w/wayland/libwayland-cursor0_1.15.0-2_amd64.deb +http://ftp.us.debian.org/debian/pool/main/w/wayland/libwayland-dev_1.15.0-2_amd64.deb +http://ftp.us.debian.org/debian/pool/main/w/wayland/libwayland-egl1_1.15.0-2_amd64.deb +http://ftp.us.debian.org/debian/pool/main/w/wayland/libwayland-server0_1.15.0-2_amd64.deb +http://ftp.us.debian.org/debian/pool/main/w/wayland-protocols/wayland-protocols_1.16-1_all.deb +http://ftp.us.debian.org/debian/pool/main/x/xft/libxft2_2.3.2-2_amd64.deb http://ftp.us.debian.org/debian/pool/main/x/xorgproto/x11proto-composite-dev_2018.4-4_all.deb http://ftp.us.debian.org/debian/pool/main/x/xorgproto/x11proto-damage-dev_2018.4-4_all.deb http://ftp.us.debian.org/debian/pool/main/x/xorgproto/x11proto-dev_2018.4-4_all.deb @@ -307,5 +318,5 @@ http://ftp.us.debian.org/debian/pool/main/x/xorgproto/x11proto-scrnsaver-dev_201 http://ftp.us.debian.org/debian/pool/main/x/xorgproto/x11proto-xext-dev_2018.4-4_all.deb http://ftp.us.debian.org/debian/pool/main/x/xorgproto/x11proto-xinerama-dev_2018.4-4_all.deb http://ftp.us.debian.org/debian/pool/main/x/xz-utils/liblzma5_5.2.2-1.3_amd64.deb -http://ftp.us.debian.org/debian/pool/main/z/zlib/zlib1g_1.2.8.dfsg-5_amd64.deb -http://ftp.us.debian.org/debian/pool/main/z/zlib/zlib1g-dev_1.2.8.dfsg-5_amd64.deb +http://ftp.us.debian.org/debian/pool/main/z/zlib/zlib1g_1.2.11.dfsg-1_amd64.deb +http://ftp.us.debian.org/debian/pool/main/z/zlib/zlib1g-dev_1.2.11.dfsg-1_amd64.deb diff --git a/chromium/build/linux/sysroot_scripts/packagelist.sid.arm b/chromium/build/linux/sysroot_scripts/packagelist.sid.arm index 4b7d0224b24..6df10a42a77 100644 --- a/chromium/build/linux/sysroot_scripts/packagelist.sid.arm +++ b/chromium/build/linux/sysroot_scripts/packagelist.sid.arm @@ -1,79 +1,85 @@ -http://ftp.us.debian.org/debian/pool/main/a/alsa-lib/libasound2_1.1.3-5_armhf.deb -http://ftp.us.debian.org/debian/pool/main/a/alsa-lib/libasound2-dev_1.1.3-5_armhf.deb +http://ftp.us.debian.org/debian/pool/main/a/alsa-lib/libasound2_1.1.6-1_armhf.deb +http://ftp.us.debian.org/debian/pool/main/a/alsa-lib/libasound2-dev_1.1.6-1_armhf.deb http://ftp.us.debian.org/debian/pool/main/a/atk1.0/libatk1.0-0_2.28.1-1_armhf.deb http://ftp.us.debian.org/debian/pool/main/a/atk1.0/libatk1.0-dev_2.28.1-1_armhf.deb http://ftp.us.debian.org/debian/pool/main/a/at-spi2-atk/libatk-bridge2.0-0_2.26.2-1_armhf.deb http://ftp.us.debian.org/debian/pool/main/a/at-spi2-atk/libatk-bridge2.0-dev_2.26.2-1_armhf.deb -http://ftp.us.debian.org/debian/pool/main/a/at-spi2-core/libatspi2.0-0_2.28.0-1_armhf.deb -http://ftp.us.debian.org/debian/pool/main/a/at-spi2-core/libatspi2.0-dev_2.28.0-1_armhf.deb +http://ftp.us.debian.org/debian/pool/main/a/at-spi2-core/libatspi2.0-0_2.28.0-3_armhf.deb +http://ftp.us.debian.org/debian/pool/main/a/at-spi2-core/libatspi2.0-dev_2.28.0-3_armhf.deb http://ftp.us.debian.org/debian/pool/main/a/attr/libattr1_2.4.47-2+b2_armhf.deb -http://ftp.us.debian.org/debian/pool/main/a/audit/libaudit1_2.8.2-1_armhf.deb -http://ftp.us.debian.org/debian/pool/main/a/avahi/libavahi-client3_0.7-3.1_armhf.deb -http://ftp.us.debian.org/debian/pool/main/a/avahi/libavahi-common3_0.7-3.1_armhf.deb -http://ftp.us.debian.org/debian/pool/main/b/bluez/libbluetooth3_5.47-1+b1_armhf.deb -http://ftp.us.debian.org/debian/pool/main/b/bluez/libbluetooth-dev_5.47-1+b1_armhf.deb -http://ftp.us.debian.org/debian/pool/main/b/brltty/libbrlapi0.6_5.6-3_armhf.deb -http://ftp.us.debian.org/debian/pool/main/b/brltty/libbrlapi-dev_5.6-3_armhf.deb -http://ftp.us.debian.org/debian/pool/main/c/cairo/libcairo2_1.15.10-2_armhf.deb -http://ftp.us.debian.org/debian/pool/main/c/cairo/libcairo2-dev_1.15.10-2_armhf.deb -http://ftp.us.debian.org/debian/pool/main/c/cairo/libcairo-gobject2_1.15.10-2_armhf.deb -http://ftp.us.debian.org/debian/pool/main/c/cairo/libcairo-script-interpreter2_1.15.10-2_armhf.deb +http://ftp.us.debian.org/debian/pool/main/a/audit/libaudit1_2.8.3-1+b1_armhf.deb +http://ftp.us.debian.org/debian/pool/main/a/avahi/libavahi-client3_0.7-4_armhf.deb +http://ftp.us.debian.org/debian/pool/main/a/avahi/libavahi-common3_0.7-4_armhf.deb +http://ftp.us.debian.org/debian/pool/main/b/bluez/libbluetooth3_5.50-1_armhf.deb +http://ftp.us.debian.org/debian/pool/main/b/bluez/libbluetooth-dev_5.50-1_armhf.deb +http://ftp.us.debian.org/debian/pool/main/b/brltty/libbrlapi0.6_5.6-5_armhf.deb +http://ftp.us.debian.org/debian/pool/main/b/brltty/libbrlapi-dev_5.6-5_armhf.deb +http://ftp.us.debian.org/debian/pool/main/c/cairo/libcairo2_1.15.10-3_armhf.deb +http://ftp.us.debian.org/debian/pool/main/c/cairo/libcairo2-dev_1.15.10-3_armhf.deb +http://ftp.us.debian.org/debian/pool/main/c/cairo/libcairo-gobject2_1.15.10-3_armhf.deb +http://ftp.us.debian.org/debian/pool/main/c/cairo/libcairo-script-interpreter2_1.15.10-3_armhf.deb http://ftp.us.debian.org/debian/pool/main/c/colord/libcolord2_1.3.3-2_armhf.deb -http://ftp.us.debian.org/debian/pool/main/c/cups/libcups2_2.2.7-2_armhf.deb -http://ftp.us.debian.org/debian/pool/main/c/cups/libcups2-dev_2.2.7-2_armhf.deb -http://ftp.us.debian.org/debian/pool/main/c/cups/libcupsimage2_2.2.7-2_armhf.deb -http://ftp.us.debian.org/debian/pool/main/c/cups/libcupsimage2-dev_2.2.7-2_armhf.deb -http://ftp.us.debian.org/debian/pool/main/d/db5.3/libdb5.3_5.3.28-13.1+b1_armhf.deb -http://ftp.us.debian.org/debian/pool/main/d/dbus-glib/libdbus-glib-1-2_0.110-2_armhf.deb -http://ftp.us.debian.org/debian/pool/main/d/dbus/libdbus-1-3_1.12.6-2_armhf.deb -http://ftp.us.debian.org/debian/pool/main/d/dbus/libdbus-1-dev_1.12.6-2_armhf.deb -http://ftp.us.debian.org/debian/pool/main/e/e2fsprogs/comerr-dev_2.1-1.44.1-1_armhf.deb -http://ftp.us.debian.org/debian/pool/main/e/e2fsprogs/libcom-err2_1.44.1-1_armhf.deb -http://ftp.us.debian.org/debian/pool/main/e/elfutils/libelf1_0.170-0.3_armhf.deb -http://ftp.us.debian.org/debian/pool/main/e/elfutils/libelf-dev_0.170-0.3_armhf.deb -http://ftp.us.debian.org/debian/pool/main/e/expat/libexpat1_2.2.5-3_armhf.deb -http://ftp.us.debian.org/debian/pool/main/e/expat/libexpat1-dev_2.2.5-3_armhf.deb -http://ftp.us.debian.org/debian/pool/main/f/flac/libflac8_1.3.2-1_armhf.deb -http://ftp.us.debian.org/debian/pool/main/f/flac/libflac-dev_1.3.2-1_armhf.deb -http://ftp.us.debian.org/debian/pool/main/f/fontconfig/libfontconfig1_2.12.6-0.1_armhf.deb -http://ftp.us.debian.org/debian/pool/main/f/fontconfig/libfontconfig1-dev_2.12.6-0.1_armhf.deb +http://ftp.us.debian.org/debian/pool/main/c/cups/libcups2_2.2.8-5_armhf.deb +http://ftp.us.debian.org/debian/pool/main/c/cups/libcups2-dev_2.2.8-5_armhf.deb +http://ftp.us.debian.org/debian/pool/main/c/cups/libcupsimage2_2.2.8-5_armhf.deb +http://ftp.us.debian.org/debian/pool/main/c/cups/libcupsimage2-dev_2.2.8-5_armhf.deb +http://ftp.us.debian.org/debian/pool/main/d/db5.3/libdb5.3_5.3.28+dfsg1-0.1_armhf.deb +http://ftp.us.debian.org/debian/pool/main/d/dbus-glib/libdbus-glib-1-2_0.110-3_armhf.deb +http://ftp.us.debian.org/debian/pool/main/d/dbus/libdbus-1-3_1.12.10-1_armhf.deb +http://ftp.us.debian.org/debian/pool/main/d/dbus/libdbus-1-dev_1.12.10-1_armhf.deb +http://ftp.us.debian.org/debian/pool/main/e/e2fsprogs/comerr-dev_2.1-1.44.4-1_armhf.deb +http://ftp.us.debian.org/debian/pool/main/e/e2fsprogs/libcom-err2_1.44.4-1_armhf.deb +http://ftp.us.debian.org/debian/pool/main/e/elfutils/libelf1_0.170-0.5_armhf.deb +http://ftp.us.debian.org/debian/pool/main/e/elfutils/libelf-dev_0.170-0.5_armhf.deb +http://ftp.us.debian.org/debian/pool/main/e/expat/libexpat1_2.2.6-1_armhf.deb +http://ftp.us.debian.org/debian/pool/main/e/expat/libexpat1-dev_2.2.6-1_armhf.deb +http://ftp.us.debian.org/debian/pool/main/f/flac/libflac8_1.3.2-3_armhf.deb +http://ftp.us.debian.org/debian/pool/main/f/flac/libflac-dev_1.3.2-3_armhf.deb +http://ftp.us.debian.org/debian/pool/main/f/fontconfig/libfontconfig1_2.13.0-5_armhf.deb +http://ftp.us.debian.org/debian/pool/main/f/fontconfig/libfontconfig1-dev_2.13.0-5_armhf.deb http://ftp.us.debian.org/debian/pool/main/f/freetype/libfreetype6_2.8.1-2_armhf.deb http://ftp.us.debian.org/debian/pool/main/f/freetype/libfreetype6-dev_2.8.1-2_armhf.deb -http://ftp.us.debian.org/debian/pool/main/f/fribidi/libfribidi0_0.19.7-2_armhf.deb -http://ftp.us.debian.org/debian/pool/main/g/gcc-6/libasan3_6.4.0-15_armhf.deb -http://ftp.us.debian.org/debian/pool/main/g/gcc-6/libgcc-6-dev_6.4.0-15_armhf.deb -http://ftp.us.debian.org/debian/pool/main/g/gcc-6/libstdc++-6-dev_6.4.0-15_armhf.deb -http://ftp.us.debian.org/debian/pool/main/g/gcc-7/libubsan0_7.3.0-14_armhf.deb -http://ftp.us.debian.org/debian/pool/main/g/gcc-8/libatomic1_8-20180402-1_armhf.deb -http://ftp.us.debian.org/debian/pool/main/g/gcc-8/libgcc1_8-20180402-1_armhf.deb -http://ftp.us.debian.org/debian/pool/main/g/gcc-8/libgomp1_8-20180402-1_armhf.deb -http://ftp.us.debian.org/debian/pool/main/g/gcc-8/libstdc++6_8-20180402-1_armhf.deb -http://ftp.us.debian.org/debian/pool/main/g/gdk-pixbuf/libgdk-pixbuf2.0-0_2.36.11-2_armhf.deb -http://ftp.us.debian.org/debian/pool/main/g/gdk-pixbuf/libgdk-pixbuf2.0-dev_2.36.11-2_armhf.deb -http://ftp.us.debian.org/debian/pool/main/g/glib2.0/libglib2.0-0_2.56.0-6_armhf.deb -http://ftp.us.debian.org/debian/pool/main/g/glib2.0/libglib2.0-dev_2.56.0-6_armhf.deb -http://ftp.us.debian.org/debian/pool/main/g/glibc/libc6_2.27-3_armhf.deb -http://ftp.us.debian.org/debian/pool/main/g/glibc/libc6-dev_2.27-3_armhf.deb +http://ftp.us.debian.org/debian/pool/main/f/fribidi/libfribidi0_1.0.5-3_armhf.deb +http://ftp.us.debian.org/debian/pool/main/f/fribidi/libfribidi-dev_1.0.5-3_armhf.deb +http://ftp.us.debian.org/debian/pool/main/g/gcc-6/libasan3_6.4.0-20_armhf.deb +http://ftp.us.debian.org/debian/pool/main/g/gcc-6/libgcc-6-dev_6.4.0-20_armhf.deb +http://ftp.us.debian.org/debian/pool/main/g/gcc-6/libstdc++-6-dev_6.4.0-20_armhf.deb +http://ftp.us.debian.org/debian/pool/main/g/gcc-7/libubsan0_7.3.0-28_armhf.deb +http://ftp.us.debian.org/debian/pool/main/g/gcc-8/libatomic1_8.2.0-4_armhf.deb +http://ftp.us.debian.org/debian/pool/main/g/gcc-8/libgcc1_8.2.0-4_armhf.deb +http://ftp.us.debian.org/debian/pool/main/g/gcc-8/libgomp1_8.2.0-4_armhf.deb +http://ftp.us.debian.org/debian/pool/main/g/gcc-8/libstdc++6_8.2.0-4_armhf.deb +http://ftp.us.debian.org/debian/pool/main/g/gdk-pixbuf/libgdk-pixbuf2.0-0_2.36.12-2_armhf.deb +http://ftp.us.debian.org/debian/pool/main/g/gdk-pixbuf/libgdk-pixbuf2.0-dev_2.36.12-2_armhf.deb +http://ftp.us.debian.org/debian/pool/main/g/glib2.0/libglib2.0-0_2.56.1-2_armhf.deb +http://ftp.us.debian.org/debian/pool/main/g/glib2.0/libglib2.0-dev_2.56.1-2_armhf.deb +http://ftp.us.debian.org/debian/pool/main/g/glibc/libc6_2.27-5_armhf.deb +http://ftp.us.debian.org/debian/pool/main/g/glibc/libc6-dev_2.27-5_armhf.deb http://ftp.us.debian.org/debian/pool/main/g/gmp/libgmp10_6.1.2+dfsg-3_armhf.deb -http://ftp.us.debian.org/debian/pool/main/g/gnutls28/libgnutls28-dev_3.5.18-1_armhf.deb -http://ftp.us.debian.org/debian/pool/main/g/gnutls28/libgnutls30_3.5.18-1_armhf.deb -http://ftp.us.debian.org/debian/pool/main/g/gnutls28/libgnutls-dane0_3.5.18-1_armhf.deb -http://ftp.us.debian.org/debian/pool/main/g/gnutls28/libgnutls-openssl27_3.5.18-1_armhf.deb -http://ftp.us.debian.org/debian/pool/main/g/gnutls28/libgnutlsxx28_3.5.18-1_armhf.deb +http://ftp.us.debian.org/debian/pool/main/g/gnutls28/libgnutls28-dev_3.5.19-1_armhf.deb +http://ftp.us.debian.org/debian/pool/main/g/gnutls28/libgnutls30_3.5.19-1_armhf.deb +http://ftp.us.debian.org/debian/pool/main/g/gnutls28/libgnutls-dane0_3.5.19-1_armhf.deb +http://ftp.us.debian.org/debian/pool/main/g/gnutls28/libgnutls-openssl27_3.5.19-1_armhf.deb +http://ftp.us.debian.org/debian/pool/main/g/gnutls28/libgnutlsxx28_3.5.19-1_armhf.deb +http://ftp.us.debian.org/debian/pool/main/g/graphene/libgraphene-1.0-0_1.8.2-1_armhf.deb +http://ftp.us.debian.org/debian/pool/main/g/graphene/libgraphene-1.0-dev_1.8.2-1_armhf.deb http://ftp.us.debian.org/debian/pool/main/g/graphite2/libgraphite2-3_1.3.11-2_armhf.deb http://ftp.us.debian.org/debian/pool/main/g/graphite2/libgraphite2-dev_1.3.11-2_armhf.deb -http://ftp.us.debian.org/debian/pool/main/g/gtk+2.0/libgtk2.0-0_2.24.32-1_armhf.deb -http://ftp.us.debian.org/debian/pool/main/g/gtk+2.0/libgtk2.0-dev_2.24.32-1_armhf.deb -http://ftp.us.debian.org/debian/pool/main/g/gtk+3.0/libgtk-3-0_3.22.29-3_armhf.deb -http://ftp.us.debian.org/debian/pool/main/g/gtk+3.0/libgtk-3-dev_3.22.29-3_armhf.deb -http://ftp.us.debian.org/debian/pool/main/h/harfbuzz/libharfbuzz0b_1.7.2-1_armhf.deb -http://ftp.us.debian.org/debian/pool/main/h/harfbuzz/libharfbuzz-dev_1.7.2-1_armhf.deb -http://ftp.us.debian.org/debian/pool/main/h/harfbuzz/libharfbuzz-gobject0_1.7.2-1_armhf.deb -http://ftp.us.debian.org/debian/pool/main/h/harfbuzz/libharfbuzz-icu0_1.7.2-1_armhf.deb +http://ftp.us.debian.org/debian/pool/main/g/gtk+2.0/libgtk2.0-0_2.24.32-3_armhf.deb +http://ftp.us.debian.org/debian/pool/main/g/gtk+3.0/libgtk-3-0_3.22.30-2_armhf.deb +http://ftp.us.debian.org/debian/pool/main/g/gtk+3.0/libgtk-3-dev_3.22.30-2_armhf.deb +http://ftp.us.debian.org/debian/pool/main/g/gtk+4.0/libgtk-4-0_3.91.2-1_armhf.deb +http://ftp.us.debian.org/debian/pool/main/g/gtk+4.0/libgtk-4-dev_3.91.2-1_armhf.deb +http://ftp.us.debian.org/debian/pool/main/h/harfbuzz/libharfbuzz0b_1.8.8-2_armhf.deb +http://ftp.us.debian.org/debian/pool/main/h/harfbuzz/libharfbuzz-dev_1.8.8-2_armhf.deb +http://ftp.us.debian.org/debian/pool/main/h/harfbuzz/libharfbuzz-gobject0_1.8.8-2_armhf.deb +http://ftp.us.debian.org/debian/pool/main/h/harfbuzz/libharfbuzz-icu0_1.8.8-2_armhf.deb +http://ftp.us.debian.org/debian/pool/main/i/icu-le-hb/libicu-le-hb0_1.0.3+git161113-5_armhf.deb http://ftp.us.debian.org/debian/pool/main/i/icu/libicu57_57.1-9_armhf.deb +http://ftp.us.debian.org/debian/pool/main/i/icu/libicu60_60.2-6_armhf.deb http://ftp.us.debian.org/debian/pool/main/j/jbigkit/libjbig0_2.1-3.1+b2_armhf.deb -http://ftp.us.debian.org/debian/pool/main/j/json-glib/libjson-glib-1.0-0_1.4.2-3_armhf.deb -http://ftp.us.debian.org/debian/pool/main/k/keyutils/libkeyutils1_1.5.9-9.2_armhf.deb +http://ftp.us.debian.org/debian/pool/main/j/json-glib/libjson-glib-1.0-0_1.4.2-4_armhf.deb +http://ftp.us.debian.org/debian/pool/main/k/keyutils/libkeyutils1_1.5.9-9.3_armhf.deb http://ftp.us.debian.org/debian/pool/main/k/krb5/krb5-multidev_1.16-2_armhf.deb http://ftp.us.debian.org/debian/pool/main/k/krb5/libgssapi-krb5-2_1.16-2_armhf.deb http://ftp.us.debian.org/debian/pool/main/k/krb5/libgssrpc4_1.16-2_armhf.deb @@ -84,52 +90,54 @@ http://ftp.us.debian.org/debian/pool/main/k/krb5/libkdb5-9_1.16-2_armhf.deb http://ftp.us.debian.org/debian/pool/main/k/krb5/libkrb5-3_1.16-2_armhf.deb http://ftp.us.debian.org/debian/pool/main/k/krb5/libkrb5-dev_1.16-2_armhf.deb http://ftp.us.debian.org/debian/pool/main/k/krb5/libkrb5support0_1.16-2_armhf.deb -http://ftp.us.debian.org/debian/pool/main/liba/libappindicator/libappindicator1_0.4.92-5_armhf.deb -http://ftp.us.debian.org/debian/pool/main/liba/libappindicator/libappindicator3-1_0.4.92-5_armhf.deb -http://ftp.us.debian.org/debian/pool/main/liba/libappindicator/libappindicator3-dev_0.4.92-5_armhf.deb -http://ftp.us.debian.org/debian/pool/main/liba/libappindicator/libappindicator-dev_0.4.92-5_armhf.deb +http://ftp.us.debian.org/debian/pool/main/liba/libappindicator/libappindicator1_0.4.92-6_armhf.deb +http://ftp.us.debian.org/debian/pool/main/liba/libappindicator/libappindicator3-1_0.4.92-6_armhf.deb +http://ftp.us.debian.org/debian/pool/main/liba/libappindicator/libappindicator3-dev_0.4.92-6_armhf.deb +http://ftp.us.debian.org/debian/pool/main/liba/libappindicator/libappindicator-dev_0.4.92-6_armhf.deb http://ftp.us.debian.org/debian/pool/main/liba/libasyncns/libasyncns0_0.8-6_armhf.deb -http://ftp.us.debian.org/debian/pool/main/libb/libbsd/libbsd0_0.8.7-1_armhf.deb +http://ftp.us.debian.org/debian/pool/main/libb/libbsd/libbsd0_0.9.1-1_armhf.deb http://ftp.us.debian.org/debian/pool/main/libc/libcap2/libcap2_2.25-1.2_armhf.deb http://ftp.us.debian.org/debian/pool/main/libc/libcap2/libcap-dev_2.25-1.2_armhf.deb -http://ftp.us.debian.org/debian/pool/main/libc/libcap-ng/libcap-ng0_0.7.7-3.1+b1_armhf.deb -http://ftp.us.debian.org/debian/pool/main/libd/libdatrie/libdatrie1_0.2.10-7_armhf.deb -http://ftp.us.debian.org/debian/pool/main/libd/libdbusmenu/libdbusmenu-glib4_16.04.1+17.04.20170109.1-5_armhf.deb -http://ftp.us.debian.org/debian/pool/main/libd/libdbusmenu/libdbusmenu-glib-dev_16.04.1+17.04.20170109.1-5_armhf.deb -http://ftp.us.debian.org/debian/pool/main/libd/libdbusmenu/libdbusmenu-gtk3-4_16.04.1+17.04.20170109.1-5_armhf.deb -http://ftp.us.debian.org/debian/pool/main/libd/libdbusmenu/libdbusmenu-gtk4_16.04.1+17.04.20170109.1-5_armhf.deb -http://ftp.us.debian.org/debian/pool/main/libd/libdrm/libdrm2_2.4.91-2_armhf.deb -http://ftp.us.debian.org/debian/pool/main/libd/libdrm/libdrm-amdgpu1_2.4.91-2_armhf.deb -http://ftp.us.debian.org/debian/pool/main/libd/libdrm/libdrm-dev_2.4.91-2_armhf.deb -http://ftp.us.debian.org/debian/pool/main/libd/libdrm/libdrm-etnaviv1_2.4.91-2_armhf.deb -http://ftp.us.debian.org/debian/pool/main/libd/libdrm/libdrm-exynos1_2.4.91-2_armhf.deb -http://ftp.us.debian.org/debian/pool/main/libd/libdrm/libdrm-freedreno1_2.4.91-2_armhf.deb -http://ftp.us.debian.org/debian/pool/main/libd/libdrm/libdrm-nouveau2_2.4.91-2_armhf.deb -http://ftp.us.debian.org/debian/pool/main/libd/libdrm/libdrm-omap1_2.4.91-2_armhf.deb -http://ftp.us.debian.org/debian/pool/main/libd/libdrm/libdrm-radeon1_2.4.91-2_armhf.deb -http://ftp.us.debian.org/debian/pool/main/libd/libdrm/libdrm-tegra0_2.4.91-2_armhf.deb +http://ftp.us.debian.org/debian/pool/main/libc/libcap-ng/libcap-ng0_0.7.9-1_armhf.deb +http://ftp.us.debian.org/debian/pool/main/libd/libdatrie/libdatrie1_0.2.12-1_armhf.deb +http://ftp.us.debian.org/debian/pool/main/libd/libdbusmenu/libdbusmenu-glib4_16.04.1+18.04.20171206-1_armhf.deb +http://ftp.us.debian.org/debian/pool/main/libd/libdbusmenu/libdbusmenu-glib-dev_16.04.1+18.04.20171206-1_armhf.deb +http://ftp.us.debian.org/debian/pool/main/libd/libdbusmenu/libdbusmenu-gtk3-4_16.04.1+18.04.20171206-1_armhf.deb +http://ftp.us.debian.org/debian/pool/main/libd/libdbusmenu/libdbusmenu-gtk4_16.04.1+18.04.20171206-1_armhf.deb +http://ftp.us.debian.org/debian/pool/main/libd/libdrm/libdrm2_2.4.93-1_armhf.deb +http://ftp.us.debian.org/debian/pool/main/libd/libdrm/libdrm-amdgpu1_2.4.93-1_armhf.deb +http://ftp.us.debian.org/debian/pool/main/libd/libdrm/libdrm-dev_2.4.93-1_armhf.deb +http://ftp.us.debian.org/debian/pool/main/libd/libdrm/libdrm-etnaviv1_2.4.93-1_armhf.deb +http://ftp.us.debian.org/debian/pool/main/libd/libdrm/libdrm-exynos1_2.4.93-1_armhf.deb +http://ftp.us.debian.org/debian/pool/main/libd/libdrm/libdrm-freedreno1_2.4.93-1_armhf.deb +http://ftp.us.debian.org/debian/pool/main/libd/libdrm/libdrm-nouveau2_2.4.93-1_armhf.deb +http://ftp.us.debian.org/debian/pool/main/libd/libdrm/libdrm-omap1_2.4.93-1_armhf.deb +http://ftp.us.debian.org/debian/pool/main/libd/libdrm/libdrm-radeon1_2.4.93-1_armhf.deb +http://ftp.us.debian.org/debian/pool/main/libd/libdrm/libdrm-tegra0_2.4.93-1_armhf.deb http://ftp.us.debian.org/debian/pool/main/libe/libepoxy/libepoxy0_1.4.3-1_armhf.deb http://ftp.us.debian.org/debian/pool/main/libe/libepoxy/libepoxy-dev_1.4.3-1_armhf.deb http://ftp.us.debian.org/debian/pool/main/libe/libevent/libevent-2.1-6_2.1.8-stable-4_armhf.deb http://ftp.us.debian.org/debian/pool/main/libf/libffi/libffi6_3.2.1-8_armhf.deb +http://ftp.us.debian.org/debian/pool/main/libf/libffi/libffi7_3.3~rc0-6_armhf.deb http://ftp.us.debian.org/debian/pool/main/libf/libffi/libffi-dev_3.2.1-8_armhf.deb -http://ftp.us.debian.org/debian/pool/main/libg/libgcrypt20/libgcrypt20_1.8.2-2_armhf.deb -http://ftp.us.debian.org/debian/pool/main/libg/libgcrypt20/libgcrypt20-dev_1.8.2-2_armhf.deb -http://ftp.us.debian.org/debian/pool/main/libg/libglvnd/libegl1_1.0.0-2_armhf.deb -http://ftp.us.debian.org/debian/pool/main/libg/libglvnd/libgl1_1.0.0-2_armhf.deb -http://ftp.us.debian.org/debian/pool/main/libg/libglvnd/libgles2_1.0.0-2_armhf.deb -http://ftp.us.debian.org/debian/pool/main/libg/libglvnd/libglvnd0_1.0.0-2_armhf.deb -http://ftp.us.debian.org/debian/pool/main/libg/libglvnd/libglvnd-dev_1.0.0-2_armhf.deb -http://ftp.us.debian.org/debian/pool/main/libg/libglvnd/libglx0_1.0.0-2_armhf.deb -http://ftp.us.debian.org/debian/pool/main/libg/libglvnd/libopengl0_1.0.0-2_armhf.deb +http://ftp.us.debian.org/debian/pool/main/libg/libgcrypt20/libgcrypt20_1.8.3-1_armhf.deb +http://ftp.us.debian.org/debian/pool/main/libg/libgcrypt20/libgcrypt20-dev_1.8.3-1_armhf.deb +http://ftp.us.debian.org/debian/pool/main/libg/libglvnd/libegl1_1.1.0-1_armhf.deb +http://ftp.us.debian.org/debian/pool/main/libg/libglvnd/libgl1_1.1.0-1_armhf.deb +http://ftp.us.debian.org/debian/pool/main/libg/libglvnd/libgles1_1.1.0-1_armhf.deb +http://ftp.us.debian.org/debian/pool/main/libg/libglvnd/libgles2_1.1.0-1_armhf.deb +http://ftp.us.debian.org/debian/pool/main/libg/libglvnd/libglvnd0_1.1.0-1_armhf.deb +http://ftp.us.debian.org/debian/pool/main/libg/libglvnd/libglvnd-dev_1.1.0-1_armhf.deb +http://ftp.us.debian.org/debian/pool/main/libg/libglvnd/libglx0_1.1.0-1_armhf.deb +http://ftp.us.debian.org/debian/pool/main/libg/libglvnd/libopengl0_1.1.0-1_armhf.deb http://ftp.us.debian.org/debian/pool/main/libg/libgnome-keyring/libgnome-keyring0_3.12.0-1+b2_armhf.deb http://ftp.us.debian.org/debian/pool/main/libg/libgnome-keyring/libgnome-keyring-dev_3.12.0-1+b2_armhf.deb -http://ftp.us.debian.org/debian/pool/main/libg/libgpg-error/libgpg-error0_1.28-2_armhf.deb -http://ftp.us.debian.org/debian/pool/main/libg/libgpg-error/libgpg-error-dev_1.28-2_armhf.deb +http://ftp.us.debian.org/debian/pool/main/libg/libgpg-error/libgpg-error0_1.32-1_armhf.deb +http://ftp.us.debian.org/debian/pool/main/libg/libgpg-error/libgpg-error-dev_1.32-1_armhf.deb http://ftp.us.debian.org/debian/pool/main/libi/libice/libice6_1.0.9-2_armhf.deb http://ftp.us.debian.org/debian/pool/main/libi/libidl/libidl-2-0_0.8.14-4_armhf.deb -http://ftp.us.debian.org/debian/pool/main/libi/libidn2/libidn2-0_2.0.4-1.1_armhf.deb -http://ftp.us.debian.org/debian/pool/main/libi/libidn/libidn11_1.33-2.1_armhf.deb +http://ftp.us.debian.org/debian/pool/main/libi/libidn2/libidn2-0_2.0.4-2.2_armhf.deb +http://ftp.us.debian.org/debian/pool/main/libi/libidn/libidn11_1.33-2.2_armhf.deb http://ftp.us.debian.org/debian/pool/main/libi/libindicator/libindicator3-7_0.5.0-3+b1_armhf.deb http://ftp.us.debian.org/debian/pool/main/libi/libindicator/libindicator7_0.5.0-3+b1_armhf.deb http://ftp.us.debian.org/debian/pool/main/libj/libjpeg-turbo/libjpeg62-turbo_1.5.2-2+b1_armhf.deb @@ -140,25 +148,26 @@ http://ftp.us.debian.org/debian/pool/main/libn/libnss-db/libnss-db_2.2.3pre1-6+b http://ftp.us.debian.org/debian/pool/main/libo/libogg/libogg0_1.3.2-1+b1_armhf.deb http://ftp.us.debian.org/debian/pool/main/libo/libogg/libogg-dev_1.3.2-1+b1_armhf.deb http://ftp.us.debian.org/debian/pool/main/libp/libpciaccess/libpciaccess0_0.14-1_armhf.deb -http://ftp.us.debian.org/debian/pool/main/libp/libpng1.6/libpng16-16_1.6.34-1_armhf.deb -http://ftp.us.debian.org/debian/pool/main/libp/libpng1.6/libpng-dev_1.6.34-1_armhf.deb +http://ftp.us.debian.org/debian/pool/main/libp/libpng1.6/libpng16-16_1.6.34-2_armhf.deb +http://ftp.us.debian.org/debian/pool/main/libp/libpng1.6/libpng-dev_1.6.34-2_armhf.deb +http://ftp.us.debian.org/debian/pool/main/libp/libpsl/libpsl5_0.20.2-1_armhf.deb http://ftp.us.debian.org/debian/pool/main/libp/libpthread-stubs/libpthread-stubs0-dev_0.3-4_armhf.deb http://ftp.us.debian.org/debian/pool/main/libr/librest/librest-0.7-0_0.8.0-2_armhf.deb -http://ftp.us.debian.org/debian/pool/main/libs/libselinux/libselinux1_2.7-2+b2_armhf.deb +http://ftp.us.debian.org/debian/pool/main/libs/libselinux/libselinux1_2.8-1+b1_armhf.deb http://ftp.us.debian.org/debian/pool/main/libs/libsm/libsm6_1.2.2-1+b3_armhf.deb http://ftp.us.debian.org/debian/pool/main/libs/libsndfile/libsndfile1_1.0.28-4_armhf.deb -http://ftp.us.debian.org/debian/pool/main/libs/libsoup2.4/libsoup2.4-1_2.62.0-1_armhf.deb -http://ftp.us.debian.org/debian/pool/main/libs/libsoup2.4/libsoup-gnome2.4-1_2.62.0-1_armhf.deb -http://ftp.us.debian.org/debian/pool/main/libt/libtasn1-6/libtasn1-6_4.13-2_armhf.deb -http://ftp.us.debian.org/debian/pool/main/libt/libthai/libthai0_0.1.27-2_armhf.deb -http://ftp.us.debian.org/debian/pool/main/libt/libtool/libltdl7_2.4.6-2_armhf.deb -http://ftp.us.debian.org/debian/pool/main/libu/libunistring/libunistring2_0.9.8-1_armhf.deb -http://ftp.us.debian.org/debian/pool/main/libv/libva/libva2_2.1.0-3_armhf.deb -http://ftp.us.debian.org/debian/pool/main/libv/libva/libva-dev_2.1.0-3_armhf.deb -http://ftp.us.debian.org/debian/pool/main/libv/libva/libva-drm2_2.1.0-3_armhf.deb -http://ftp.us.debian.org/debian/pool/main/libv/libva/libva-glx2_2.1.0-3_armhf.deb -http://ftp.us.debian.org/debian/pool/main/libv/libva/libva-wayland2_2.1.0-3_armhf.deb -http://ftp.us.debian.org/debian/pool/main/libv/libva/libva-x11-2_2.1.0-3_armhf.deb +http://ftp.us.debian.org/debian/pool/main/libs/libsoup2.4/libsoup2.4-1_2.62.2-2_armhf.deb +http://ftp.us.debian.org/debian/pool/main/libs/libsoup2.4/libsoup-gnome2.4-1_2.62.2-2_armhf.deb +http://ftp.us.debian.org/debian/pool/main/libt/libtasn1-6/libtasn1-6_4.13-3_armhf.deb +http://ftp.us.debian.org/debian/pool/main/libt/libthai/libthai0_0.1.28-1_armhf.deb +http://ftp.us.debian.org/debian/pool/main/libt/libtool/libltdl7_2.4.6-2.1_armhf.deb +http://ftp.us.debian.org/debian/pool/main/libu/libunistring/libunistring2_0.9.10-1_armhf.deb +http://ftp.us.debian.org/debian/pool/main/libv/libva/libva2_2.2.0-1_armhf.deb +http://ftp.us.debian.org/debian/pool/main/libv/libva/libva-dev_2.2.0-1_armhf.deb +http://ftp.us.debian.org/debian/pool/main/libv/libva/libva-drm2_2.2.0-1_armhf.deb +http://ftp.us.debian.org/debian/pool/main/libv/libva/libva-glx2_2.2.0-1_armhf.deb +http://ftp.us.debian.org/debian/pool/main/libv/libva/libva-wayland2_2.2.0-1_armhf.deb +http://ftp.us.debian.org/debian/pool/main/libv/libva/libva-x11-2_2.2.0-1_armhf.deb http://ftp.us.debian.org/debian/pool/main/libv/libvorbis/libvorbis0a_1.3.6-1_armhf.deb http://ftp.us.debian.org/debian/pool/main/libv/libvorbis/libvorbisenc2_1.3.6-1_armhf.deb http://ftp.us.debian.org/debian/pool/main/libv/libvpx/libvpx5_1.7.0-3_armhf.deb @@ -173,18 +182,18 @@ http://ftp.us.debian.org/debian/pool/main/libx/libx11/libx11-xcb1_1.6.5-1_armhf. http://ftp.us.debian.org/debian/pool/main/libx/libx11/libx11-xcb-dev_1.6.5-1_armhf.deb http://ftp.us.debian.org/debian/pool/main/libx/libxau/libxau6_1.0.8-1+b2_armhf.deb http://ftp.us.debian.org/debian/pool/main/libx/libxau/libxau-dev_1.0.8-1+b2_armhf.deb -http://ftp.us.debian.org/debian/pool/main/libx/libxcb/libxcb1_1.13-1_armhf.deb -http://ftp.us.debian.org/debian/pool/main/libx/libxcb/libxcb1-dev_1.13-1_armhf.deb -http://ftp.us.debian.org/debian/pool/main/libx/libxcb/libxcb-dri2-0_1.13-1_armhf.deb -http://ftp.us.debian.org/debian/pool/main/libx/libxcb/libxcb-dri3-0_1.13-1_armhf.deb -http://ftp.us.debian.org/debian/pool/main/libx/libxcb/libxcb-glx0_1.13-1_armhf.deb -http://ftp.us.debian.org/debian/pool/main/libx/libxcb/libxcb-present0_1.13-1_armhf.deb -http://ftp.us.debian.org/debian/pool/main/libx/libxcb/libxcb-render0_1.13-1_armhf.deb -http://ftp.us.debian.org/debian/pool/main/libx/libxcb/libxcb-render0-dev_1.13-1_armhf.deb -http://ftp.us.debian.org/debian/pool/main/libx/libxcb/libxcb-shm0_1.13-1_armhf.deb -http://ftp.us.debian.org/debian/pool/main/libx/libxcb/libxcb-shm0-dev_1.13-1_armhf.deb -http://ftp.us.debian.org/debian/pool/main/libx/libxcb/libxcb-sync1_1.13-1_armhf.deb -http://ftp.us.debian.org/debian/pool/main/libx/libxcb/libxcb-xfixes0_1.13-1_armhf.deb +http://ftp.us.debian.org/debian/pool/main/libx/libxcb/libxcb1_1.13-2_armhf.deb +http://ftp.us.debian.org/debian/pool/main/libx/libxcb/libxcb1-dev_1.13-2_armhf.deb +http://ftp.us.debian.org/debian/pool/main/libx/libxcb/libxcb-dri2-0_1.13-2_armhf.deb +http://ftp.us.debian.org/debian/pool/main/libx/libxcb/libxcb-dri3-0_1.13-2_armhf.deb +http://ftp.us.debian.org/debian/pool/main/libx/libxcb/libxcb-glx0_1.13-2_armhf.deb +http://ftp.us.debian.org/debian/pool/main/libx/libxcb/libxcb-present0_1.13-2_armhf.deb +http://ftp.us.debian.org/debian/pool/main/libx/libxcb/libxcb-render0_1.13-2_armhf.deb +http://ftp.us.debian.org/debian/pool/main/libx/libxcb/libxcb-render0-dev_1.13-2_armhf.deb +http://ftp.us.debian.org/debian/pool/main/libx/libxcb/libxcb-shm0_1.13-2_armhf.deb +http://ftp.us.debian.org/debian/pool/main/libx/libxcb/libxcb-shm0-dev_1.13-2_armhf.deb +http://ftp.us.debian.org/debian/pool/main/libx/libxcb/libxcb-sync1_1.13-2_armhf.deb +http://ftp.us.debian.org/debian/pool/main/libx/libxcb/libxcb-xfixes0_1.13-2_armhf.deb http://ftp.us.debian.org/debian/pool/main/libx/libxcomposite/libxcomposite1_0.4.4-2_armhf.deb http://ftp.us.debian.org/debian/pool/main/libx/libxcomposite/libxcomposite-dev_0.4.4-2_armhf.deb http://ftp.us.debian.org/debian/pool/main/libx/libxcursor/libxcursor1_1.1.15-1_armhf.deb @@ -201,17 +210,17 @@ http://ftp.us.debian.org/debian/pool/main/libx/libxi/libxi6_1.7.9-1_armhf.deb http://ftp.us.debian.org/debian/pool/main/libx/libxi/libxi-dev_1.7.9-1_armhf.deb http://ftp.us.debian.org/debian/pool/main/libx/libxinerama/libxinerama1_1.1.3-1+b3_armhf.deb http://ftp.us.debian.org/debian/pool/main/libx/libxinerama/libxinerama-dev_1.1.3-1+b3_armhf.deb -http://ftp.us.debian.org/debian/pool/main/libx/libxkbcommon/libxkbcommon0_0.8.0-1_armhf.deb -http://ftp.us.debian.org/debian/pool/main/libx/libxkbcommon/libxkbcommon-dev_0.8.0-1_armhf.deb -http://ftp.us.debian.org/debian/pool/main/libx/libxml2/libxml2_2.9.4+dfsg1-6.1_armhf.deb -http://ftp.us.debian.org/debian/pool/main/libx/libxml2/libxml2-dev_2.9.4+dfsg1-6.1_armhf.deb +http://ftp.us.debian.org/debian/pool/main/libx/libxkbcommon/libxkbcommon0_0.8.0-2_armhf.deb +http://ftp.us.debian.org/debian/pool/main/libx/libxkbcommon/libxkbcommon-dev_0.8.0-2_armhf.deb +http://ftp.us.debian.org/debian/pool/main/libx/libxml2/libxml2_2.9.4+dfsg1-7+b1_armhf.deb +http://ftp.us.debian.org/debian/pool/main/libx/libxml2/libxml2-dev_2.9.4+dfsg1-7+b1_armhf.deb http://ftp.us.debian.org/debian/pool/main/libx/libxrandr/libxrandr2_1.5.1-1_armhf.deb http://ftp.us.debian.org/debian/pool/main/libx/libxrandr/libxrandr-dev_1.5.1-1_armhf.deb http://ftp.us.debian.org/debian/pool/main/libx/libxrender/libxrender1_0.9.10-1_armhf.deb http://ftp.us.debian.org/debian/pool/main/libx/libxrender/libxrender-dev_0.9.10-1_armhf.deb http://ftp.us.debian.org/debian/pool/main/libx/libxshmfence/libxshmfence1_1.3-1_armhf.deb -http://ftp.us.debian.org/debian/pool/main/libx/libxslt/libxslt1.1_1.1.29-5_armhf.deb -http://ftp.us.debian.org/debian/pool/main/libx/libxslt/libxslt1-dev_1.1.29-5_armhf.deb +http://ftp.us.debian.org/debian/pool/main/libx/libxslt/libxslt1.1_1.1.32-2_armhf.deb +http://ftp.us.debian.org/debian/pool/main/libx/libxslt/libxslt1-dev_1.1.32-2_armhf.deb http://ftp.us.debian.org/debian/pool/main/libx/libxss/libxss1_1.2.2-1+b2_armhf.deb http://ftp.us.debian.org/debian/pool/main/libx/libxss/libxss-dev_1.2.2-1+b2_armhf.deb http://ftp.us.debian.org/debian/pool/main/libx/libxt/libxt6_1.1.5-1_armhf.deb @@ -219,79 +228,81 @@ http://ftp.us.debian.org/debian/pool/main/libx/libxt/libxt-dev_1.1.5-1_armhf.deb http://ftp.us.debian.org/debian/pool/main/libx/libxtst/libxtst6_1.2.3-1_armhf.deb http://ftp.us.debian.org/debian/pool/main/libx/libxtst/libxtst-dev_1.2.3-1_armhf.deb http://ftp.us.debian.org/debian/pool/main/libx/libxxf86vm/libxxf86vm1_1.1.4-1+b2_armhf.deb -http://ftp.us.debian.org/debian/pool/main/l/lcms2/liblcms2-2_2.9-1_armhf.deb -http://ftp.us.debian.org/debian/pool/main/l/linux/linux-libc-dev_4.15.11-1_armhf.deb -http://ftp.us.debian.org/debian/pool/main/l/lz4/liblz4-1_0.0~r131-2+b1_armhf.deb -http://ftp.us.debian.org/debian/pool/main/l/lzo2/liblzo2-2_2.08-1.2+b2_armhf.deb -http://ftp.us.debian.org/debian/pool/main/m/mesa/libegl1-mesa_17.3.7-1_armhf.deb -http://ftp.us.debian.org/debian/pool/main/m/mesa/libegl1-mesa-dev_17.3.7-1_armhf.deb -http://ftp.us.debian.org/debian/pool/main/m/mesa/libgbm1_17.3.7-1_armhf.deb -http://ftp.us.debian.org/debian/pool/main/m/mesa/libgbm-dev_17.3.7-1_armhf.deb -http://ftp.us.debian.org/debian/pool/main/m/mesa/libgl1-mesa-dev_17.3.7-1_armhf.deb -http://ftp.us.debian.org/debian/pool/main/m/mesa/libgl1-mesa-glx_17.3.7-1_armhf.deb -http://ftp.us.debian.org/debian/pool/main/m/mesa/libglapi-mesa_17.3.7-1_armhf.deb -http://ftp.us.debian.org/debian/pool/main/m/mesa/libwayland-egl1-mesa_17.3.7-1_armhf.deb -http://ftp.us.debian.org/debian/pool/main/m/mesa/mesa-common-dev_17.3.7-1_armhf.deb +http://ftp.us.debian.org/debian/pool/main/l/lcms2/liblcms2-2_2.9-2_armhf.deb +http://ftp.us.debian.org/debian/pool/main/l/linux/linux-libc-dev_4.17.17-1_armhf.deb +http://ftp.us.debian.org/debian/pool/main/l/lz4/liblz4-1_1.8.2-1_armhf.deb +http://ftp.us.debian.org/debian/pool/main/l/lzo2/liblzo2-2_2.10-0.1_armhf.deb +http://ftp.us.debian.org/debian/pool/main/m/mesa/libegl1-mesa_18.1.6-1_armhf.deb +http://ftp.us.debian.org/debian/pool/main/m/mesa/libegl1-mesa-dev_18.1.6-1_armhf.deb +http://ftp.us.debian.org/debian/pool/main/m/mesa/libgbm1_18.1.6-1_armhf.deb +http://ftp.us.debian.org/debian/pool/main/m/mesa/libgbm-dev_18.1.6-1_armhf.deb +http://ftp.us.debian.org/debian/pool/main/m/mesa/libgl1-mesa-dev_18.1.6-1_armhf.deb +http://ftp.us.debian.org/debian/pool/main/m/mesa/libgl1-mesa-glx_18.1.6-1_armhf.deb +http://ftp.us.debian.org/debian/pool/main/m/mesa/libglapi-mesa_18.1.6-1_armhf.deb +http://ftp.us.debian.org/debian/pool/main/m/mesa/libwayland-egl1-mesa_18.1.6-1_armhf.deb +http://ftp.us.debian.org/debian/pool/main/m/mesa/mesa-common-dev_18.1.6-1_armhf.deb http://ftp.us.debian.org/debian/pool/main/m/minizip/libminizip1_1.1-8+b1_armhf.deb http://ftp.us.debian.org/debian/pool/main/m/minizip/libminizip-dev_1.1-8+b1_armhf.deb http://ftp.us.debian.org/debian/pool/main/n/nettle/libhogweed4_3.4-1_armhf.deb http://ftp.us.debian.org/debian/pool/main/n/nettle/libnettle6_3.4-1_armhf.deb -http://ftp.us.debian.org/debian/pool/main/n/nspr/libnspr4_4.18-1_armhf.deb -http://ftp.us.debian.org/debian/pool/main/n/nspr/libnspr4-dev_4.18-1_armhf.deb -http://ftp.us.debian.org/debian/pool/main/n/nss/libnss3_3.35-2_armhf.deb -http://ftp.us.debian.org/debian/pool/main/n/nss/libnss3-dev_3.35-2_armhf.deb +http://ftp.us.debian.org/debian/pool/main/n/nspr/libnspr4_4.19-3_armhf.deb +http://ftp.us.debian.org/debian/pool/main/n/nspr/libnspr4-dev_4.19-3_armhf.deb +http://ftp.us.debian.org/debian/pool/main/n/nss/libnss3_3.38-1_armhf.deb +http://ftp.us.debian.org/debian/pool/main/n/nss/libnss3-dev_3.38-1_armhf.deb http://ftp.us.debian.org/debian/pool/main/o/openssl1.0/libssl1.0.2_1.0.2o-1_armhf.deb -http://ftp.us.debian.org/debian/pool/main/o/openssl/libssl1.1_1.1.0h-2_armhf.deb -http://ftp.us.debian.org/debian/pool/main/o/openssl/libssl-dev_1.1.0h-2_armhf.deb -http://ftp.us.debian.org/debian/pool/main/o/opus/libopus0_1.2.1-1_armhf.deb -http://ftp.us.debian.org/debian/pool/main/o/opus/libopus-dev_1.2.1-1_armhf.deb +http://ftp.us.debian.org/debian/pool/main/o/openssl/libssl1.1_1.1.0h-4_armhf.deb +http://ftp.us.debian.org/debian/pool/main/o/openssl/libssl-dev_1.1.0h-4_armhf.deb +http://ftp.us.debian.org/debian/pool/main/o/opus/libopus0_1.3~beta+20180518-1_armhf.deb +http://ftp.us.debian.org/debian/pool/main/o/opus/libopus-dev_1.3~beta+20180518-1_armhf.deb http://ftp.us.debian.org/debian/pool/main/o/orbit2/liborbit-2-0_2.14.19-4_armhf.deb http://ftp.us.debian.org/debian/pool/main/o/orbit2/liborbit2_2.14.19-4_armhf.deb -http://ftp.us.debian.org/debian/pool/main/p/p11-kit/libp11-kit0_0.23.10-2_armhf.deb -http://ftp.us.debian.org/debian/pool/main/p/pam/libpam0g_1.1.8-3.7_armhf.deb -http://ftp.us.debian.org/debian/pool/main/p/pam/libpam0g-dev_1.1.8-3.7_armhf.deb -http://ftp.us.debian.org/debian/pool/main/p/pango1.0/libpango-1.0-0_1.42.0-1_armhf.deb -http://ftp.us.debian.org/debian/pool/main/p/pango1.0/libpango1.0-dev_1.42.0-1_armhf.deb -http://ftp.us.debian.org/debian/pool/main/p/pango1.0/libpangocairo-1.0-0_1.42.0-1_armhf.deb -http://ftp.us.debian.org/debian/pool/main/p/pango1.0/libpangoft2-1.0-0_1.42.0-1_armhf.deb -http://ftp.us.debian.org/debian/pool/main/p/pango1.0/libpangoxft-1.0-0_1.42.0-1_armhf.deb +http://ftp.us.debian.org/debian/pool/main/p/p11-kit/libp11-kit0_0.23.13-2_armhf.deb +http://ftp.us.debian.org/debian/pool/main/p/pam/libpam0g_1.1.8-3.8_armhf.deb +http://ftp.us.debian.org/debian/pool/main/p/pam/libpam0g-dev_1.1.8-3.8_armhf.deb +http://ftp.us.debian.org/debian/pool/main/p/pango1.0/libpango-1.0-0_1.42.4-1_armhf.deb +http://ftp.us.debian.org/debian/pool/main/p/pango1.0/libpango1.0-dev_1.42.4-1_armhf.deb +http://ftp.us.debian.org/debian/pool/main/p/pango1.0/libpangocairo-1.0-0_1.42.4-1_armhf.deb +http://ftp.us.debian.org/debian/pool/main/p/pango1.0/libpangoft2-1.0-0_1.42.4-1_armhf.deb +http://ftp.us.debian.org/debian/pool/main/p/pango1.0/libpangoxft-1.0-0_1.42.4-1_armhf.deb http://ftp.us.debian.org/debian/pool/main/p/pangox-compat/libpangox-1.0-0_0.0.2-5+b2_armhf.deb http://ftp.us.debian.org/debian/pool/main/p/pciutils/libpci3_3.5.2-1_armhf.deb http://ftp.us.debian.org/debian/pool/main/p/pciutils/libpci-dev_3.5.2-1_armhf.deb -http://ftp.us.debian.org/debian/pool/main/p/pcre3/libpcre16-3_8.39-9_armhf.deb -http://ftp.us.debian.org/debian/pool/main/p/pcre3/libpcre32-3_8.39-9_armhf.deb -http://ftp.us.debian.org/debian/pool/main/p/pcre3/libpcre3_8.39-9_armhf.deb -http://ftp.us.debian.org/debian/pool/main/p/pcre3/libpcre3-dev_8.39-9_armhf.deb -http://ftp.us.debian.org/debian/pool/main/p/pcre3/libpcrecpp0v5_8.39-9_armhf.deb +http://ftp.us.debian.org/debian/pool/main/p/pcre3/libpcre16-3_8.39-11_armhf.deb +http://ftp.us.debian.org/debian/pool/main/p/pcre3/libpcre32-3_8.39-11_armhf.deb +http://ftp.us.debian.org/debian/pool/main/p/pcre3/libpcre3_8.39-11_armhf.deb +http://ftp.us.debian.org/debian/pool/main/p/pcre3/libpcre3-dev_8.39-11_armhf.deb +http://ftp.us.debian.org/debian/pool/main/p/pcre3/libpcrecpp0v5_8.39-11_armhf.deb http://ftp.us.debian.org/debian/pool/main/p/pixman/libpixman-1-0_0.34.0-2_armhf.deb http://ftp.us.debian.org/debian/pool/main/p/pixman/libpixman-1-dev_0.34.0-2_armhf.deb -http://ftp.us.debian.org/debian/pool/main/p/pulseaudio/libpulse0_11.1-4_armhf.deb -http://ftp.us.debian.org/debian/pool/main/p/pulseaudio/libpulse-dev_11.1-4_armhf.deb -http://ftp.us.debian.org/debian/pool/main/p/pulseaudio/libpulse-mainloop-glib0_11.1-4_armhf.deb -http://ftp.us.debian.org/debian/pool/main/r/re2/libre2-4_20180301+dfsg-1_armhf.deb -http://ftp.us.debian.org/debian/pool/main/r/re2/libre2-dev_20180301+dfsg-1_armhf.deb +http://ftp.us.debian.org/debian/pool/main/p/pulseaudio/libpulse0_12.0-1_armhf.deb +http://ftp.us.debian.org/debian/pool/main/p/pulseaudio/libpulse-dev_12.0-1_armhf.deb +http://ftp.us.debian.org/debian/pool/main/p/pulseaudio/libpulse-mainloop-glib0_12.0-1_armhf.deb +http://ftp.us.debian.org/debian/pool/main/r/re2/libre2-4_20180701+dfsg-1_armhf.deb +http://ftp.us.debian.org/debian/pool/main/r/re2/libre2-dev_20180701+dfsg-1_armhf.deb http://ftp.us.debian.org/debian/pool/main/s/snappy/libsnappy1v5_1.1.7-1_armhf.deb http://ftp.us.debian.org/debian/pool/main/s/snappy/libsnappy-dev_1.1.7-1_armhf.deb -http://ftp.us.debian.org/debian/pool/main/s/speech-dispatcher/libspeechd2_0.8.8-1_armhf.deb -http://ftp.us.debian.org/debian/pool/main/s/speech-dispatcher/libspeechd-dev_0.8.8-1_armhf.deb -http://ftp.us.debian.org/debian/pool/main/s/speech-dispatcher/speech-dispatcher_0.8.8-1_armhf.deb -http://ftp.us.debian.org/debian/pool/main/s/sqlite3/libsqlite3-0_3.23.0-1_armhf.deb -http://ftp.us.debian.org/debian/pool/main/s/systemd/libsystemd0_238-4_armhf.deb -http://ftp.us.debian.org/debian/pool/main/s/systemd/libudev1_238-4_armhf.deb -http://ftp.us.debian.org/debian/pool/main/s/systemd/libudev-dev_238-4_armhf.deb +http://ftp.us.debian.org/debian/pool/main/s/speech-dispatcher/libspeechd2_0.8.8-6_armhf.deb +http://ftp.us.debian.org/debian/pool/main/s/speech-dispatcher/libspeechd-dev_0.8.8-6_armhf.deb +http://ftp.us.debian.org/debian/pool/main/s/speech-dispatcher/speech-dispatcher_0.8.8-6_armhf.deb +http://ftp.us.debian.org/debian/pool/main/s/sqlite3/libsqlite3-0_3.24.0-1_armhf.deb +http://ftp.us.debian.org/debian/pool/main/s/systemd/libsystemd0_239-7_armhf.deb +http://ftp.us.debian.org/debian/pool/main/s/systemd/libudev1_239-7_armhf.deb +http://ftp.us.debian.org/debian/pool/main/s/systemd/libudev-dev_239-7_armhf.deb http://ftp.us.debian.org/debian/pool/main/t/tcp-wrappers/libwrap0_7.6.q-27_armhf.deb -http://ftp.us.debian.org/debian/pool/main/t/tiff/libtiff5_4.0.9-4_armhf.deb -http://ftp.us.debian.org/debian/pool/main/u/unbound/libunbound2_1.6.7-1_armhf.deb -http://ftp.us.debian.org/debian/pool/main/u/util-linux/libblkid1_2.31.1-0.5_armhf.deb -http://ftp.us.debian.org/debian/pool/main/u/util-linux/libmount1_2.31.1-0.5_armhf.deb -http://ftp.us.debian.org/debian/pool/main/u/util-linux/libuuid1_2.31.1-0.5_armhf.deb -http://ftp.us.debian.org/debian/pool/main/u/util-linux/uuid-dev_2.31.1-0.5_armhf.deb -http://ftp.us.debian.org/debian/pool/main/w/wayland/libwayland-client0_1.14.0-2_armhf.deb -http://ftp.us.debian.org/debian/pool/main/w/wayland/libwayland-cursor0_1.14.0-2_armhf.deb -http://ftp.us.debian.org/debian/pool/main/w/wayland/libwayland-dev_1.14.0-2_armhf.deb -http://ftp.us.debian.org/debian/pool/main/w/wayland/libwayland-server0_1.14.0-2_armhf.deb -http://ftp.us.debian.org/debian/pool/main/w/wayland-protocols/wayland-protocols_1.13-1_all.deb -http://ftp.us.debian.org/debian/pool/main/x/xft/libxft2_2.3.2-1+b2_armhf.deb +http://ftp.us.debian.org/debian/pool/main/t/tiff/libtiff5_4.0.9-6_armhf.deb +http://ftp.us.debian.org/debian/pool/main/u/unbound/libunbound2_1.7.3-1_armhf.deb +http://ftp.us.debian.org/debian/pool/main/u/util-linux/libblkid1_2.32.1-0.1_armhf.deb +http://ftp.us.debian.org/debian/pool/main/u/util-linux/libmount1_2.32.1-0.1_armhf.deb +http://ftp.us.debian.org/debian/pool/main/u/util-linux/libuuid1_2.32.1-0.1_armhf.deb +http://ftp.us.debian.org/debian/pool/main/u/util-linux/uuid-dev_2.32.1-0.1_armhf.deb +http://ftp.us.debian.org/debian/pool/main/v/vulkan/libvulkan1_1.1.73+dfsg-1_armhf.deb +http://ftp.us.debian.org/debian/pool/main/w/wayland/libwayland-client0_1.15.0-2_armhf.deb +http://ftp.us.debian.org/debian/pool/main/w/wayland/libwayland-cursor0_1.15.0-2_armhf.deb +http://ftp.us.debian.org/debian/pool/main/w/wayland/libwayland-dev_1.15.0-2_armhf.deb +http://ftp.us.debian.org/debian/pool/main/w/wayland/libwayland-egl1_1.15.0-2_armhf.deb +http://ftp.us.debian.org/debian/pool/main/w/wayland/libwayland-server0_1.15.0-2_armhf.deb +http://ftp.us.debian.org/debian/pool/main/w/wayland-protocols/wayland-protocols_1.16-1_all.deb +http://ftp.us.debian.org/debian/pool/main/x/xft/libxft2_2.3.2-2_armhf.deb http://ftp.us.debian.org/debian/pool/main/x/xorgproto/x11proto-composite-dev_2018.4-4_all.deb http://ftp.us.debian.org/debian/pool/main/x/xorgproto/x11proto-damage-dev_2018.4-4_all.deb http://ftp.us.debian.org/debian/pool/main/x/xorgproto/x11proto-dev_2018.4-4_all.deb @@ -305,5 +316,5 @@ http://ftp.us.debian.org/debian/pool/main/x/xorgproto/x11proto-scrnsaver-dev_201 http://ftp.us.debian.org/debian/pool/main/x/xorgproto/x11proto-xext-dev_2018.4-4_all.deb http://ftp.us.debian.org/debian/pool/main/x/xorgproto/x11proto-xinerama-dev_2018.4-4_all.deb http://ftp.us.debian.org/debian/pool/main/x/xz-utils/liblzma5_5.2.2-1.3_armhf.deb -http://ftp.us.debian.org/debian/pool/main/z/zlib/zlib1g_1.2.8.dfsg-5_armhf.deb -http://ftp.us.debian.org/debian/pool/main/z/zlib/zlib1g-dev_1.2.8.dfsg-5_armhf.deb +http://ftp.us.debian.org/debian/pool/main/z/zlib/zlib1g_1.2.11.dfsg-1_armhf.deb +http://ftp.us.debian.org/debian/pool/main/z/zlib/zlib1g-dev_1.2.11.dfsg-1_armhf.deb diff --git a/chromium/build/linux/sysroot_scripts/packagelist.sid.arm64 b/chromium/build/linux/sysroot_scripts/packagelist.sid.arm64 index 753a41abdb6..f9a595530e8 100644 --- a/chromium/build/linux/sysroot_scripts/packagelist.sid.arm64 +++ b/chromium/build/linux/sysroot_scripts/packagelist.sid.arm64 @@ -1,81 +1,87 @@ -http://ftp.us.debian.org/debian/pool/main/a/alsa-lib/libasound2_1.1.3-5_arm64.deb -http://ftp.us.debian.org/debian/pool/main/a/alsa-lib/libasound2-dev_1.1.3-5_arm64.deb +http://ftp.us.debian.org/debian/pool/main/a/alsa-lib/libasound2_1.1.6-1_arm64.deb +http://ftp.us.debian.org/debian/pool/main/a/alsa-lib/libasound2-dev_1.1.6-1_arm64.deb http://ftp.us.debian.org/debian/pool/main/a/atk1.0/libatk1.0-0_2.28.1-1_arm64.deb http://ftp.us.debian.org/debian/pool/main/a/atk1.0/libatk1.0-dev_2.28.1-1_arm64.deb http://ftp.us.debian.org/debian/pool/main/a/at-spi2-atk/libatk-bridge2.0-0_2.26.2-1_arm64.deb http://ftp.us.debian.org/debian/pool/main/a/at-spi2-atk/libatk-bridge2.0-dev_2.26.2-1_arm64.deb -http://ftp.us.debian.org/debian/pool/main/a/at-spi2-core/libatspi2.0-0_2.28.0-1_arm64.deb -http://ftp.us.debian.org/debian/pool/main/a/at-spi2-core/libatspi2.0-dev_2.28.0-1_arm64.deb +http://ftp.us.debian.org/debian/pool/main/a/at-spi2-core/libatspi2.0-0_2.28.0-3_arm64.deb +http://ftp.us.debian.org/debian/pool/main/a/at-spi2-core/libatspi2.0-dev_2.28.0-3_arm64.deb http://ftp.us.debian.org/debian/pool/main/a/attr/libattr1_2.4.47-2+b2_arm64.deb -http://ftp.us.debian.org/debian/pool/main/a/audit/libaudit1_2.8.2-1_arm64.deb -http://ftp.us.debian.org/debian/pool/main/a/avahi/libavahi-client3_0.7-3.1_arm64.deb -http://ftp.us.debian.org/debian/pool/main/a/avahi/libavahi-common3_0.7-3.1_arm64.deb -http://ftp.us.debian.org/debian/pool/main/b/bluez/libbluetooth3_5.47-1+b1_arm64.deb -http://ftp.us.debian.org/debian/pool/main/b/bluez/libbluetooth-dev_5.47-1+b1_arm64.deb -http://ftp.us.debian.org/debian/pool/main/b/brltty/libbrlapi0.6_5.6-3_arm64.deb -http://ftp.us.debian.org/debian/pool/main/b/brltty/libbrlapi-dev_5.6-3_arm64.deb -http://ftp.us.debian.org/debian/pool/main/c/cairo/libcairo2_1.15.10-2_arm64.deb -http://ftp.us.debian.org/debian/pool/main/c/cairo/libcairo2-dev_1.15.10-2_arm64.deb -http://ftp.us.debian.org/debian/pool/main/c/cairo/libcairo-gobject2_1.15.10-2_arm64.deb -http://ftp.us.debian.org/debian/pool/main/c/cairo/libcairo-script-interpreter2_1.15.10-2_arm64.deb +http://ftp.us.debian.org/debian/pool/main/a/audit/libaudit1_2.8.3-1+b1_arm64.deb +http://ftp.us.debian.org/debian/pool/main/a/avahi/libavahi-client3_0.7-4_arm64.deb +http://ftp.us.debian.org/debian/pool/main/a/avahi/libavahi-common3_0.7-4_arm64.deb +http://ftp.us.debian.org/debian/pool/main/b/bluez/libbluetooth3_5.50-1_arm64.deb +http://ftp.us.debian.org/debian/pool/main/b/bluez/libbluetooth-dev_5.50-1_arm64.deb +http://ftp.us.debian.org/debian/pool/main/b/brltty/libbrlapi0.6_5.6-5_arm64.deb +http://ftp.us.debian.org/debian/pool/main/b/brltty/libbrlapi-dev_5.6-5_arm64.deb +http://ftp.us.debian.org/debian/pool/main/c/cairo/libcairo2_1.15.10-3_arm64.deb +http://ftp.us.debian.org/debian/pool/main/c/cairo/libcairo2-dev_1.15.10-3_arm64.deb +http://ftp.us.debian.org/debian/pool/main/c/cairo/libcairo-gobject2_1.15.10-3_arm64.deb +http://ftp.us.debian.org/debian/pool/main/c/cairo/libcairo-script-interpreter2_1.15.10-3_arm64.deb http://ftp.us.debian.org/debian/pool/main/c/colord/libcolord2_1.3.3-2_arm64.deb -http://ftp.us.debian.org/debian/pool/main/c/cups/libcups2_2.2.7-2_arm64.deb -http://ftp.us.debian.org/debian/pool/main/c/cups/libcups2-dev_2.2.7-2_arm64.deb -http://ftp.us.debian.org/debian/pool/main/c/cups/libcupsimage2_2.2.7-2_arm64.deb -http://ftp.us.debian.org/debian/pool/main/c/cups/libcupsimage2-dev_2.2.7-2_arm64.deb -http://ftp.us.debian.org/debian/pool/main/d/db5.3/libdb5.3_5.3.28-13.1+b1_arm64.deb -http://ftp.us.debian.org/debian/pool/main/d/dbus-glib/libdbus-glib-1-2_0.110-2_arm64.deb -http://ftp.us.debian.org/debian/pool/main/d/dbus/libdbus-1-3_1.12.6-2_arm64.deb -http://ftp.us.debian.org/debian/pool/main/d/dbus/libdbus-1-dev_1.12.6-2_arm64.deb -http://ftp.us.debian.org/debian/pool/main/e/e2fsprogs/comerr-dev_2.1-1.44.1-1_arm64.deb -http://ftp.us.debian.org/debian/pool/main/e/e2fsprogs/libcom-err2_1.44.1-1_arm64.deb -http://ftp.us.debian.org/debian/pool/main/e/elfutils/libelf1_0.170-0.3_arm64.deb -http://ftp.us.debian.org/debian/pool/main/e/elfutils/libelf-dev_0.170-0.3_arm64.deb -http://ftp.us.debian.org/debian/pool/main/e/expat/libexpat1_2.2.5-3_arm64.deb -http://ftp.us.debian.org/debian/pool/main/e/expat/libexpat1-dev_2.2.5-3_arm64.deb -http://ftp.us.debian.org/debian/pool/main/f/flac/libflac8_1.3.2-1_arm64.deb -http://ftp.us.debian.org/debian/pool/main/f/flac/libflac-dev_1.3.2-1_arm64.deb -http://ftp.us.debian.org/debian/pool/main/f/fontconfig/libfontconfig1_2.12.6-0.1_arm64.deb -http://ftp.us.debian.org/debian/pool/main/f/fontconfig/libfontconfig1-dev_2.12.6-0.1_arm64.deb +http://ftp.us.debian.org/debian/pool/main/c/cups/libcups2_2.2.8-5_arm64.deb +http://ftp.us.debian.org/debian/pool/main/c/cups/libcups2-dev_2.2.8-5_arm64.deb +http://ftp.us.debian.org/debian/pool/main/c/cups/libcupsimage2_2.2.8-5_arm64.deb +http://ftp.us.debian.org/debian/pool/main/c/cups/libcupsimage2-dev_2.2.8-5_arm64.deb +http://ftp.us.debian.org/debian/pool/main/d/db5.3/libdb5.3_5.3.28+dfsg1-0.1_arm64.deb +http://ftp.us.debian.org/debian/pool/main/d/dbus-glib/libdbus-glib-1-2_0.110-3_arm64.deb +http://ftp.us.debian.org/debian/pool/main/d/dbus/libdbus-1-3_1.12.10-1_arm64.deb +http://ftp.us.debian.org/debian/pool/main/d/dbus/libdbus-1-dev_1.12.10-1_arm64.deb +http://ftp.us.debian.org/debian/pool/main/e/e2fsprogs/comerr-dev_2.1-1.44.4-1_arm64.deb +http://ftp.us.debian.org/debian/pool/main/e/e2fsprogs/libcom-err2_1.44.4-1_arm64.deb +http://ftp.us.debian.org/debian/pool/main/e/elfutils/libelf1_0.170-0.5_arm64.deb +http://ftp.us.debian.org/debian/pool/main/e/elfutils/libelf-dev_0.170-0.5_arm64.deb +http://ftp.us.debian.org/debian/pool/main/e/expat/libexpat1_2.2.6-1_arm64.deb +http://ftp.us.debian.org/debian/pool/main/e/expat/libexpat1-dev_2.2.6-1_arm64.deb +http://ftp.us.debian.org/debian/pool/main/f/flac/libflac8_1.3.2-3_arm64.deb +http://ftp.us.debian.org/debian/pool/main/f/flac/libflac-dev_1.3.2-3_arm64.deb +http://ftp.us.debian.org/debian/pool/main/f/fontconfig/libfontconfig1_2.13.0-5_arm64.deb +http://ftp.us.debian.org/debian/pool/main/f/fontconfig/libfontconfig1-dev_2.13.0-5_arm64.deb http://ftp.us.debian.org/debian/pool/main/f/freetype/libfreetype6_2.8.1-2_arm64.deb http://ftp.us.debian.org/debian/pool/main/f/freetype/libfreetype6-dev_2.8.1-2_arm64.deb -http://ftp.us.debian.org/debian/pool/main/f/fribidi/libfribidi0_0.19.7-2_arm64.deb -http://ftp.us.debian.org/debian/pool/main/g/gcc-6/libasan3_6.4.0-15_arm64.deb -http://ftp.us.debian.org/debian/pool/main/g/gcc-6/libgcc-6-dev_6.4.0-15_arm64.deb -http://ftp.us.debian.org/debian/pool/main/g/gcc-6/libstdc++-6-dev_6.4.0-15_arm64.deb -http://ftp.us.debian.org/debian/pool/main/g/gcc-7/libubsan0_7.3.0-14_arm64.deb -http://ftp.us.debian.org/debian/pool/main/g/gcc-8/libatomic1_8-20180402-1_arm64.deb -http://ftp.us.debian.org/debian/pool/main/g/gcc-8/libgcc1_8-20180402-1_arm64.deb -http://ftp.us.debian.org/debian/pool/main/g/gcc-8/libgomp1_8-20180402-1_arm64.deb -http://ftp.us.debian.org/debian/pool/main/g/gcc-8/libitm1_8-20180402-1_arm64.deb -http://ftp.us.debian.org/debian/pool/main/g/gcc-8/libstdc++6_8-20180402-1_arm64.deb -http://ftp.us.debian.org/debian/pool/main/g/gdk-pixbuf/libgdk-pixbuf2.0-0_2.36.11-2_arm64.deb -http://ftp.us.debian.org/debian/pool/main/g/gdk-pixbuf/libgdk-pixbuf2.0-dev_2.36.11-2_arm64.deb -http://ftp.us.debian.org/debian/pool/main/g/glib2.0/libglib2.0-0_2.56.0-6_arm64.deb -http://ftp.us.debian.org/debian/pool/main/g/glib2.0/libglib2.0-dev_2.56.0-6_arm64.deb -http://ftp.us.debian.org/debian/pool/main/g/glibc/libc6_2.27-3_arm64.deb -http://ftp.us.debian.org/debian/pool/main/g/glibc/libc6-dev_2.27-3_arm64.deb +http://ftp.us.debian.org/debian/pool/main/f/fribidi/libfribidi0_1.0.5-3_arm64.deb +http://ftp.us.debian.org/debian/pool/main/f/fribidi/libfribidi-dev_1.0.5-3_arm64.deb +http://ftp.us.debian.org/debian/pool/main/g/gcc-6/libasan3_6.4.0-20_arm64.deb +http://ftp.us.debian.org/debian/pool/main/g/gcc-6/libgcc-6-dev_6.4.0-20_arm64.deb +http://ftp.us.debian.org/debian/pool/main/g/gcc-6/libstdc++-6-dev_6.4.0-20_arm64.deb +http://ftp.us.debian.org/debian/pool/main/g/gcc-7/libubsan0_7.3.0-28_arm64.deb +http://ftp.us.debian.org/debian/pool/main/g/gcc-8/libatomic1_8.2.0-4_arm64.deb +http://ftp.us.debian.org/debian/pool/main/g/gcc-8/libgcc1_8.2.0-4_arm64.deb +http://ftp.us.debian.org/debian/pool/main/g/gcc-8/libgomp1_8.2.0-4_arm64.deb +http://ftp.us.debian.org/debian/pool/main/g/gcc-8/libitm1_8.2.0-4_arm64.deb +http://ftp.us.debian.org/debian/pool/main/g/gcc-8/libstdc++6_8.2.0-4_arm64.deb +http://ftp.us.debian.org/debian/pool/main/g/gdk-pixbuf/libgdk-pixbuf2.0-0_2.36.12-2_arm64.deb +http://ftp.us.debian.org/debian/pool/main/g/gdk-pixbuf/libgdk-pixbuf2.0-dev_2.36.12-2_arm64.deb +http://ftp.us.debian.org/debian/pool/main/g/glib2.0/libglib2.0-0_2.56.1-2_arm64.deb +http://ftp.us.debian.org/debian/pool/main/g/glib2.0/libglib2.0-dev_2.56.1-2_arm64.deb +http://ftp.us.debian.org/debian/pool/main/g/glibc/libc6_2.27-5_arm64.deb +http://ftp.us.debian.org/debian/pool/main/g/glibc/libc6-dev_2.27-5_arm64.deb http://ftp.us.debian.org/debian/pool/main/g/gmp/libgmp10_6.1.2+dfsg-3_arm64.deb http://ftp.us.debian.org/debian/pool/main/g/gmp/libgmp10_6.1.2+dfsg-3_arm64.deb -http://ftp.us.debian.org/debian/pool/main/g/gnutls28/libgnutls28-dev_3.5.18-1_arm64.deb -http://ftp.us.debian.org/debian/pool/main/g/gnutls28/libgnutls30_3.5.18-1_arm64.deb -http://ftp.us.debian.org/debian/pool/main/g/gnutls28/libgnutls-dane0_3.5.18-1_arm64.deb -http://ftp.us.debian.org/debian/pool/main/g/gnutls28/libgnutls-openssl27_3.5.18-1_arm64.deb -http://ftp.us.debian.org/debian/pool/main/g/gnutls28/libgnutlsxx28_3.5.18-1_arm64.deb +http://ftp.us.debian.org/debian/pool/main/g/gnutls28/libgnutls28-dev_3.5.19-1_arm64.deb +http://ftp.us.debian.org/debian/pool/main/g/gnutls28/libgnutls30_3.5.19-1_arm64.deb +http://ftp.us.debian.org/debian/pool/main/g/gnutls28/libgnutls-dane0_3.5.19-1_arm64.deb +http://ftp.us.debian.org/debian/pool/main/g/gnutls28/libgnutls-openssl27_3.5.19-1_arm64.deb +http://ftp.us.debian.org/debian/pool/main/g/gnutls28/libgnutlsxx28_3.5.19-1_arm64.deb +http://ftp.us.debian.org/debian/pool/main/g/graphene/libgraphene-1.0-0_1.8.2-1_arm64.deb +http://ftp.us.debian.org/debian/pool/main/g/graphene/libgraphene-1.0-dev_1.8.2-1_arm64.deb http://ftp.us.debian.org/debian/pool/main/g/graphite2/libgraphite2-3_1.3.11-2_arm64.deb http://ftp.us.debian.org/debian/pool/main/g/graphite2/libgraphite2-dev_1.3.11-2_arm64.deb -http://ftp.us.debian.org/debian/pool/main/g/gtk+2.0/libgtk2.0-0_2.24.32-1_arm64.deb -http://ftp.us.debian.org/debian/pool/main/g/gtk+2.0/libgtk2.0-dev_2.24.32-1_arm64.deb -http://ftp.us.debian.org/debian/pool/main/g/gtk+3.0/libgtk-3-0_3.22.29-3_arm64.deb -http://ftp.us.debian.org/debian/pool/main/g/gtk+3.0/libgtk-3-dev_3.22.29-3_arm64.deb -http://ftp.us.debian.org/debian/pool/main/h/harfbuzz/libharfbuzz0b_1.7.2-1_arm64.deb -http://ftp.us.debian.org/debian/pool/main/h/harfbuzz/libharfbuzz-dev_1.7.2-1_arm64.deb -http://ftp.us.debian.org/debian/pool/main/h/harfbuzz/libharfbuzz-gobject0_1.7.2-1_arm64.deb -http://ftp.us.debian.org/debian/pool/main/h/harfbuzz/libharfbuzz-icu0_1.7.2-1_arm64.deb +http://ftp.us.debian.org/debian/pool/main/g/gtk+2.0/libgtk2.0-0_2.24.32-3_arm64.deb +http://ftp.us.debian.org/debian/pool/main/g/gtk+3.0/libgtk-3-0_3.22.30-2_arm64.deb +http://ftp.us.debian.org/debian/pool/main/g/gtk+3.0/libgtk-3-dev_3.22.30-2_arm64.deb +http://ftp.us.debian.org/debian/pool/main/g/gtk+4.0/libgtk-4-0_3.91.2-1_arm64.deb +http://ftp.us.debian.org/debian/pool/main/g/gtk+4.0/libgtk-4-dev_3.91.2-1_arm64.deb +http://ftp.us.debian.org/debian/pool/main/h/harfbuzz/libharfbuzz0b_1.8.8-2_arm64.deb +http://ftp.us.debian.org/debian/pool/main/h/harfbuzz/libharfbuzz-dev_1.8.8-2_arm64.deb +http://ftp.us.debian.org/debian/pool/main/h/harfbuzz/libharfbuzz-gobject0_1.8.8-2_arm64.deb +http://ftp.us.debian.org/debian/pool/main/h/harfbuzz/libharfbuzz-icu0_1.8.8-2_arm64.deb +http://ftp.us.debian.org/debian/pool/main/i/icu-le-hb/libicu-le-hb0_1.0.3+git161113-5_arm64.deb http://ftp.us.debian.org/debian/pool/main/i/icu/libicu57_57.1-9_arm64.deb +http://ftp.us.debian.org/debian/pool/main/i/icu/libicu60_60.2-6_arm64.deb http://ftp.us.debian.org/debian/pool/main/j/jbigkit/libjbig0_2.1-3.1+b2_arm64.deb -http://ftp.us.debian.org/debian/pool/main/j/json-glib/libjson-glib-1.0-0_1.4.2-3_arm64.deb -http://ftp.us.debian.org/debian/pool/main/k/keyutils/libkeyutils1_1.5.9-9.2_arm64.deb +http://ftp.us.debian.org/debian/pool/main/j/json-glib/libjson-glib-1.0-0_1.4.2-4_arm64.deb +http://ftp.us.debian.org/debian/pool/main/k/keyutils/libkeyutils1_1.5.9-9.3_arm64.deb http://ftp.us.debian.org/debian/pool/main/k/krb5/krb5-multidev_1.16-2_arm64.deb http://ftp.us.debian.org/debian/pool/main/k/krb5/libgssapi-krb5-2_1.16-2_arm64.deb http://ftp.us.debian.org/debian/pool/main/k/krb5/libgssrpc4_1.16-2_arm64.deb @@ -86,49 +92,51 @@ http://ftp.us.debian.org/debian/pool/main/k/krb5/libkdb5-9_1.16-2_arm64.deb http://ftp.us.debian.org/debian/pool/main/k/krb5/libkrb5-3_1.16-2_arm64.deb http://ftp.us.debian.org/debian/pool/main/k/krb5/libkrb5-dev_1.16-2_arm64.deb http://ftp.us.debian.org/debian/pool/main/k/krb5/libkrb5support0_1.16-2_arm64.deb -http://ftp.us.debian.org/debian/pool/main/liba/libappindicator/libappindicator1_0.4.92-5_arm64.deb -http://ftp.us.debian.org/debian/pool/main/liba/libappindicator/libappindicator3-1_0.4.92-5_arm64.deb -http://ftp.us.debian.org/debian/pool/main/liba/libappindicator/libappindicator3-dev_0.4.92-5_arm64.deb -http://ftp.us.debian.org/debian/pool/main/liba/libappindicator/libappindicator-dev_0.4.92-5_arm64.deb +http://ftp.us.debian.org/debian/pool/main/liba/libappindicator/libappindicator1_0.4.92-6_arm64.deb +http://ftp.us.debian.org/debian/pool/main/liba/libappindicator/libappindicator3-1_0.4.92-6_arm64.deb +http://ftp.us.debian.org/debian/pool/main/liba/libappindicator/libappindicator3-dev_0.4.92-6_arm64.deb +http://ftp.us.debian.org/debian/pool/main/liba/libappindicator/libappindicator-dev_0.4.92-6_arm64.deb http://ftp.us.debian.org/debian/pool/main/liba/libasyncns/libasyncns0_0.8-6_arm64.deb -http://ftp.us.debian.org/debian/pool/main/libb/libbsd/libbsd0_0.8.7-1_arm64.deb +http://ftp.us.debian.org/debian/pool/main/libb/libbsd/libbsd0_0.9.1-1_arm64.deb http://ftp.us.debian.org/debian/pool/main/libc/libcap2/libcap2_2.25-1.2_arm64.deb http://ftp.us.debian.org/debian/pool/main/libc/libcap2/libcap-dev_2.25-1.2_arm64.deb -http://ftp.us.debian.org/debian/pool/main/libc/libcap-ng/libcap-ng0_0.7.7-3.1+b1_arm64.deb -http://ftp.us.debian.org/debian/pool/main/libd/libdatrie/libdatrie1_0.2.10-7_arm64.deb -http://ftp.us.debian.org/debian/pool/main/libd/libdbusmenu/libdbusmenu-glib4_16.04.1+17.04.20170109.1-5_arm64.deb -http://ftp.us.debian.org/debian/pool/main/libd/libdbusmenu/libdbusmenu-glib-dev_16.04.1+17.04.20170109.1-5_arm64.deb -http://ftp.us.debian.org/debian/pool/main/libd/libdbusmenu/libdbusmenu-gtk3-4_16.04.1+17.04.20170109.1-5_arm64.deb -http://ftp.us.debian.org/debian/pool/main/libd/libdbusmenu/libdbusmenu-gtk4_16.04.1+17.04.20170109.1-5_arm64.deb -http://ftp.us.debian.org/debian/pool/main/libd/libdrm/libdrm2_2.4.91-2_arm64.deb -http://ftp.us.debian.org/debian/pool/main/libd/libdrm/libdrm-amdgpu1_2.4.91-2_arm64.deb -http://ftp.us.debian.org/debian/pool/main/libd/libdrm/libdrm-dev_2.4.91-2_arm64.deb -http://ftp.us.debian.org/debian/pool/main/libd/libdrm/libdrm-freedreno1_2.4.91-2_arm64.deb -http://ftp.us.debian.org/debian/pool/main/libd/libdrm/libdrm-nouveau2_2.4.91-2_arm64.deb -http://ftp.us.debian.org/debian/pool/main/libd/libdrm/libdrm-radeon1_2.4.91-2_arm64.deb -http://ftp.us.debian.org/debian/pool/main/libd/libdrm/libdrm-tegra0_2.4.91-2_arm64.deb +http://ftp.us.debian.org/debian/pool/main/libc/libcap-ng/libcap-ng0_0.7.9-1_arm64.deb +http://ftp.us.debian.org/debian/pool/main/libd/libdatrie/libdatrie1_0.2.12-1_arm64.deb +http://ftp.us.debian.org/debian/pool/main/libd/libdbusmenu/libdbusmenu-glib4_16.04.1+18.04.20171206-1_arm64.deb +http://ftp.us.debian.org/debian/pool/main/libd/libdbusmenu/libdbusmenu-glib-dev_16.04.1+18.04.20171206-1_arm64.deb +http://ftp.us.debian.org/debian/pool/main/libd/libdbusmenu/libdbusmenu-gtk3-4_16.04.1+18.04.20171206-1_arm64.deb +http://ftp.us.debian.org/debian/pool/main/libd/libdbusmenu/libdbusmenu-gtk4_16.04.1+18.04.20171206-1_arm64.deb +http://ftp.us.debian.org/debian/pool/main/libd/libdrm/libdrm2_2.4.93-1_arm64.deb +http://ftp.us.debian.org/debian/pool/main/libd/libdrm/libdrm-amdgpu1_2.4.93-1_arm64.deb +http://ftp.us.debian.org/debian/pool/main/libd/libdrm/libdrm-dev_2.4.93-1_arm64.deb +http://ftp.us.debian.org/debian/pool/main/libd/libdrm/libdrm-freedreno1_2.4.93-1_arm64.deb +http://ftp.us.debian.org/debian/pool/main/libd/libdrm/libdrm-nouveau2_2.4.93-1_arm64.deb +http://ftp.us.debian.org/debian/pool/main/libd/libdrm/libdrm-radeon1_2.4.93-1_arm64.deb +http://ftp.us.debian.org/debian/pool/main/libd/libdrm/libdrm-tegra0_2.4.93-1_arm64.deb http://ftp.us.debian.org/debian/pool/main/libe/libepoxy/libepoxy0_1.4.3-1_arm64.deb http://ftp.us.debian.org/debian/pool/main/libe/libepoxy/libepoxy-dev_1.4.3-1_arm64.deb http://ftp.us.debian.org/debian/pool/main/libe/libevent/libevent-2.1-6_2.1.8-stable-4_arm64.deb http://ftp.us.debian.org/debian/pool/main/libf/libffi/libffi6_3.2.1-8_arm64.deb +http://ftp.us.debian.org/debian/pool/main/libf/libffi/libffi7_3.3~rc0-6_arm64.deb http://ftp.us.debian.org/debian/pool/main/libf/libffi/libffi-dev_3.2.1-8_arm64.deb -http://ftp.us.debian.org/debian/pool/main/libg/libgcrypt20/libgcrypt20_1.8.2-2_arm64.deb -http://ftp.us.debian.org/debian/pool/main/libg/libgcrypt20/libgcrypt20-dev_1.8.2-2_arm64.deb -http://ftp.us.debian.org/debian/pool/main/libg/libglvnd/libegl1_1.0.0+git20180308-1_arm64.deb -http://ftp.us.debian.org/debian/pool/main/libg/libglvnd/libgl1_1.0.0+git20180308-1_arm64.deb -http://ftp.us.debian.org/debian/pool/main/libg/libglvnd/libgles2_1.0.0+git20180308-1_arm64.deb -http://ftp.us.debian.org/debian/pool/main/libg/libglvnd/libglvnd0_1.0.0+git20180308-1_arm64.deb -http://ftp.us.debian.org/debian/pool/main/libg/libglvnd/libglvnd-dev_1.0.0+git20180308-1_arm64.deb -http://ftp.us.debian.org/debian/pool/main/libg/libglvnd/libglx0_1.0.0+git20180308-1_arm64.deb -http://ftp.us.debian.org/debian/pool/main/libg/libglvnd/libopengl0_1.0.0+git20180308-1_arm64.deb +http://ftp.us.debian.org/debian/pool/main/libg/libgcrypt20/libgcrypt20_1.8.3-1_arm64.deb +http://ftp.us.debian.org/debian/pool/main/libg/libgcrypt20/libgcrypt20-dev_1.8.3-1_arm64.deb +http://ftp.us.debian.org/debian/pool/main/libg/libglvnd/libegl1_1.1.0-1_arm64.deb +http://ftp.us.debian.org/debian/pool/main/libg/libglvnd/libgl1_1.1.0-1_arm64.deb +http://ftp.us.debian.org/debian/pool/main/libg/libglvnd/libgles1_1.1.0-1_arm64.deb +http://ftp.us.debian.org/debian/pool/main/libg/libglvnd/libgles2_1.1.0-1_arm64.deb +http://ftp.us.debian.org/debian/pool/main/libg/libglvnd/libglvnd0_1.1.0-1_arm64.deb +http://ftp.us.debian.org/debian/pool/main/libg/libglvnd/libglvnd-dev_1.1.0-1_arm64.deb +http://ftp.us.debian.org/debian/pool/main/libg/libglvnd/libglx0_1.1.0-1_arm64.deb +http://ftp.us.debian.org/debian/pool/main/libg/libglvnd/libopengl0_1.1.0-1_arm64.deb http://ftp.us.debian.org/debian/pool/main/libg/libgnome-keyring/libgnome-keyring0_3.12.0-1+b2_arm64.deb http://ftp.us.debian.org/debian/pool/main/libg/libgnome-keyring/libgnome-keyring-dev_3.12.0-1+b2_arm64.deb -http://ftp.us.debian.org/debian/pool/main/libg/libgpg-error/libgpg-error0_1.28-2_arm64.deb -http://ftp.us.debian.org/debian/pool/main/libg/libgpg-error/libgpg-error-dev_1.28-2_arm64.deb +http://ftp.us.debian.org/debian/pool/main/libg/libgpg-error/libgpg-error0_1.32-1_arm64.deb +http://ftp.us.debian.org/debian/pool/main/libg/libgpg-error/libgpg-error-dev_1.32-1_arm64.deb http://ftp.us.debian.org/debian/pool/main/libi/libice/libice6_1.0.9-2_arm64.deb http://ftp.us.debian.org/debian/pool/main/libi/libidl/libidl-2-0_0.8.14-4_arm64.deb -http://ftp.us.debian.org/debian/pool/main/libi/libidn2/libidn2-0_2.0.4-1.1_arm64.deb -http://ftp.us.debian.org/debian/pool/main/libi/libidn/libidn11_1.33-2.1_arm64.deb +http://ftp.us.debian.org/debian/pool/main/libi/libidn2/libidn2-0_2.0.4-2.2_arm64.deb +http://ftp.us.debian.org/debian/pool/main/libi/libidn/libidn11_1.33-2.2_arm64.deb http://ftp.us.debian.org/debian/pool/main/libi/libindicator/libindicator3-7_0.5.0-3+b1_arm64.deb http://ftp.us.debian.org/debian/pool/main/libi/libindicator/libindicator7_0.5.0-3+b1_arm64.deb http://ftp.us.debian.org/debian/pool/main/libj/libjpeg-turbo/libjpeg62-turbo_1.5.2-2+b1_arm64.deb @@ -139,26 +147,27 @@ http://ftp.us.debian.org/debian/pool/main/libn/libnss-db/libnss-db_2.2.3pre1-6+b http://ftp.us.debian.org/debian/pool/main/libo/libogg/libogg0_1.3.2-1+b1_arm64.deb http://ftp.us.debian.org/debian/pool/main/libo/libogg/libogg-dev_1.3.2-1+b1_arm64.deb http://ftp.us.debian.org/debian/pool/main/libp/libpciaccess/libpciaccess0_0.14-1_arm64.deb -http://ftp.us.debian.org/debian/pool/main/libp/libpng1.6/libpng16-16_1.6.34-1_arm64.deb -http://ftp.us.debian.org/debian/pool/main/libp/libpng1.6/libpng-dev_1.6.34-1_arm64.deb +http://ftp.us.debian.org/debian/pool/main/libp/libpng1.6/libpng16-16_1.6.34-2_arm64.deb +http://ftp.us.debian.org/debian/pool/main/libp/libpng1.6/libpng-dev_1.6.34-2_arm64.deb +http://ftp.us.debian.org/debian/pool/main/libp/libpsl/libpsl5_0.20.2-1_arm64.deb http://ftp.us.debian.org/debian/pool/main/libp/libpthread-stubs/libpthread-stubs0-dev_0.3-4_arm64.deb http://ftp.us.debian.org/debian/pool/main/libr/librest/librest-0.7-0_0.8.0-2_arm64.deb -http://ftp.us.debian.org/debian/pool/main/libs/libselinux/libselinux1_2.7-2+b2_arm64.deb +http://ftp.us.debian.org/debian/pool/main/libs/libselinux/libselinux1_2.8-1+b1_arm64.deb http://ftp.us.debian.org/debian/pool/main/libs/libsm/libsm6_1.2.2-1+b3_arm64.deb http://ftp.us.debian.org/debian/pool/main/libs/libsndfile/libsndfile1_1.0.28-4_arm64.deb -http://ftp.us.debian.org/debian/pool/main/libs/libsoup2.4/libsoup2.4-1_2.62.0-1_arm64.deb -http://ftp.us.debian.org/debian/pool/main/libs/libsoup2.4/libsoup-gnome2.4-1_2.62.0-1_arm64.deb -http://ftp.us.debian.org/debian/pool/main/libt/libtasn1-6/libtasn1-6_4.13-2_arm64.deb -http://ftp.us.debian.org/debian/pool/main/libt/libthai/libthai0_0.1.27-2_arm64.deb -http://ftp.us.debian.org/debian/pool/main/libt/libthai/libthai0_0.1.27-2_arm64.deb -http://ftp.us.debian.org/debian/pool/main/libt/libtool/libltdl7_2.4.6-2_arm64.deb -http://ftp.us.debian.org/debian/pool/main/libu/libunistring/libunistring2_0.9.8-1_arm64.deb -http://ftp.us.debian.org/debian/pool/main/libv/libva/libva2_2.1.0-3_arm64.deb -http://ftp.us.debian.org/debian/pool/main/libv/libva/libva-dev_2.1.0-3_arm64.deb -http://ftp.us.debian.org/debian/pool/main/libv/libva/libva-drm2_2.1.0-3_arm64.deb -http://ftp.us.debian.org/debian/pool/main/libv/libva/libva-glx2_2.1.0-3_arm64.deb -http://ftp.us.debian.org/debian/pool/main/libv/libva/libva-wayland2_2.1.0-3_arm64.deb -http://ftp.us.debian.org/debian/pool/main/libv/libva/libva-x11-2_2.1.0-3_arm64.deb +http://ftp.us.debian.org/debian/pool/main/libs/libsoup2.4/libsoup2.4-1_2.62.2-2_arm64.deb +http://ftp.us.debian.org/debian/pool/main/libs/libsoup2.4/libsoup-gnome2.4-1_2.62.2-2_arm64.deb +http://ftp.us.debian.org/debian/pool/main/libt/libtasn1-6/libtasn1-6_4.13-3_arm64.deb +http://ftp.us.debian.org/debian/pool/main/libt/libthai/libthai0_0.1.28-1_arm64.deb +http://ftp.us.debian.org/debian/pool/main/libt/libthai/libthai0_0.1.28-1_arm64.deb +http://ftp.us.debian.org/debian/pool/main/libt/libtool/libltdl7_2.4.6-2.1_arm64.deb +http://ftp.us.debian.org/debian/pool/main/libu/libunistring/libunistring2_0.9.10-1_arm64.deb +http://ftp.us.debian.org/debian/pool/main/libv/libva/libva2_2.2.0-1_arm64.deb +http://ftp.us.debian.org/debian/pool/main/libv/libva/libva-dev_2.2.0-1_arm64.deb +http://ftp.us.debian.org/debian/pool/main/libv/libva/libva-drm2_2.2.0-1_arm64.deb +http://ftp.us.debian.org/debian/pool/main/libv/libva/libva-glx2_2.2.0-1_arm64.deb +http://ftp.us.debian.org/debian/pool/main/libv/libva/libva-wayland2_2.2.0-1_arm64.deb +http://ftp.us.debian.org/debian/pool/main/libv/libva/libva-x11-2_2.2.0-1_arm64.deb http://ftp.us.debian.org/debian/pool/main/libv/libvorbis/libvorbis0a_1.3.6-1_arm64.deb http://ftp.us.debian.org/debian/pool/main/libv/libvorbis/libvorbisenc2_1.3.6-1_arm64.deb http://ftp.us.debian.org/debian/pool/main/libv/libvpx/libvpx5_1.7.0-3_arm64.deb @@ -173,18 +182,18 @@ http://ftp.us.debian.org/debian/pool/main/libx/libx11/libx11-xcb1_1.6.5-1_arm64. http://ftp.us.debian.org/debian/pool/main/libx/libx11/libx11-xcb-dev_1.6.5-1_arm64.deb http://ftp.us.debian.org/debian/pool/main/libx/libxau/libxau6_1.0.8-1+b2_arm64.deb http://ftp.us.debian.org/debian/pool/main/libx/libxau/libxau-dev_1.0.8-1+b2_arm64.deb -http://ftp.us.debian.org/debian/pool/main/libx/libxcb/libxcb1_1.13-1_arm64.deb -http://ftp.us.debian.org/debian/pool/main/libx/libxcb/libxcb1-dev_1.13-1_arm64.deb -http://ftp.us.debian.org/debian/pool/main/libx/libxcb/libxcb-dri2-0_1.13-1_arm64.deb -http://ftp.us.debian.org/debian/pool/main/libx/libxcb/libxcb-dri3-0_1.13-1_arm64.deb -http://ftp.us.debian.org/debian/pool/main/libx/libxcb/libxcb-glx0_1.13-1_arm64.deb -http://ftp.us.debian.org/debian/pool/main/libx/libxcb/libxcb-present0_1.13-1_arm64.deb -http://ftp.us.debian.org/debian/pool/main/libx/libxcb/libxcb-render0_1.13-1_arm64.deb -http://ftp.us.debian.org/debian/pool/main/libx/libxcb/libxcb-render0-dev_1.13-1_arm64.deb -http://ftp.us.debian.org/debian/pool/main/libx/libxcb/libxcb-shm0_1.13-1_arm64.deb -http://ftp.us.debian.org/debian/pool/main/libx/libxcb/libxcb-shm0-dev_1.13-1_arm64.deb -http://ftp.us.debian.org/debian/pool/main/libx/libxcb/libxcb-sync1_1.13-1_arm64.deb -http://ftp.us.debian.org/debian/pool/main/libx/libxcb/libxcb-xfixes0_1.13-1_arm64.deb +http://ftp.us.debian.org/debian/pool/main/libx/libxcb/libxcb1_1.13-2_arm64.deb +http://ftp.us.debian.org/debian/pool/main/libx/libxcb/libxcb1-dev_1.13-2_arm64.deb +http://ftp.us.debian.org/debian/pool/main/libx/libxcb/libxcb-dri2-0_1.13-2_arm64.deb +http://ftp.us.debian.org/debian/pool/main/libx/libxcb/libxcb-dri3-0_1.13-2_arm64.deb +http://ftp.us.debian.org/debian/pool/main/libx/libxcb/libxcb-glx0_1.13-2_arm64.deb +http://ftp.us.debian.org/debian/pool/main/libx/libxcb/libxcb-present0_1.13-2_arm64.deb +http://ftp.us.debian.org/debian/pool/main/libx/libxcb/libxcb-render0_1.13-2_arm64.deb +http://ftp.us.debian.org/debian/pool/main/libx/libxcb/libxcb-render0-dev_1.13-2_arm64.deb +http://ftp.us.debian.org/debian/pool/main/libx/libxcb/libxcb-shm0_1.13-2_arm64.deb +http://ftp.us.debian.org/debian/pool/main/libx/libxcb/libxcb-shm0-dev_1.13-2_arm64.deb +http://ftp.us.debian.org/debian/pool/main/libx/libxcb/libxcb-sync1_1.13-2_arm64.deb +http://ftp.us.debian.org/debian/pool/main/libx/libxcb/libxcb-xfixes0_1.13-2_arm64.deb http://ftp.us.debian.org/debian/pool/main/libx/libxcomposite/libxcomposite1_0.4.4-2_arm64.deb http://ftp.us.debian.org/debian/pool/main/libx/libxcomposite/libxcomposite-dev_0.4.4-2_arm64.deb http://ftp.us.debian.org/debian/pool/main/libx/libxcursor/libxcursor1_1.1.15-1_arm64.deb @@ -201,17 +210,17 @@ http://ftp.us.debian.org/debian/pool/main/libx/libxi/libxi6_1.7.9-1_arm64.deb http://ftp.us.debian.org/debian/pool/main/libx/libxi/libxi-dev_1.7.9-1_arm64.deb http://ftp.us.debian.org/debian/pool/main/libx/libxinerama/libxinerama1_1.1.3-1+b3_arm64.deb http://ftp.us.debian.org/debian/pool/main/libx/libxinerama/libxinerama-dev_1.1.3-1+b3_arm64.deb -http://ftp.us.debian.org/debian/pool/main/libx/libxkbcommon/libxkbcommon0_0.8.0-1_arm64.deb -http://ftp.us.debian.org/debian/pool/main/libx/libxkbcommon/libxkbcommon-dev_0.8.0-1_arm64.deb -http://ftp.us.debian.org/debian/pool/main/libx/libxml2/libxml2_2.9.4+dfsg1-6.1_arm64.deb -http://ftp.us.debian.org/debian/pool/main/libx/libxml2/libxml2-dev_2.9.4+dfsg1-6.1_arm64.deb +http://ftp.us.debian.org/debian/pool/main/libx/libxkbcommon/libxkbcommon0_0.8.0-2_arm64.deb +http://ftp.us.debian.org/debian/pool/main/libx/libxkbcommon/libxkbcommon-dev_0.8.0-2_arm64.deb +http://ftp.us.debian.org/debian/pool/main/libx/libxml2/libxml2_2.9.4+dfsg1-7+b1_arm64.deb +http://ftp.us.debian.org/debian/pool/main/libx/libxml2/libxml2-dev_2.9.4+dfsg1-7+b1_arm64.deb http://ftp.us.debian.org/debian/pool/main/libx/libxrandr/libxrandr2_1.5.1-1_arm64.deb http://ftp.us.debian.org/debian/pool/main/libx/libxrandr/libxrandr-dev_1.5.1-1_arm64.deb http://ftp.us.debian.org/debian/pool/main/libx/libxrender/libxrender1_0.9.10-1_arm64.deb http://ftp.us.debian.org/debian/pool/main/libx/libxrender/libxrender-dev_0.9.10-1_arm64.deb http://ftp.us.debian.org/debian/pool/main/libx/libxshmfence/libxshmfence1_1.3-1_arm64.deb -http://ftp.us.debian.org/debian/pool/main/libx/libxslt/libxslt1.1_1.1.29-5_arm64.deb -http://ftp.us.debian.org/debian/pool/main/libx/libxslt/libxslt1-dev_1.1.29-5_arm64.deb +http://ftp.us.debian.org/debian/pool/main/libx/libxslt/libxslt1.1_1.1.32-2_arm64.deb +http://ftp.us.debian.org/debian/pool/main/libx/libxslt/libxslt1-dev_1.1.32-2_arm64.deb http://ftp.us.debian.org/debian/pool/main/libx/libxss/libxss1_1.2.2-1+b2_arm64.deb http://ftp.us.debian.org/debian/pool/main/libx/libxss/libxss-dev_1.2.2-1+b2_arm64.deb http://ftp.us.debian.org/debian/pool/main/libx/libxt/libxt6_1.1.5-1_arm64.deb @@ -219,79 +228,81 @@ http://ftp.us.debian.org/debian/pool/main/libx/libxt/libxt-dev_1.1.5-1_arm64.deb http://ftp.us.debian.org/debian/pool/main/libx/libxtst/libxtst6_1.2.3-1_arm64.deb http://ftp.us.debian.org/debian/pool/main/libx/libxtst/libxtst-dev_1.2.3-1_arm64.deb http://ftp.us.debian.org/debian/pool/main/libx/libxxf86vm/libxxf86vm1_1.1.4-1+b2_arm64.deb -http://ftp.us.debian.org/debian/pool/main/l/lcms2/liblcms2-2_2.9-1_arm64.deb -http://ftp.us.debian.org/debian/pool/main/l/linux/linux-libc-dev_4.15.11-1_arm64.deb -http://ftp.us.debian.org/debian/pool/main/l/lz4/liblz4-1_0.0~r131-2+b1_arm64.deb -http://ftp.us.debian.org/debian/pool/main/l/lzo2/liblzo2-2_2.08-1.2+b2_arm64.deb -http://ftp.us.debian.org/debian/pool/main/m/mesa/libegl1-mesa_17.3.7-1_arm64.deb -http://ftp.us.debian.org/debian/pool/main/m/mesa/libegl1-mesa-dev_17.3.7-1_arm64.deb -http://ftp.us.debian.org/debian/pool/main/m/mesa/libgbm1_17.3.7-1_arm64.deb -http://ftp.us.debian.org/debian/pool/main/m/mesa/libgbm-dev_17.3.7-1_arm64.deb -http://ftp.us.debian.org/debian/pool/main/m/mesa/libgl1-mesa-dev_17.3.7-1_arm64.deb -http://ftp.us.debian.org/debian/pool/main/m/mesa/libgl1-mesa-glx_17.3.7-1_arm64.deb -http://ftp.us.debian.org/debian/pool/main/m/mesa/libglapi-mesa_17.3.7-1_arm64.deb -http://ftp.us.debian.org/debian/pool/main/m/mesa/libwayland-egl1-mesa_17.3.7-1_arm64.deb -http://ftp.us.debian.org/debian/pool/main/m/mesa/mesa-common-dev_17.3.7-1_arm64.deb +http://ftp.us.debian.org/debian/pool/main/l/lcms2/liblcms2-2_2.9-2_arm64.deb +http://ftp.us.debian.org/debian/pool/main/l/linux/linux-libc-dev_4.17.17-1_arm64.deb +http://ftp.us.debian.org/debian/pool/main/l/lz4/liblz4-1_1.8.2-1_arm64.deb +http://ftp.us.debian.org/debian/pool/main/l/lzo2/liblzo2-2_2.10-0.1_arm64.deb +http://ftp.us.debian.org/debian/pool/main/m/mesa/libegl1-mesa_18.1.6-1_arm64.deb +http://ftp.us.debian.org/debian/pool/main/m/mesa/libegl1-mesa-dev_18.1.6-1_arm64.deb +http://ftp.us.debian.org/debian/pool/main/m/mesa/libgbm1_18.1.6-1_arm64.deb +http://ftp.us.debian.org/debian/pool/main/m/mesa/libgbm-dev_18.1.6-1_arm64.deb +http://ftp.us.debian.org/debian/pool/main/m/mesa/libgl1-mesa-dev_18.1.6-1_arm64.deb +http://ftp.us.debian.org/debian/pool/main/m/mesa/libgl1-mesa-glx_18.1.6-1_arm64.deb +http://ftp.us.debian.org/debian/pool/main/m/mesa/libglapi-mesa_18.1.6-1_arm64.deb +http://ftp.us.debian.org/debian/pool/main/m/mesa/libwayland-egl1-mesa_18.1.6-1_arm64.deb +http://ftp.us.debian.org/debian/pool/main/m/mesa/mesa-common-dev_18.1.6-1_arm64.deb http://ftp.us.debian.org/debian/pool/main/m/minizip/libminizip1_1.1-8+b1_arm64.deb http://ftp.us.debian.org/debian/pool/main/m/minizip/libminizip-dev_1.1-8+b1_arm64.deb http://ftp.us.debian.org/debian/pool/main/n/nettle/libhogweed4_3.4-1_arm64.deb http://ftp.us.debian.org/debian/pool/main/n/nettle/libnettle6_3.4-1_arm64.deb -http://ftp.us.debian.org/debian/pool/main/n/nspr/libnspr4_4.18-1_arm64.deb -http://ftp.us.debian.org/debian/pool/main/n/nspr/libnspr4-dev_4.18-1_arm64.deb -http://ftp.us.debian.org/debian/pool/main/n/nss/libnss3_3.35-2_arm64.deb -http://ftp.us.debian.org/debian/pool/main/n/nss/libnss3-dev_3.35-2_arm64.deb +http://ftp.us.debian.org/debian/pool/main/n/nspr/libnspr4_4.19-3_arm64.deb +http://ftp.us.debian.org/debian/pool/main/n/nspr/libnspr4-dev_4.19-3_arm64.deb +http://ftp.us.debian.org/debian/pool/main/n/nss/libnss3_3.38-1_arm64.deb +http://ftp.us.debian.org/debian/pool/main/n/nss/libnss3-dev_3.38-1_arm64.deb http://ftp.us.debian.org/debian/pool/main/o/openssl1.0/libssl1.0.2_1.0.2o-1_arm64.deb -http://ftp.us.debian.org/debian/pool/main/o/openssl/libssl1.1_1.1.0h-2_arm64.deb -http://ftp.us.debian.org/debian/pool/main/o/openssl/libssl-dev_1.1.0h-2_arm64.deb -http://ftp.us.debian.org/debian/pool/main/o/opus/libopus0_1.2.1-1_arm64.deb -http://ftp.us.debian.org/debian/pool/main/o/opus/libopus-dev_1.2.1-1_arm64.deb +http://ftp.us.debian.org/debian/pool/main/o/openssl/libssl1.1_1.1.0h-4_arm64.deb +http://ftp.us.debian.org/debian/pool/main/o/openssl/libssl-dev_1.1.0h-4_arm64.deb +http://ftp.us.debian.org/debian/pool/main/o/opus/libopus0_1.3~beta+20180518-1_arm64.deb +http://ftp.us.debian.org/debian/pool/main/o/opus/libopus-dev_1.3~beta+20180518-1_arm64.deb http://ftp.us.debian.org/debian/pool/main/o/orbit2/liborbit-2-0_2.14.19-4_arm64.deb http://ftp.us.debian.org/debian/pool/main/o/orbit2/liborbit2_2.14.19-4_arm64.deb -http://ftp.us.debian.org/debian/pool/main/p/p11-kit/libp11-kit0_0.23.10-2_arm64.deb -http://ftp.us.debian.org/debian/pool/main/p/pam/libpam0g_1.1.8-3.7_arm64.deb -http://ftp.us.debian.org/debian/pool/main/p/pam/libpam0g-dev_1.1.8-3.7_arm64.deb -http://ftp.us.debian.org/debian/pool/main/p/pango1.0/libpango-1.0-0_1.42.0-1_arm64.deb -http://ftp.us.debian.org/debian/pool/main/p/pango1.0/libpango1.0-dev_1.42.0-1_arm64.deb -http://ftp.us.debian.org/debian/pool/main/p/pango1.0/libpangocairo-1.0-0_1.42.0-1_arm64.deb -http://ftp.us.debian.org/debian/pool/main/p/pango1.0/libpangoft2-1.0-0_1.42.0-1_arm64.deb -http://ftp.us.debian.org/debian/pool/main/p/pango1.0/libpangoxft-1.0-0_1.42.0-1_arm64.deb +http://ftp.us.debian.org/debian/pool/main/p/p11-kit/libp11-kit0_0.23.13-2_arm64.deb +http://ftp.us.debian.org/debian/pool/main/p/pam/libpam0g_1.1.8-3.8_arm64.deb +http://ftp.us.debian.org/debian/pool/main/p/pam/libpam0g-dev_1.1.8-3.8_arm64.deb +http://ftp.us.debian.org/debian/pool/main/p/pango1.0/libpango-1.0-0_1.42.4-1_arm64.deb +http://ftp.us.debian.org/debian/pool/main/p/pango1.0/libpango1.0-dev_1.42.4-1_arm64.deb +http://ftp.us.debian.org/debian/pool/main/p/pango1.0/libpangocairo-1.0-0_1.42.4-1_arm64.deb +http://ftp.us.debian.org/debian/pool/main/p/pango1.0/libpangoft2-1.0-0_1.42.4-1_arm64.deb +http://ftp.us.debian.org/debian/pool/main/p/pango1.0/libpangoxft-1.0-0_1.42.4-1_arm64.deb http://ftp.us.debian.org/debian/pool/main/p/pangox-compat/libpangox-1.0-0_0.0.2-5+b2_arm64.deb http://ftp.us.debian.org/debian/pool/main/p/pciutils/libpci3_3.5.2-1_arm64.deb http://ftp.us.debian.org/debian/pool/main/p/pciutils/libpci-dev_3.5.2-1_arm64.deb -http://ftp.us.debian.org/debian/pool/main/p/pcre3/libpcre16-3_8.39-9_arm64.deb -http://ftp.us.debian.org/debian/pool/main/p/pcre3/libpcre32-3_8.39-9_arm64.deb -http://ftp.us.debian.org/debian/pool/main/p/pcre3/libpcre3_8.39-9_arm64.deb -http://ftp.us.debian.org/debian/pool/main/p/pcre3/libpcre3-dev_8.39-9_arm64.deb -http://ftp.us.debian.org/debian/pool/main/p/pcre3/libpcrecpp0v5_8.39-9_arm64.deb +http://ftp.us.debian.org/debian/pool/main/p/pcre3/libpcre16-3_8.39-11_arm64.deb +http://ftp.us.debian.org/debian/pool/main/p/pcre3/libpcre32-3_8.39-11_arm64.deb +http://ftp.us.debian.org/debian/pool/main/p/pcre3/libpcre3_8.39-11_arm64.deb +http://ftp.us.debian.org/debian/pool/main/p/pcre3/libpcre3-dev_8.39-11_arm64.deb +http://ftp.us.debian.org/debian/pool/main/p/pcre3/libpcrecpp0v5_8.39-11_arm64.deb http://ftp.us.debian.org/debian/pool/main/p/pixman/libpixman-1-0_0.34.0-2_arm64.deb http://ftp.us.debian.org/debian/pool/main/p/pixman/libpixman-1-dev_0.34.0-2_arm64.deb -http://ftp.us.debian.org/debian/pool/main/p/pulseaudio/libpulse0_11.1-4_arm64.deb -http://ftp.us.debian.org/debian/pool/main/p/pulseaudio/libpulse-dev_11.1-4_arm64.deb -http://ftp.us.debian.org/debian/pool/main/p/pulseaudio/libpulse-mainloop-glib0_11.1-4_arm64.deb -http://ftp.us.debian.org/debian/pool/main/r/re2/libre2-4_20180301+dfsg-1_arm64.deb -http://ftp.us.debian.org/debian/pool/main/r/re2/libre2-dev_20180301+dfsg-1_arm64.deb +http://ftp.us.debian.org/debian/pool/main/p/pulseaudio/libpulse0_12.0-1_arm64.deb +http://ftp.us.debian.org/debian/pool/main/p/pulseaudio/libpulse-dev_12.0-1_arm64.deb +http://ftp.us.debian.org/debian/pool/main/p/pulseaudio/libpulse-mainloop-glib0_12.0-1_arm64.deb +http://ftp.us.debian.org/debian/pool/main/r/re2/libre2-4_20180701+dfsg-1_arm64.deb +http://ftp.us.debian.org/debian/pool/main/r/re2/libre2-dev_20180701+dfsg-1_arm64.deb http://ftp.us.debian.org/debian/pool/main/s/snappy/libsnappy1v5_1.1.7-1_arm64.deb http://ftp.us.debian.org/debian/pool/main/s/snappy/libsnappy-dev_1.1.7-1_arm64.deb -http://ftp.us.debian.org/debian/pool/main/s/speech-dispatcher/libspeechd2_0.8.8-1_arm64.deb -http://ftp.us.debian.org/debian/pool/main/s/speech-dispatcher/libspeechd-dev_0.8.8-1_arm64.deb -http://ftp.us.debian.org/debian/pool/main/s/speech-dispatcher/speech-dispatcher_0.8.8-1_arm64.deb -http://ftp.us.debian.org/debian/pool/main/s/sqlite3/libsqlite3-0_3.23.0-1_arm64.deb -http://ftp.us.debian.org/debian/pool/main/s/systemd/libsystemd0_238-4_arm64.deb -http://ftp.us.debian.org/debian/pool/main/s/systemd/libudev1_238-4_arm64.deb -http://ftp.us.debian.org/debian/pool/main/s/systemd/libudev-dev_238-4_arm64.deb +http://ftp.us.debian.org/debian/pool/main/s/speech-dispatcher/libspeechd2_0.8.8-6_arm64.deb +http://ftp.us.debian.org/debian/pool/main/s/speech-dispatcher/libspeechd-dev_0.8.8-6_arm64.deb +http://ftp.us.debian.org/debian/pool/main/s/speech-dispatcher/speech-dispatcher_0.8.8-6_arm64.deb +http://ftp.us.debian.org/debian/pool/main/s/sqlite3/libsqlite3-0_3.24.0-1_arm64.deb +http://ftp.us.debian.org/debian/pool/main/s/systemd/libsystemd0_239-7_arm64.deb +http://ftp.us.debian.org/debian/pool/main/s/systemd/libudev1_239-7_arm64.deb +http://ftp.us.debian.org/debian/pool/main/s/systemd/libudev-dev_239-7_arm64.deb http://ftp.us.debian.org/debian/pool/main/t/tcp-wrappers/libwrap0_7.6.q-27_arm64.deb -http://ftp.us.debian.org/debian/pool/main/t/tiff/libtiff5_4.0.9-4_arm64.deb -http://ftp.us.debian.org/debian/pool/main/u/unbound/libunbound2_1.6.7-1_arm64.deb -http://ftp.us.debian.org/debian/pool/main/u/util-linux/libblkid1_2.31.1-0.5_arm64.deb -http://ftp.us.debian.org/debian/pool/main/u/util-linux/libmount1_2.31.1-0.5_arm64.deb -http://ftp.us.debian.org/debian/pool/main/u/util-linux/libuuid1_2.31.1-0.5_arm64.deb -http://ftp.us.debian.org/debian/pool/main/u/util-linux/uuid-dev_2.31.1-0.5_arm64.deb -http://ftp.us.debian.org/debian/pool/main/w/wayland/libwayland-client0_1.14.0-2_arm64.deb -http://ftp.us.debian.org/debian/pool/main/w/wayland/libwayland-cursor0_1.14.0-2_arm64.deb -http://ftp.us.debian.org/debian/pool/main/w/wayland/libwayland-dev_1.14.0-2_arm64.deb -http://ftp.us.debian.org/debian/pool/main/w/wayland/libwayland-server0_1.14.0-2_arm64.deb -http://ftp.us.debian.org/debian/pool/main/w/wayland-protocols/wayland-protocols_1.13-1_all.deb -http://ftp.us.debian.org/debian/pool/main/x/xft/libxft2_2.3.2-1+b2_arm64.deb +http://ftp.us.debian.org/debian/pool/main/t/tiff/libtiff5_4.0.9-6_arm64.deb +http://ftp.us.debian.org/debian/pool/main/u/unbound/libunbound2_1.7.3-1_arm64.deb +http://ftp.us.debian.org/debian/pool/main/u/util-linux/libblkid1_2.32.1-0.1_arm64.deb +http://ftp.us.debian.org/debian/pool/main/u/util-linux/libmount1_2.32.1-0.1_arm64.deb +http://ftp.us.debian.org/debian/pool/main/u/util-linux/libuuid1_2.32.1-0.1_arm64.deb +http://ftp.us.debian.org/debian/pool/main/u/util-linux/uuid-dev_2.32.1-0.1_arm64.deb +http://ftp.us.debian.org/debian/pool/main/v/vulkan/libvulkan1_1.1.73+dfsg-1_arm64.deb +http://ftp.us.debian.org/debian/pool/main/w/wayland/libwayland-client0_1.15.0-2_arm64.deb +http://ftp.us.debian.org/debian/pool/main/w/wayland/libwayland-cursor0_1.15.0-2_arm64.deb +http://ftp.us.debian.org/debian/pool/main/w/wayland/libwayland-dev_1.15.0-2_arm64.deb +http://ftp.us.debian.org/debian/pool/main/w/wayland/libwayland-egl1_1.15.0-2_arm64.deb +http://ftp.us.debian.org/debian/pool/main/w/wayland/libwayland-server0_1.15.0-2_arm64.deb +http://ftp.us.debian.org/debian/pool/main/w/wayland-protocols/wayland-protocols_1.16-1_all.deb +http://ftp.us.debian.org/debian/pool/main/x/xft/libxft2_2.3.2-2_arm64.deb http://ftp.us.debian.org/debian/pool/main/x/xorgproto/x11proto-composite-dev_2018.4-4_all.deb http://ftp.us.debian.org/debian/pool/main/x/xorgproto/x11proto-damage-dev_2018.4-4_all.deb http://ftp.us.debian.org/debian/pool/main/x/xorgproto/x11proto-dev_2018.4-4_all.deb @@ -305,5 +316,5 @@ http://ftp.us.debian.org/debian/pool/main/x/xorgproto/x11proto-scrnsaver-dev_201 http://ftp.us.debian.org/debian/pool/main/x/xorgproto/x11proto-xext-dev_2018.4-4_all.deb http://ftp.us.debian.org/debian/pool/main/x/xorgproto/x11proto-xinerama-dev_2018.4-4_all.deb http://ftp.us.debian.org/debian/pool/main/x/xz-utils/liblzma5_5.2.2-1.3_arm64.deb -http://ftp.us.debian.org/debian/pool/main/z/zlib/zlib1g_1.2.8.dfsg-5_arm64.deb -http://ftp.us.debian.org/debian/pool/main/z/zlib/zlib1g-dev_1.2.8.dfsg-5_arm64.deb +http://ftp.us.debian.org/debian/pool/main/z/zlib/zlib1g_1.2.11.dfsg-1_arm64.deb +http://ftp.us.debian.org/debian/pool/main/z/zlib/zlib1g-dev_1.2.11.dfsg-1_arm64.deb diff --git a/chromium/build/linux/sysroot_scripts/packagelist.sid.i386 b/chromium/build/linux/sysroot_scripts/packagelist.sid.i386 index d2d9131a2a4..b5a9e7818a8 100644 --- a/chromium/build/linux/sysroot_scripts/packagelist.sid.i386 +++ b/chromium/build/linux/sysroot_scripts/packagelist.sid.i386 @@ -1,83 +1,89 @@ -http://ftp.us.debian.org/debian/pool/main/a/alsa-lib/libasound2_1.1.3-5_i386.deb -http://ftp.us.debian.org/debian/pool/main/a/alsa-lib/libasound2-dev_1.1.3-5_i386.deb +http://ftp.us.debian.org/debian/pool/main/a/alsa-lib/libasound2_1.1.6-1_i386.deb +http://ftp.us.debian.org/debian/pool/main/a/alsa-lib/libasound2-dev_1.1.6-1_i386.deb http://ftp.us.debian.org/debian/pool/main/a/atk1.0/libatk1.0-0_2.28.1-1_i386.deb http://ftp.us.debian.org/debian/pool/main/a/atk1.0/libatk1.0-dev_2.28.1-1_i386.deb http://ftp.us.debian.org/debian/pool/main/a/at-spi2-atk/libatk-bridge2.0-0_2.26.2-1_i386.deb http://ftp.us.debian.org/debian/pool/main/a/at-spi2-atk/libatk-bridge2.0-dev_2.26.2-1_i386.deb -http://ftp.us.debian.org/debian/pool/main/a/at-spi2-core/libatspi2.0-0_2.28.0-1_i386.deb -http://ftp.us.debian.org/debian/pool/main/a/at-spi2-core/libatspi2.0-dev_2.28.0-1_i386.deb +http://ftp.us.debian.org/debian/pool/main/a/at-spi2-core/libatspi2.0-0_2.28.0-3_i386.deb +http://ftp.us.debian.org/debian/pool/main/a/at-spi2-core/libatspi2.0-dev_2.28.0-3_i386.deb http://ftp.us.debian.org/debian/pool/main/a/attr/libattr1_2.4.47-2+b2_i386.deb -http://ftp.us.debian.org/debian/pool/main/a/audit/libaudit1_2.8.2-1_i386.deb -http://ftp.us.debian.org/debian/pool/main/a/avahi/libavahi-client3_0.7-3.1_i386.deb -http://ftp.us.debian.org/debian/pool/main/a/avahi/libavahi-common3_0.7-3.1_i386.deb -http://ftp.us.debian.org/debian/pool/main/b/bluez/libbluetooth3_5.47-1+b1_i386.deb -http://ftp.us.debian.org/debian/pool/main/b/bluez/libbluetooth-dev_5.47-1+b1_i386.deb -http://ftp.us.debian.org/debian/pool/main/b/brltty/libbrlapi0.6_5.6-3_i386.deb -http://ftp.us.debian.org/debian/pool/main/b/brltty/libbrlapi-dev_5.6-3_i386.deb -http://ftp.us.debian.org/debian/pool/main/c/cairo/libcairo2_1.15.10-2_i386.deb -http://ftp.us.debian.org/debian/pool/main/c/cairo/libcairo2-dev_1.15.10-2_i386.deb -http://ftp.us.debian.org/debian/pool/main/c/cairo/libcairo-gobject2_1.15.10-2_i386.deb -http://ftp.us.debian.org/debian/pool/main/c/cairo/libcairo-script-interpreter2_1.15.10-2_i386.deb +http://ftp.us.debian.org/debian/pool/main/a/audit/libaudit1_2.8.3-1+b1_i386.deb +http://ftp.us.debian.org/debian/pool/main/a/avahi/libavahi-client3_0.7-4_i386.deb +http://ftp.us.debian.org/debian/pool/main/a/avahi/libavahi-common3_0.7-4_i386.deb +http://ftp.us.debian.org/debian/pool/main/b/bluez/libbluetooth3_5.50-1_i386.deb +http://ftp.us.debian.org/debian/pool/main/b/bluez/libbluetooth-dev_5.50-1_i386.deb +http://ftp.us.debian.org/debian/pool/main/b/brltty/libbrlapi0.6_5.6-5_i386.deb +http://ftp.us.debian.org/debian/pool/main/b/brltty/libbrlapi-dev_5.6-5_i386.deb +http://ftp.us.debian.org/debian/pool/main/c/cairo/libcairo2_1.15.10-3_i386.deb +http://ftp.us.debian.org/debian/pool/main/c/cairo/libcairo2-dev_1.15.10-3_i386.deb +http://ftp.us.debian.org/debian/pool/main/c/cairo/libcairo-gobject2_1.15.10-3_i386.deb +http://ftp.us.debian.org/debian/pool/main/c/cairo/libcairo-script-interpreter2_1.15.10-3_i386.deb http://ftp.us.debian.org/debian/pool/main/c/colord/libcolord2_1.3.3-2_i386.deb -http://ftp.us.debian.org/debian/pool/main/c/cups/libcups2_2.2.7-2_i386.deb -http://ftp.us.debian.org/debian/pool/main/c/cups/libcups2-dev_2.2.7-2_i386.deb -http://ftp.us.debian.org/debian/pool/main/c/cups/libcupsimage2_2.2.7-2_i386.deb -http://ftp.us.debian.org/debian/pool/main/c/cups/libcupsimage2-dev_2.2.7-2_i386.deb -http://ftp.us.debian.org/debian/pool/main/d/db5.3/libdb5.3_5.3.28-13.1+b1_i386.deb -http://ftp.us.debian.org/debian/pool/main/d/dbus-glib/libdbus-glib-1-2_0.110-2_i386.deb -http://ftp.us.debian.org/debian/pool/main/d/dbus/libdbus-1-3_1.12.6-2_i386.deb -http://ftp.us.debian.org/debian/pool/main/d/dbus/libdbus-1-dev_1.12.6-2_i386.deb -http://ftp.us.debian.org/debian/pool/main/e/e2fsprogs/comerr-dev_2.1-1.44.1-1_i386.deb -http://ftp.us.debian.org/debian/pool/main/e/e2fsprogs/libcom-err2_1.44.1-1_i386.deb -http://ftp.us.debian.org/debian/pool/main/e/elfutils/libelf1_0.170-0.3_i386.deb -http://ftp.us.debian.org/debian/pool/main/e/elfutils/libelf-dev_0.170-0.3_i386.deb -http://ftp.us.debian.org/debian/pool/main/e/expat/libexpat1_2.2.5-3_i386.deb -http://ftp.us.debian.org/debian/pool/main/e/expat/libexpat1-dev_2.2.5-3_i386.deb -http://ftp.us.debian.org/debian/pool/main/f/flac/libflac8_1.3.2-1_i386.deb -http://ftp.us.debian.org/debian/pool/main/f/flac/libflac-dev_1.3.2-1_i386.deb -http://ftp.us.debian.org/debian/pool/main/f/fontconfig/libfontconfig1_2.12.6-0.1_i386.deb -http://ftp.us.debian.org/debian/pool/main/f/fontconfig/libfontconfig1-dev_2.12.6-0.1_i386.deb +http://ftp.us.debian.org/debian/pool/main/c/cups/libcups2_2.2.8-5_i386.deb +http://ftp.us.debian.org/debian/pool/main/c/cups/libcups2-dev_2.2.8-5_i386.deb +http://ftp.us.debian.org/debian/pool/main/c/cups/libcupsimage2_2.2.8-5_i386.deb +http://ftp.us.debian.org/debian/pool/main/c/cups/libcupsimage2-dev_2.2.8-5_i386.deb +http://ftp.us.debian.org/debian/pool/main/d/db5.3/libdb5.3_5.3.28+dfsg1-0.1_i386.deb +http://ftp.us.debian.org/debian/pool/main/d/dbus-glib/libdbus-glib-1-2_0.110-3_i386.deb +http://ftp.us.debian.org/debian/pool/main/d/dbus/libdbus-1-3_1.12.10-1_i386.deb +http://ftp.us.debian.org/debian/pool/main/d/dbus/libdbus-1-dev_1.12.10-1_i386.deb +http://ftp.us.debian.org/debian/pool/main/e/e2fsprogs/comerr-dev_2.1-1.44.4-1_i386.deb +http://ftp.us.debian.org/debian/pool/main/e/e2fsprogs/libcom-err2_1.44.4-1_i386.deb +http://ftp.us.debian.org/debian/pool/main/e/elfutils/libelf1_0.170-0.5_i386.deb +http://ftp.us.debian.org/debian/pool/main/e/elfutils/libelf-dev_0.170-0.5_i386.deb +http://ftp.us.debian.org/debian/pool/main/e/expat/libexpat1_2.2.6-1_i386.deb +http://ftp.us.debian.org/debian/pool/main/e/expat/libexpat1-dev_2.2.6-1_i386.deb +http://ftp.us.debian.org/debian/pool/main/f/flac/libflac8_1.3.2-3_i386.deb +http://ftp.us.debian.org/debian/pool/main/f/flac/libflac-dev_1.3.2-3_i386.deb +http://ftp.us.debian.org/debian/pool/main/f/fontconfig/libfontconfig1_2.13.0-5_i386.deb +http://ftp.us.debian.org/debian/pool/main/f/fontconfig/libfontconfig1-dev_2.13.0-5_i386.deb http://ftp.us.debian.org/debian/pool/main/f/freetype/libfreetype6_2.8.1-2_i386.deb http://ftp.us.debian.org/debian/pool/main/f/freetype/libfreetype6-dev_2.8.1-2_i386.deb -http://ftp.us.debian.org/debian/pool/main/f/fribidi/libfribidi0_0.19.7-2_i386.deb -http://ftp.us.debian.org/debian/pool/main/g/gcc-6/libasan3_6.4.0-15_i386.deb -http://ftp.us.debian.org/debian/pool/main/g/gcc-6/libgcc-6-dev_6.4.0-15_i386.deb -http://ftp.us.debian.org/debian/pool/main/g/gcc-6/libstdc++-6-dev_6.4.0-15_i386.deb -http://ftp.us.debian.org/debian/pool/main/g/gcc-7/libcilkrts5_7.3.0-14_i386.deb -http://ftp.us.debian.org/debian/pool/main/g/gcc-7/libubsan0_7.3.0-14_i386.deb -http://ftp.us.debian.org/debian/pool/main/g/gcc-8/libatomic1_8-20180402-1_i386.deb -http://ftp.us.debian.org/debian/pool/main/g/gcc-8/libgcc1_8-20180402-1_i386.deb -http://ftp.us.debian.org/debian/pool/main/g/gcc-8/libgomp1_8-20180402-1_i386.deb -http://ftp.us.debian.org/debian/pool/main/g/gcc-8/libitm1_8-20180402-1_i386.deb -http://ftp.us.debian.org/debian/pool/main/g/gcc-8/libmpx2_8-20180402-1_i386.deb -http://ftp.us.debian.org/debian/pool/main/g/gcc-8/libquadmath0_8-20180402-1_i386.deb -http://ftp.us.debian.org/debian/pool/main/g/gcc-8/libstdc++6_8-20180402-1_i386.deb -http://ftp.us.debian.org/debian/pool/main/g/gdk-pixbuf/libgdk-pixbuf2.0-0_2.36.11-2_i386.deb -http://ftp.us.debian.org/debian/pool/main/g/gdk-pixbuf/libgdk-pixbuf2.0-dev_2.36.11-2_i386.deb -http://ftp.us.debian.org/debian/pool/main/g/glib2.0/libglib2.0-0_2.56.0-6_i386.deb -http://ftp.us.debian.org/debian/pool/main/g/glib2.0/libglib2.0-dev_2.56.0-6_i386.deb -http://ftp.us.debian.org/debian/pool/main/g/glibc/libc6_2.27-3_i386.deb -http://ftp.us.debian.org/debian/pool/main/g/glibc/libc6-dev_2.27-3_i386.deb +http://ftp.us.debian.org/debian/pool/main/f/fribidi/libfribidi0_1.0.5-3_i386.deb +http://ftp.us.debian.org/debian/pool/main/f/fribidi/libfribidi-dev_1.0.5-3_i386.deb +http://ftp.us.debian.org/debian/pool/main/g/gcc-6/libasan3_6.4.0-20_i386.deb +http://ftp.us.debian.org/debian/pool/main/g/gcc-6/libgcc-6-dev_6.4.0-20_i386.deb +http://ftp.us.debian.org/debian/pool/main/g/gcc-6/libstdc++-6-dev_6.4.0-20_i386.deb +http://ftp.us.debian.org/debian/pool/main/g/gcc-7/libcilkrts5_7.3.0-28_i386.deb +http://ftp.us.debian.org/debian/pool/main/g/gcc-7/libubsan0_7.3.0-28_i386.deb +http://ftp.us.debian.org/debian/pool/main/g/gcc-8/libatomic1_8.2.0-4_i386.deb +http://ftp.us.debian.org/debian/pool/main/g/gcc-8/libgcc1_8.2.0-4_i386.deb +http://ftp.us.debian.org/debian/pool/main/g/gcc-8/libgomp1_8.2.0-4_i386.deb +http://ftp.us.debian.org/debian/pool/main/g/gcc-8/libitm1_8.2.0-4_i386.deb +http://ftp.us.debian.org/debian/pool/main/g/gcc-8/libmpx2_8.2.0-4_i386.deb +http://ftp.us.debian.org/debian/pool/main/g/gcc-8/libquadmath0_8.2.0-4_i386.deb +http://ftp.us.debian.org/debian/pool/main/g/gcc-8/libstdc++6_8.2.0-4_i386.deb +http://ftp.us.debian.org/debian/pool/main/g/gdk-pixbuf/libgdk-pixbuf2.0-0_2.36.12-2_i386.deb +http://ftp.us.debian.org/debian/pool/main/g/gdk-pixbuf/libgdk-pixbuf2.0-dev_2.36.12-2_i386.deb +http://ftp.us.debian.org/debian/pool/main/g/glib2.0/libglib2.0-0_2.56.1-2_i386.deb +http://ftp.us.debian.org/debian/pool/main/g/glib2.0/libglib2.0-dev_2.56.1-2_i386.deb +http://ftp.us.debian.org/debian/pool/main/g/glibc/libc6_2.27-5_i386.deb +http://ftp.us.debian.org/debian/pool/main/g/glibc/libc6-dev_2.27-5_i386.deb http://ftp.us.debian.org/debian/pool/main/g/gmp/libgmp10_6.1.2+dfsg-3_i386.deb -http://ftp.us.debian.org/debian/pool/main/g/gnutls28/libgnutls28-dev_3.5.18-1_i386.deb -http://ftp.us.debian.org/debian/pool/main/g/gnutls28/libgnutls30_3.5.18-1_i386.deb -http://ftp.us.debian.org/debian/pool/main/g/gnutls28/libgnutls-dane0_3.5.18-1_i386.deb -http://ftp.us.debian.org/debian/pool/main/g/gnutls28/libgnutls-openssl27_3.5.18-1_i386.deb -http://ftp.us.debian.org/debian/pool/main/g/gnutls28/libgnutlsxx28_3.5.18-1_i386.deb +http://ftp.us.debian.org/debian/pool/main/g/gnutls28/libgnutls28-dev_3.5.19-1_i386.deb +http://ftp.us.debian.org/debian/pool/main/g/gnutls28/libgnutls30_3.5.19-1_i386.deb +http://ftp.us.debian.org/debian/pool/main/g/gnutls28/libgnutls-dane0_3.5.19-1_i386.deb +http://ftp.us.debian.org/debian/pool/main/g/gnutls28/libgnutls-openssl27_3.5.19-1_i386.deb +http://ftp.us.debian.org/debian/pool/main/g/gnutls28/libgnutlsxx28_3.5.19-1_i386.deb +http://ftp.us.debian.org/debian/pool/main/g/graphene/libgraphene-1.0-0_1.8.2-1_i386.deb +http://ftp.us.debian.org/debian/pool/main/g/graphene/libgraphene-1.0-dev_1.8.2-1_i386.deb http://ftp.us.debian.org/debian/pool/main/g/graphite2/libgraphite2-3_1.3.11-2_i386.deb http://ftp.us.debian.org/debian/pool/main/g/graphite2/libgraphite2-dev_1.3.11-2_i386.deb -http://ftp.us.debian.org/debian/pool/main/g/gtk+2.0/libgtk2.0-0_2.24.32-1_i386.deb -http://ftp.us.debian.org/debian/pool/main/g/gtk+2.0/libgtk2.0-dev_2.24.32-1_i386.deb -http://ftp.us.debian.org/debian/pool/main/g/gtk+3.0/libgtk-3-0_3.22.29-3_i386.deb -http://ftp.us.debian.org/debian/pool/main/g/gtk+3.0/libgtk-3-dev_3.22.29-3_i386.deb -http://ftp.us.debian.org/debian/pool/main/h/harfbuzz/libharfbuzz0b_1.7.2-1_i386.deb -http://ftp.us.debian.org/debian/pool/main/h/harfbuzz/libharfbuzz-dev_1.7.2-1_i386.deb -http://ftp.us.debian.org/debian/pool/main/h/harfbuzz/libharfbuzz-gobject0_1.7.2-1_i386.deb -http://ftp.us.debian.org/debian/pool/main/h/harfbuzz/libharfbuzz-icu0_1.7.2-1_i386.deb +http://ftp.us.debian.org/debian/pool/main/g/gtk+2.0/libgtk2.0-0_2.24.32-3_i386.deb +http://ftp.us.debian.org/debian/pool/main/g/gtk+3.0/libgtk-3-0_3.22.30-2_i386.deb +http://ftp.us.debian.org/debian/pool/main/g/gtk+3.0/libgtk-3-dev_3.22.30-2_i386.deb +http://ftp.us.debian.org/debian/pool/main/g/gtk+4.0/libgtk-4-0_3.91.2-1_i386.deb +http://ftp.us.debian.org/debian/pool/main/g/gtk+4.0/libgtk-4-dev_3.91.2-1_i386.deb +http://ftp.us.debian.org/debian/pool/main/h/harfbuzz/libharfbuzz0b_1.8.8-2_i386.deb +http://ftp.us.debian.org/debian/pool/main/h/harfbuzz/libharfbuzz-dev_1.8.8-2_i386.deb +http://ftp.us.debian.org/debian/pool/main/h/harfbuzz/libharfbuzz-gobject0_1.8.8-2_i386.deb +http://ftp.us.debian.org/debian/pool/main/h/harfbuzz/libharfbuzz-icu0_1.8.8-2_i386.deb +http://ftp.us.debian.org/debian/pool/main/i/icu-le-hb/libicu-le-hb0_1.0.3+git161113-5_i386.deb http://ftp.us.debian.org/debian/pool/main/i/icu/libicu57_57.1-9_i386.deb +http://ftp.us.debian.org/debian/pool/main/i/icu/libicu60_60.2-6_i386.deb http://ftp.us.debian.org/debian/pool/main/j/jbigkit/libjbig0_2.1-3.1+b2_i386.deb -http://ftp.us.debian.org/debian/pool/main/j/json-glib/libjson-glib-1.0-0_1.4.2-3_i386.deb -http://ftp.us.debian.org/debian/pool/main/k/keyutils/libkeyutils1_1.5.9-9.2_i386.deb +http://ftp.us.debian.org/debian/pool/main/j/json-glib/libjson-glib-1.0-0_1.4.2-4_i386.deb +http://ftp.us.debian.org/debian/pool/main/k/keyutils/libkeyutils1_1.5.9-9.3_i386.deb http://ftp.us.debian.org/debian/pool/main/k/krb5/krb5-multidev_1.16-2_i386.deb http://ftp.us.debian.org/debian/pool/main/k/krb5/libgssapi-krb5-2_1.16-2_i386.deb http://ftp.us.debian.org/debian/pool/main/k/krb5/libgssrpc4_1.16-2_i386.deb @@ -88,48 +94,50 @@ http://ftp.us.debian.org/debian/pool/main/k/krb5/libkdb5-9_1.16-2_i386.deb http://ftp.us.debian.org/debian/pool/main/k/krb5/libkrb5-3_1.16-2_i386.deb http://ftp.us.debian.org/debian/pool/main/k/krb5/libkrb5-dev_1.16-2_i386.deb http://ftp.us.debian.org/debian/pool/main/k/krb5/libkrb5support0_1.16-2_i386.deb -http://ftp.us.debian.org/debian/pool/main/liba/libappindicator/libappindicator1_0.4.92-5_i386.deb -http://ftp.us.debian.org/debian/pool/main/liba/libappindicator/libappindicator3-1_0.4.92-5_i386.deb -http://ftp.us.debian.org/debian/pool/main/liba/libappindicator/libappindicator3-dev_0.4.92-5_i386.deb -http://ftp.us.debian.org/debian/pool/main/liba/libappindicator/libappindicator-dev_0.4.92-5_i386.deb +http://ftp.us.debian.org/debian/pool/main/liba/libappindicator/libappindicator1_0.4.92-6_i386.deb +http://ftp.us.debian.org/debian/pool/main/liba/libappindicator/libappindicator3-1_0.4.92-6_i386.deb +http://ftp.us.debian.org/debian/pool/main/liba/libappindicator/libappindicator3-dev_0.4.92-6_i386.deb +http://ftp.us.debian.org/debian/pool/main/liba/libappindicator/libappindicator-dev_0.4.92-6_i386.deb http://ftp.us.debian.org/debian/pool/main/liba/libasyncns/libasyncns0_0.8-6_i386.deb -http://ftp.us.debian.org/debian/pool/main/libb/libbsd/libbsd0_0.8.7-1_i386.deb +http://ftp.us.debian.org/debian/pool/main/libb/libbsd/libbsd0_0.9.1-1_i386.deb http://ftp.us.debian.org/debian/pool/main/libc/libcap2/libcap2_2.25-1.2_i386.deb http://ftp.us.debian.org/debian/pool/main/libc/libcap2/libcap-dev_2.25-1.2_i386.deb -http://ftp.us.debian.org/debian/pool/main/libc/libcap-ng/libcap-ng0_0.7.7-3.1+b1_i386.deb -http://ftp.us.debian.org/debian/pool/main/libd/libdatrie/libdatrie1_0.2.10-7_i386.deb -http://ftp.us.debian.org/debian/pool/main/libd/libdbusmenu/libdbusmenu-glib4_16.04.1+17.04.20170109.1-5_i386.deb -http://ftp.us.debian.org/debian/pool/main/libd/libdbusmenu/libdbusmenu-glib-dev_16.04.1+17.04.20170109.1-5_i386.deb -http://ftp.us.debian.org/debian/pool/main/libd/libdbusmenu/libdbusmenu-gtk3-4_16.04.1+17.04.20170109.1-5_i386.deb -http://ftp.us.debian.org/debian/pool/main/libd/libdbusmenu/libdbusmenu-gtk4_16.04.1+17.04.20170109.1-5_i386.deb -http://ftp.us.debian.org/debian/pool/main/libd/libdrm/libdrm2_2.4.91-2_i386.deb -http://ftp.us.debian.org/debian/pool/main/libd/libdrm/libdrm-amdgpu1_2.4.91-2_i386.deb -http://ftp.us.debian.org/debian/pool/main/libd/libdrm/libdrm-dev_2.4.91-2_i386.deb -http://ftp.us.debian.org/debian/pool/main/libd/libdrm/libdrm-intel1_2.4.91-2_i386.deb -http://ftp.us.debian.org/debian/pool/main/libd/libdrm/libdrm-nouveau2_2.4.91-2_i386.deb -http://ftp.us.debian.org/debian/pool/main/libd/libdrm/libdrm-radeon1_2.4.91-2_i386.deb +http://ftp.us.debian.org/debian/pool/main/libc/libcap-ng/libcap-ng0_0.7.9-1_i386.deb +http://ftp.us.debian.org/debian/pool/main/libd/libdatrie/libdatrie1_0.2.12-1_i386.deb +http://ftp.us.debian.org/debian/pool/main/libd/libdbusmenu/libdbusmenu-glib4_16.04.1+18.04.20171206-1_i386.deb +http://ftp.us.debian.org/debian/pool/main/libd/libdbusmenu/libdbusmenu-glib-dev_16.04.1+18.04.20171206-1_i386.deb +http://ftp.us.debian.org/debian/pool/main/libd/libdbusmenu/libdbusmenu-gtk3-4_16.04.1+18.04.20171206-1_i386.deb +http://ftp.us.debian.org/debian/pool/main/libd/libdbusmenu/libdbusmenu-gtk4_16.04.1+18.04.20171206-1_i386.deb +http://ftp.us.debian.org/debian/pool/main/libd/libdrm/libdrm2_2.4.93-1_i386.deb +http://ftp.us.debian.org/debian/pool/main/libd/libdrm/libdrm-amdgpu1_2.4.93-1_i386.deb +http://ftp.us.debian.org/debian/pool/main/libd/libdrm/libdrm-dev_2.4.93-1_i386.deb +http://ftp.us.debian.org/debian/pool/main/libd/libdrm/libdrm-intel1_2.4.93-1_i386.deb +http://ftp.us.debian.org/debian/pool/main/libd/libdrm/libdrm-nouveau2_2.4.93-1_i386.deb +http://ftp.us.debian.org/debian/pool/main/libd/libdrm/libdrm-radeon1_2.4.93-1_i386.deb http://ftp.us.debian.org/debian/pool/main/libe/libepoxy/libepoxy0_1.4.3-1_i386.deb http://ftp.us.debian.org/debian/pool/main/libe/libepoxy/libepoxy-dev_1.4.3-1_i386.deb http://ftp.us.debian.org/debian/pool/main/libe/libevent/libevent-2.1-6_2.1.8-stable-4_i386.deb http://ftp.us.debian.org/debian/pool/main/libf/libffi/libffi6_3.2.1-8_i386.deb +http://ftp.us.debian.org/debian/pool/main/libf/libffi/libffi7_3.3~rc0-6_i386.deb http://ftp.us.debian.org/debian/pool/main/libf/libffi/libffi-dev_3.2.1-8_i386.deb -http://ftp.us.debian.org/debian/pool/main/libg/libgcrypt20/libgcrypt20_1.8.2-2_i386.deb -http://ftp.us.debian.org/debian/pool/main/libg/libgcrypt20/libgcrypt20-dev_1.8.2-2_i386.deb -http://ftp.us.debian.org/debian/pool/main/libg/libglvnd/libegl1_1.0.0+git20180308-1_i386.deb -http://ftp.us.debian.org/debian/pool/main/libg/libglvnd/libgl1_1.0.0+git20180308-1_i386.deb -http://ftp.us.debian.org/debian/pool/main/libg/libglvnd/libgles2_1.0.0+git20180308-1_i386.deb -http://ftp.us.debian.org/debian/pool/main/libg/libglvnd/libglvnd0_1.0.0+git20180308-1_i386.deb -http://ftp.us.debian.org/debian/pool/main/libg/libglvnd/libglvnd-dev_1.0.0+git20180308-1_i386.deb -http://ftp.us.debian.org/debian/pool/main/libg/libglvnd/libglx0_1.0.0+git20180308-1_i386.deb -http://ftp.us.debian.org/debian/pool/main/libg/libglvnd/libopengl0_1.0.0+git20180308-1_i386.deb +http://ftp.us.debian.org/debian/pool/main/libg/libgcrypt20/libgcrypt20_1.8.3-1_i386.deb +http://ftp.us.debian.org/debian/pool/main/libg/libgcrypt20/libgcrypt20-dev_1.8.3-1_i386.deb +http://ftp.us.debian.org/debian/pool/main/libg/libglvnd/libegl1_1.1.0-1_i386.deb +http://ftp.us.debian.org/debian/pool/main/libg/libglvnd/libgl1_1.1.0-1_i386.deb +http://ftp.us.debian.org/debian/pool/main/libg/libglvnd/libgles1_1.1.0-1_i386.deb +http://ftp.us.debian.org/debian/pool/main/libg/libglvnd/libgles2_1.1.0-1_i386.deb +http://ftp.us.debian.org/debian/pool/main/libg/libglvnd/libglvnd0_1.1.0-1_i386.deb +http://ftp.us.debian.org/debian/pool/main/libg/libglvnd/libglvnd-dev_1.1.0-1_i386.deb +http://ftp.us.debian.org/debian/pool/main/libg/libglvnd/libglx0_1.1.0-1_i386.deb +http://ftp.us.debian.org/debian/pool/main/libg/libglvnd/libopengl0_1.1.0-1_i386.deb http://ftp.us.debian.org/debian/pool/main/libg/libgnome-keyring/libgnome-keyring0_3.12.0-1+b2_i386.deb http://ftp.us.debian.org/debian/pool/main/libg/libgnome-keyring/libgnome-keyring-dev_3.12.0-1+b2_i386.deb -http://ftp.us.debian.org/debian/pool/main/libg/libgpg-error/libgpg-error0_1.28-2_i386.deb -http://ftp.us.debian.org/debian/pool/main/libg/libgpg-error/libgpg-error-dev_1.28-2_i386.deb +http://ftp.us.debian.org/debian/pool/main/libg/libgpg-error/libgpg-error0_1.32-1_i386.deb +http://ftp.us.debian.org/debian/pool/main/libg/libgpg-error/libgpg-error-dev_1.32-1_i386.deb http://ftp.us.debian.org/debian/pool/main/libi/libice/libice6_1.0.9-2_i386.deb http://ftp.us.debian.org/debian/pool/main/libi/libidl/libidl-2-0_0.8.14-4_i386.deb -http://ftp.us.debian.org/debian/pool/main/libi/libidn2/libidn2-0_2.0.4-1.1_i386.deb -http://ftp.us.debian.org/debian/pool/main/libi/libidn/libidn11_1.33-2.1_i386.deb +http://ftp.us.debian.org/debian/pool/main/libi/libidn2/libidn2-0_2.0.4-2.2_i386.deb +http://ftp.us.debian.org/debian/pool/main/libi/libidn/libidn11_1.33-2.2_i386.deb http://ftp.us.debian.org/debian/pool/main/libi/libindicator/libindicator3-7_0.5.0-3+b1_i386.deb http://ftp.us.debian.org/debian/pool/main/libi/libindicator/libindicator7_0.5.0-3+b1_i386.deb http://ftp.us.debian.org/debian/pool/main/libj/libjpeg-turbo/libjpeg62-turbo_1.5.2-2+b1_i386.deb @@ -140,25 +148,26 @@ http://ftp.us.debian.org/debian/pool/main/libn/libnss-db/libnss-db_2.2.3pre1-6+b http://ftp.us.debian.org/debian/pool/main/libo/libogg/libogg0_1.3.2-1+b1_i386.deb http://ftp.us.debian.org/debian/pool/main/libo/libogg/libogg-dev_1.3.2-1+b1_i386.deb http://ftp.us.debian.org/debian/pool/main/libp/libpciaccess/libpciaccess0_0.14-1_i386.deb -http://ftp.us.debian.org/debian/pool/main/libp/libpng1.6/libpng16-16_1.6.34-1_i386.deb -http://ftp.us.debian.org/debian/pool/main/libp/libpng1.6/libpng-dev_1.6.34-1_i386.deb +http://ftp.us.debian.org/debian/pool/main/libp/libpng1.6/libpng16-16_1.6.34-2_i386.deb +http://ftp.us.debian.org/debian/pool/main/libp/libpng1.6/libpng-dev_1.6.34-2_i386.deb +http://ftp.us.debian.org/debian/pool/main/libp/libpsl/libpsl5_0.20.2-1_i386.deb http://ftp.us.debian.org/debian/pool/main/libp/libpthread-stubs/libpthread-stubs0-dev_0.3-4_i386.deb http://ftp.us.debian.org/debian/pool/main/libr/librest/librest-0.7-0_0.8.0-2_i386.deb -http://ftp.us.debian.org/debian/pool/main/libs/libselinux/libselinux1_2.7-2+b2_i386.deb +http://ftp.us.debian.org/debian/pool/main/libs/libselinux/libselinux1_2.8-1+b1_i386.deb http://ftp.us.debian.org/debian/pool/main/libs/libsm/libsm6_1.2.2-1+b3_i386.deb http://ftp.us.debian.org/debian/pool/main/libs/libsndfile/libsndfile1_1.0.28-4_i386.deb -http://ftp.us.debian.org/debian/pool/main/libs/libsoup2.4/libsoup2.4-1_2.62.0-1_i386.deb -http://ftp.us.debian.org/debian/pool/main/libs/libsoup2.4/libsoup-gnome2.4-1_2.62.0-1_i386.deb -http://ftp.us.debian.org/debian/pool/main/libt/libtasn1-6/libtasn1-6_4.13-2_i386.deb -http://ftp.us.debian.org/debian/pool/main/libt/libthai/libthai0_0.1.27-2_i386.deb -http://ftp.us.debian.org/debian/pool/main/libt/libtool/libltdl7_2.4.6-2_i386.deb -http://ftp.us.debian.org/debian/pool/main/libu/libunistring/libunistring2_0.9.8-1_i386.deb -http://ftp.us.debian.org/debian/pool/main/libv/libva/libva2_2.1.0-3_i386.deb -http://ftp.us.debian.org/debian/pool/main/libv/libva/libva-dev_2.1.0-3_i386.deb -http://ftp.us.debian.org/debian/pool/main/libv/libva/libva-drm2_2.1.0-3_i386.deb -http://ftp.us.debian.org/debian/pool/main/libv/libva/libva-glx2_2.1.0-3_i386.deb -http://ftp.us.debian.org/debian/pool/main/libv/libva/libva-wayland2_2.1.0-3_i386.deb -http://ftp.us.debian.org/debian/pool/main/libv/libva/libva-x11-2_2.1.0-3_i386.deb +http://ftp.us.debian.org/debian/pool/main/libs/libsoup2.4/libsoup2.4-1_2.62.2-2_i386.deb +http://ftp.us.debian.org/debian/pool/main/libs/libsoup2.4/libsoup-gnome2.4-1_2.62.2-2_i386.deb +http://ftp.us.debian.org/debian/pool/main/libt/libtasn1-6/libtasn1-6_4.13-3_i386.deb +http://ftp.us.debian.org/debian/pool/main/libt/libthai/libthai0_0.1.28-1_i386.deb +http://ftp.us.debian.org/debian/pool/main/libt/libtool/libltdl7_2.4.6-2.1_i386.deb +http://ftp.us.debian.org/debian/pool/main/libu/libunistring/libunistring2_0.9.10-1_i386.deb +http://ftp.us.debian.org/debian/pool/main/libv/libva/libva2_2.2.0-1_i386.deb +http://ftp.us.debian.org/debian/pool/main/libv/libva/libva-dev_2.2.0-1_i386.deb +http://ftp.us.debian.org/debian/pool/main/libv/libva/libva-drm2_2.2.0-1_i386.deb +http://ftp.us.debian.org/debian/pool/main/libv/libva/libva-glx2_2.2.0-1_i386.deb +http://ftp.us.debian.org/debian/pool/main/libv/libva/libva-wayland2_2.2.0-1_i386.deb +http://ftp.us.debian.org/debian/pool/main/libv/libva/libva-x11-2_2.2.0-1_i386.deb http://ftp.us.debian.org/debian/pool/main/libv/libvorbis/libvorbis0a_1.3.6-1_i386.deb http://ftp.us.debian.org/debian/pool/main/libv/libvorbis/libvorbisenc2_1.3.6-1_i386.deb http://ftp.us.debian.org/debian/pool/main/libv/libvpx/libvpx5_1.7.0-3_i386.deb @@ -173,18 +182,18 @@ http://ftp.us.debian.org/debian/pool/main/libx/libx11/libx11-xcb1_1.6.5-1_i386.d http://ftp.us.debian.org/debian/pool/main/libx/libx11/libx11-xcb-dev_1.6.5-1_i386.deb http://ftp.us.debian.org/debian/pool/main/libx/libxau/libxau6_1.0.8-1+b2_i386.deb http://ftp.us.debian.org/debian/pool/main/libx/libxau/libxau-dev_1.0.8-1+b2_i386.deb -http://ftp.us.debian.org/debian/pool/main/libx/libxcb/libxcb1_1.13-1_i386.deb -http://ftp.us.debian.org/debian/pool/main/libx/libxcb/libxcb1-dev_1.13-1_i386.deb -http://ftp.us.debian.org/debian/pool/main/libx/libxcb/libxcb-dri2-0_1.13-1_i386.deb -http://ftp.us.debian.org/debian/pool/main/libx/libxcb/libxcb-dri3-0_1.13-1_i386.deb -http://ftp.us.debian.org/debian/pool/main/libx/libxcb/libxcb-glx0_1.13-1_i386.deb -http://ftp.us.debian.org/debian/pool/main/libx/libxcb/libxcb-present0_1.13-1_i386.deb -http://ftp.us.debian.org/debian/pool/main/libx/libxcb/libxcb-render0_1.13-1_i386.deb -http://ftp.us.debian.org/debian/pool/main/libx/libxcb/libxcb-render0-dev_1.13-1_i386.deb -http://ftp.us.debian.org/debian/pool/main/libx/libxcb/libxcb-shm0_1.13-1_i386.deb -http://ftp.us.debian.org/debian/pool/main/libx/libxcb/libxcb-shm0-dev_1.13-1_i386.deb -http://ftp.us.debian.org/debian/pool/main/libx/libxcb/libxcb-sync1_1.13-1_i386.deb -http://ftp.us.debian.org/debian/pool/main/libx/libxcb/libxcb-xfixes0_1.13-1_i386.deb +http://ftp.us.debian.org/debian/pool/main/libx/libxcb/libxcb1_1.13-2_i386.deb +http://ftp.us.debian.org/debian/pool/main/libx/libxcb/libxcb1-dev_1.13-2_i386.deb +http://ftp.us.debian.org/debian/pool/main/libx/libxcb/libxcb-dri2-0_1.13-2_i386.deb +http://ftp.us.debian.org/debian/pool/main/libx/libxcb/libxcb-dri3-0_1.13-2_i386.deb +http://ftp.us.debian.org/debian/pool/main/libx/libxcb/libxcb-glx0_1.13-2_i386.deb +http://ftp.us.debian.org/debian/pool/main/libx/libxcb/libxcb-present0_1.13-2_i386.deb +http://ftp.us.debian.org/debian/pool/main/libx/libxcb/libxcb-render0_1.13-2_i386.deb +http://ftp.us.debian.org/debian/pool/main/libx/libxcb/libxcb-render0-dev_1.13-2_i386.deb +http://ftp.us.debian.org/debian/pool/main/libx/libxcb/libxcb-shm0_1.13-2_i386.deb +http://ftp.us.debian.org/debian/pool/main/libx/libxcb/libxcb-shm0-dev_1.13-2_i386.deb +http://ftp.us.debian.org/debian/pool/main/libx/libxcb/libxcb-sync1_1.13-2_i386.deb +http://ftp.us.debian.org/debian/pool/main/libx/libxcb/libxcb-xfixes0_1.13-2_i386.deb http://ftp.us.debian.org/debian/pool/main/libx/libxcomposite/libxcomposite1_0.4.4-2_i386.deb http://ftp.us.debian.org/debian/pool/main/libx/libxcomposite/libxcomposite-dev_0.4.4-2_i386.deb http://ftp.us.debian.org/debian/pool/main/libx/libxcursor/libxcursor1_1.1.15-1_i386.deb @@ -201,17 +210,17 @@ http://ftp.us.debian.org/debian/pool/main/libx/libxi/libxi6_1.7.9-1_i386.deb http://ftp.us.debian.org/debian/pool/main/libx/libxi/libxi-dev_1.7.9-1_i386.deb http://ftp.us.debian.org/debian/pool/main/libx/libxinerama/libxinerama1_1.1.3-1+b3_i386.deb http://ftp.us.debian.org/debian/pool/main/libx/libxinerama/libxinerama-dev_1.1.3-1+b3_i386.deb -http://ftp.us.debian.org/debian/pool/main/libx/libxkbcommon/libxkbcommon0_0.8.0-1_i386.deb -http://ftp.us.debian.org/debian/pool/main/libx/libxkbcommon/libxkbcommon-dev_0.8.0-1_i386.deb -http://ftp.us.debian.org/debian/pool/main/libx/libxml2/libxml2_2.9.4+dfsg1-6.1_i386.deb -http://ftp.us.debian.org/debian/pool/main/libx/libxml2/libxml2-dev_2.9.4+dfsg1-6.1_i386.deb +http://ftp.us.debian.org/debian/pool/main/libx/libxkbcommon/libxkbcommon0_0.8.0-2_i386.deb +http://ftp.us.debian.org/debian/pool/main/libx/libxkbcommon/libxkbcommon-dev_0.8.0-2_i386.deb +http://ftp.us.debian.org/debian/pool/main/libx/libxml2/libxml2_2.9.4+dfsg1-7+b1_i386.deb +http://ftp.us.debian.org/debian/pool/main/libx/libxml2/libxml2-dev_2.9.4+dfsg1-7+b1_i386.deb http://ftp.us.debian.org/debian/pool/main/libx/libxrandr/libxrandr2_1.5.1-1_i386.deb http://ftp.us.debian.org/debian/pool/main/libx/libxrandr/libxrandr-dev_1.5.1-1_i386.deb http://ftp.us.debian.org/debian/pool/main/libx/libxrender/libxrender1_0.9.10-1_i386.deb http://ftp.us.debian.org/debian/pool/main/libx/libxrender/libxrender-dev_0.9.10-1_i386.deb http://ftp.us.debian.org/debian/pool/main/libx/libxshmfence/libxshmfence1_1.3-1_i386.deb -http://ftp.us.debian.org/debian/pool/main/libx/libxslt/libxslt1.1_1.1.29-5_i386.deb -http://ftp.us.debian.org/debian/pool/main/libx/libxslt/libxslt1-dev_1.1.29-5_i386.deb +http://ftp.us.debian.org/debian/pool/main/libx/libxslt/libxslt1.1_1.1.32-2_i386.deb +http://ftp.us.debian.org/debian/pool/main/libx/libxslt/libxslt1-dev_1.1.32-2_i386.deb http://ftp.us.debian.org/debian/pool/main/libx/libxss/libxss1_1.2.2-1+b2_i386.deb http://ftp.us.debian.org/debian/pool/main/libx/libxss/libxss-dev_1.2.2-1+b2_i386.deb http://ftp.us.debian.org/debian/pool/main/libx/libxt/libxt6_1.1.5-1_i386.deb @@ -219,79 +228,81 @@ http://ftp.us.debian.org/debian/pool/main/libx/libxt/libxt-dev_1.1.5-1_i386.deb http://ftp.us.debian.org/debian/pool/main/libx/libxtst/libxtst6_1.2.3-1_i386.deb http://ftp.us.debian.org/debian/pool/main/libx/libxtst/libxtst-dev_1.2.3-1_i386.deb http://ftp.us.debian.org/debian/pool/main/libx/libxxf86vm/libxxf86vm1_1.1.4-1+b2_i386.deb -http://ftp.us.debian.org/debian/pool/main/l/lcms2/liblcms2-2_2.9-1_i386.deb -http://ftp.us.debian.org/debian/pool/main/l/linux/linux-libc-dev_4.15.11-1_i386.deb -http://ftp.us.debian.org/debian/pool/main/l/lz4/liblz4-1_0.0~r131-2+b1_i386.deb -http://ftp.us.debian.org/debian/pool/main/l/lzo2/liblzo2-2_2.08-1.2+b2_i386.deb -http://ftp.us.debian.org/debian/pool/main/m/mesa/libegl1-mesa_17.3.7-1_i386.deb -http://ftp.us.debian.org/debian/pool/main/m/mesa/libegl1-mesa-dev_17.3.7-1_i386.deb -http://ftp.us.debian.org/debian/pool/main/m/mesa/libgbm1_17.3.7-1_i386.deb -http://ftp.us.debian.org/debian/pool/main/m/mesa/libgbm-dev_17.3.7-1_i386.deb -http://ftp.us.debian.org/debian/pool/main/m/mesa/libgl1-mesa-dev_17.3.7-1_i386.deb -http://ftp.us.debian.org/debian/pool/main/m/mesa/libgl1-mesa-glx_17.3.7-1_i386.deb -http://ftp.us.debian.org/debian/pool/main/m/mesa/libglapi-mesa_17.3.7-1_i386.deb -http://ftp.us.debian.org/debian/pool/main/m/mesa/libwayland-egl1-mesa_17.3.7-1_i386.deb -http://ftp.us.debian.org/debian/pool/main/m/mesa/mesa-common-dev_17.3.7-1_i386.deb +http://ftp.us.debian.org/debian/pool/main/l/lcms2/liblcms2-2_2.9-2_i386.deb +http://ftp.us.debian.org/debian/pool/main/l/linux/linux-libc-dev_4.17.17-1_i386.deb +http://ftp.us.debian.org/debian/pool/main/l/lz4/liblz4-1_1.8.2-1_i386.deb +http://ftp.us.debian.org/debian/pool/main/l/lzo2/liblzo2-2_2.10-0.1_i386.deb +http://ftp.us.debian.org/debian/pool/main/m/mesa/libegl1-mesa_18.1.6-1_i386.deb +http://ftp.us.debian.org/debian/pool/main/m/mesa/libegl1-mesa-dev_18.1.6-1_i386.deb +http://ftp.us.debian.org/debian/pool/main/m/mesa/libgbm1_18.1.6-1_i386.deb +http://ftp.us.debian.org/debian/pool/main/m/mesa/libgbm-dev_18.1.6-1_i386.deb +http://ftp.us.debian.org/debian/pool/main/m/mesa/libgl1-mesa-dev_18.1.6-1_i386.deb +http://ftp.us.debian.org/debian/pool/main/m/mesa/libgl1-mesa-glx_18.1.6-1_i386.deb +http://ftp.us.debian.org/debian/pool/main/m/mesa/libglapi-mesa_18.1.6-1_i386.deb +http://ftp.us.debian.org/debian/pool/main/m/mesa/libwayland-egl1-mesa_18.1.6-1_i386.deb +http://ftp.us.debian.org/debian/pool/main/m/mesa/mesa-common-dev_18.1.6-1_i386.deb http://ftp.us.debian.org/debian/pool/main/m/minizip/libminizip1_1.1-8+b1_i386.deb http://ftp.us.debian.org/debian/pool/main/m/minizip/libminizip-dev_1.1-8+b1_i386.deb http://ftp.us.debian.org/debian/pool/main/n/nettle/libhogweed4_3.4-1_i386.deb http://ftp.us.debian.org/debian/pool/main/n/nettle/libnettle6_3.4-1_i386.deb -http://ftp.us.debian.org/debian/pool/main/n/nspr/libnspr4_4.18-1_i386.deb -http://ftp.us.debian.org/debian/pool/main/n/nspr/libnspr4-dev_4.18-1_i386.deb -http://ftp.us.debian.org/debian/pool/main/n/nss/libnss3_3.35-2_i386.deb -http://ftp.us.debian.org/debian/pool/main/n/nss/libnss3-dev_3.35-2_i386.deb +http://ftp.us.debian.org/debian/pool/main/n/nspr/libnspr4_4.19-3_i386.deb +http://ftp.us.debian.org/debian/pool/main/n/nspr/libnspr4-dev_4.19-3_i386.deb +http://ftp.us.debian.org/debian/pool/main/n/nss/libnss3_3.38-1_i386.deb +http://ftp.us.debian.org/debian/pool/main/n/nss/libnss3-dev_3.38-1_i386.deb http://ftp.us.debian.org/debian/pool/main/o/openssl1.0/libssl1.0.2_1.0.2o-1_i386.deb -http://ftp.us.debian.org/debian/pool/main/o/openssl/libssl1.1_1.1.0h-2_i386.deb -http://ftp.us.debian.org/debian/pool/main/o/openssl/libssl-dev_1.1.0h-2_i386.deb -http://ftp.us.debian.org/debian/pool/main/o/opus/libopus0_1.2.1-1_i386.deb -http://ftp.us.debian.org/debian/pool/main/o/opus/libopus-dev_1.2.1-1_i386.deb +http://ftp.us.debian.org/debian/pool/main/o/openssl/libssl1.1_1.1.0h-4_i386.deb +http://ftp.us.debian.org/debian/pool/main/o/openssl/libssl-dev_1.1.0h-4_i386.deb +http://ftp.us.debian.org/debian/pool/main/o/opus/libopus0_1.3~beta+20180518-1_i386.deb +http://ftp.us.debian.org/debian/pool/main/o/opus/libopus-dev_1.3~beta+20180518-1_i386.deb http://ftp.us.debian.org/debian/pool/main/o/orbit2/liborbit-2-0_2.14.19-4_i386.deb http://ftp.us.debian.org/debian/pool/main/o/orbit2/liborbit2_2.14.19-4_i386.deb -http://ftp.us.debian.org/debian/pool/main/p/p11-kit/libp11-kit0_0.23.10-2_i386.deb -http://ftp.us.debian.org/debian/pool/main/p/pam/libpam0g_1.1.8-3.7_i386.deb -http://ftp.us.debian.org/debian/pool/main/p/pam/libpam0g-dev_1.1.8-3.7_i386.deb -http://ftp.us.debian.org/debian/pool/main/p/pango1.0/libpango-1.0-0_1.42.0-1_i386.deb -http://ftp.us.debian.org/debian/pool/main/p/pango1.0/libpango1.0-dev_1.42.0-1_i386.deb -http://ftp.us.debian.org/debian/pool/main/p/pango1.0/libpangocairo-1.0-0_1.42.0-1_i386.deb -http://ftp.us.debian.org/debian/pool/main/p/pango1.0/libpangoft2-1.0-0_1.42.0-1_i386.deb -http://ftp.us.debian.org/debian/pool/main/p/pango1.0/libpangoxft-1.0-0_1.42.0-1_i386.deb +http://ftp.us.debian.org/debian/pool/main/p/p11-kit/libp11-kit0_0.23.13-2_i386.deb +http://ftp.us.debian.org/debian/pool/main/p/pam/libpam0g_1.1.8-3.8_i386.deb +http://ftp.us.debian.org/debian/pool/main/p/pam/libpam0g-dev_1.1.8-3.8_i386.deb +http://ftp.us.debian.org/debian/pool/main/p/pango1.0/libpango-1.0-0_1.42.4-1_i386.deb +http://ftp.us.debian.org/debian/pool/main/p/pango1.0/libpango1.0-dev_1.42.4-1_i386.deb +http://ftp.us.debian.org/debian/pool/main/p/pango1.0/libpangocairo-1.0-0_1.42.4-1_i386.deb +http://ftp.us.debian.org/debian/pool/main/p/pango1.0/libpangoft2-1.0-0_1.42.4-1_i386.deb +http://ftp.us.debian.org/debian/pool/main/p/pango1.0/libpangoxft-1.0-0_1.42.4-1_i386.deb http://ftp.us.debian.org/debian/pool/main/p/pangox-compat/libpangox-1.0-0_0.0.2-5+b2_i386.deb http://ftp.us.debian.org/debian/pool/main/p/pciutils/libpci3_3.5.2-1_i386.deb http://ftp.us.debian.org/debian/pool/main/p/pciutils/libpci-dev_3.5.2-1_i386.deb -http://ftp.us.debian.org/debian/pool/main/p/pcre3/libpcre16-3_8.39-9_i386.deb -http://ftp.us.debian.org/debian/pool/main/p/pcre3/libpcre32-3_8.39-9_i386.deb -http://ftp.us.debian.org/debian/pool/main/p/pcre3/libpcre3_8.39-9_i386.deb -http://ftp.us.debian.org/debian/pool/main/p/pcre3/libpcre3-dev_8.39-9_i386.deb -http://ftp.us.debian.org/debian/pool/main/p/pcre3/libpcrecpp0v5_8.39-9_i386.deb +http://ftp.us.debian.org/debian/pool/main/p/pcre3/libpcre16-3_8.39-11_i386.deb +http://ftp.us.debian.org/debian/pool/main/p/pcre3/libpcre32-3_8.39-11_i386.deb +http://ftp.us.debian.org/debian/pool/main/p/pcre3/libpcre3_8.39-11_i386.deb +http://ftp.us.debian.org/debian/pool/main/p/pcre3/libpcre3-dev_8.39-11_i386.deb +http://ftp.us.debian.org/debian/pool/main/p/pcre3/libpcrecpp0v5_8.39-11_i386.deb http://ftp.us.debian.org/debian/pool/main/p/pixman/libpixman-1-0_0.34.0-2_i386.deb http://ftp.us.debian.org/debian/pool/main/p/pixman/libpixman-1-dev_0.34.0-2_i386.deb -http://ftp.us.debian.org/debian/pool/main/p/pulseaudio/libpulse0_11.1-4_i386.deb -http://ftp.us.debian.org/debian/pool/main/p/pulseaudio/libpulse-dev_11.1-4_i386.deb -http://ftp.us.debian.org/debian/pool/main/p/pulseaudio/libpulse-mainloop-glib0_11.1-4_i386.deb -http://ftp.us.debian.org/debian/pool/main/r/re2/libre2-4_20180301+dfsg-1_i386.deb -http://ftp.us.debian.org/debian/pool/main/r/re2/libre2-dev_20180301+dfsg-1_i386.deb +http://ftp.us.debian.org/debian/pool/main/p/pulseaudio/libpulse0_12.0-1_i386.deb +http://ftp.us.debian.org/debian/pool/main/p/pulseaudio/libpulse-dev_12.0-1_i386.deb +http://ftp.us.debian.org/debian/pool/main/p/pulseaudio/libpulse-mainloop-glib0_12.0-1_i386.deb +http://ftp.us.debian.org/debian/pool/main/r/re2/libre2-4_20180701+dfsg-1_i386.deb +http://ftp.us.debian.org/debian/pool/main/r/re2/libre2-dev_20180701+dfsg-1_i386.deb http://ftp.us.debian.org/debian/pool/main/s/snappy/libsnappy1v5_1.1.7-1_i386.deb http://ftp.us.debian.org/debian/pool/main/s/snappy/libsnappy-dev_1.1.7-1_i386.deb -http://ftp.us.debian.org/debian/pool/main/s/speech-dispatcher/libspeechd2_0.8.8-1_i386.deb -http://ftp.us.debian.org/debian/pool/main/s/speech-dispatcher/libspeechd-dev_0.8.8-1_i386.deb -http://ftp.us.debian.org/debian/pool/main/s/speech-dispatcher/speech-dispatcher_0.8.8-1_i386.deb -http://ftp.us.debian.org/debian/pool/main/s/sqlite3/libsqlite3-0_3.23.0-1_i386.deb -http://ftp.us.debian.org/debian/pool/main/s/systemd/libsystemd0_238-4_i386.deb -http://ftp.us.debian.org/debian/pool/main/s/systemd/libudev1_238-4_i386.deb -http://ftp.us.debian.org/debian/pool/main/s/systemd/libudev-dev_238-4_i386.deb +http://ftp.us.debian.org/debian/pool/main/s/speech-dispatcher/libspeechd2_0.8.8-6_i386.deb +http://ftp.us.debian.org/debian/pool/main/s/speech-dispatcher/libspeechd-dev_0.8.8-6_i386.deb +http://ftp.us.debian.org/debian/pool/main/s/speech-dispatcher/speech-dispatcher_0.8.8-6_i386.deb +http://ftp.us.debian.org/debian/pool/main/s/sqlite3/libsqlite3-0_3.24.0-1_i386.deb +http://ftp.us.debian.org/debian/pool/main/s/systemd/libsystemd0_239-7_i386.deb +http://ftp.us.debian.org/debian/pool/main/s/systemd/libudev1_239-7_i386.deb +http://ftp.us.debian.org/debian/pool/main/s/systemd/libudev-dev_239-7_i386.deb http://ftp.us.debian.org/debian/pool/main/t/tcp-wrappers/libwrap0_7.6.q-27_i386.deb -http://ftp.us.debian.org/debian/pool/main/t/tiff/libtiff5_4.0.9-4_i386.deb -http://ftp.us.debian.org/debian/pool/main/u/unbound/libunbound2_1.6.7-1_i386.deb -http://ftp.us.debian.org/debian/pool/main/u/util-linux/libblkid1_2.31.1-0.5_i386.deb -http://ftp.us.debian.org/debian/pool/main/u/util-linux/libmount1_2.31.1-0.5_i386.deb -http://ftp.us.debian.org/debian/pool/main/u/util-linux/libuuid1_2.31.1-0.5_i386.deb -http://ftp.us.debian.org/debian/pool/main/u/util-linux/uuid-dev_2.31.1-0.5_i386.deb -http://ftp.us.debian.org/debian/pool/main/w/wayland/libwayland-client0_1.14.0-2_i386.deb -http://ftp.us.debian.org/debian/pool/main/w/wayland/libwayland-cursor0_1.14.0-2_i386.deb -http://ftp.us.debian.org/debian/pool/main/w/wayland/libwayland-dev_1.14.0-2_i386.deb -http://ftp.us.debian.org/debian/pool/main/w/wayland/libwayland-server0_1.14.0-2_i386.deb -http://ftp.us.debian.org/debian/pool/main/w/wayland-protocols/wayland-protocols_1.13-1_all.deb -http://ftp.us.debian.org/debian/pool/main/x/xft/libxft2_2.3.2-1+b2_i386.deb +http://ftp.us.debian.org/debian/pool/main/t/tiff/libtiff5_4.0.9-6_i386.deb +http://ftp.us.debian.org/debian/pool/main/u/unbound/libunbound2_1.7.3-1_i386.deb +http://ftp.us.debian.org/debian/pool/main/u/util-linux/libblkid1_2.32.1-0.1_i386.deb +http://ftp.us.debian.org/debian/pool/main/u/util-linux/libmount1_2.32.1-0.1_i386.deb +http://ftp.us.debian.org/debian/pool/main/u/util-linux/libuuid1_2.32.1-0.1_i386.deb +http://ftp.us.debian.org/debian/pool/main/u/util-linux/uuid-dev_2.32.1-0.1_i386.deb +http://ftp.us.debian.org/debian/pool/main/v/vulkan/libvulkan1_1.1.73+dfsg-1_i386.deb +http://ftp.us.debian.org/debian/pool/main/w/wayland/libwayland-client0_1.15.0-2_i386.deb +http://ftp.us.debian.org/debian/pool/main/w/wayland/libwayland-cursor0_1.15.0-2_i386.deb +http://ftp.us.debian.org/debian/pool/main/w/wayland/libwayland-dev_1.15.0-2_i386.deb +http://ftp.us.debian.org/debian/pool/main/w/wayland/libwayland-egl1_1.15.0-2_i386.deb +http://ftp.us.debian.org/debian/pool/main/w/wayland/libwayland-server0_1.15.0-2_i386.deb +http://ftp.us.debian.org/debian/pool/main/w/wayland-protocols/wayland-protocols_1.16-1_all.deb +http://ftp.us.debian.org/debian/pool/main/x/xft/libxft2_2.3.2-2_i386.deb http://ftp.us.debian.org/debian/pool/main/x/xorgproto/x11proto-composite-dev_2018.4-4_all.deb http://ftp.us.debian.org/debian/pool/main/x/xorgproto/x11proto-damage-dev_2018.4-4_all.deb http://ftp.us.debian.org/debian/pool/main/x/xorgproto/x11proto-dev_2018.4-4_all.deb @@ -305,5 +316,5 @@ http://ftp.us.debian.org/debian/pool/main/x/xorgproto/x11proto-scrnsaver-dev_201 http://ftp.us.debian.org/debian/pool/main/x/xorgproto/x11proto-xext-dev_2018.4-4_all.deb http://ftp.us.debian.org/debian/pool/main/x/xorgproto/x11proto-xinerama-dev_2018.4-4_all.deb http://ftp.us.debian.org/debian/pool/main/x/xz-utils/liblzma5_5.2.2-1.3_i386.deb -http://ftp.us.debian.org/debian/pool/main/z/zlib/zlib1g_1.2.8.dfsg-5_i386.deb -http://ftp.us.debian.org/debian/pool/main/z/zlib/zlib1g-dev_1.2.8.dfsg-5_i386.deb +http://ftp.us.debian.org/debian/pool/main/z/zlib/zlib1g_1.2.11.dfsg-1_i386.deb +http://ftp.us.debian.org/debian/pool/main/z/zlib/zlib1g-dev_1.2.11.dfsg-1_i386.deb diff --git a/chromium/build/linux/sysroot_scripts/packagelist.sid.mips64el b/chromium/build/linux/sysroot_scripts/packagelist.sid.mips64el index e913cb9dc31..5a115d085b0 100644 --- a/chromium/build/linux/sysroot_scripts/packagelist.sid.mips64el +++ b/chromium/build/linux/sysroot_scripts/packagelist.sid.mips64el @@ -1,77 +1,83 @@ -http://ftp.us.debian.org/debian/pool/main/a/alsa-lib/libasound2_1.1.3-5_mips64el.deb -http://ftp.us.debian.org/debian/pool/main/a/alsa-lib/libasound2-dev_1.1.3-5_mips64el.deb +http://ftp.us.debian.org/debian/pool/main/a/alsa-lib/libasound2_1.1.6-1_mips64el.deb +http://ftp.us.debian.org/debian/pool/main/a/alsa-lib/libasound2-dev_1.1.6-1_mips64el.deb http://ftp.us.debian.org/debian/pool/main/a/atk1.0/libatk1.0-0_2.28.1-1_mips64el.deb http://ftp.us.debian.org/debian/pool/main/a/atk1.0/libatk1.0-dev_2.28.1-1_mips64el.deb http://ftp.us.debian.org/debian/pool/main/a/at-spi2-atk/libatk-bridge2.0-0_2.26.2-1_mips64el.deb http://ftp.us.debian.org/debian/pool/main/a/at-spi2-atk/libatk-bridge2.0-dev_2.26.2-1_mips64el.deb -http://ftp.us.debian.org/debian/pool/main/a/at-spi2-core/libatspi2.0-0_2.28.0-1_mips64el.deb -http://ftp.us.debian.org/debian/pool/main/a/at-spi2-core/libatspi2.0-dev_2.28.0-1_mips64el.deb +http://ftp.us.debian.org/debian/pool/main/a/at-spi2-core/libatspi2.0-0_2.28.0-3_mips64el.deb +http://ftp.us.debian.org/debian/pool/main/a/at-spi2-core/libatspi2.0-dev_2.28.0-3_mips64el.deb http://ftp.us.debian.org/debian/pool/main/a/attr/libattr1_2.4.47-2+b2_mips64el.deb -http://ftp.us.debian.org/debian/pool/main/a/audit/libaudit1_2.8.2-1_mips64el.deb -http://ftp.us.debian.org/debian/pool/main/a/avahi/libavahi-client3_0.7-3.1_mips64el.deb -http://ftp.us.debian.org/debian/pool/main/a/avahi/libavahi-common3_0.7-3.1_mips64el.deb -http://ftp.us.debian.org/debian/pool/main/b/bluez/libbluetooth3_5.47-1+b1_mips64el.deb -http://ftp.us.debian.org/debian/pool/main/b/bluez/libbluetooth-dev_5.47-1+b1_mips64el.deb -http://ftp.us.debian.org/debian/pool/main/b/brltty/libbrlapi0.6_5.6-3_mips64el.deb -http://ftp.us.debian.org/debian/pool/main/b/brltty/libbrlapi-dev_5.6-3_mips64el.deb -http://ftp.us.debian.org/debian/pool/main/c/cairo/libcairo2_1.15.10-2_mips64el.deb -http://ftp.us.debian.org/debian/pool/main/c/cairo/libcairo2-dev_1.15.10-2_mips64el.deb -http://ftp.us.debian.org/debian/pool/main/c/cairo/libcairo-gobject2_1.15.10-2_mips64el.deb -http://ftp.us.debian.org/debian/pool/main/c/cairo/libcairo-script-interpreter2_1.15.10-2_mips64el.deb +http://ftp.us.debian.org/debian/pool/main/a/audit/libaudit1_2.8.3-1+b1_mips64el.deb +http://ftp.us.debian.org/debian/pool/main/a/avahi/libavahi-client3_0.7-4_mips64el.deb +http://ftp.us.debian.org/debian/pool/main/a/avahi/libavahi-common3_0.7-4_mips64el.deb +http://ftp.us.debian.org/debian/pool/main/b/bluez/libbluetooth3_5.50-1_mips64el.deb +http://ftp.us.debian.org/debian/pool/main/b/bluez/libbluetooth-dev_5.50-1_mips64el.deb +http://ftp.us.debian.org/debian/pool/main/b/brltty/libbrlapi0.6_5.6-5_mips64el.deb +http://ftp.us.debian.org/debian/pool/main/b/brltty/libbrlapi-dev_5.6-5_mips64el.deb +http://ftp.us.debian.org/debian/pool/main/c/cairo/libcairo2_1.15.10-3_mips64el.deb +http://ftp.us.debian.org/debian/pool/main/c/cairo/libcairo2-dev_1.15.10-3_mips64el.deb +http://ftp.us.debian.org/debian/pool/main/c/cairo/libcairo-gobject2_1.15.10-3_mips64el.deb +http://ftp.us.debian.org/debian/pool/main/c/cairo/libcairo-script-interpreter2_1.15.10-3_mips64el.deb http://ftp.us.debian.org/debian/pool/main/c/colord/libcolord2_1.3.3-2_mips64el.deb -http://ftp.us.debian.org/debian/pool/main/c/cups/libcups2_2.2.7-2_mips64el.deb -http://ftp.us.debian.org/debian/pool/main/c/cups/libcups2-dev_2.2.7-2_mips64el.deb -http://ftp.us.debian.org/debian/pool/main/c/cups/libcupsimage2_2.2.7-2_mips64el.deb -http://ftp.us.debian.org/debian/pool/main/c/cups/libcupsimage2-dev_2.2.7-2_mips64el.deb -http://ftp.us.debian.org/debian/pool/main/d/db5.3/libdb5.3_5.3.28-13.1+b1_mips64el.deb -http://ftp.us.debian.org/debian/pool/main/d/dbus-glib/libdbus-glib-1-2_0.110-2_mips64el.deb -http://ftp.us.debian.org/debian/pool/main/d/dbus/libdbus-1-3_1.12.6-2_mips64el.deb -http://ftp.us.debian.org/debian/pool/main/d/dbus/libdbus-1-dev_1.12.6-2_mips64el.deb -http://ftp.us.debian.org/debian/pool/main/e/e2fsprogs/comerr-dev_2.1-1.44.1-1_mips64el.deb -http://ftp.us.debian.org/debian/pool/main/e/e2fsprogs/libcom-err2_1.44.1-1_mips64el.deb -http://ftp.us.debian.org/debian/pool/main/e/elfutils/libelf1_0.170-0.3_mips64el.deb -http://ftp.us.debian.org/debian/pool/main/e/elfutils/libelf-dev_0.170-0.3_mips64el.deb -http://ftp.us.debian.org/debian/pool/main/e/expat/libexpat1_2.2.5-3_mips64el.deb -http://ftp.us.debian.org/debian/pool/main/e/expat/libexpat1-dev_2.2.5-3_mips64el.deb -http://ftp.us.debian.org/debian/pool/main/f/flac/libflac8_1.3.2-1_mips64el.deb -http://ftp.us.debian.org/debian/pool/main/f/flac/libflac-dev_1.3.2-1_mips64el.deb -http://ftp.us.debian.org/debian/pool/main/f/fontconfig/libfontconfig1_2.12.6-0.1_mips64el.deb -http://ftp.us.debian.org/debian/pool/main/f/fontconfig/libfontconfig1-dev_2.12.6-0.1_mips64el.deb +http://ftp.us.debian.org/debian/pool/main/c/cups/libcups2_2.2.8-5_mips64el.deb +http://ftp.us.debian.org/debian/pool/main/c/cups/libcups2-dev_2.2.8-5_mips64el.deb +http://ftp.us.debian.org/debian/pool/main/c/cups/libcupsimage2_2.2.8-5_mips64el.deb +http://ftp.us.debian.org/debian/pool/main/c/cups/libcupsimage2-dev_2.2.8-5_mips64el.deb +http://ftp.us.debian.org/debian/pool/main/d/db5.3/libdb5.3_5.3.28+dfsg1-0.1_mips64el.deb +http://ftp.us.debian.org/debian/pool/main/d/dbus-glib/libdbus-glib-1-2_0.110-3_mips64el.deb +http://ftp.us.debian.org/debian/pool/main/d/dbus/libdbus-1-3_1.12.10-1_mips64el.deb +http://ftp.us.debian.org/debian/pool/main/d/dbus/libdbus-1-dev_1.12.10-1_mips64el.deb +http://ftp.us.debian.org/debian/pool/main/e/e2fsprogs/comerr-dev_2.1-1.44.4-1_mips64el.deb +http://ftp.us.debian.org/debian/pool/main/e/e2fsprogs/libcom-err2_1.44.4-1_mips64el.deb +http://ftp.us.debian.org/debian/pool/main/e/elfutils/libelf1_0.170-0.5_mips64el.deb +http://ftp.us.debian.org/debian/pool/main/e/elfutils/libelf-dev_0.170-0.5_mips64el.deb +http://ftp.us.debian.org/debian/pool/main/e/expat/libexpat1_2.2.6-1_mips64el.deb +http://ftp.us.debian.org/debian/pool/main/e/expat/libexpat1-dev_2.2.6-1_mips64el.deb +http://ftp.us.debian.org/debian/pool/main/f/flac/libflac8_1.3.2-3_mips64el.deb +http://ftp.us.debian.org/debian/pool/main/f/flac/libflac-dev_1.3.2-3_mips64el.deb +http://ftp.us.debian.org/debian/pool/main/f/fontconfig/libfontconfig1_2.13.0-5_mips64el.deb +http://ftp.us.debian.org/debian/pool/main/f/fontconfig/libfontconfig1-dev_2.13.0-5_mips64el.deb http://ftp.us.debian.org/debian/pool/main/f/freetype/libfreetype6_2.8.1-2_mips64el.deb http://ftp.us.debian.org/debian/pool/main/f/freetype/libfreetype6-dev_2.8.1-2_mips64el.deb -http://ftp.us.debian.org/debian/pool/main/f/fribidi/libfribidi0_0.19.7-2_mips64el.deb -http://ftp.us.debian.org/debian/pool/main/g/gcc-6/libgcc-6-dev_6.4.0-15_mips64el.deb -http://ftp.us.debian.org/debian/pool/main/g/gcc-6/libstdc++-6-dev_6.4.0-15_mips64el.deb -http://ftp.us.debian.org/debian/pool/main/g/gcc-8/libatomic1_8-20180402-1_mips64el.deb -http://ftp.us.debian.org/debian/pool/main/g/gcc-8/libgcc1_8-20180402-1_mips64el.deb -http://ftp.us.debian.org/debian/pool/main/g/gcc-8/libgomp1_8-20180402-1_mips64el.deb -http://ftp.us.debian.org/debian/pool/main/g/gcc-8/libstdc++6_8-20180402-1_mips64el.deb -http://ftp.us.debian.org/debian/pool/main/g/gdk-pixbuf/libgdk-pixbuf2.0-0_2.36.11-2_mips64el.deb -http://ftp.us.debian.org/debian/pool/main/g/gdk-pixbuf/libgdk-pixbuf2.0-dev_2.36.11-2_mips64el.deb -http://ftp.us.debian.org/debian/pool/main/g/glib2.0/libglib2.0-0_2.56.0-6_mips64el.deb -http://ftp.us.debian.org/debian/pool/main/g/glib2.0/libglib2.0-dev_2.56.0-6_mips64el.deb -http://ftp.us.debian.org/debian/pool/main/g/glibc/libc6_2.27-3_mips64el.deb -http://ftp.us.debian.org/debian/pool/main/g/glibc/libc6-dev_2.27-3_mips64el.deb +http://ftp.us.debian.org/debian/pool/main/f/fribidi/libfribidi0_1.0.5-3_mips64el.deb +http://ftp.us.debian.org/debian/pool/main/f/fribidi/libfribidi-dev_1.0.5-3_mips64el.deb +http://ftp.us.debian.org/debian/pool/main/g/gcc-6/libgcc-6-dev_6.4.0-20_mips64el.deb +http://ftp.us.debian.org/debian/pool/main/g/gcc-6/libstdc++-6-dev_6.4.0-20_mips64el.deb +http://ftp.us.debian.org/debian/pool/main/g/gcc-8/libatomic1_8.2.0-4_mips64el.deb +http://ftp.us.debian.org/debian/pool/main/g/gcc-8/libgcc1_8.2.0-4_mips64el.deb +http://ftp.us.debian.org/debian/pool/main/g/gcc-8/libgomp1_8.2.0-4_mips64el.deb +http://ftp.us.debian.org/debian/pool/main/g/gcc-8/libstdc++6_8.2.0-4_mips64el.deb +http://ftp.us.debian.org/debian/pool/main/g/gdk-pixbuf/libgdk-pixbuf2.0-0_2.36.12-1_mips64el.deb +http://ftp.us.debian.org/debian/pool/main/g/gdk-pixbuf/libgdk-pixbuf2.0-dev_2.36.12-1_mips64el.deb +http://ftp.us.debian.org/debian/pool/main/g/glib2.0/libglib2.0-0_2.56.1-2_mips64el.deb +http://ftp.us.debian.org/debian/pool/main/g/glib2.0/libglib2.0-dev_2.56.1-2_mips64el.deb +http://ftp.us.debian.org/debian/pool/main/g/glibc/libc6_2.27-5_mips64el.deb +http://ftp.us.debian.org/debian/pool/main/g/glibc/libc6-dev_2.27-5_mips64el.deb http://ftp.us.debian.org/debian/pool/main/g/gmp/libgmp10_6.1.2+dfsg-3_mips64el.deb -http://ftp.us.debian.org/debian/pool/main/g/gnutls28/libgnutls28-dev_3.5.18-1_mips64el.deb -http://ftp.us.debian.org/debian/pool/main/g/gnutls28/libgnutls30_3.5.18-1_mips64el.deb -http://ftp.us.debian.org/debian/pool/main/g/gnutls28/libgnutls-dane0_3.5.18-1_mips64el.deb -http://ftp.us.debian.org/debian/pool/main/g/gnutls28/libgnutls-openssl27_3.5.18-1_mips64el.deb -http://ftp.us.debian.org/debian/pool/main/g/gnutls28/libgnutlsxx28_3.5.18-1_mips64el.deb +http://ftp.us.debian.org/debian/pool/main/g/gnutls28/libgnutls28-dev_3.5.19-1_mips64el.deb +http://ftp.us.debian.org/debian/pool/main/g/gnutls28/libgnutls30_3.5.19-1_mips64el.deb +http://ftp.us.debian.org/debian/pool/main/g/gnutls28/libgnutls-dane0_3.5.19-1_mips64el.deb +http://ftp.us.debian.org/debian/pool/main/g/gnutls28/libgnutls-openssl27_3.5.19-1_mips64el.deb +http://ftp.us.debian.org/debian/pool/main/g/gnutls28/libgnutlsxx28_3.5.19-1_mips64el.deb +http://ftp.us.debian.org/debian/pool/main/g/graphene/libgraphene-1.0-0_1.8.2-1_mips64el.deb +http://ftp.us.debian.org/debian/pool/main/g/graphene/libgraphene-1.0-dev_1.8.2-1_mips64el.deb http://ftp.us.debian.org/debian/pool/main/g/graphite2/libgraphite2-3_1.3.11-2_mips64el.deb http://ftp.us.debian.org/debian/pool/main/g/graphite2/libgraphite2-dev_1.3.11-2_mips64el.deb -http://ftp.us.debian.org/debian/pool/main/g/gtk+2.0/libgtk2.0-0_2.24.32-1_mips64el.deb -http://ftp.us.debian.org/debian/pool/main/g/gtk+2.0/libgtk2.0-dev_2.24.32-1_mips64el.deb -http://ftp.us.debian.org/debian/pool/main/g/gtk+3.0/libgtk-3-0_3.22.29-3_mips64el.deb -http://ftp.us.debian.org/debian/pool/main/g/gtk+3.0/libgtk-3-dev_3.22.29-3_mips64el.deb -http://ftp.us.debian.org/debian/pool/main/h/harfbuzz/libharfbuzz0b_1.7.2-1_mips64el.deb -http://ftp.us.debian.org/debian/pool/main/h/harfbuzz/libharfbuzz-dev_1.7.2-1_mips64el.deb -http://ftp.us.debian.org/debian/pool/main/h/harfbuzz/libharfbuzz-gobject0_1.7.2-1_mips64el.deb -http://ftp.us.debian.org/debian/pool/main/h/harfbuzz/libharfbuzz-icu0_1.7.2-1_mips64el.deb +http://ftp.us.debian.org/debian/pool/main/g/gtk+2.0/libgtk2.0-0_2.24.32-2_mips64el.deb +http://ftp.us.debian.org/debian/pool/main/g/gtk+3.0/libgtk-3-0_3.22.30-2_mips64el.deb +http://ftp.us.debian.org/debian/pool/main/g/gtk+3.0/libgtk-3-dev_3.22.30-2_mips64el.deb +http://ftp.us.debian.org/debian/pool/main/g/gtk+4.0/libgtk-4-0_3.91.2-1_mips64el.deb +http://ftp.us.debian.org/debian/pool/main/g/gtk+4.0/libgtk-4-dev_3.91.2-1_mips64el.deb +http://ftp.us.debian.org/debian/pool/main/h/harfbuzz/libharfbuzz0b_1.8.8-2_mips64el.deb +http://ftp.us.debian.org/debian/pool/main/h/harfbuzz/libharfbuzz-dev_1.8.8-2_mips64el.deb +http://ftp.us.debian.org/debian/pool/main/h/harfbuzz/libharfbuzz-gobject0_1.8.8-2_mips64el.deb +http://ftp.us.debian.org/debian/pool/main/h/harfbuzz/libharfbuzz-icu0_1.8.8-2_mips64el.deb +http://ftp.us.debian.org/debian/pool/main/i/icu-le-hb/libicu-le-hb0_1.0.3+git161113-5_mips64el.deb http://ftp.us.debian.org/debian/pool/main/i/icu/libicu57_57.1-9_mips64el.deb +http://ftp.us.debian.org/debian/pool/main/i/icu/libicu60_60.2-6_mips64el.deb http://ftp.us.debian.org/debian/pool/main/j/jbigkit/libjbig0_2.1-3.1+b2_mips64el.deb -http://ftp.us.debian.org/debian/pool/main/j/json-glib/libjson-glib-1.0-0_1.4.2-3_mips64el.deb -http://ftp.us.debian.org/debian/pool/main/k/keyutils/libkeyutils1_1.5.9-9.2_mips64el.deb +http://ftp.us.debian.org/debian/pool/main/j/json-glib/libjson-glib-1.0-0_1.4.2-4_mips64el.deb +http://ftp.us.debian.org/debian/pool/main/k/keyutils/libkeyutils1_1.5.9-9.3_mips64el.deb http://ftp.us.debian.org/debian/pool/main/k/krb5/krb5-multidev_1.16-2_mips64el.deb http://ftp.us.debian.org/debian/pool/main/k/krb5/libgssapi-krb5-2_1.16-2_mips64el.deb http://ftp.us.debian.org/debian/pool/main/k/krb5/libgssrpc4_1.16-2_mips64el.deb @@ -82,47 +88,49 @@ http://ftp.us.debian.org/debian/pool/main/k/krb5/libkdb5-9_1.16-2_mips64el.deb http://ftp.us.debian.org/debian/pool/main/k/krb5/libkrb5-3_1.16-2_mips64el.deb http://ftp.us.debian.org/debian/pool/main/k/krb5/libkrb5-dev_1.16-2_mips64el.deb http://ftp.us.debian.org/debian/pool/main/k/krb5/libkrb5support0_1.16-2_mips64el.deb -http://ftp.us.debian.org/debian/pool/main/liba/libappindicator/libappindicator1_0.4.92-5_mips64el.deb -http://ftp.us.debian.org/debian/pool/main/liba/libappindicator/libappindicator3-1_0.4.92-5_mips64el.deb -http://ftp.us.debian.org/debian/pool/main/liba/libappindicator/libappindicator3-dev_0.4.92-5_mips64el.deb -http://ftp.us.debian.org/debian/pool/main/liba/libappindicator/libappindicator-dev_0.4.92-5_mips64el.deb +http://ftp.us.debian.org/debian/pool/main/liba/libappindicator/libappindicator1_0.4.92-6_mips64el.deb +http://ftp.us.debian.org/debian/pool/main/liba/libappindicator/libappindicator3-1_0.4.92-6_mips64el.deb +http://ftp.us.debian.org/debian/pool/main/liba/libappindicator/libappindicator3-dev_0.4.92-6_mips64el.deb +http://ftp.us.debian.org/debian/pool/main/liba/libappindicator/libappindicator-dev_0.4.92-6_mips64el.deb http://ftp.us.debian.org/debian/pool/main/liba/libasyncns/libasyncns0_0.8-6_mips64el.deb -http://ftp.us.debian.org/debian/pool/main/libb/libbsd/libbsd0_0.8.7-1_mips64el.deb +http://ftp.us.debian.org/debian/pool/main/libb/libbsd/libbsd0_0.9.1-1_mips64el.deb http://ftp.us.debian.org/debian/pool/main/libc/libcap2/libcap2_2.25-1.2_mips64el.deb http://ftp.us.debian.org/debian/pool/main/libc/libcap2/libcap-dev_2.25-1.2_mips64el.deb -http://ftp.us.debian.org/debian/pool/main/libc/libcap-ng/libcap-ng0_0.7.7-3.1+b1_mips64el.deb -http://ftp.us.debian.org/debian/pool/main/libd/libdatrie/libdatrie1_0.2.10-7_mips64el.deb -http://ftp.us.debian.org/debian/pool/main/libd/libdbusmenu/libdbusmenu-glib4_16.04.1+17.04.20170109.1-5_mips64el.deb -http://ftp.us.debian.org/debian/pool/main/libd/libdbusmenu/libdbusmenu-glib-dev_16.04.1+17.04.20170109.1-5_mips64el.deb -http://ftp.us.debian.org/debian/pool/main/libd/libdbusmenu/libdbusmenu-gtk3-4_16.04.1+17.04.20170109.1-5_mips64el.deb -http://ftp.us.debian.org/debian/pool/main/libd/libdbusmenu/libdbusmenu-gtk4_16.04.1+17.04.20170109.1-5_mips64el.deb -http://ftp.us.debian.org/debian/pool/main/libd/libdrm/libdrm2_2.4.91-2_mips64el.deb -http://ftp.us.debian.org/debian/pool/main/libd/libdrm/libdrm-amdgpu1_2.4.91-2_mips64el.deb -http://ftp.us.debian.org/debian/pool/main/libd/libdrm/libdrm-dev_2.4.91-2_mips64el.deb -http://ftp.us.debian.org/debian/pool/main/libd/libdrm/libdrm-nouveau2_2.4.91-2_mips64el.deb -http://ftp.us.debian.org/debian/pool/main/libd/libdrm/libdrm-radeon1_2.4.91-2_mips64el.deb +http://ftp.us.debian.org/debian/pool/main/libc/libcap-ng/libcap-ng0_0.7.9-1_mips64el.deb +http://ftp.us.debian.org/debian/pool/main/libd/libdatrie/libdatrie1_0.2.12-1_mips64el.deb +http://ftp.us.debian.org/debian/pool/main/libd/libdbusmenu/libdbusmenu-glib4_16.04.1+18.04.20171206-1_mips64el.deb +http://ftp.us.debian.org/debian/pool/main/libd/libdbusmenu/libdbusmenu-glib-dev_16.04.1+18.04.20171206-1_mips64el.deb +http://ftp.us.debian.org/debian/pool/main/libd/libdbusmenu/libdbusmenu-gtk3-4_16.04.1+18.04.20171206-1_mips64el.deb +http://ftp.us.debian.org/debian/pool/main/libd/libdbusmenu/libdbusmenu-gtk4_16.04.1+18.04.20171206-1_mips64el.deb +http://ftp.us.debian.org/debian/pool/main/libd/libdrm/libdrm2_2.4.93-1_mips64el.deb +http://ftp.us.debian.org/debian/pool/main/libd/libdrm/libdrm-amdgpu1_2.4.93-1_mips64el.deb +http://ftp.us.debian.org/debian/pool/main/libd/libdrm/libdrm-dev_2.4.93-1_mips64el.deb +http://ftp.us.debian.org/debian/pool/main/libd/libdrm/libdrm-nouveau2_2.4.93-1_mips64el.deb +http://ftp.us.debian.org/debian/pool/main/libd/libdrm/libdrm-radeon1_2.4.93-1_mips64el.deb http://ftp.us.debian.org/debian/pool/main/libe/libepoxy/libepoxy0_1.4.3-1_mips64el.deb http://ftp.us.debian.org/debian/pool/main/libe/libepoxy/libepoxy-dev_1.4.3-1_mips64el.deb http://ftp.us.debian.org/debian/pool/main/libe/libevent/libevent-2.1-6_2.1.8-stable-4_mips64el.deb http://ftp.us.debian.org/debian/pool/main/libf/libffi/libffi6_3.2.1-8_mips64el.deb +http://ftp.us.debian.org/debian/pool/main/libf/libffi/libffi7_3.3~rc0-6_mips64el.deb http://ftp.us.debian.org/debian/pool/main/libf/libffi/libffi-dev_3.2.1-8_mips64el.deb -http://ftp.us.debian.org/debian/pool/main/libg/libgcrypt20/libgcrypt20_1.8.2-2_mips64el.deb -http://ftp.us.debian.org/debian/pool/main/libg/libgcrypt20/libgcrypt20-dev_1.8.2-2_mips64el.deb -http://ftp.us.debian.org/debian/pool/main/libg/libglvnd/libegl1_1.0.0-2_mips64el.deb -http://ftp.us.debian.org/debian/pool/main/libg/libglvnd/libgl1_1.0.0-2_mips64el.deb -http://ftp.us.debian.org/debian/pool/main/libg/libglvnd/libgles2_1.0.0-2_mips64el.deb -http://ftp.us.debian.org/debian/pool/main/libg/libglvnd/libglvnd0_1.0.0-2_mips64el.deb -http://ftp.us.debian.org/debian/pool/main/libg/libglvnd/libglvnd-dev_1.0.0-2_mips64el.deb -http://ftp.us.debian.org/debian/pool/main/libg/libglvnd/libglx0_1.0.0-2_mips64el.deb -http://ftp.us.debian.org/debian/pool/main/libg/libglvnd/libopengl0_1.0.0-2_mips64el.deb +http://ftp.us.debian.org/debian/pool/main/libg/libgcrypt20/libgcrypt20_1.8.3-1_mips64el.deb +http://ftp.us.debian.org/debian/pool/main/libg/libgcrypt20/libgcrypt20-dev_1.8.3-1_mips64el.deb +http://ftp.us.debian.org/debian/pool/main/libg/libglvnd/libegl1_1.1.0-1_mips64el.deb +http://ftp.us.debian.org/debian/pool/main/libg/libglvnd/libgl1_1.1.0-1_mips64el.deb +http://ftp.us.debian.org/debian/pool/main/libg/libglvnd/libgles1_1.1.0-1_mips64el.deb +http://ftp.us.debian.org/debian/pool/main/libg/libglvnd/libgles2_1.1.0-1_mips64el.deb +http://ftp.us.debian.org/debian/pool/main/libg/libglvnd/libglvnd0_1.1.0-1_mips64el.deb +http://ftp.us.debian.org/debian/pool/main/libg/libglvnd/libglvnd-dev_1.1.0-1_mips64el.deb +http://ftp.us.debian.org/debian/pool/main/libg/libglvnd/libglx0_1.1.0-1_mips64el.deb +http://ftp.us.debian.org/debian/pool/main/libg/libglvnd/libopengl0_1.1.0-1_mips64el.deb http://ftp.us.debian.org/debian/pool/main/libg/libgnome-keyring/libgnome-keyring0_3.12.0-1+b2_mips64el.deb http://ftp.us.debian.org/debian/pool/main/libg/libgnome-keyring/libgnome-keyring-dev_3.12.0-1+b2_mips64el.deb -http://ftp.us.debian.org/debian/pool/main/libg/libgpg-error/libgpg-error0_1.28-2_mips64el.deb -http://ftp.us.debian.org/debian/pool/main/libg/libgpg-error/libgpg-error-dev_1.28-2_mips64el.deb +http://ftp.us.debian.org/debian/pool/main/libg/libgpg-error/libgpg-error0_1.32-1_mips64el.deb +http://ftp.us.debian.org/debian/pool/main/libg/libgpg-error/libgpg-error-dev_1.32-1_mips64el.deb http://ftp.us.debian.org/debian/pool/main/libi/libice/libice6_1.0.9-2_mips64el.deb http://ftp.us.debian.org/debian/pool/main/libi/libidl/libidl-2-0_0.8.14-4_mips64el.deb -http://ftp.us.debian.org/debian/pool/main/libi/libidn2/libidn2-0_2.0.4-1.1_mips64el.deb -http://ftp.us.debian.org/debian/pool/main/libi/libidn/libidn11_1.33-2.1_mips64el.deb +http://ftp.us.debian.org/debian/pool/main/libi/libidn2/libidn2-0_2.0.4-2.2_mips64el.deb +http://ftp.us.debian.org/debian/pool/main/libi/libidn/libidn11_1.33-2.2_mips64el.deb http://ftp.us.debian.org/debian/pool/main/libi/libindicator/libindicator3-7_0.5.0-3+b1_mips64el.deb http://ftp.us.debian.org/debian/pool/main/libi/libindicator/libindicator7_0.5.0-3+b1_mips64el.deb http://ftp.us.debian.org/debian/pool/main/libj/libjpeg-turbo/libjpeg62-turbo_1.5.2-2+b1_mips64el.deb @@ -133,25 +141,26 @@ http://ftp.us.debian.org/debian/pool/main/libn/libnss-db/libnss-db_2.2.3pre1-6+b http://ftp.us.debian.org/debian/pool/main/libo/libogg/libogg0_1.3.2-1+b1_mips64el.deb http://ftp.us.debian.org/debian/pool/main/libo/libogg/libogg-dev_1.3.2-1+b1_mips64el.deb http://ftp.us.debian.org/debian/pool/main/libp/libpciaccess/libpciaccess0_0.14-1_mips64el.deb -http://ftp.us.debian.org/debian/pool/main/libp/libpng1.6/libpng16-16_1.6.34-1_mips64el.deb -http://ftp.us.debian.org/debian/pool/main/libp/libpng1.6/libpng-dev_1.6.34-1_mips64el.deb +http://ftp.us.debian.org/debian/pool/main/libp/libpng1.6/libpng16-16_1.6.34-2_mips64el.deb +http://ftp.us.debian.org/debian/pool/main/libp/libpng1.6/libpng-dev_1.6.34-2_mips64el.deb +http://ftp.us.debian.org/debian/pool/main/libp/libpsl/libpsl5_0.20.2-1_mips64el.deb http://ftp.us.debian.org/debian/pool/main/libp/libpthread-stubs/libpthread-stubs0-dev_0.3-4_mips64el.deb http://ftp.us.debian.org/debian/pool/main/libr/librest/librest-0.7-0_0.8.0-2_mips64el.deb -http://ftp.us.debian.org/debian/pool/main/libs/libselinux/libselinux1_2.7-2+b2_mips64el.deb +http://ftp.us.debian.org/debian/pool/main/libs/libselinux/libselinux1_2.8-1+b1_mips64el.deb http://ftp.us.debian.org/debian/pool/main/libs/libsm/libsm6_1.2.2-1+b3_mips64el.deb http://ftp.us.debian.org/debian/pool/main/libs/libsndfile/libsndfile1_1.0.28-4+b1_mips64el.deb -http://ftp.us.debian.org/debian/pool/main/libs/libsoup2.4/libsoup2.4-1_2.62.0-1_mips64el.deb -http://ftp.us.debian.org/debian/pool/main/libs/libsoup2.4/libsoup-gnome2.4-1_2.62.0-1_mips64el.deb -http://ftp.us.debian.org/debian/pool/main/libt/libtasn1-6/libtasn1-6_4.13-2_mips64el.deb -http://ftp.us.debian.org/debian/pool/main/libt/libthai/libthai0_0.1.27-2_mips64el.deb -http://ftp.us.debian.org/debian/pool/main/libt/libtool/libltdl7_2.4.6-2_mips64el.deb -http://ftp.us.debian.org/debian/pool/main/libu/libunistring/libunistring2_0.9.8-1_mips64el.deb -http://ftp.us.debian.org/debian/pool/main/libv/libva/libva2_2.1.0-3_mips64el.deb -http://ftp.us.debian.org/debian/pool/main/libv/libva/libva-dev_2.1.0-3_mips64el.deb -http://ftp.us.debian.org/debian/pool/main/libv/libva/libva-drm2_2.1.0-3_mips64el.deb -http://ftp.us.debian.org/debian/pool/main/libv/libva/libva-glx2_2.1.0-3_mips64el.deb -http://ftp.us.debian.org/debian/pool/main/libv/libva/libva-wayland2_2.1.0-3_mips64el.deb -http://ftp.us.debian.org/debian/pool/main/libv/libva/libva-x11-2_2.1.0-3_mips64el.deb +http://ftp.us.debian.org/debian/pool/main/libs/libsoup2.4/libsoup2.4-1_2.62.2-2_mips64el.deb +http://ftp.us.debian.org/debian/pool/main/libs/libsoup2.4/libsoup-gnome2.4-1_2.62.2-2_mips64el.deb +http://ftp.us.debian.org/debian/pool/main/libt/libtasn1-6/libtasn1-6_4.13-3_mips64el.deb +http://ftp.us.debian.org/debian/pool/main/libt/libthai/libthai0_0.1.28-1_mips64el.deb +http://ftp.us.debian.org/debian/pool/main/libt/libtool/libltdl7_2.4.6-2.1_mips64el.deb +http://ftp.us.debian.org/debian/pool/main/libu/libunistring/libunistring2_0.9.10-1_mips64el.deb +http://ftp.us.debian.org/debian/pool/main/libv/libva/libva2_2.2.0-1_mips64el.deb +http://ftp.us.debian.org/debian/pool/main/libv/libva/libva-dev_2.2.0-1_mips64el.deb +http://ftp.us.debian.org/debian/pool/main/libv/libva/libva-drm2_2.2.0-1_mips64el.deb +http://ftp.us.debian.org/debian/pool/main/libv/libva/libva-glx2_2.2.0-1_mips64el.deb +http://ftp.us.debian.org/debian/pool/main/libv/libva/libva-wayland2_2.2.0-1_mips64el.deb +http://ftp.us.debian.org/debian/pool/main/libv/libva/libva-x11-2_2.2.0-1_mips64el.deb http://ftp.us.debian.org/debian/pool/main/libv/libvorbis/libvorbis0a_1.3.6-1_mips64el.deb http://ftp.us.debian.org/debian/pool/main/libv/libvorbis/libvorbisenc2_1.3.6-1_mips64el.deb http://ftp.us.debian.org/debian/pool/main/libv/libvpx/libvpx5_1.7.0-3_mips64el.deb @@ -166,18 +175,18 @@ http://ftp.us.debian.org/debian/pool/main/libx/libx11/libx11-xcb1_1.6.5-1_mips64 http://ftp.us.debian.org/debian/pool/main/libx/libx11/libx11-xcb-dev_1.6.5-1_mips64el.deb http://ftp.us.debian.org/debian/pool/main/libx/libxau/libxau6_1.0.8-1+b2_mips64el.deb http://ftp.us.debian.org/debian/pool/main/libx/libxau/libxau-dev_1.0.8-1+b2_mips64el.deb -http://ftp.us.debian.org/debian/pool/main/libx/libxcb/libxcb1_1.13-1_mips64el.deb -http://ftp.us.debian.org/debian/pool/main/libx/libxcb/libxcb1-dev_1.13-1_mips64el.deb -http://ftp.us.debian.org/debian/pool/main/libx/libxcb/libxcb-dri2-0_1.13-1_mips64el.deb -http://ftp.us.debian.org/debian/pool/main/libx/libxcb/libxcb-dri3-0_1.13-1_mips64el.deb -http://ftp.us.debian.org/debian/pool/main/libx/libxcb/libxcb-glx0_1.13-1_mips64el.deb -http://ftp.us.debian.org/debian/pool/main/libx/libxcb/libxcb-present0_1.13-1_mips64el.deb -http://ftp.us.debian.org/debian/pool/main/libx/libxcb/libxcb-render0_1.13-1_mips64el.deb -http://ftp.us.debian.org/debian/pool/main/libx/libxcb/libxcb-render0-dev_1.13-1_mips64el.deb -http://ftp.us.debian.org/debian/pool/main/libx/libxcb/libxcb-shm0_1.13-1_mips64el.deb -http://ftp.us.debian.org/debian/pool/main/libx/libxcb/libxcb-shm0-dev_1.13-1_mips64el.deb -http://ftp.us.debian.org/debian/pool/main/libx/libxcb/libxcb-sync1_1.13-1_mips64el.deb -http://ftp.us.debian.org/debian/pool/main/libx/libxcb/libxcb-xfixes0_1.13-1_mips64el.deb +http://ftp.us.debian.org/debian/pool/main/libx/libxcb/libxcb1_1.13-2_mips64el.deb +http://ftp.us.debian.org/debian/pool/main/libx/libxcb/libxcb1-dev_1.13-2_mips64el.deb +http://ftp.us.debian.org/debian/pool/main/libx/libxcb/libxcb-dri2-0_1.13-2_mips64el.deb +http://ftp.us.debian.org/debian/pool/main/libx/libxcb/libxcb-dri3-0_1.13-2_mips64el.deb +http://ftp.us.debian.org/debian/pool/main/libx/libxcb/libxcb-glx0_1.13-2_mips64el.deb +http://ftp.us.debian.org/debian/pool/main/libx/libxcb/libxcb-present0_1.13-2_mips64el.deb +http://ftp.us.debian.org/debian/pool/main/libx/libxcb/libxcb-render0_1.13-2_mips64el.deb +http://ftp.us.debian.org/debian/pool/main/libx/libxcb/libxcb-render0-dev_1.13-2_mips64el.deb +http://ftp.us.debian.org/debian/pool/main/libx/libxcb/libxcb-shm0_1.13-2_mips64el.deb +http://ftp.us.debian.org/debian/pool/main/libx/libxcb/libxcb-shm0-dev_1.13-2_mips64el.deb +http://ftp.us.debian.org/debian/pool/main/libx/libxcb/libxcb-sync1_1.13-2_mips64el.deb +http://ftp.us.debian.org/debian/pool/main/libx/libxcb/libxcb-xfixes0_1.13-2_mips64el.deb http://ftp.us.debian.org/debian/pool/main/libx/libxcomposite/libxcomposite1_0.4.4-2_mips64el.deb http://ftp.us.debian.org/debian/pool/main/libx/libxcomposite/libxcomposite-dev_0.4.4-2_mips64el.deb http://ftp.us.debian.org/debian/pool/main/libx/libxcursor/libxcursor1_1.1.15-1_mips64el.deb @@ -194,17 +203,17 @@ http://ftp.us.debian.org/debian/pool/main/libx/libxi/libxi6_1.7.9-1_mips64el.deb http://ftp.us.debian.org/debian/pool/main/libx/libxi/libxi-dev_1.7.9-1_mips64el.deb http://ftp.us.debian.org/debian/pool/main/libx/libxinerama/libxinerama1_1.1.3-1+b3_mips64el.deb http://ftp.us.debian.org/debian/pool/main/libx/libxinerama/libxinerama-dev_1.1.3-1+b3_mips64el.deb -http://ftp.us.debian.org/debian/pool/main/libx/libxkbcommon/libxkbcommon0_0.8.0-1_mips64el.deb -http://ftp.us.debian.org/debian/pool/main/libx/libxkbcommon/libxkbcommon-dev_0.8.0-1_mips64el.deb -http://ftp.us.debian.org/debian/pool/main/libx/libxml2/libxml2_2.9.4+dfsg1-6.1_mips64el.deb -http://ftp.us.debian.org/debian/pool/main/libx/libxml2/libxml2-dev_2.9.4+dfsg1-6.1_mips64el.deb +http://ftp.us.debian.org/debian/pool/main/libx/libxkbcommon/libxkbcommon0_0.8.0-2_mips64el.deb +http://ftp.us.debian.org/debian/pool/main/libx/libxkbcommon/libxkbcommon-dev_0.8.0-2_mips64el.deb +http://ftp.us.debian.org/debian/pool/main/libx/libxml2/libxml2_2.9.4+dfsg1-7+b1_mips64el.deb +http://ftp.us.debian.org/debian/pool/main/libx/libxml2/libxml2-dev_2.9.4+dfsg1-7+b1_mips64el.deb http://ftp.us.debian.org/debian/pool/main/libx/libxrandr/libxrandr2_1.5.1-1_mips64el.deb http://ftp.us.debian.org/debian/pool/main/libx/libxrandr/libxrandr-dev_1.5.1-1_mips64el.deb http://ftp.us.debian.org/debian/pool/main/libx/libxrender/libxrender1_0.9.10-1_mips64el.deb http://ftp.us.debian.org/debian/pool/main/libx/libxrender/libxrender-dev_0.9.10-1_mips64el.deb http://ftp.us.debian.org/debian/pool/main/libx/libxshmfence/libxshmfence1_1.3-1_mips64el.deb -http://ftp.us.debian.org/debian/pool/main/libx/libxslt/libxslt1.1_1.1.29-5_mips64el.deb -http://ftp.us.debian.org/debian/pool/main/libx/libxslt/libxslt1-dev_1.1.29-5_mips64el.deb +http://ftp.us.debian.org/debian/pool/main/libx/libxslt/libxslt1.1_1.1.32-2_mips64el.deb +http://ftp.us.debian.org/debian/pool/main/libx/libxslt/libxslt1-dev_1.1.32-2_mips64el.deb http://ftp.us.debian.org/debian/pool/main/libx/libxss/libxss1_1.2.2-1+b2_mips64el.deb http://ftp.us.debian.org/debian/pool/main/libx/libxss/libxss-dev_1.2.2-1+b2_mips64el.deb http://ftp.us.debian.org/debian/pool/main/libx/libxt/libxt6_1.1.5-1_mips64el.deb @@ -212,79 +221,81 @@ http://ftp.us.debian.org/debian/pool/main/libx/libxt/libxt-dev_1.1.5-1_mips64el. http://ftp.us.debian.org/debian/pool/main/libx/libxtst/libxtst6_1.2.3-1_mips64el.deb http://ftp.us.debian.org/debian/pool/main/libx/libxtst/libxtst-dev_1.2.3-1_mips64el.deb http://ftp.us.debian.org/debian/pool/main/libx/libxxf86vm/libxxf86vm1_1.1.4-1+b2_mips64el.deb -http://ftp.us.debian.org/debian/pool/main/l/lcms2/liblcms2-2_2.9-1_mips64el.deb -http://ftp.us.debian.org/debian/pool/main/l/linux/linux-libc-dev_4.15.11-1_mips64el.deb -http://ftp.us.debian.org/debian/pool/main/l/lz4/liblz4-1_0.0~r131-2+b1_mips64el.deb -http://ftp.us.debian.org/debian/pool/main/l/lzo2/liblzo2-2_2.08-1.2+b2_mips64el.deb -http://ftp.us.debian.org/debian/pool/main/m/mesa/libegl1-mesa_17.3.7-1_mips64el.deb -http://ftp.us.debian.org/debian/pool/main/m/mesa/libegl1-mesa-dev_17.3.7-1_mips64el.deb -http://ftp.us.debian.org/debian/pool/main/m/mesa/libgbm1_17.3.7-1_mips64el.deb -http://ftp.us.debian.org/debian/pool/main/m/mesa/libgbm-dev_17.3.7-1_mips64el.deb -http://ftp.us.debian.org/debian/pool/main/m/mesa/libgl1-mesa-dev_17.3.7-1_mips64el.deb -http://ftp.us.debian.org/debian/pool/main/m/mesa/libgl1-mesa-glx_17.3.7-1_mips64el.deb -http://ftp.us.debian.org/debian/pool/main/m/mesa/libglapi-mesa_17.3.7-1_mips64el.deb -http://ftp.us.debian.org/debian/pool/main/m/mesa/libwayland-egl1-mesa_17.3.7-1_mips64el.deb -http://ftp.us.debian.org/debian/pool/main/m/mesa/mesa-common-dev_17.3.7-1_mips64el.deb +http://ftp.us.debian.org/debian/pool/main/l/lcms2/liblcms2-2_2.9-2_mips64el.deb +http://ftp.us.debian.org/debian/pool/main/l/linux/linux-libc-dev_4.17.17-1_mips64el.deb +http://ftp.us.debian.org/debian/pool/main/l/lz4/liblz4-1_1.8.2-1_mips64el.deb +http://ftp.us.debian.org/debian/pool/main/l/lzo2/liblzo2-2_2.10-0.1_mips64el.deb +http://ftp.us.debian.org/debian/pool/main/m/mesa/libegl1-mesa_18.1.6-1_mips64el.deb +http://ftp.us.debian.org/debian/pool/main/m/mesa/libegl1-mesa-dev_18.1.6-1_mips64el.deb +http://ftp.us.debian.org/debian/pool/main/m/mesa/libgbm1_18.1.6-1_mips64el.deb +http://ftp.us.debian.org/debian/pool/main/m/mesa/libgbm-dev_18.1.6-1_mips64el.deb +http://ftp.us.debian.org/debian/pool/main/m/mesa/libgl1-mesa-dev_18.1.6-1_mips64el.deb +http://ftp.us.debian.org/debian/pool/main/m/mesa/libgl1-mesa-glx_18.1.6-1_mips64el.deb +http://ftp.us.debian.org/debian/pool/main/m/mesa/libglapi-mesa_18.1.6-1_mips64el.deb +http://ftp.us.debian.org/debian/pool/main/m/mesa/libwayland-egl1-mesa_18.1.6-1_mips64el.deb +http://ftp.us.debian.org/debian/pool/main/m/mesa/mesa-common-dev_18.1.6-1_mips64el.deb http://ftp.us.debian.org/debian/pool/main/m/minizip/libminizip1_1.1-8+b1_mips64el.deb http://ftp.us.debian.org/debian/pool/main/m/minizip/libminizip-dev_1.1-8+b1_mips64el.deb http://ftp.us.debian.org/debian/pool/main/n/nettle/libhogweed4_3.4-1_mips64el.deb http://ftp.us.debian.org/debian/pool/main/n/nettle/libnettle6_3.4-1_mips64el.deb -http://ftp.us.debian.org/debian/pool/main/n/nspr/libnspr4_4.18-1_mips64el.deb -http://ftp.us.debian.org/debian/pool/main/n/nspr/libnspr4-dev_4.18-1_mips64el.deb -http://ftp.us.debian.org/debian/pool/main/n/nss/libnss3_3.35-2_mips64el.deb -http://ftp.us.debian.org/debian/pool/main/n/nss/libnss3-dev_3.35-2_mips64el.deb +http://ftp.us.debian.org/debian/pool/main/n/nspr/libnspr4_4.19-3_mips64el.deb +http://ftp.us.debian.org/debian/pool/main/n/nspr/libnspr4-dev_4.19-3_mips64el.deb +http://ftp.us.debian.org/debian/pool/main/n/nss/libnss3_3.38-1_mips64el.deb +http://ftp.us.debian.org/debian/pool/main/n/nss/libnss3-dev_3.38-1_mips64el.deb http://ftp.us.debian.org/debian/pool/main/o/openssl1.0/libssl1.0.2_1.0.2o-1_mips64el.deb -http://ftp.us.debian.org/debian/pool/main/o/openssl/libssl1.1_1.1.0h-2_mips64el.deb -http://ftp.us.debian.org/debian/pool/main/o/openssl/libssl-dev_1.1.0h-2_mips64el.deb -http://ftp.us.debian.org/debian/pool/main/o/opus/libopus0_1.2.1-1_mips64el.deb -http://ftp.us.debian.org/debian/pool/main/o/opus/libopus-dev_1.2.1-1_mips64el.deb +http://ftp.us.debian.org/debian/pool/main/o/openssl/libssl1.1_1.1.0h-4_mips64el.deb +http://ftp.us.debian.org/debian/pool/main/o/openssl/libssl-dev_1.1.0h-4_mips64el.deb +http://ftp.us.debian.org/debian/pool/main/o/opus/libopus0_1.3~beta+20180518-1_mips64el.deb +http://ftp.us.debian.org/debian/pool/main/o/opus/libopus-dev_1.3~beta+20180518-1_mips64el.deb http://ftp.us.debian.org/debian/pool/main/o/orbit2/liborbit-2-0_2.14.19-4_mips64el.deb http://ftp.us.debian.org/debian/pool/main/o/orbit2/liborbit2_2.14.19-4_mips64el.deb -http://ftp.us.debian.org/debian/pool/main/p/p11-kit/libp11-kit0_0.23.10-2_mips64el.deb -http://ftp.us.debian.org/debian/pool/main/p/pam/libpam0g_1.1.8-3.7_mips64el.deb -http://ftp.us.debian.org/debian/pool/main/p/pam/libpam0g-dev_1.1.8-3.7_mips64el.deb -http://ftp.us.debian.org/debian/pool/main/p/pango1.0/libpango-1.0-0_1.42.0-1_mips64el.deb -http://ftp.us.debian.org/debian/pool/main/p/pango1.0/libpango1.0-dev_1.42.0-1_mips64el.deb -http://ftp.us.debian.org/debian/pool/main/p/pango1.0/libpangocairo-1.0-0_1.42.0-1_mips64el.deb -http://ftp.us.debian.org/debian/pool/main/p/pango1.0/libpangoft2-1.0-0_1.42.0-1_mips64el.deb -http://ftp.us.debian.org/debian/pool/main/p/pango1.0/libpangoxft-1.0-0_1.42.0-1_mips64el.deb +http://ftp.us.debian.org/debian/pool/main/p/p11-kit/libp11-kit0_0.23.13-2_mips64el.deb +http://ftp.us.debian.org/debian/pool/main/p/pam/libpam0g_1.1.8-3.8_mips64el.deb +http://ftp.us.debian.org/debian/pool/main/p/pam/libpam0g-dev_1.1.8-3.8_mips64el.deb +http://ftp.us.debian.org/debian/pool/main/p/pango1.0/libpango-1.0-0_1.42.4-1_mips64el.deb +http://ftp.us.debian.org/debian/pool/main/p/pango1.0/libpango1.0-dev_1.42.4-1_mips64el.deb +http://ftp.us.debian.org/debian/pool/main/p/pango1.0/libpangocairo-1.0-0_1.42.4-1_mips64el.deb +http://ftp.us.debian.org/debian/pool/main/p/pango1.0/libpangoft2-1.0-0_1.42.4-1_mips64el.deb +http://ftp.us.debian.org/debian/pool/main/p/pango1.0/libpangoxft-1.0-0_1.42.4-1_mips64el.deb http://ftp.us.debian.org/debian/pool/main/p/pangox-compat/libpangox-1.0-0_0.0.2-5+b2_mips64el.deb http://ftp.us.debian.org/debian/pool/main/p/pciutils/libpci3_3.5.2-1_mips64el.deb http://ftp.us.debian.org/debian/pool/main/p/pciutils/libpci-dev_3.5.2-1_mips64el.deb -http://ftp.us.debian.org/debian/pool/main/p/pcre3/libpcre16-3_8.39-9_mips64el.deb -http://ftp.us.debian.org/debian/pool/main/p/pcre3/libpcre32-3_8.39-9_mips64el.deb -http://ftp.us.debian.org/debian/pool/main/p/pcre3/libpcre3_8.39-9_mips64el.deb -http://ftp.us.debian.org/debian/pool/main/p/pcre3/libpcre3-dev_8.39-9_mips64el.deb -http://ftp.us.debian.org/debian/pool/main/p/pcre3/libpcrecpp0v5_8.39-9_mips64el.deb +http://ftp.us.debian.org/debian/pool/main/p/pcre3/libpcre16-3_8.39-11_mips64el.deb +http://ftp.us.debian.org/debian/pool/main/p/pcre3/libpcre32-3_8.39-11_mips64el.deb +http://ftp.us.debian.org/debian/pool/main/p/pcre3/libpcre3_8.39-11_mips64el.deb +http://ftp.us.debian.org/debian/pool/main/p/pcre3/libpcre3-dev_8.39-11_mips64el.deb +http://ftp.us.debian.org/debian/pool/main/p/pcre3/libpcrecpp0v5_8.39-11_mips64el.deb http://ftp.us.debian.org/debian/pool/main/p/pixman/libpixman-1-0_0.34.0-2_mips64el.deb http://ftp.us.debian.org/debian/pool/main/p/pixman/libpixman-1-dev_0.34.0-2_mips64el.deb -http://ftp.us.debian.org/debian/pool/main/p/pulseaudio/libpulse0_11.1-4_mips64el.deb -http://ftp.us.debian.org/debian/pool/main/p/pulseaudio/libpulse-dev_11.1-4_mips64el.deb -http://ftp.us.debian.org/debian/pool/main/p/pulseaudio/libpulse-mainloop-glib0_11.1-4_mips64el.deb -http://ftp.us.debian.org/debian/pool/main/r/re2/libre2-4_20180301+dfsg-1_mips64el.deb -http://ftp.us.debian.org/debian/pool/main/r/re2/libre2-dev_20180301+dfsg-1_mips64el.deb +http://ftp.us.debian.org/debian/pool/main/p/pulseaudio/libpulse0_12.0-1_mips64el.deb +http://ftp.us.debian.org/debian/pool/main/p/pulseaudio/libpulse-dev_12.0-1_mips64el.deb +http://ftp.us.debian.org/debian/pool/main/p/pulseaudio/libpulse-mainloop-glib0_12.0-1_mips64el.deb +http://ftp.us.debian.org/debian/pool/main/r/re2/libre2-4_20180701+dfsg-1_mips64el.deb +http://ftp.us.debian.org/debian/pool/main/r/re2/libre2-dev_20180701+dfsg-1_mips64el.deb http://ftp.us.debian.org/debian/pool/main/s/snappy/libsnappy1v5_1.1.7-1_mips64el.deb http://ftp.us.debian.org/debian/pool/main/s/snappy/libsnappy-dev_1.1.7-1_mips64el.deb -http://ftp.us.debian.org/debian/pool/main/s/speech-dispatcher/libspeechd2_0.8.8-1_mips64el.deb -http://ftp.us.debian.org/debian/pool/main/s/speech-dispatcher/libspeechd-dev_0.8.8-1_mips64el.deb -http://ftp.us.debian.org/debian/pool/main/s/speech-dispatcher/speech-dispatcher_0.8.8-1_mips64el.deb -http://ftp.us.debian.org/debian/pool/main/s/sqlite3/libsqlite3-0_3.23.0-1_mips64el.deb -http://ftp.us.debian.org/debian/pool/main/s/systemd/libsystemd0_238-4_mips64el.deb -http://ftp.us.debian.org/debian/pool/main/s/systemd/libudev1_238-4_mips64el.deb -http://ftp.us.debian.org/debian/pool/main/s/systemd/libudev-dev_238-4_mips64el.deb +http://ftp.us.debian.org/debian/pool/main/s/speech-dispatcher/libspeechd2_0.8.8-6_mips64el.deb +http://ftp.us.debian.org/debian/pool/main/s/speech-dispatcher/libspeechd-dev_0.8.8-6_mips64el.deb +http://ftp.us.debian.org/debian/pool/main/s/speech-dispatcher/speech-dispatcher_0.8.8-6_mips64el.deb +http://ftp.us.debian.org/debian/pool/main/s/sqlite3/libsqlite3-0_3.24.0-1_mips64el.deb +http://ftp.us.debian.org/debian/pool/main/s/systemd/libsystemd0_239-7_mips64el.deb +http://ftp.us.debian.org/debian/pool/main/s/systemd/libudev1_239-7_mips64el.deb +http://ftp.us.debian.org/debian/pool/main/s/systemd/libudev-dev_239-7_mips64el.deb http://ftp.us.debian.org/debian/pool/main/t/tcp-wrappers/libwrap0_7.6.q-27_mips64el.deb -http://ftp.us.debian.org/debian/pool/main/t/tiff/libtiff5_4.0.9-4_mips64el.deb -http://ftp.us.debian.org/debian/pool/main/u/unbound/libunbound2_1.6.7-1_mips64el.deb -http://ftp.us.debian.org/debian/pool/main/u/util-linux/libblkid1_2.31.1-0.5_mips64el.deb -http://ftp.us.debian.org/debian/pool/main/u/util-linux/libmount1_2.31.1-0.5_mips64el.deb -http://ftp.us.debian.org/debian/pool/main/u/util-linux/libuuid1_2.31.1-0.5_mips64el.deb -http://ftp.us.debian.org/debian/pool/main/u/util-linux/uuid-dev_2.31.1-0.5_mips64el.deb -http://ftp.us.debian.org/debian/pool/main/w/wayland/libwayland-client0_1.14.0-2_mips64el.deb -http://ftp.us.debian.org/debian/pool/main/w/wayland/libwayland-cursor0_1.14.0-2_mips64el.deb -http://ftp.us.debian.org/debian/pool/main/w/wayland/libwayland-dev_1.14.0-2_mips64el.deb -http://ftp.us.debian.org/debian/pool/main/w/wayland/libwayland-server0_1.14.0-2_mips64el.deb -http://ftp.us.debian.org/debian/pool/main/w/wayland-protocols/wayland-protocols_1.13-1_all.deb -http://ftp.us.debian.org/debian/pool/main/x/xft/libxft2_2.3.2-1+b2_mips64el.deb +http://ftp.us.debian.org/debian/pool/main/t/tiff/libtiff5_4.0.9-6_mips64el.deb +http://ftp.us.debian.org/debian/pool/main/u/unbound/libunbound2_1.7.3-1_mips64el.deb +http://ftp.us.debian.org/debian/pool/main/u/util-linux/libblkid1_2.32.1-0.1_mips64el.deb +http://ftp.us.debian.org/debian/pool/main/u/util-linux/libmount1_2.32.1-0.1_mips64el.deb +http://ftp.us.debian.org/debian/pool/main/u/util-linux/libuuid1_2.32.1-0.1_mips64el.deb +http://ftp.us.debian.org/debian/pool/main/u/util-linux/uuid-dev_2.32.1-0.1_mips64el.deb +http://ftp.us.debian.org/debian/pool/main/v/vulkan/libvulkan1_1.1.73+dfsg-1_mips64el.deb +http://ftp.us.debian.org/debian/pool/main/w/wayland/libwayland-client0_1.15.0-2_mips64el.deb +http://ftp.us.debian.org/debian/pool/main/w/wayland/libwayland-cursor0_1.15.0-2_mips64el.deb +http://ftp.us.debian.org/debian/pool/main/w/wayland/libwayland-dev_1.15.0-2_mips64el.deb +http://ftp.us.debian.org/debian/pool/main/w/wayland/libwayland-egl1_1.15.0-2_mips64el.deb +http://ftp.us.debian.org/debian/pool/main/w/wayland/libwayland-server0_1.15.0-2_mips64el.deb +http://ftp.us.debian.org/debian/pool/main/w/wayland-protocols/wayland-protocols_1.16-1_all.deb +http://ftp.us.debian.org/debian/pool/main/x/xft/libxft2_2.3.2-2_mips64el.deb http://ftp.us.debian.org/debian/pool/main/x/xorgproto/x11proto-composite-dev_2018.4-4_all.deb http://ftp.us.debian.org/debian/pool/main/x/xorgproto/x11proto-damage-dev_2018.4-4_all.deb http://ftp.us.debian.org/debian/pool/main/x/xorgproto/x11proto-dev_2018.4-4_all.deb @@ -298,5 +309,5 @@ http://ftp.us.debian.org/debian/pool/main/x/xorgproto/x11proto-scrnsaver-dev_201 http://ftp.us.debian.org/debian/pool/main/x/xorgproto/x11proto-xext-dev_2018.4-4_all.deb http://ftp.us.debian.org/debian/pool/main/x/xorgproto/x11proto-xinerama-dev_2018.4-4_all.deb http://ftp.us.debian.org/debian/pool/main/x/xz-utils/liblzma5_5.2.2-1.3_mips64el.deb -http://ftp.us.debian.org/debian/pool/main/z/zlib/zlib1g_1.2.8.dfsg-5_mips64el.deb -http://ftp.us.debian.org/debian/pool/main/z/zlib/zlib1g-dev_1.2.8.dfsg-5_mips64el.deb +http://ftp.us.debian.org/debian/pool/main/z/zlib/zlib1g_1.2.11.dfsg-1_mips64el.deb +http://ftp.us.debian.org/debian/pool/main/z/zlib/zlib1g-dev_1.2.11.dfsg-1_mips64el.deb diff --git a/chromium/build/linux/sysroot_scripts/packagelist.sid.mipsel b/chromium/build/linux/sysroot_scripts/packagelist.sid.mipsel index 24057524af3..ac7d80b8b21 100644 --- a/chromium/build/linux/sysroot_scripts/packagelist.sid.mipsel +++ b/chromium/build/linux/sysroot_scripts/packagelist.sid.mipsel @@ -1,77 +1,83 @@ -http://ftp.us.debian.org/debian/pool/main/a/alsa-lib/libasound2_1.1.3-5_mipsel.deb -http://ftp.us.debian.org/debian/pool/main/a/alsa-lib/libasound2-dev_1.1.3-5_mipsel.deb +http://ftp.us.debian.org/debian/pool/main/a/alsa-lib/libasound2_1.1.6-1_mipsel.deb +http://ftp.us.debian.org/debian/pool/main/a/alsa-lib/libasound2-dev_1.1.6-1_mipsel.deb http://ftp.us.debian.org/debian/pool/main/a/atk1.0/libatk1.0-0_2.28.1-1_mipsel.deb http://ftp.us.debian.org/debian/pool/main/a/atk1.0/libatk1.0-dev_2.28.1-1_mipsel.deb http://ftp.us.debian.org/debian/pool/main/a/at-spi2-atk/libatk-bridge2.0-0_2.26.2-1_mipsel.deb http://ftp.us.debian.org/debian/pool/main/a/at-spi2-atk/libatk-bridge2.0-dev_2.26.2-1_mipsel.deb -http://ftp.us.debian.org/debian/pool/main/a/at-spi2-core/libatspi2.0-0_2.28.0-1_mipsel.deb -http://ftp.us.debian.org/debian/pool/main/a/at-spi2-core/libatspi2.0-dev_2.28.0-1_mipsel.deb +http://ftp.us.debian.org/debian/pool/main/a/at-spi2-core/libatspi2.0-0_2.28.0-3_mipsel.deb +http://ftp.us.debian.org/debian/pool/main/a/at-spi2-core/libatspi2.0-dev_2.28.0-3_mipsel.deb http://ftp.us.debian.org/debian/pool/main/a/attr/libattr1_2.4.47-2+b2_mipsel.deb -http://ftp.us.debian.org/debian/pool/main/a/audit/libaudit1_2.8.2-1_mipsel.deb -http://ftp.us.debian.org/debian/pool/main/a/avahi/libavahi-client3_0.7-3.1_mipsel.deb -http://ftp.us.debian.org/debian/pool/main/a/avahi/libavahi-common3_0.7-3.1_mipsel.deb -http://ftp.us.debian.org/debian/pool/main/b/bluez/libbluetooth3_5.47-1+b1_mipsel.deb -http://ftp.us.debian.org/debian/pool/main/b/bluez/libbluetooth-dev_5.47-1+b1_mipsel.deb -http://ftp.us.debian.org/debian/pool/main/b/brltty/libbrlapi0.6_5.6-3_mipsel.deb -http://ftp.us.debian.org/debian/pool/main/b/brltty/libbrlapi-dev_5.6-3_mipsel.deb -http://ftp.us.debian.org/debian/pool/main/c/cairo/libcairo2_1.15.10-2_mipsel.deb -http://ftp.us.debian.org/debian/pool/main/c/cairo/libcairo2-dev_1.15.10-2_mipsel.deb -http://ftp.us.debian.org/debian/pool/main/c/cairo/libcairo-gobject2_1.15.10-2_mipsel.deb -http://ftp.us.debian.org/debian/pool/main/c/cairo/libcairo-script-interpreter2_1.15.10-2_mipsel.deb +http://ftp.us.debian.org/debian/pool/main/a/audit/libaudit1_2.8.3-1+b1_mipsel.deb +http://ftp.us.debian.org/debian/pool/main/a/avahi/libavahi-client3_0.7-4_mipsel.deb +http://ftp.us.debian.org/debian/pool/main/a/avahi/libavahi-common3_0.7-4_mipsel.deb +http://ftp.us.debian.org/debian/pool/main/b/bluez/libbluetooth3_5.50-1_mipsel.deb +http://ftp.us.debian.org/debian/pool/main/b/bluez/libbluetooth-dev_5.50-1_mipsel.deb +http://ftp.us.debian.org/debian/pool/main/b/brltty/libbrlapi0.6_5.6-5_mipsel.deb +http://ftp.us.debian.org/debian/pool/main/b/brltty/libbrlapi-dev_5.6-5_mipsel.deb +http://ftp.us.debian.org/debian/pool/main/c/cairo/libcairo2_1.15.10-3_mipsel.deb +http://ftp.us.debian.org/debian/pool/main/c/cairo/libcairo2-dev_1.15.10-3_mipsel.deb +http://ftp.us.debian.org/debian/pool/main/c/cairo/libcairo-gobject2_1.15.10-3_mipsel.deb +http://ftp.us.debian.org/debian/pool/main/c/cairo/libcairo-script-interpreter2_1.15.10-3_mipsel.deb http://ftp.us.debian.org/debian/pool/main/c/colord/libcolord2_1.3.3-2_mipsel.deb -http://ftp.us.debian.org/debian/pool/main/c/cups/libcups2_2.2.7-2_mipsel.deb -http://ftp.us.debian.org/debian/pool/main/c/cups/libcups2-dev_2.2.7-2_mipsel.deb -http://ftp.us.debian.org/debian/pool/main/c/cups/libcupsimage2_2.2.7-2_mipsel.deb -http://ftp.us.debian.org/debian/pool/main/c/cups/libcupsimage2-dev_2.2.7-2_mipsel.deb -http://ftp.us.debian.org/debian/pool/main/d/db5.3/libdb5.3_5.3.28-13.1+b1_mipsel.deb -http://ftp.us.debian.org/debian/pool/main/d/dbus-glib/libdbus-glib-1-2_0.110-2_mipsel.deb -http://ftp.us.debian.org/debian/pool/main/d/dbus/libdbus-1-3_1.12.6-2_mipsel.deb -http://ftp.us.debian.org/debian/pool/main/d/dbus/libdbus-1-dev_1.12.6-2_mipsel.deb -http://ftp.us.debian.org/debian/pool/main/e/e2fsprogs/comerr-dev_2.1-1.44.1-1_mipsel.deb -http://ftp.us.debian.org/debian/pool/main/e/e2fsprogs/libcom-err2_1.44.1-1_mipsel.deb -http://ftp.us.debian.org/debian/pool/main/e/elfutils/libelf1_0.170-0.3_mipsel.deb -http://ftp.us.debian.org/debian/pool/main/e/elfutils/libelf-dev_0.170-0.3_mipsel.deb -http://ftp.us.debian.org/debian/pool/main/e/expat/libexpat1_2.2.5-3_mipsel.deb -http://ftp.us.debian.org/debian/pool/main/e/expat/libexpat1-dev_2.2.5-3_mipsel.deb -http://ftp.us.debian.org/debian/pool/main/f/flac/libflac8_1.3.2-1_mipsel.deb -http://ftp.us.debian.org/debian/pool/main/f/flac/libflac-dev_1.3.2-1_mipsel.deb -http://ftp.us.debian.org/debian/pool/main/f/fontconfig/libfontconfig1_2.12.6-0.1_mipsel.deb -http://ftp.us.debian.org/debian/pool/main/f/fontconfig/libfontconfig1-dev_2.12.6-0.1_mipsel.deb +http://ftp.us.debian.org/debian/pool/main/c/cups/libcups2_2.2.8-5_mipsel.deb +http://ftp.us.debian.org/debian/pool/main/c/cups/libcups2-dev_2.2.8-5_mipsel.deb +http://ftp.us.debian.org/debian/pool/main/c/cups/libcupsimage2_2.2.8-5_mipsel.deb +http://ftp.us.debian.org/debian/pool/main/c/cups/libcupsimage2-dev_2.2.8-5_mipsel.deb +http://ftp.us.debian.org/debian/pool/main/d/db5.3/libdb5.3_5.3.28+dfsg1-0.1_mipsel.deb +http://ftp.us.debian.org/debian/pool/main/d/dbus-glib/libdbus-glib-1-2_0.110-3_mipsel.deb +http://ftp.us.debian.org/debian/pool/main/d/dbus/libdbus-1-3_1.12.10-1_mipsel.deb +http://ftp.us.debian.org/debian/pool/main/d/dbus/libdbus-1-dev_1.12.10-1_mipsel.deb +http://ftp.us.debian.org/debian/pool/main/e/e2fsprogs/comerr-dev_2.1-1.44.4-1_mipsel.deb +http://ftp.us.debian.org/debian/pool/main/e/e2fsprogs/libcom-err2_1.44.4-1_mipsel.deb +http://ftp.us.debian.org/debian/pool/main/e/elfutils/libelf1_0.170-0.5_mipsel.deb +http://ftp.us.debian.org/debian/pool/main/e/elfutils/libelf-dev_0.170-0.5_mipsel.deb +http://ftp.us.debian.org/debian/pool/main/e/expat/libexpat1_2.2.6-1_mipsel.deb +http://ftp.us.debian.org/debian/pool/main/e/expat/libexpat1-dev_2.2.6-1_mipsel.deb +http://ftp.us.debian.org/debian/pool/main/f/flac/libflac8_1.3.2-3_mipsel.deb +http://ftp.us.debian.org/debian/pool/main/f/flac/libflac-dev_1.3.2-3_mipsel.deb +http://ftp.us.debian.org/debian/pool/main/f/fontconfig/libfontconfig1_2.13.0-5_mipsel.deb +http://ftp.us.debian.org/debian/pool/main/f/fontconfig/libfontconfig1-dev_2.13.0-5_mipsel.deb http://ftp.us.debian.org/debian/pool/main/f/freetype/libfreetype6_2.8.1-2_mipsel.deb http://ftp.us.debian.org/debian/pool/main/f/freetype/libfreetype6-dev_2.8.1-2_mipsel.deb -http://ftp.us.debian.org/debian/pool/main/f/fribidi/libfribidi0_0.19.7-2_mipsel.deb -http://ftp.us.debian.org/debian/pool/main/g/gcc-6/libgcc-6-dev_6.4.0-15_mipsel.deb -http://ftp.us.debian.org/debian/pool/main/g/gcc-6/libstdc++-6-dev_6.4.0-15_mipsel.deb -http://ftp.us.debian.org/debian/pool/main/g/gcc-8/libatomic1_8-20180402-1_mipsel.deb -http://ftp.us.debian.org/debian/pool/main/g/gcc-8/libgcc1_8-20180402-1_mipsel.deb -http://ftp.us.debian.org/debian/pool/main/g/gcc-8/libgomp1_8-20180402-1_mipsel.deb -http://ftp.us.debian.org/debian/pool/main/g/gcc-8/libstdc++6_8-20180402-1_mipsel.deb -http://ftp.us.debian.org/debian/pool/main/g/gdk-pixbuf/libgdk-pixbuf2.0-0_2.36.11-2_mipsel.deb -http://ftp.us.debian.org/debian/pool/main/g/gdk-pixbuf/libgdk-pixbuf2.0-dev_2.36.11-2_mipsel.deb -http://ftp.us.debian.org/debian/pool/main/g/glib2.0/libglib2.0-0_2.56.0-6_mipsel.deb -http://ftp.us.debian.org/debian/pool/main/g/glib2.0/libglib2.0-dev_2.56.0-6_mipsel.deb -http://ftp.us.debian.org/debian/pool/main/g/glibc/libc6_2.27-3_mipsel.deb -http://ftp.us.debian.org/debian/pool/main/g/glibc/libc6-dev_2.27-3_mipsel.deb +http://ftp.us.debian.org/debian/pool/main/f/fribidi/libfribidi0_1.0.5-3_mipsel.deb +http://ftp.us.debian.org/debian/pool/main/f/fribidi/libfribidi-dev_1.0.5-3_mipsel.deb +http://ftp.us.debian.org/debian/pool/main/g/gcc-6/libgcc-6-dev_6.4.0-20_mipsel.deb +http://ftp.us.debian.org/debian/pool/main/g/gcc-6/libstdc++-6-dev_6.4.0-20_mipsel.deb +http://ftp.us.debian.org/debian/pool/main/g/gcc-8/libatomic1_8.2.0-4_mipsel.deb +http://ftp.us.debian.org/debian/pool/main/g/gcc-8/libgcc1_8.2.0-4_mipsel.deb +http://ftp.us.debian.org/debian/pool/main/g/gcc-8/libgomp1_8.2.0-4_mipsel.deb +http://ftp.us.debian.org/debian/pool/main/g/gcc-8/libstdc++6_8.2.0-4_mipsel.deb +http://ftp.us.debian.org/debian/pool/main/g/gdk-pixbuf/libgdk-pixbuf2.0-0_2.36.12-2_mipsel.deb +http://ftp.us.debian.org/debian/pool/main/g/gdk-pixbuf/libgdk-pixbuf2.0-dev_2.36.12-2_mipsel.deb +http://ftp.us.debian.org/debian/pool/main/g/glib2.0/libglib2.0-0_2.56.1-2_mipsel.deb +http://ftp.us.debian.org/debian/pool/main/g/glib2.0/libglib2.0-dev_2.56.1-2_mipsel.deb +http://ftp.us.debian.org/debian/pool/main/g/glibc/libc6_2.27-5_mipsel.deb +http://ftp.us.debian.org/debian/pool/main/g/glibc/libc6-dev_2.27-5_mipsel.deb http://ftp.us.debian.org/debian/pool/main/g/gmp/libgmp10_6.1.2+dfsg-3_mipsel.deb -http://ftp.us.debian.org/debian/pool/main/g/gnutls28/libgnutls28-dev_3.5.18-1_mipsel.deb -http://ftp.us.debian.org/debian/pool/main/g/gnutls28/libgnutls30_3.5.18-1_mipsel.deb -http://ftp.us.debian.org/debian/pool/main/g/gnutls28/libgnutls-dane0_3.5.18-1_mipsel.deb -http://ftp.us.debian.org/debian/pool/main/g/gnutls28/libgnutls-openssl27_3.5.18-1_mipsel.deb -http://ftp.us.debian.org/debian/pool/main/g/gnutls28/libgnutlsxx28_3.5.18-1_mipsel.deb +http://ftp.us.debian.org/debian/pool/main/g/gnutls28/libgnutls28-dev_3.5.19-1_mipsel.deb +http://ftp.us.debian.org/debian/pool/main/g/gnutls28/libgnutls30_3.5.19-1_mipsel.deb +http://ftp.us.debian.org/debian/pool/main/g/gnutls28/libgnutls-dane0_3.5.19-1_mipsel.deb +http://ftp.us.debian.org/debian/pool/main/g/gnutls28/libgnutls-openssl27_3.5.19-1_mipsel.deb +http://ftp.us.debian.org/debian/pool/main/g/gnutls28/libgnutlsxx28_3.5.19-1_mipsel.deb +http://ftp.us.debian.org/debian/pool/main/g/graphene/libgraphene-1.0-0_1.8.2-1_mipsel.deb +http://ftp.us.debian.org/debian/pool/main/g/graphene/libgraphene-1.0-dev_1.8.2-1_mipsel.deb http://ftp.us.debian.org/debian/pool/main/g/graphite2/libgraphite2-3_1.3.11-2_mipsel.deb http://ftp.us.debian.org/debian/pool/main/g/graphite2/libgraphite2-dev_1.3.11-2_mipsel.deb -http://ftp.us.debian.org/debian/pool/main/g/gtk+2.0/libgtk2.0-0_2.24.32-1_mipsel.deb -http://ftp.us.debian.org/debian/pool/main/g/gtk+2.0/libgtk2.0-dev_2.24.32-1_mipsel.deb -http://ftp.us.debian.org/debian/pool/main/g/gtk+3.0/libgtk-3-0_3.22.29-3_mipsel.deb -http://ftp.us.debian.org/debian/pool/main/g/gtk+3.0/libgtk-3-dev_3.22.29-3_mipsel.deb -http://ftp.us.debian.org/debian/pool/main/h/harfbuzz/libharfbuzz0b_1.7.2-1_mipsel.deb -http://ftp.us.debian.org/debian/pool/main/h/harfbuzz/libharfbuzz-dev_1.7.2-1_mipsel.deb -http://ftp.us.debian.org/debian/pool/main/h/harfbuzz/libharfbuzz-gobject0_1.7.2-1_mipsel.deb -http://ftp.us.debian.org/debian/pool/main/h/harfbuzz/libharfbuzz-icu0_1.7.2-1_mipsel.deb +http://ftp.us.debian.org/debian/pool/main/g/gtk+2.0/libgtk2.0-0_2.24.32-2_mipsel.deb +http://ftp.us.debian.org/debian/pool/main/g/gtk+3.0/libgtk-3-0_3.22.30-2_mipsel.deb +http://ftp.us.debian.org/debian/pool/main/g/gtk+3.0/libgtk-3-dev_3.22.30-2_mipsel.deb +http://ftp.us.debian.org/debian/pool/main/g/gtk+4.0/libgtk-4-0_3.91.2-1_mipsel.deb +http://ftp.us.debian.org/debian/pool/main/g/gtk+4.0/libgtk-4-dev_3.91.2-1_mipsel.deb +http://ftp.us.debian.org/debian/pool/main/h/harfbuzz/libharfbuzz0b_1.8.8-2_mipsel.deb +http://ftp.us.debian.org/debian/pool/main/h/harfbuzz/libharfbuzz-dev_1.8.8-2_mipsel.deb +http://ftp.us.debian.org/debian/pool/main/h/harfbuzz/libharfbuzz-gobject0_1.8.8-2_mipsel.deb +http://ftp.us.debian.org/debian/pool/main/h/harfbuzz/libharfbuzz-icu0_1.8.8-2_mipsel.deb +http://ftp.us.debian.org/debian/pool/main/i/icu-le-hb/libicu-le-hb0_1.0.3+git161113-5_mipsel.deb http://ftp.us.debian.org/debian/pool/main/i/icu/libicu57_57.1-9_mipsel.deb +http://ftp.us.debian.org/debian/pool/main/i/icu/libicu60_60.2-6_mipsel.deb http://ftp.us.debian.org/debian/pool/main/j/jbigkit/libjbig0_2.1-3.1+b2_mipsel.deb -http://ftp.us.debian.org/debian/pool/main/j/json-glib/libjson-glib-1.0-0_1.4.2-3_mipsel.deb -http://ftp.us.debian.org/debian/pool/main/k/keyutils/libkeyutils1_1.5.9-9.2_mipsel.deb +http://ftp.us.debian.org/debian/pool/main/j/json-glib/libjson-glib-1.0-0_1.4.2-4_mipsel.deb +http://ftp.us.debian.org/debian/pool/main/k/keyutils/libkeyutils1_1.5.9-9.3_mipsel.deb http://ftp.us.debian.org/debian/pool/main/k/krb5/krb5-multidev_1.16-2_mipsel.deb http://ftp.us.debian.org/debian/pool/main/k/krb5/libgssapi-krb5-2_1.16-2_mipsel.deb http://ftp.us.debian.org/debian/pool/main/k/krb5/libgssrpc4_1.16-2_mipsel.deb @@ -82,47 +88,49 @@ http://ftp.us.debian.org/debian/pool/main/k/krb5/libkdb5-9_1.16-2_mipsel.deb http://ftp.us.debian.org/debian/pool/main/k/krb5/libkrb5-3_1.16-2_mipsel.deb http://ftp.us.debian.org/debian/pool/main/k/krb5/libkrb5-dev_1.16-2_mipsel.deb http://ftp.us.debian.org/debian/pool/main/k/krb5/libkrb5support0_1.16-2_mipsel.deb -http://ftp.us.debian.org/debian/pool/main/liba/libappindicator/libappindicator1_0.4.92-5_mipsel.deb -http://ftp.us.debian.org/debian/pool/main/liba/libappindicator/libappindicator3-1_0.4.92-5_mipsel.deb -http://ftp.us.debian.org/debian/pool/main/liba/libappindicator/libappindicator3-dev_0.4.92-5_mipsel.deb -http://ftp.us.debian.org/debian/pool/main/liba/libappindicator/libappindicator-dev_0.4.92-5_mipsel.deb +http://ftp.us.debian.org/debian/pool/main/liba/libappindicator/libappindicator1_0.4.92-6_mipsel.deb +http://ftp.us.debian.org/debian/pool/main/liba/libappindicator/libappindicator3-1_0.4.92-6_mipsel.deb +http://ftp.us.debian.org/debian/pool/main/liba/libappindicator/libappindicator3-dev_0.4.92-6_mipsel.deb +http://ftp.us.debian.org/debian/pool/main/liba/libappindicator/libappindicator-dev_0.4.92-6_mipsel.deb http://ftp.us.debian.org/debian/pool/main/liba/libasyncns/libasyncns0_0.8-6_mipsel.deb -http://ftp.us.debian.org/debian/pool/main/libb/libbsd/libbsd0_0.8.7-1_mipsel.deb +http://ftp.us.debian.org/debian/pool/main/libb/libbsd/libbsd0_0.9.1-1_mipsel.deb http://ftp.us.debian.org/debian/pool/main/libc/libcap2/libcap2_2.25-1.2_mipsel.deb http://ftp.us.debian.org/debian/pool/main/libc/libcap2/libcap-dev_2.25-1.2_mipsel.deb -http://ftp.us.debian.org/debian/pool/main/libc/libcap-ng/libcap-ng0_0.7.7-3.1+b1_mipsel.deb -http://ftp.us.debian.org/debian/pool/main/libd/libdatrie/libdatrie1_0.2.10-7_mipsel.deb -http://ftp.us.debian.org/debian/pool/main/libd/libdbusmenu/libdbusmenu-glib4_16.04.1+17.04.20170109.1-5_mipsel.deb -http://ftp.us.debian.org/debian/pool/main/libd/libdbusmenu/libdbusmenu-glib-dev_16.04.1+17.04.20170109.1-5_mipsel.deb -http://ftp.us.debian.org/debian/pool/main/libd/libdbusmenu/libdbusmenu-gtk3-4_16.04.1+17.04.20170109.1-5_mipsel.deb -http://ftp.us.debian.org/debian/pool/main/libd/libdbusmenu/libdbusmenu-gtk4_16.04.1+17.04.20170109.1-5_mipsel.deb -http://ftp.us.debian.org/debian/pool/main/libd/libdrm/libdrm2_2.4.91-2_mipsel.deb -http://ftp.us.debian.org/debian/pool/main/libd/libdrm/libdrm-amdgpu1_2.4.91-2_mipsel.deb -http://ftp.us.debian.org/debian/pool/main/libd/libdrm/libdrm-dev_2.4.91-2_mipsel.deb -http://ftp.us.debian.org/debian/pool/main/libd/libdrm/libdrm-nouveau2_2.4.91-2_mipsel.deb -http://ftp.us.debian.org/debian/pool/main/libd/libdrm/libdrm-radeon1_2.4.91-2_mipsel.deb +http://ftp.us.debian.org/debian/pool/main/libc/libcap-ng/libcap-ng0_0.7.9-1_mipsel.deb +http://ftp.us.debian.org/debian/pool/main/libd/libdatrie/libdatrie1_0.2.12-1_mipsel.deb +http://ftp.us.debian.org/debian/pool/main/libd/libdbusmenu/libdbusmenu-glib4_16.04.1+18.04.20171206-1_mipsel.deb +http://ftp.us.debian.org/debian/pool/main/libd/libdbusmenu/libdbusmenu-glib-dev_16.04.1+18.04.20171206-1_mipsel.deb +http://ftp.us.debian.org/debian/pool/main/libd/libdbusmenu/libdbusmenu-gtk3-4_16.04.1+18.04.20171206-1_mipsel.deb +http://ftp.us.debian.org/debian/pool/main/libd/libdbusmenu/libdbusmenu-gtk4_16.04.1+18.04.20171206-1_mipsel.deb +http://ftp.us.debian.org/debian/pool/main/libd/libdrm/libdrm2_2.4.93-1_mipsel.deb +http://ftp.us.debian.org/debian/pool/main/libd/libdrm/libdrm-amdgpu1_2.4.93-1_mipsel.deb +http://ftp.us.debian.org/debian/pool/main/libd/libdrm/libdrm-dev_2.4.93-1_mipsel.deb +http://ftp.us.debian.org/debian/pool/main/libd/libdrm/libdrm-nouveau2_2.4.93-1_mipsel.deb +http://ftp.us.debian.org/debian/pool/main/libd/libdrm/libdrm-radeon1_2.4.93-1_mipsel.deb http://ftp.us.debian.org/debian/pool/main/libe/libepoxy/libepoxy0_1.4.3-1_mipsel.deb http://ftp.us.debian.org/debian/pool/main/libe/libepoxy/libepoxy-dev_1.4.3-1_mipsel.deb http://ftp.us.debian.org/debian/pool/main/libe/libevent/libevent-2.1-6_2.1.8-stable-4_mipsel.deb http://ftp.us.debian.org/debian/pool/main/libf/libffi/libffi6_3.2.1-8_mipsel.deb +http://ftp.us.debian.org/debian/pool/main/libf/libffi/libffi7_3.3~rc0-6_mipsel.deb http://ftp.us.debian.org/debian/pool/main/libf/libffi/libffi-dev_3.2.1-8_mipsel.deb -http://ftp.us.debian.org/debian/pool/main/libg/libgcrypt20/libgcrypt20_1.8.2-2_mipsel.deb -http://ftp.us.debian.org/debian/pool/main/libg/libgcrypt20/libgcrypt20-dev_1.8.2-2_mipsel.deb -http://ftp.us.debian.org/debian/pool/main/libg/libglvnd/libegl1_1.0.0-2_mipsel.deb -http://ftp.us.debian.org/debian/pool/main/libg/libglvnd/libgl1_1.0.0-2_mipsel.deb -http://ftp.us.debian.org/debian/pool/main/libg/libglvnd/libgles2_1.0.0-2_mipsel.deb -http://ftp.us.debian.org/debian/pool/main/libg/libglvnd/libglvnd0_1.0.0-2_mipsel.deb -http://ftp.us.debian.org/debian/pool/main/libg/libglvnd/libglvnd-dev_1.0.0-2_mipsel.deb -http://ftp.us.debian.org/debian/pool/main/libg/libglvnd/libglx0_1.0.0-2_mipsel.deb -http://ftp.us.debian.org/debian/pool/main/libg/libglvnd/libopengl0_1.0.0-2_mipsel.deb +http://ftp.us.debian.org/debian/pool/main/libg/libgcrypt20/libgcrypt20_1.8.3-1_mipsel.deb +http://ftp.us.debian.org/debian/pool/main/libg/libgcrypt20/libgcrypt20-dev_1.8.3-1_mipsel.deb +http://ftp.us.debian.org/debian/pool/main/libg/libglvnd/libegl1_1.1.0-1_mipsel.deb +http://ftp.us.debian.org/debian/pool/main/libg/libglvnd/libgl1_1.1.0-1_mipsel.deb +http://ftp.us.debian.org/debian/pool/main/libg/libglvnd/libgles1_1.1.0-1_mipsel.deb +http://ftp.us.debian.org/debian/pool/main/libg/libglvnd/libgles2_1.1.0-1_mipsel.deb +http://ftp.us.debian.org/debian/pool/main/libg/libglvnd/libglvnd0_1.1.0-1_mipsel.deb +http://ftp.us.debian.org/debian/pool/main/libg/libglvnd/libglvnd-dev_1.1.0-1_mipsel.deb +http://ftp.us.debian.org/debian/pool/main/libg/libglvnd/libglx0_1.1.0-1_mipsel.deb +http://ftp.us.debian.org/debian/pool/main/libg/libglvnd/libopengl0_1.1.0-1_mipsel.deb http://ftp.us.debian.org/debian/pool/main/libg/libgnome-keyring/libgnome-keyring0_3.12.0-1+b2_mipsel.deb http://ftp.us.debian.org/debian/pool/main/libg/libgnome-keyring/libgnome-keyring-dev_3.12.0-1+b2_mipsel.deb -http://ftp.us.debian.org/debian/pool/main/libg/libgpg-error/libgpg-error0_1.28-2_mipsel.deb -http://ftp.us.debian.org/debian/pool/main/libg/libgpg-error/libgpg-error-dev_1.28-2_mipsel.deb +http://ftp.us.debian.org/debian/pool/main/libg/libgpg-error/libgpg-error0_1.32-1_mipsel.deb +http://ftp.us.debian.org/debian/pool/main/libg/libgpg-error/libgpg-error-dev_1.32-1_mipsel.deb http://ftp.us.debian.org/debian/pool/main/libi/libice/libice6_1.0.9-2_mipsel.deb http://ftp.us.debian.org/debian/pool/main/libi/libidl/libidl-2-0_0.8.14-4+b1_mipsel.deb -http://ftp.us.debian.org/debian/pool/main/libi/libidn2/libidn2-0_2.0.4-1.1_mipsel.deb -http://ftp.us.debian.org/debian/pool/main/libi/libidn/libidn11_1.33-2.1_mipsel.deb +http://ftp.us.debian.org/debian/pool/main/libi/libidn2/libidn2-0_2.0.4-2.2_mipsel.deb +http://ftp.us.debian.org/debian/pool/main/libi/libidn/libidn11_1.33-2.2_mipsel.deb http://ftp.us.debian.org/debian/pool/main/libi/libindicator/libindicator3-7_0.5.0-3+b1_mipsel.deb http://ftp.us.debian.org/debian/pool/main/libi/libindicator/libindicator7_0.5.0-3+b1_mipsel.deb http://ftp.us.debian.org/debian/pool/main/libj/libjpeg-turbo/libjpeg62-turbo_1.5.2-2+b1_mipsel.deb @@ -133,25 +141,26 @@ http://ftp.us.debian.org/debian/pool/main/libn/libnss-db/libnss-db_2.2.3pre1-6+b http://ftp.us.debian.org/debian/pool/main/libo/libogg/libogg0_1.3.2-1+b1_mipsel.deb http://ftp.us.debian.org/debian/pool/main/libo/libogg/libogg-dev_1.3.2-1+b1_mipsel.deb http://ftp.us.debian.org/debian/pool/main/libp/libpciaccess/libpciaccess0_0.14-1_mipsel.deb -http://ftp.us.debian.org/debian/pool/main/libp/libpng1.6/libpng16-16_1.6.34-1_mipsel.deb -http://ftp.us.debian.org/debian/pool/main/libp/libpng1.6/libpng-dev_1.6.34-1_mipsel.deb +http://ftp.us.debian.org/debian/pool/main/libp/libpng1.6/libpng16-16_1.6.34-2_mipsel.deb +http://ftp.us.debian.org/debian/pool/main/libp/libpng1.6/libpng-dev_1.6.34-2_mipsel.deb +http://ftp.us.debian.org/debian/pool/main/libp/libpsl/libpsl5_0.20.2-1_mipsel.deb http://ftp.us.debian.org/debian/pool/main/libp/libpthread-stubs/libpthread-stubs0-dev_0.3-4_mipsel.deb http://ftp.us.debian.org/debian/pool/main/libr/librest/librest-0.7-0_0.8.0-2_mipsel.deb -http://ftp.us.debian.org/debian/pool/main/libs/libselinux/libselinux1_2.7-2+b2_mipsel.deb +http://ftp.us.debian.org/debian/pool/main/libs/libselinux/libselinux1_2.8-1+b1_mipsel.deb http://ftp.us.debian.org/debian/pool/main/libs/libsm/libsm6_1.2.2-1+b3_mipsel.deb http://ftp.us.debian.org/debian/pool/main/libs/libsndfile/libsndfile1_1.0.28-4_mipsel.deb -http://ftp.us.debian.org/debian/pool/main/libs/libsoup2.4/libsoup2.4-1_2.62.0-1_mipsel.deb -http://ftp.us.debian.org/debian/pool/main/libs/libsoup2.4/libsoup-gnome2.4-1_2.62.0-1_mipsel.deb -http://ftp.us.debian.org/debian/pool/main/libt/libtasn1-6/libtasn1-6_4.13-2_mipsel.deb -http://ftp.us.debian.org/debian/pool/main/libt/libthai/libthai0_0.1.27-2_mipsel.deb -http://ftp.us.debian.org/debian/pool/main/libt/libtool/libltdl7_2.4.6-2_mipsel.deb -http://ftp.us.debian.org/debian/pool/main/libu/libunistring/libunistring2_0.9.8-1_mipsel.deb -http://ftp.us.debian.org/debian/pool/main/libv/libva/libva2_2.1.0-3_mipsel.deb -http://ftp.us.debian.org/debian/pool/main/libv/libva/libva-dev_2.1.0-3_mipsel.deb -http://ftp.us.debian.org/debian/pool/main/libv/libva/libva-drm2_2.1.0-3_mipsel.deb -http://ftp.us.debian.org/debian/pool/main/libv/libva/libva-glx2_2.1.0-3_mipsel.deb -http://ftp.us.debian.org/debian/pool/main/libv/libva/libva-wayland2_2.1.0-3_mipsel.deb -http://ftp.us.debian.org/debian/pool/main/libv/libva/libva-x11-2_2.1.0-3_mipsel.deb +http://ftp.us.debian.org/debian/pool/main/libs/libsoup2.4/libsoup2.4-1_2.62.2-2_mipsel.deb +http://ftp.us.debian.org/debian/pool/main/libs/libsoup2.4/libsoup-gnome2.4-1_2.62.2-2_mipsel.deb +http://ftp.us.debian.org/debian/pool/main/libt/libtasn1-6/libtasn1-6_4.13-3_mipsel.deb +http://ftp.us.debian.org/debian/pool/main/libt/libthai/libthai0_0.1.28-1_mipsel.deb +http://ftp.us.debian.org/debian/pool/main/libt/libtool/libltdl7_2.4.6-2.1_mipsel.deb +http://ftp.us.debian.org/debian/pool/main/libu/libunistring/libunistring2_0.9.10-1_mipsel.deb +http://ftp.us.debian.org/debian/pool/main/libv/libva/libva2_2.2.0-1_mipsel.deb +http://ftp.us.debian.org/debian/pool/main/libv/libva/libva-dev_2.2.0-1_mipsel.deb +http://ftp.us.debian.org/debian/pool/main/libv/libva/libva-drm2_2.2.0-1_mipsel.deb +http://ftp.us.debian.org/debian/pool/main/libv/libva/libva-glx2_2.2.0-1_mipsel.deb +http://ftp.us.debian.org/debian/pool/main/libv/libva/libva-wayland2_2.2.0-1_mipsel.deb +http://ftp.us.debian.org/debian/pool/main/libv/libva/libva-x11-2_2.2.0-1_mipsel.deb http://ftp.us.debian.org/debian/pool/main/libv/libvorbis/libvorbis0a_1.3.6-1_mipsel.deb http://ftp.us.debian.org/debian/pool/main/libv/libvorbis/libvorbisenc2_1.3.6-1_mipsel.deb http://ftp.us.debian.org/debian/pool/main/libv/libvpx/libvpx5_1.7.0-3_mipsel.deb @@ -166,18 +175,18 @@ http://ftp.us.debian.org/debian/pool/main/libx/libx11/libx11-xcb1_1.6.5-1_mipsel http://ftp.us.debian.org/debian/pool/main/libx/libx11/libx11-xcb-dev_1.6.5-1_mipsel.deb http://ftp.us.debian.org/debian/pool/main/libx/libxau/libxau6_1.0.8-1+b2_mipsel.deb http://ftp.us.debian.org/debian/pool/main/libx/libxau/libxau-dev_1.0.8-1+b2_mipsel.deb -http://ftp.us.debian.org/debian/pool/main/libx/libxcb/libxcb1_1.13-1_mipsel.deb -http://ftp.us.debian.org/debian/pool/main/libx/libxcb/libxcb1-dev_1.13-1_mipsel.deb -http://ftp.us.debian.org/debian/pool/main/libx/libxcb/libxcb-dri2-0_1.13-1_mipsel.deb -http://ftp.us.debian.org/debian/pool/main/libx/libxcb/libxcb-dri3-0_1.13-1_mipsel.deb -http://ftp.us.debian.org/debian/pool/main/libx/libxcb/libxcb-glx0_1.13-1_mipsel.deb -http://ftp.us.debian.org/debian/pool/main/libx/libxcb/libxcb-present0_1.13-1_mipsel.deb -http://ftp.us.debian.org/debian/pool/main/libx/libxcb/libxcb-render0_1.13-1_mipsel.deb -http://ftp.us.debian.org/debian/pool/main/libx/libxcb/libxcb-render0-dev_1.13-1_mipsel.deb -http://ftp.us.debian.org/debian/pool/main/libx/libxcb/libxcb-shm0_1.13-1_mipsel.deb -http://ftp.us.debian.org/debian/pool/main/libx/libxcb/libxcb-shm0-dev_1.13-1_mipsel.deb -http://ftp.us.debian.org/debian/pool/main/libx/libxcb/libxcb-sync1_1.13-1_mipsel.deb -http://ftp.us.debian.org/debian/pool/main/libx/libxcb/libxcb-xfixes0_1.13-1_mipsel.deb +http://ftp.us.debian.org/debian/pool/main/libx/libxcb/libxcb1_1.13-2_mipsel.deb +http://ftp.us.debian.org/debian/pool/main/libx/libxcb/libxcb1-dev_1.13-2_mipsel.deb +http://ftp.us.debian.org/debian/pool/main/libx/libxcb/libxcb-dri2-0_1.13-2_mipsel.deb +http://ftp.us.debian.org/debian/pool/main/libx/libxcb/libxcb-dri3-0_1.13-2_mipsel.deb +http://ftp.us.debian.org/debian/pool/main/libx/libxcb/libxcb-glx0_1.13-2_mipsel.deb +http://ftp.us.debian.org/debian/pool/main/libx/libxcb/libxcb-present0_1.13-2_mipsel.deb +http://ftp.us.debian.org/debian/pool/main/libx/libxcb/libxcb-render0_1.13-2_mipsel.deb +http://ftp.us.debian.org/debian/pool/main/libx/libxcb/libxcb-render0-dev_1.13-2_mipsel.deb +http://ftp.us.debian.org/debian/pool/main/libx/libxcb/libxcb-shm0_1.13-2_mipsel.deb +http://ftp.us.debian.org/debian/pool/main/libx/libxcb/libxcb-shm0-dev_1.13-2_mipsel.deb +http://ftp.us.debian.org/debian/pool/main/libx/libxcb/libxcb-sync1_1.13-2_mipsel.deb +http://ftp.us.debian.org/debian/pool/main/libx/libxcb/libxcb-xfixes0_1.13-2_mipsel.deb http://ftp.us.debian.org/debian/pool/main/libx/libxcomposite/libxcomposite1_0.4.4-2_mipsel.deb http://ftp.us.debian.org/debian/pool/main/libx/libxcomposite/libxcomposite-dev_0.4.4-2_mipsel.deb http://ftp.us.debian.org/debian/pool/main/libx/libxcursor/libxcursor1_1.1.15-1_mipsel.deb @@ -194,17 +203,17 @@ http://ftp.us.debian.org/debian/pool/main/libx/libxi/libxi6_1.7.9-1_mipsel.deb http://ftp.us.debian.org/debian/pool/main/libx/libxi/libxi-dev_1.7.9-1_mipsel.deb http://ftp.us.debian.org/debian/pool/main/libx/libxinerama/libxinerama1_1.1.3-1+b3_mipsel.deb http://ftp.us.debian.org/debian/pool/main/libx/libxinerama/libxinerama-dev_1.1.3-1+b3_mipsel.deb -http://ftp.us.debian.org/debian/pool/main/libx/libxkbcommon/libxkbcommon0_0.8.0-1_mipsel.deb -http://ftp.us.debian.org/debian/pool/main/libx/libxkbcommon/libxkbcommon-dev_0.8.0-1_mipsel.deb -http://ftp.us.debian.org/debian/pool/main/libx/libxml2/libxml2_2.9.4+dfsg1-6.1_mipsel.deb -http://ftp.us.debian.org/debian/pool/main/libx/libxml2/libxml2-dev_2.9.4+dfsg1-6.1_mipsel.deb +http://ftp.us.debian.org/debian/pool/main/libx/libxkbcommon/libxkbcommon0_0.8.0-2_mipsel.deb +http://ftp.us.debian.org/debian/pool/main/libx/libxkbcommon/libxkbcommon-dev_0.8.0-2_mipsel.deb +http://ftp.us.debian.org/debian/pool/main/libx/libxml2/libxml2_2.9.4+dfsg1-7+b1_mipsel.deb +http://ftp.us.debian.org/debian/pool/main/libx/libxml2/libxml2-dev_2.9.4+dfsg1-7+b1_mipsel.deb http://ftp.us.debian.org/debian/pool/main/libx/libxrandr/libxrandr2_1.5.1-1_mipsel.deb http://ftp.us.debian.org/debian/pool/main/libx/libxrandr/libxrandr-dev_1.5.1-1_mipsel.deb http://ftp.us.debian.org/debian/pool/main/libx/libxrender/libxrender1_0.9.10-1_mipsel.deb http://ftp.us.debian.org/debian/pool/main/libx/libxrender/libxrender-dev_0.9.10-1_mipsel.deb http://ftp.us.debian.org/debian/pool/main/libx/libxshmfence/libxshmfence1_1.3-1_mipsel.deb -http://ftp.us.debian.org/debian/pool/main/libx/libxslt/libxslt1.1_1.1.29-5_mipsel.deb -http://ftp.us.debian.org/debian/pool/main/libx/libxslt/libxslt1-dev_1.1.29-5_mipsel.deb +http://ftp.us.debian.org/debian/pool/main/libx/libxslt/libxslt1.1_1.1.32-2_mipsel.deb +http://ftp.us.debian.org/debian/pool/main/libx/libxslt/libxslt1-dev_1.1.32-2_mipsel.deb http://ftp.us.debian.org/debian/pool/main/libx/libxss/libxss1_1.2.2-1+b2_mipsel.deb http://ftp.us.debian.org/debian/pool/main/libx/libxss/libxss-dev_1.2.2-1+b2_mipsel.deb http://ftp.us.debian.org/debian/pool/main/libx/libxt/libxt6_1.1.5-1+b1_mipsel.deb @@ -212,79 +221,81 @@ http://ftp.us.debian.org/debian/pool/main/libx/libxt/libxt-dev_1.1.5-1+b1_mipsel http://ftp.us.debian.org/debian/pool/main/libx/libxtst/libxtst6_1.2.3-1_mipsel.deb http://ftp.us.debian.org/debian/pool/main/libx/libxtst/libxtst-dev_1.2.3-1_mipsel.deb http://ftp.us.debian.org/debian/pool/main/libx/libxxf86vm/libxxf86vm1_1.1.4-1+b2_mipsel.deb -http://ftp.us.debian.org/debian/pool/main/l/lcms2/liblcms2-2_2.9-1_mipsel.deb -http://ftp.us.debian.org/debian/pool/main/l/linux/linux-libc-dev_4.15.11-1_mipsel.deb -http://ftp.us.debian.org/debian/pool/main/l/lz4/liblz4-1_0.0~r131-2+b1_mipsel.deb -http://ftp.us.debian.org/debian/pool/main/l/lzo2/liblzo2-2_2.08-1.2+b2_mipsel.deb -http://ftp.us.debian.org/debian/pool/main/m/mesa/libegl1-mesa_17.3.7-1_mipsel.deb -http://ftp.us.debian.org/debian/pool/main/m/mesa/libegl1-mesa-dev_17.3.7-1_mipsel.deb -http://ftp.us.debian.org/debian/pool/main/m/mesa/libgbm1_17.3.7-1_mipsel.deb -http://ftp.us.debian.org/debian/pool/main/m/mesa/libgbm-dev_17.3.7-1_mipsel.deb -http://ftp.us.debian.org/debian/pool/main/m/mesa/libgl1-mesa-dev_17.3.7-1_mipsel.deb -http://ftp.us.debian.org/debian/pool/main/m/mesa/libgl1-mesa-glx_17.3.7-1_mipsel.deb -http://ftp.us.debian.org/debian/pool/main/m/mesa/libglapi-mesa_17.3.7-1_mipsel.deb -http://ftp.us.debian.org/debian/pool/main/m/mesa/libwayland-egl1-mesa_17.3.7-1_mipsel.deb -http://ftp.us.debian.org/debian/pool/main/m/mesa/mesa-common-dev_17.3.7-1_mipsel.deb +http://ftp.us.debian.org/debian/pool/main/l/lcms2/liblcms2-2_2.9-2_mipsel.deb +http://ftp.us.debian.org/debian/pool/main/l/linux/linux-libc-dev_4.17.17-1_mipsel.deb +http://ftp.us.debian.org/debian/pool/main/l/lz4/liblz4-1_1.8.2-1_mipsel.deb +http://ftp.us.debian.org/debian/pool/main/l/lzo2/liblzo2-2_2.10-0.1_mipsel.deb +http://ftp.us.debian.org/debian/pool/main/m/mesa/libegl1-mesa_18.1.6-1_mipsel.deb +http://ftp.us.debian.org/debian/pool/main/m/mesa/libegl1-mesa-dev_18.1.6-1_mipsel.deb +http://ftp.us.debian.org/debian/pool/main/m/mesa/libgbm1_18.1.6-1_mipsel.deb +http://ftp.us.debian.org/debian/pool/main/m/mesa/libgbm-dev_18.1.6-1_mipsel.deb +http://ftp.us.debian.org/debian/pool/main/m/mesa/libgl1-mesa-dev_18.1.6-1_mipsel.deb +http://ftp.us.debian.org/debian/pool/main/m/mesa/libgl1-mesa-glx_18.1.6-1_mipsel.deb +http://ftp.us.debian.org/debian/pool/main/m/mesa/libglapi-mesa_18.1.6-1_mipsel.deb +http://ftp.us.debian.org/debian/pool/main/m/mesa/libwayland-egl1-mesa_18.1.6-1_mipsel.deb +http://ftp.us.debian.org/debian/pool/main/m/mesa/mesa-common-dev_18.1.6-1_mipsel.deb http://ftp.us.debian.org/debian/pool/main/m/minizip/libminizip1_1.1-8+b1_mipsel.deb http://ftp.us.debian.org/debian/pool/main/m/minizip/libminizip-dev_1.1-8+b1_mipsel.deb http://ftp.us.debian.org/debian/pool/main/n/nettle/libhogweed4_3.4-1_mipsel.deb http://ftp.us.debian.org/debian/pool/main/n/nettle/libnettle6_3.4-1_mipsel.deb -http://ftp.us.debian.org/debian/pool/main/n/nspr/libnspr4_4.18-1_mipsel.deb -http://ftp.us.debian.org/debian/pool/main/n/nspr/libnspr4-dev_4.18-1_mipsel.deb -http://ftp.us.debian.org/debian/pool/main/n/nss/libnss3_3.35-2_mipsel.deb -http://ftp.us.debian.org/debian/pool/main/n/nss/libnss3-dev_3.35-2_mipsel.deb +http://ftp.us.debian.org/debian/pool/main/n/nspr/libnspr4_4.19-3_mipsel.deb +http://ftp.us.debian.org/debian/pool/main/n/nspr/libnspr4-dev_4.19-3_mipsel.deb +http://ftp.us.debian.org/debian/pool/main/n/nss/libnss3_3.38-1_mipsel.deb +http://ftp.us.debian.org/debian/pool/main/n/nss/libnss3-dev_3.38-1_mipsel.deb http://ftp.us.debian.org/debian/pool/main/o/openssl1.0/libssl1.0.2_1.0.2o-1_mipsel.deb -http://ftp.us.debian.org/debian/pool/main/o/openssl/libssl1.1_1.1.0h-2_mipsel.deb -http://ftp.us.debian.org/debian/pool/main/o/openssl/libssl-dev_1.1.0h-2_mipsel.deb -http://ftp.us.debian.org/debian/pool/main/o/opus/libopus0_1.2.1-1_mipsel.deb -http://ftp.us.debian.org/debian/pool/main/o/opus/libopus-dev_1.2.1-1_mipsel.deb +http://ftp.us.debian.org/debian/pool/main/o/openssl/libssl1.1_1.1.0h-4_mipsel.deb +http://ftp.us.debian.org/debian/pool/main/o/openssl/libssl-dev_1.1.0h-4_mipsel.deb +http://ftp.us.debian.org/debian/pool/main/o/opus/libopus0_1.3~beta+20180518-1_mipsel.deb +http://ftp.us.debian.org/debian/pool/main/o/opus/libopus-dev_1.3~beta+20180518-1_mipsel.deb http://ftp.us.debian.org/debian/pool/main/o/orbit2/liborbit-2-0_2.14.19-4_mipsel.deb http://ftp.us.debian.org/debian/pool/main/o/orbit2/liborbit2_2.14.19-4_mipsel.deb -http://ftp.us.debian.org/debian/pool/main/p/p11-kit/libp11-kit0_0.23.10-2_mipsel.deb -http://ftp.us.debian.org/debian/pool/main/p/pam/libpam0g_1.1.8-3.7_mipsel.deb -http://ftp.us.debian.org/debian/pool/main/p/pam/libpam0g-dev_1.1.8-3.7_mipsel.deb -http://ftp.us.debian.org/debian/pool/main/p/pango1.0/libpango-1.0-0_1.42.0-1_mipsel.deb -http://ftp.us.debian.org/debian/pool/main/p/pango1.0/libpango1.0-dev_1.42.0-1_mipsel.deb -http://ftp.us.debian.org/debian/pool/main/p/pango1.0/libpangocairo-1.0-0_1.42.0-1_mipsel.deb -http://ftp.us.debian.org/debian/pool/main/p/pango1.0/libpangoft2-1.0-0_1.42.0-1_mipsel.deb -http://ftp.us.debian.org/debian/pool/main/p/pango1.0/libpangoxft-1.0-0_1.42.0-1_mipsel.deb +http://ftp.us.debian.org/debian/pool/main/p/p11-kit/libp11-kit0_0.23.13-2_mipsel.deb +http://ftp.us.debian.org/debian/pool/main/p/pam/libpam0g_1.1.8-3.8_mipsel.deb +http://ftp.us.debian.org/debian/pool/main/p/pam/libpam0g-dev_1.1.8-3.8_mipsel.deb +http://ftp.us.debian.org/debian/pool/main/p/pango1.0/libpango-1.0-0_1.42.4-1_mipsel.deb +http://ftp.us.debian.org/debian/pool/main/p/pango1.0/libpango1.0-dev_1.42.4-1_mipsel.deb +http://ftp.us.debian.org/debian/pool/main/p/pango1.0/libpangocairo-1.0-0_1.42.4-1_mipsel.deb +http://ftp.us.debian.org/debian/pool/main/p/pango1.0/libpangoft2-1.0-0_1.42.4-1_mipsel.deb +http://ftp.us.debian.org/debian/pool/main/p/pango1.0/libpangoxft-1.0-0_1.42.4-1_mipsel.deb http://ftp.us.debian.org/debian/pool/main/p/pangox-compat/libpangox-1.0-0_0.0.2-5+b2_mipsel.deb http://ftp.us.debian.org/debian/pool/main/p/pciutils/libpci3_3.5.2-1_mipsel.deb http://ftp.us.debian.org/debian/pool/main/p/pciutils/libpci-dev_3.5.2-1_mipsel.deb -http://ftp.us.debian.org/debian/pool/main/p/pcre3/libpcre16-3_8.39-9_mipsel.deb -http://ftp.us.debian.org/debian/pool/main/p/pcre3/libpcre32-3_8.39-9_mipsel.deb -http://ftp.us.debian.org/debian/pool/main/p/pcre3/libpcre3_8.39-9_mipsel.deb -http://ftp.us.debian.org/debian/pool/main/p/pcre3/libpcre3-dev_8.39-9_mipsel.deb -http://ftp.us.debian.org/debian/pool/main/p/pcre3/libpcrecpp0v5_8.39-9_mipsel.deb +http://ftp.us.debian.org/debian/pool/main/p/pcre3/libpcre16-3_8.39-11_mipsel.deb +http://ftp.us.debian.org/debian/pool/main/p/pcre3/libpcre32-3_8.39-11_mipsel.deb +http://ftp.us.debian.org/debian/pool/main/p/pcre3/libpcre3_8.39-11_mipsel.deb +http://ftp.us.debian.org/debian/pool/main/p/pcre3/libpcre3-dev_8.39-11_mipsel.deb +http://ftp.us.debian.org/debian/pool/main/p/pcre3/libpcrecpp0v5_8.39-11_mipsel.deb http://ftp.us.debian.org/debian/pool/main/p/pixman/libpixman-1-0_0.34.0-2_mipsel.deb http://ftp.us.debian.org/debian/pool/main/p/pixman/libpixman-1-dev_0.34.0-2_mipsel.deb -http://ftp.us.debian.org/debian/pool/main/p/pulseaudio/libpulse0_11.1-4_mipsel.deb -http://ftp.us.debian.org/debian/pool/main/p/pulseaudio/libpulse-dev_11.1-4_mipsel.deb -http://ftp.us.debian.org/debian/pool/main/p/pulseaudio/libpulse-mainloop-glib0_11.1-4_mipsel.deb -http://ftp.us.debian.org/debian/pool/main/r/re2/libre2-4_20180301+dfsg-1_mipsel.deb -http://ftp.us.debian.org/debian/pool/main/r/re2/libre2-dev_20180301+dfsg-1_mipsel.deb +http://ftp.us.debian.org/debian/pool/main/p/pulseaudio/libpulse0_12.0-1_mipsel.deb +http://ftp.us.debian.org/debian/pool/main/p/pulseaudio/libpulse-dev_12.0-1_mipsel.deb +http://ftp.us.debian.org/debian/pool/main/p/pulseaudio/libpulse-mainloop-glib0_12.0-1_mipsel.deb +http://ftp.us.debian.org/debian/pool/main/r/re2/libre2-4_20180701+dfsg-1_mipsel.deb +http://ftp.us.debian.org/debian/pool/main/r/re2/libre2-dev_20180701+dfsg-1_mipsel.deb http://ftp.us.debian.org/debian/pool/main/s/snappy/libsnappy1v5_1.1.7-1_mipsel.deb http://ftp.us.debian.org/debian/pool/main/s/snappy/libsnappy-dev_1.1.7-1_mipsel.deb -http://ftp.us.debian.org/debian/pool/main/s/speech-dispatcher/libspeechd2_0.8.8-1_mipsel.deb -http://ftp.us.debian.org/debian/pool/main/s/speech-dispatcher/libspeechd-dev_0.8.8-1_mipsel.deb -http://ftp.us.debian.org/debian/pool/main/s/speech-dispatcher/speech-dispatcher_0.8.8-1_mipsel.deb -http://ftp.us.debian.org/debian/pool/main/s/sqlite3/libsqlite3-0_3.23.0-1_mipsel.deb -http://ftp.us.debian.org/debian/pool/main/s/systemd/libsystemd0_238-4_mipsel.deb -http://ftp.us.debian.org/debian/pool/main/s/systemd/libudev1_238-4_mipsel.deb -http://ftp.us.debian.org/debian/pool/main/s/systemd/libudev-dev_238-4_mipsel.deb +http://ftp.us.debian.org/debian/pool/main/s/speech-dispatcher/libspeechd2_0.8.8-6_mipsel.deb +http://ftp.us.debian.org/debian/pool/main/s/speech-dispatcher/libspeechd-dev_0.8.8-6_mipsel.deb +http://ftp.us.debian.org/debian/pool/main/s/speech-dispatcher/speech-dispatcher_0.8.8-6_mipsel.deb +http://ftp.us.debian.org/debian/pool/main/s/sqlite3/libsqlite3-0_3.24.0-1_mipsel.deb +http://ftp.us.debian.org/debian/pool/main/s/systemd/libsystemd0_239-7_mipsel.deb +http://ftp.us.debian.org/debian/pool/main/s/systemd/libudev1_239-7_mipsel.deb +http://ftp.us.debian.org/debian/pool/main/s/systemd/libudev-dev_239-7_mipsel.deb http://ftp.us.debian.org/debian/pool/main/t/tcp-wrappers/libwrap0_7.6.q-27_mipsel.deb -http://ftp.us.debian.org/debian/pool/main/t/tiff/libtiff5_4.0.9-4_mipsel.deb -http://ftp.us.debian.org/debian/pool/main/u/unbound/libunbound2_1.6.7-1_mipsel.deb -http://ftp.us.debian.org/debian/pool/main/u/util-linux/libblkid1_2.31.1-0.5_mipsel.deb -http://ftp.us.debian.org/debian/pool/main/u/util-linux/libmount1_2.31.1-0.5_mipsel.deb -http://ftp.us.debian.org/debian/pool/main/u/util-linux/libuuid1_2.31.1-0.5_mipsel.deb -http://ftp.us.debian.org/debian/pool/main/u/util-linux/uuid-dev_2.31.1-0.5_mipsel.deb -http://ftp.us.debian.org/debian/pool/main/w/wayland/libwayland-client0_1.14.0-2_mipsel.deb -http://ftp.us.debian.org/debian/pool/main/w/wayland/libwayland-cursor0_1.14.0-2_mipsel.deb -http://ftp.us.debian.org/debian/pool/main/w/wayland/libwayland-dev_1.14.0-2_mipsel.deb -http://ftp.us.debian.org/debian/pool/main/w/wayland/libwayland-server0_1.14.0-2_mipsel.deb -http://ftp.us.debian.org/debian/pool/main/w/wayland-protocols/wayland-protocols_1.13-1_all.deb -http://ftp.us.debian.org/debian/pool/main/x/xft/libxft2_2.3.2-1+b2_mipsel.deb +http://ftp.us.debian.org/debian/pool/main/t/tiff/libtiff5_4.0.9-6_mipsel.deb +http://ftp.us.debian.org/debian/pool/main/u/unbound/libunbound2_1.7.3-1_mipsel.deb +http://ftp.us.debian.org/debian/pool/main/u/util-linux/libblkid1_2.32.1-0.1_mipsel.deb +http://ftp.us.debian.org/debian/pool/main/u/util-linux/libmount1_2.32.1-0.1_mipsel.deb +http://ftp.us.debian.org/debian/pool/main/u/util-linux/libuuid1_2.32.1-0.1_mipsel.deb +http://ftp.us.debian.org/debian/pool/main/u/util-linux/uuid-dev_2.32.1-0.1_mipsel.deb +http://ftp.us.debian.org/debian/pool/main/v/vulkan/libvulkan1_1.1.73+dfsg-1_mipsel.deb +http://ftp.us.debian.org/debian/pool/main/w/wayland/libwayland-client0_1.15.0-2_mipsel.deb +http://ftp.us.debian.org/debian/pool/main/w/wayland/libwayland-cursor0_1.15.0-2_mipsel.deb +http://ftp.us.debian.org/debian/pool/main/w/wayland/libwayland-dev_1.15.0-2_mipsel.deb +http://ftp.us.debian.org/debian/pool/main/w/wayland/libwayland-egl1_1.15.0-2_mipsel.deb +http://ftp.us.debian.org/debian/pool/main/w/wayland/libwayland-server0_1.15.0-2_mipsel.deb +http://ftp.us.debian.org/debian/pool/main/w/wayland-protocols/wayland-protocols_1.16-1_all.deb +http://ftp.us.debian.org/debian/pool/main/x/xft/libxft2_2.3.2-2_mipsel.deb http://ftp.us.debian.org/debian/pool/main/x/xorgproto/x11proto-composite-dev_2018.4-4_all.deb http://ftp.us.debian.org/debian/pool/main/x/xorgproto/x11proto-damage-dev_2018.4-4_all.deb http://ftp.us.debian.org/debian/pool/main/x/xorgproto/x11proto-dev_2018.4-4_all.deb @@ -298,5 +309,5 @@ http://ftp.us.debian.org/debian/pool/main/x/xorgproto/x11proto-scrnsaver-dev_201 http://ftp.us.debian.org/debian/pool/main/x/xorgproto/x11proto-xext-dev_2018.4-4_all.deb http://ftp.us.debian.org/debian/pool/main/x/xorgproto/x11proto-xinerama-dev_2018.4-4_all.deb http://ftp.us.debian.org/debian/pool/main/x/xz-utils/liblzma5_5.2.2-1.3_mipsel.deb -http://ftp.us.debian.org/debian/pool/main/z/zlib/zlib1g_1.2.8.dfsg-5_mipsel.deb -http://ftp.us.debian.org/debian/pool/main/z/zlib/zlib1g-dev_1.2.8.dfsg-5_mipsel.deb +http://ftp.us.debian.org/debian/pool/main/z/zlib/zlib1g_1.2.11.dfsg-1_mipsel.deb +http://ftp.us.debian.org/debian/pool/main/z/zlib/zlib1g-dev_1.2.11.dfsg-1_mipsel.deb diff --git a/chromium/build/linux/sysroot_scripts/sysroot-creator-sid.sh b/chromium/build/linux/sysroot_scripts/sysroot-creator-sid.sh index 18aa037d0e2..8aad299a17a 100755 --- a/chromium/build/linux/sysroot_scripts/sysroot-creator-sid.sh +++ b/chromium/build/linux/sysroot_scripts/sysroot-creator-sid.sh @@ -8,7 +8,14 @@ SCRIPT_DIR="$( cd "$( dirname "${BASH_SOURCE[0]}" )" && pwd )" DISTRO=debian DIST=sid -APT_SOURCES_LIST="http://ftp.us.debian.org/debian/ sid main" +# Keep the "experimental" repo before the "sid" repo. There are some packages +# that are currently only available in experimental like libgtk-4-0, but if it +# were to be placed first, experimental (unreleased) versions of other packages +# like libc6 would take precedence over the sid (released) versions. While this +# may be useful for certain kinds of development, the standard sysroots should +# continue to be shipped only with released packages. +APT_SOURCES_LIST="http://ftp.us.debian.org/debian/ experimental main +http://ftp.us.debian.org/debian/ sid main" # gpg keyring file generated using: # export KEYS="518E17E1 46925553 2B90D010 C857C906 F66AEC98 8AE22BA9 1A7B6500" @@ -94,12 +101,14 @@ DEBIAN_PACKAGES="\ libexpat1-dev libffi-dev libffi6 + libffi7 libflac-dev libflac8 libfontconfig1 libfontconfig1-dev libfreetype6 libfreetype6-dev + libfribidi-dev libfribidi0 libgbm-dev libgbm1 @@ -113,6 +122,7 @@ DEBIAN_PACKAGES="\ libgl1-mesa-dev libgl1-mesa-glx libglapi-mesa + libgles1 libgles2 libglib2.0-0 libglib2.0-dev @@ -130,21 +140,26 @@ DEBIAN_PACKAGES="\ libgomp1 libgpg-error-dev libgpg-error0 + libgraphene-1.0-0 + libgraphene-1.0-dev libgraphite2-3 libgraphite2-dev libgssapi-krb5-2 libgssrpc4 libgtk-3-0 libgtk-3-dev + libgtk-4-0 + libgtk-4-dev libgtk2.0-0 - libgtk2.0-dev libharfbuzz-dev libharfbuzz-gobject0 libharfbuzz-icu0 libharfbuzz0b libhogweed4 libice6 + libicu-le-hb0 libicu57 + libicu60 libidl-2-0 libidn11 libidn2-0 @@ -206,6 +221,7 @@ DEBIAN_PACKAGES="\ libpixman-1-dev libpng-dev libpng16-16 + libpsl5 libpthread-stubs0-dev libpulse-dev libpulse-mainloop-glib0 @@ -247,9 +263,11 @@ DEBIAN_PACKAGES="\ libvorbisenc2 libvpx-dev libvpx5 + libvulkan1 libwayland-client0 libwayland-cursor0 libwayland-dev + libwayland-egl1 libwayland-egl1-mesa libwayland-server0 libwebp-dev diff --git a/chromium/build/linux/sysroot_scripts/sysroots.json b/chromium/build/linux/sysroot_scripts/sysroots.json index e79b69b764b..c65e69b2d44 100644 --- a/chromium/build/linux/sysroot_scripts/sysroots.json +++ b/chromium/build/linux/sysroot_scripts/sysroots.json @@ -1,37 +1,37 @@ { "sid_amd64": { - "Revision": "1015a998c2adf188813cca60b558b0ea1a0b6ced", - "Sha1Sum": "4e7db513b0faeea8fb410f70c9909e8736f5c0ab", + "Revision": "2abe7ab2252a37b3c5a400c5c2d7052b43b4d924", + "Sha1Sum": "815a8c22f8657fe57d02e2c2d893bcdc25a243cf", "SysrootDir": "debian_sid_amd64-sysroot", "Tarball": "debian_sid_amd64_sysroot.tar.xz" }, "sid_arm": { - "Revision": "1015a998c2adf188813cca60b558b0ea1a0b6ced", - "Sha1Sum": "b2165ab47ab9c4cc780db53ace1b08607d68ae31", + "Revision": "2abe7ab2252a37b3c5a400c5c2d7052b43b4d924", + "Sha1Sum": "b732cc2c870314130b767557b34764f8dd0a3df8", "SysrootDir": "debian_sid_arm-sysroot", "Tarball": "debian_sid_arm_sysroot.tar.xz" }, "sid_arm64": { - "Revision": "1015a998c2adf188813cca60b558b0ea1a0b6ced", - "Sha1Sum": "37dfa5f22e2c0e847cee34f9848eb31230c33d35", + "Revision": "2abe7ab2252a37b3c5a400c5c2d7052b43b4d924", + "Sha1Sum": "c68b2062879db201c4047d03c016227d3d1e7b35", "SysrootDir": "debian_sid_arm64-sysroot", "Tarball": "debian_sid_arm64_sysroot.tar.xz" }, "sid_i386": { - "Revision": "1015a998c2adf188813cca60b558b0ea1a0b6ced", - "Sha1Sum": "b8639749e2b561a7462d7e7978ca74ee4044bdab", + "Revision": "2abe7ab2252a37b3c5a400c5c2d7052b43b4d924", + "Sha1Sum": "8fa6886026aed66e5c3056a1498490d23ccc9ae1", "SysrootDir": "debian_sid_i386-sysroot", "Tarball": "debian_sid_i386_sysroot.tar.xz" }, "sid_mips": { - "Revision": "1015a998c2adf188813cca60b558b0ea1a0b6ced", - "Sha1Sum": "baaf37cdcbcf251fb9a4ccaf8b479722ae61fe49", + "Revision": "2abe7ab2252a37b3c5a400c5c2d7052b43b4d924", + "Sha1Sum": "791ebb865df4c107d94e6e365ed7a9bcf191509a", "SysrootDir": "debian_sid_mips-sysroot", "Tarball": "debian_sid_mips_sysroot.tar.xz" }, "sid_mips64el": { - "Revision": "1015a998c2adf188813cca60b558b0ea1a0b6ced", - "Sha1Sum": "bbfe1a513b849921cfcf78865faec8fc03f93b3d", + "Revision": "2abe7ab2252a37b3c5a400c5c2d7052b43b4d924", + "Sha1Sum": "313505573e6d06e127b5acd9509781d4d6e5ad9b", "SysrootDir": "debian_sid_mips64el-sysroot", "Tarball": "debian_sid_mips64el_sysroot.tar.xz" } diff --git a/chromium/build/linux/unbundle/README b/chromium/build/linux/unbundle/README index 6e4f0a95c9f..b6b6321b384 100644 --- a/chromium/build/linux/unbundle/README +++ b/chromium/build/linux/unbundle/README @@ -32,7 +32,7 @@ Usage: 1. remove_bundled_libraries.py <preserved-directories> - For example: remove_bundled_libraries.py third_party/mesa + For example: remove_bundled_libraries.py third_party/zlib The script scans sources looking for third_party directories. Everything that is not explicitly preserved is removed (except for diff --git a/chromium/build/mac/tweak_info_plist.gni b/chromium/build/mac/tweak_info_plist.gni index 505f5e50ab7..9f4cbb3fdfa 100644 --- a/chromium/build/mac/tweak_info_plist.gni +++ b/chromium/build/mac/tweak_info_plist.gni @@ -2,6 +2,8 @@ # Use of this source code is governed by a BSD-style license that can be # found in the LICENSE file. +import("//build/util/lastchange.gni") + # Template to run the tweak_info_plist.py script on a plist. # # Arguments: @@ -59,7 +61,7 @@ template("tweak_info_plist") { inputs = [ script, "//build/util/version.py", - "//build/util/LASTCHANGE", + lastchange_file, "//chrome/VERSION", ] sources = [ diff --git a/chromium/build/nocompile.gni b/chromium/build/nocompile.gni index be6e5af481a..e2e7269e2db 100644 --- a/chromium/build/nocompile.gni +++ b/chromium/build/nocompile.gni @@ -92,6 +92,7 @@ if (enable_nocompile_tests) { "-Wfatal-errors", "-Wthread-safety", "-I" + rebase_path("//", root_build_dir), + "-I" + rebase_path(root_gen_dir, root_build_dir), ] if (sysroot != "") { args += [ diff --git a/chromium/build/print_python_deps.py b/chromium/build/print_python_deps.py index 2459a28e6b6..8ded01e0d67 100755 --- a/chromium/build/print_python_deps.py +++ b/chromium/build/print_python_deps.py @@ -78,6 +78,10 @@ def main(): help='Directory to make paths relative to.') parser.add_argument('--output', help='Write output to a file rather than stdout.') + parser.add_argument('--inplace', action='store_true', + help='Write output to a file with the same path as the ' + 'module, but with a .pydeps extension. Also sets the ' + 'root to the module\'s directory.') parser.add_argument('--no-header', action='store_true', help='Do not write the "# Generated by" header.') parser.add_argument('--gn-paths', action='store_true', @@ -92,6 +96,14 @@ def main(): sys.path[0] = os.path.dirname(options.module) imp.load_source('NAME', options.module) + if options.inplace: + if options.output: + parser.error('Cannot use --inplace and --output at the same time!') + if not options.module.endswith('.py'): + parser.error('Input module path should end with .py suffix!') + options.output = options.module + 'deps' + options.root = os.path.dirname(options.module) + paths_set = _ComputePythonDependencies() for path in options.whitelists: paths_set.update(os.path.abspath(p) for p in _FindPythonInDirectory(path)) diff --git a/chromium/build/protoc_java.py b/chromium/build/protoc_java.py index 2addb8210fe..5227bf94999 100755 --- a/chromium/build/protoc_java.py +++ b/chromium/build/protoc_java.py @@ -76,7 +76,8 @@ def main(argv): if options.depfile: assert options.srcjar deps = args + [options.protoc] - build_utils.WriteDepfile(options.depfile, options.srcjar, deps) + build_utils.WriteDepfile(options.depfile, options.srcjar, deps, + add_pydeps=False) if options.stamp: build_utils.Touch(options.stamp) diff --git a/chromium/build/protoc_java.pydeps b/chromium/build/protoc_java.pydeps new file mode 100644 index 00000000000..a26622b476c --- /dev/null +++ b/chromium/build/protoc_java.pydeps @@ -0,0 +1,7 @@ +# Generated by running: +# build/print_python_deps.py --root build --output build/protoc_java.pydeps build/protoc_java.py +android/gyp/util/__init__.py +android/gyp/util/build_utils.py +android/gyp/util/md5_check.py +gn_helpers.py +protoc_java.py diff --git a/chromium/build/sanitizers/tsan_suppressions.cc b/chromium/build/sanitizers/tsan_suppressions.cc index 9e475c6cd78..4b2fb0907e1 100644 --- a/chromium/build/sanitizers/tsan_suppressions.cc +++ b/chromium/build/sanitizers/tsan_suppressions.cc @@ -261,9 +261,6 @@ char kTSanDefaultSuppressions[] = // http://crbug.com/797998 "race:content::SandboxIPCHandler::HandleLocaltime\n" - // - "race:third_party/harfbuzz-ng/src/*\n" - // End of suppressions. ; // Please keep this semicolon. diff --git a/chromium/build/secondary/testing/gmock/BUILD.gn b/chromium/build/secondary/testing/gmock/BUILD.gn deleted file mode 100644 index 9184d623c82..00000000000 --- a/chromium/build/secondary/testing/gmock/BUILD.gn +++ /dev/null @@ -1,65 +0,0 @@ -# Copyright 2014 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. - -# Chromium's GN configuration for gmock now lives at testing/gmock/BUILD.gn. -# -# This configuration is left in the tree because it is pulled by V8 and PDFium, -# and will be removed as soon as the projects switch off of it. -# -# Details at http://crbug.com/630705 and http://crrev.com/2779193002 - -config("gmock_config") { - # Gmock headers need to be able to find themselves. - include_dirs = [ - "//testing/gmock_custom", - "include", - ] -} - -static_library("gmock") { - testonly = true - sources = [ - # Sources based on files in r173 of gmock. - "include/gmock/gmock-actions.h", - "include/gmock/gmock-cardinalities.h", - "include/gmock/gmock-generated-actions.h", - "include/gmock/gmock-generated-function-mockers.h", - "include/gmock/gmock-generated-matchers.h", - "include/gmock/gmock-generated-nice-strict.h", - "include/gmock/gmock-matchers.h", - "include/gmock/gmock-spec-builders.h", - "include/gmock/gmock.h", - "include/gmock/internal/gmock-generated-internal-utils.h", - "include/gmock/internal/gmock-internal-utils.h", - "include/gmock/internal/gmock-port.h", - - # gmock helpers. - "../gmock_custom/gmock/internal/custom/gmock-port.h", - - #"src/gmock-all.cc", # Not needed by our build. - "src/gmock-cardinalities.cc", - "src/gmock-internal-utils.cc", - "src/gmock-matchers.cc", - "src/gmock-spec-builders.cc", - "src/gmock.cc", - ] - - # This project includes some stuff form gtest's guts. - include_dirs = [ "../gtest/include" ] - - public_configs = [ - ":gmock_config", - "//testing/gtest:gtest_config", - ] -} - -static_library("gmock_main") { - testonly = true - sources = [ - "src/gmock_main.cc", - ] - deps = [ - ":gmock", - ] -} diff --git a/chromium/build/secondary/testing/gtest/BUILD.gn b/chromium/build/secondary/testing/gtest/BUILD.gn deleted file mode 100644 index aa24d7eb457..00000000000 --- a/chromium/build/secondary/testing/gtest/BUILD.gn +++ /dev/null @@ -1,150 +0,0 @@ -# Copyright 2014 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. - -# Chromium's GN configuration for gtest now lives at testing/gtest/BUILD.gn. -# -# This configuration is left in the tree because it is pulled by V8 and PDFium, -# and will be removed as soon as the projects switch off of it. -# -# Details at http://crbug.com/630705 and http://crrev.com/2779193002 - -import("//build_overrides/gtest.gni") -if (is_ios) { - import("//build/config/ios/ios_sdk.gni") - import("//build/buildflag_header.gni") -} - -config("gtest_config") { - visibility = [ - ":*", - "//testing/gmock:*", # gmock also shares this config. - ] - - defines = [ - # In order to allow regex matches in gtest to be shared between Windows - # and other systems, we tell gtest to always use it's internal engine. - "GTEST_HAS_POSIX_RE=0", - "GTEST_LANG_CXX11=1", - ] - - # Gtest headers need to be able to find themselves. - include_dirs = [ "include" ] - - if (is_win) { - cflags = [ "/wd4800" ] # Unused variable warning. - } -} - -config("gtest_direct_config") { - visibility = [ ":*" ] - defines = [ "UNIT_TEST" ] -} - -config("gtest_warnings") { - if (is_win && is_clang) { - # The Mutex constructor initializer list in gtest-port.cc is incorrectly - # ordered. See - # https://groups.google.com/d/msg/googletestframework/S5uSV8L2TX8/U1FaTDa6J6sJ. - cflags = [ "-Wno-reorder" ] - } -} - -static_library("gtest") { - testonly = true - sources = [ - "include/gtest/gtest-death-test.h", - "include/gtest/gtest-message.h", - "include/gtest/gtest-param-test.h", - "include/gtest/gtest-printers.h", - "include/gtest/gtest-spi.h", - "include/gtest/gtest-test-part.h", - "include/gtest/gtest-typed-test.h", - "include/gtest/gtest.h", - "include/gtest/gtest_pred_impl.h", - "include/gtest/internal/gtest-death-test-internal.h", - "include/gtest/internal/gtest-filepath.h", - "include/gtest/internal/gtest-internal.h", - "include/gtest/internal/gtest-linked_ptr.h", - "include/gtest/internal/gtest-param-util-generated.h", - "include/gtest/internal/gtest-param-util.h", - "include/gtest/internal/gtest-port.h", - "include/gtest/internal/gtest-string.h", - "include/gtest/internal/gtest-tuple.h", - "include/gtest/internal/gtest-type-util.h", - - #"gtest/src/gtest-all.cc", # Not needed by our build. - "src/gtest-death-test.cc", - "src/gtest-filepath.cc", - "src/gtest-internal-inl.h", - "src/gtest-port.cc", - "src/gtest-printers.cc", - "src/gtest-test-part.cc", - "src/gtest-typed-test.cc", - "src/gtest.cc", - ] - deps = [] - - if (gtest_include_multiprocess) { - sources += [ - "../multiprocess_func_list.cc", - "../multiprocess_func_list.h", - ] - } - - if (gtest_include_platform_test) { - sources += [ "../platform_test.h" ] - } - - if ((is_mac || is_ios) && gtest_include_objc_support) { - if (is_ios) { - set_sources_assignment_filter([]) - } - sources += [ - "../gtest_mac.h", - "../gtest_mac.mm", - ] - if (gtest_include_platform_test) { - sources += [ "../platform_test_mac.mm" ] - } - set_sources_assignment_filter(sources_assignment_filter) - } - - if (is_ios && gtest_include_ios_coverage) { - sources += [ - "../coverage_util_ios.h", - "../coverage_util_ios.mm", - ] - deps += [ ":ios_enable_coverage" ] - } - - include_dirs = [ "." ] - - all_dependent_configs = [ ":gtest_config" ] - public_configs = [ ":gtest_direct_config" ] - - configs -= [ "//build/config/compiler:chromium_code" ] - configs += [ - "//build/config/compiler:no_chromium_code", - - # Must be after no_chromium_code for warning flags to be ordered correctly. - ":gtest_warnings", - ] -} - -source_set("gtest_main") { - testonly = true - sources = [ - "src/gtest_main.cc", - ] - deps = [ - ":gtest", - ] -} - -if (is_ios) { - buildflag_header("ios_enable_coverage") { - header = "ios_enable_coverage.h" - flags = [ "IOS_ENABLE_COVERAGE=$ios_enable_coverage" ] - } -} diff --git a/chromium/build/secondary/third_party/android_tools/BUILD.gn b/chromium/build/secondary/third_party/android_tools/BUILD.gn index e720d541de7..ff5f143ed29 100644 --- a/chromium/build/secondary/third_party/android_tools/BUILD.gn +++ b/chromium/build/secondary/third_party/android_tools/BUILD.gn @@ -39,273 +39,132 @@ if (enable_java_templates) { # and are linked by default on O and below. Starting in P, they # exist in their own libraries that are present on device and are # available to be linked against but aren't linked by default. - android_system_java_prebuilt("android_test_base_java") { jar_path = "${android_sdk}/optional/android.test.base.jar" } - android_system_java_prebuilt("android_test_mock_java") { jar_path = "${android_sdk}/optional/android.test.mock.jar" } - android_system_java_prebuilt("android_test_runner_java") { jar_path = "${android_sdk}/optional/android.test.runner.jar" } - template("support_lib_alias") { + android_library("android_support_chromium_java") { + testonly = true + java_files = [ "//third_party/android_tools/sdk/extras/chromium/support/src/org/chromium/android/support/PackageManagerWrapper.java" ] + } + android_java_prebuilt("android_gcm_java") { + jar_path = "//third_party/android_tools/sdk/extras/google/gcm/gcm-client/dist/gcm.jar" + } + android_java_prebuilt("emma_device_java") { + jar_path = "//third_party/android_tools/sdk/tools/lib/emma_device.jar" + include_java_resources = true + } + + template("android_deps_alias") { java_group(target_name) { - forward_variables_from(invoker, [ "testonly" ]) deps = [ - "$android_support_library_package:$target_name", + "//third_party/android_deps:${invoker.android_deps_target_name}", ] } } - - support_lib_alias("android_support_chromium_java") { - testonly = true - } - support_lib_alias("android_gcm_java") { - } - support_lib_alias("emma_device_java") { + android_deps_alias("android_arch_lifecycle_common_java") { + android_deps_target_name = "android_arch_lifecycle_common_java" } - prebuilt_wrapper("android_arch_lifecycle_common_java") { - fallback_target = "$android_support_library_package:$target_name" + android_deps_alias("android_arch_lifecycle_runtime_java") { + android_deps_target_name = "android_arch_lifecycle_runtime_java" } - prebuilt_wrapper("android_arch_lifecycle_runtime_java") { - fallback_target = "$android_support_library_package:$target_name" - } - prebuilt_wrapper("android_support_multidex_java") { + android_deps_alias("android_support_multidex_java") { android_deps_target_name = "com_android_support_multidex_java" - fallback_target = "$android_support_library_package:$target_name" } - prebuilt_wrapper("android_support_annotations_java") { + android_deps_alias("android_support_annotations_java") { android_deps_target_name = "com_android_support_support_annotations_java" - fallback_target = "$android_support_library_package:$target_name" } - prebuilt_wrapper("android_support_cardview_java") { + android_deps_alias("android_support_cardview_java") { android_deps_target_name = "com_android_support_cardview_v7_java" - fallback_target = "$android_support_library_package:$target_name" } - prebuilt_wrapper("android_support_compat_java") { + android_deps_alias("android_support_compat_java") { android_deps_target_name = "com_android_support_support_compat_java" - fallback_target = "$android_support_library_package:$target_name" } - prebuilt_wrapper("android_support_core_ui_java") { + android_deps_alias("android_support_core_ui_java") { android_deps_target_name = "com_android_support_support_core_ui_java" - fallback_target = "$android_support_library_package:$target_name" } - prebuilt_wrapper("android_support_core_utils_java") { + android_deps_alias("android_support_core_utils_java") { android_deps_target_name = "com_android_support_support_core_utils_java" - fallback_target = "$android_support_library_package:$target_name" } - prebuilt_wrapper("android_support_design_java") { + android_deps_alias("android_support_design_java") { android_deps_target_name = "com_android_support_design_java" - fallback_target = "$android_support_library_package:$target_name" } - prebuilt_wrapper("android_support_v4_java") { - fallback_target = "$android_support_library_package:$target_name" + android_deps_alias("android_support_v4_java") { + android_deps_target_name = "android_support_v4_java" } - prebuilt_wrapper("android_support_v7_appcompat_java") { - fallback_target = "$android_support_library_package:$target_name" + android_deps_alias("android_support_v7_appcompat_java") { + android_deps_target_name = "android_support_v7_appcompat_java" } - prebuilt_wrapper("android_support_v7_gridlayout_java") { + android_deps_alias("android_support_v7_gridlayout_java") { android_deps_target_name = "com_android_support_gridlayout_v7_java" - fallback_target = "$android_support_library_package:$target_name" } - prebuilt_wrapper("android_support_v7_mediarouter_java") { + android_deps_alias("android_support_v7_mediarouter_java") { android_deps_target_name = "com_android_support_mediarouter_v7_java" - fallback_target = "$android_support_library_package:$target_name" } - prebuilt_wrapper("android_support_v7_recyclerview_java") { + android_deps_alias("android_support_v7_recyclerview_java") { android_deps_target_name = "com_android_support_recyclerview_v7_java" - fallback_target = "$android_support_library_package:$target_name" } - prebuilt_wrapper("android_support_v13_java") { + android_deps_alias("android_support_v13_java") { android_deps_target_name = "com_android_support_support_v13_java" - fallback_target = "$android_support_library_package:$target_name" } - - # TODO(dgn): Use the POM files instead of hardcoding the dependencies. - gms_path = "$default_extras_android_sdk_root/extras/google/m2repository/com/google/android/gms" - gms_version = "12.0.1" - - android_aar_prebuilt("google_play_services_basement_java") { - deps = [ - ":android_support_v4_java", - ] - _lib_name = "play-services-basement" - aar_path = "$gms_path/$_lib_name/$gms_version/$_lib_name-$gms_version.aar" - info_path = "//build/secondary/third_party/android_tools/$target_name.info" - input_jars_paths = [ "$android_sdk/optional/org.apache.http.legacy.jar" ] + android_deps_alias("google_play_services_basement_java") { + android_deps_target_name = + "com_google_android_gms_play_services_basement_java" } - - android_aar_prebuilt("google_play_services_tasks_java") { - deps = [ - ":google_play_services_basement_java", - ] - _lib_name = "play-services-tasks" - aar_path = "$gms_path/$_lib_name/$gms_version/$_lib_name-$gms_version.aar" - info_path = "//build/secondary/third_party/android_tools/$target_name.info" - proguard_configs = - [ "${target_gen_dir}/google_play_services_basement_java/proguard.txt" ] + android_deps_alias("google_play_services_tasks_java") { + android_deps_target_name = "com_google_android_gms_play_services_tasks_java" } - - android_aar_prebuilt("google_play_services_base_java") { - deps = [ - ":android_support_v4_java", - ":google_play_services_basement_java", - ":google_play_services_tasks_java", - ] - _lib_name = "play-services-base" - aar_path = "$gms_path/$_lib_name/$gms_version/$_lib_name-$gms_version.aar" - info_path = "//build/secondary/third_party/android_tools/$target_name.info" - proguard_configs = - [ "${target_gen_dir}/google_play_services_basement_java/proguard.txt" ] + android_deps_alias("google_play_services_base_java") { + android_deps_target_name = "com_google_android_gms_play_services_base_java" } - - android_aar_prebuilt("google_play_services_auth_base_java") { - deps = [ - ":google_play_services_base_java", - ":google_play_services_basement_java", - ":google_play_services_tasks_java", - ] - _lib_name = "play-services-auth-base" - aar_path = "$gms_path/$_lib_name/$gms_version/$_lib_name-$gms_version.aar" - info_path = "//build/secondary/third_party/android_tools/$target_name.info" - proguard_configs = - [ "${target_gen_dir}/google_play_services_basement_java/proguard.txt" ] + android_deps_alias("google_play_services_auth_base_java") { + android_deps_target_name = + "com_google_android_gms_play_services_auth_base_java" } - - android_aar_prebuilt("google_play_services_auth_api_phone_java") { - deps = [ - ":google_play_services_base_java", - ":google_play_services_basement_java", - ":google_play_services_tasks_java", - ] - _lib_name = "play-services-auth-api-phone" - aar_path = "$gms_path/$_lib_name/$gms_version/$_lib_name-$gms_version.aar" - info_path = "//build/secondary/third_party/android_tools/$target_name.info" - proguard_configs = - [ "${target_gen_dir}/google_play_services_basement_java/proguard.txt" ] + android_deps_alias("google_play_services_auth_api_phone_java") { + android_deps_target_name = + "com_google_android_gms_play_services_auth_api_phone_java" } - - android_aar_prebuilt("google_play_services_auth_java") { - deps = [ - ":google_play_services_auth_api_phone_java", - ":google_play_services_auth_base_java", - ":google_play_services_base_java", - ":google_play_services_basement_java", - ":google_play_services_tasks_java", - ] - _lib_name = "play-services-auth" - aar_path = "$gms_path/$_lib_name/$gms_version/$_lib_name-$gms_version.aar" - info_path = "//build/secondary/third_party/android_tools/$target_name.info" - proguard_configs = - [ "${target_gen_dir}/google_play_services_basement_java/proguard.txt" ] + android_deps_alias("google_play_services_auth_java") { + android_deps_target_name = "com_google_android_gms_play_services_auth_java" } - - android_aar_prebuilt("google_play_services_cast_java") { - deps = [ - ":android_support_v7_mediarouter_java", - ":google_play_services_base_java", - ":google_play_services_basement_java", - ":google_play_services_tasks_java", - ] - _lib_name = "play-services-cast" - aar_path = "$gms_path/$_lib_name/$gms_version/$_lib_name-$gms_version.aar" - info_path = "//build/secondary/third_party/android_tools/$target_name.info" - proguard_configs = - [ "${target_gen_dir}/google_play_services_basement_java/proguard.txt" ] + android_deps_alias("google_play_services_cast_java") { + android_deps_target_name = "com_google_android_gms_play_services_cast_java" } - - android_aar_prebuilt("google_play_services_cast_framework_java") { - deps = [ - ":google_play_services_base_java", - ":google_play_services_basement_java", - ":google_play_services_cast_java", - ] - _lib_name = "play-services-cast-framework" - aar_path = "$gms_path/$_lib_name/$gms_version/$_lib_name-$gms_version.aar" - info_path = "//build/secondary/third_party/android_tools/$target_name.info" - proguard_configs = - [ "${target_gen_dir}/google_play_services_basement_java/proguard.txt" ] + android_deps_alias("google_play_services_cast_framework_java") { + android_deps_target_name = + "com_google_android_gms_play_services_cast_framework_java" } - - android_aar_prebuilt("google_play_services_iid_java") { - deps = [ - ":google_play_services_base_java", - ":google_play_services_basement_java", - ":google_play_services_tasks_java", - ] - _lib_name = "play-services-iid" - aar_path = "$gms_path/$_lib_name/$gms_version/$_lib_name-$gms_version.aar" - info_path = "//build/secondary/third_party/android_tools/$target_name.info" - proguard_configs = - [ "${target_gen_dir}/google_play_services_basement_java/proguard.txt" ] + android_deps_alias("google_play_services_iid_java") { + android_deps_target_name = "com_google_android_gms_play_services_iid_java" } - - android_aar_prebuilt("google_play_services_gcm_java") { - deps = [ - ":google_play_services_base_java", - ":google_play_services_basement_java", - ":google_play_services_iid_java", - ] - _lib_name = "play-services-gcm" - aar_path = "$gms_path/$_lib_name/$gms_version/$_lib_name-$gms_version.aar" - info_path = "//build/secondary/third_party/android_tools/$target_name.info" - proguard_configs = - [ "${target_gen_dir}/google_play_services_basement_java/proguard.txt" ] + android_deps_alias("google_play_services_instantapps_java") { + android_deps_target_name = + "com_google_android_gms_play_services_instantapps_java" } - - android_aar_prebuilt("google_play_services_location_java") { - deps = [ - ":google_play_services_base_java", - ":google_play_services_basement_java", - ":google_play_services_tasks_java", - ] - _lib_name = "play-services-location" - aar_path = "$gms_path/$_lib_name/$gms_version/$_lib_name-$gms_version.aar" - info_path = "//build/secondary/third_party/android_tools/$target_name.info" - proguard_configs = - [ "${target_gen_dir}/google_play_services_basement_java/proguard.txt" ] + android_deps_alias("google_play_services_gcm_java") { + android_deps_target_name = "com_google_android_gms_play_services_gcm_java" } - - android_aar_prebuilt("google_play_services_vision_java") { - deps = [ - ":google_play_services_base_java", - ":google_play_services_basement_java", - ":google_play_services_vision_common_java", - ] - _lib_name = "play-services-vision" - aar_path = "$gms_path/$_lib_name/$gms_version/$_lib_name-$gms_version.aar" - info_path = "//build/secondary/third_party/android_tools/$target_name.info" - proguard_configs = - [ "${target_gen_dir}/google_play_services_basement_java/proguard.txt" ] + android_deps_alias("google_play_services_location_java") { + android_deps_target_name = + "com_google_android_gms_play_services_location_java" } - - android_aar_prebuilt("google_play_services_vision_common_java") { - deps = [ - ":google_play_services_base_java", - ":google_play_services_basement_java", - ] - _lib_name = "play-services-vision-common" - aar_path = "$gms_path/$_lib_name/$gms_version/$_lib_name-$gms_version.aar" - info_path = "//build/secondary/third_party/android_tools/$target_name.info" - proguard_configs = - [ "${target_gen_dir}/google_play_services_basement_java/proguard.txt" ] + android_deps_alias("google_play_services_vision_java") { + android_deps_target_name = + "com_google_android_gms_play_services_vision_java" } - - android_aar_prebuilt("google_play_services_fido_java") { - deps = [ - ":google_play_services_base_java", - ":google_play_services_basement_java", - ":google_play_services_tasks_java", - ] - _lib_name = "play-services-fido" - aar_path = "$gms_path/$_lib_name/$gms_version/$_lib_name-$gms_version.aar" - info_path = "//build/secondary/third_party/android_tools/$target_name.info" - proguard_configs = - [ "${target_gen_dir}/google_play_services_basement_java/proguard.txt" ] + android_deps_alias("google_play_services_vision_common_java") { + android_deps_target_name = + "com_google_android_gms_play_services_vision_common_java" + } + android_deps_alias("google_play_services_fido_java") { + android_deps_target_name = "com_google_android_gms_play_services_fido_java" } # The current version of //third_party/byte_buddy relies on an older diff --git a/chromium/build/secondary/third_party/android_tools/support/BUILD.gn b/chromium/build/secondary/third_party/android_tools/support/BUILD.gn deleted file mode 100644 index 55609b61165..00000000000 --- a/chromium/build/secondary/third_party/android_tools/support/BUILD.gn +++ /dev/null @@ -1,262 +0,0 @@ -# Copyright 2017 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. - -import("//build/config/android/rules.gni") - -assert(enable_java_templates) - -visibility = [ ":*" ] - -lib_version = "27.0.0" -lib_path = "//third_party/android_tools/sdk/extras/android/m2repository/com/android/support" -arch_lib_version = "1.0.0" -arch_lib_path = - "//third_party/android_tools/sdk/extras/android/m2repository/android/arch" -build_file_dir = "//build/secondary/third_party/android_tools/support" - -android_library("android_support_chromium_java") { - testonly = true - java_files = [ "//third_party/android_tools/sdk/extras/chromium/support/src/org/chromium/android/support/PackageManagerWrapper.java" ] - visibility += [ "//third_party/android_tools:*" ] -} - -android_java_prebuilt("android_gcm_java") { - jar_path = "//third_party/android_tools/sdk/extras/google/gcm/gcm-client/dist/gcm.jar" - visibility += [ "//third_party/android_tools:*" ] -} - -android_java_prebuilt("emma_device_java") { - jar_path = "//third_party/android_tools/sdk/tools/lib/emma_device.jar" - include_java_resources = true - visibility += [ "//third_party/android_tools:*" ] -} - -android_aar_prebuilt("android_support_design_java") { - deps = [ - ":android_support_transition_java", - ":android_support_v4_java", - ":android_support_v7_appcompat_java", - ":android_support_v7_recyclerview_java", - ] - _lib_name = "design" - aar_path = "$lib_path/$_lib_name/$lib_version/$_lib_name-$lib_version.aar" - info_path = "$build_file_dir/$target_name.info" - visibility += [ "//third_party/android_tools:*" ] -} - -android_aar_prebuilt("android_support_transition_java") { - deps = [ - ":android_support_v4_java", - ] - _lib_name = "transition" - aar_path = "$lib_path/$_lib_name/$lib_version/$_lib_name-$lib_version.aar" - info_path = "$build_file_dir/$target_name.info" -} - -android_aar_prebuilt("android_support_cardview_java") { - deps = [ - ":android_support_v7_appcompat_java", - ] - _lib_name = "cardview-v7" - aar_path = "$lib_path/$_lib_name/$lib_version/$_lib_name-$lib_version.aar" - info_path = "$build_file_dir/$target_name.info" - visibility += [ "//third_party/android_tools:*" ] -} - -android_aar_prebuilt("android_support_multidex_java") { - aar_path = "$lib_path/multidex/1.0.1/multidex-1.0.1.aar" - info_path = "$build_file_dir/$target_name.info" - visibility += [ "//third_party/android_tools:*" ] -} - -android_aar_prebuilt("android_arch_lifecycle_runtime_java") { - aar_path = "$arch_lib_path/lifecycle/runtime/$arch_lib_version/runtime-$arch_lib_version.aar" - info_path = "$build_file_dir/$target_name.info" - deps = [ - ":android_arch_core_common_java", - ":android_arch_lifecycle_common_java", - ":android_support_annotations_java", - ] - visibility += [ "//third_party/android_tools:*" ] -} - -android_java_prebuilt("android_arch_lifecycle_common_java") { - output_name = "arch_lifecycle_common" - jar_path = "$arch_lib_path/lifecycle/common/$arch_lib_version/common-$arch_lib_version.jar" - deps = [ - ":android_support_annotations_java", - ] - visibility += [ "//third_party/android_tools:*" ] -} - -android_java_prebuilt("android_arch_core_common_java") { - output_name = "arch_core_common" - jar_path = "$arch_lib_path/core/common/$arch_lib_version/common-$arch_lib_version.jar" - deps = [ - ":android_support_annotations_java", - ] -} - -android_java_prebuilt("android_support_annotations_java") { - _lib_name = "support-annotations" - jar_path = "$lib_path/$_lib_name/$lib_version/$_lib_name-$lib_version.jar" - visibility += [ "//third_party/android_tools:*" ] -} - -java_group("android_support_v4_java") { - deps = [ - ":android_support_compat_java", - ":android_support_core_ui_java", - ":android_support_core_utils_java", - ":android_support_fragment_java", - ":android_support_media_compat_java", - ] - visibility += [ "//third_party/android_tools:*" ] -} - -android_aar_prebuilt("android_support_compat_java") { - deps = [ - ":android_arch_lifecycle_runtime_java", - ":android_support_annotations_java", - ] - _lib_name = "support-compat" - aar_path = "$lib_path/$_lib_name/$lib_version/$_lib_name-$lib_version.aar" - info_path = "$build_file_dir/$target_name.info" - ignore_aidl = true # We don't appear to need these currently. - visibility += [ "//third_party/android_tools:*" ] -} - -android_aar_prebuilt("android_support_core_ui_java") { - deps = [ - ":android_support_compat_java", - ] - _lib_name = "support-core-ui" - aar_path = "$lib_path/$_lib_name/$lib_version/$_lib_name-$lib_version.aar" - info_path = "$build_file_dir/$target_name.info" - visibility += [ "//third_party/android_tools:*" ] -} - -android_aar_prebuilt("android_support_core_utils_java") { - deps = [ - ":android_support_compat_java", - ] - _lib_name = "support-core-utils" - aar_path = "$lib_path/$_lib_name/$lib_version/$_lib_name-$lib_version.aar" - info_path = "$build_file_dir/$target_name.info" - visibility += [ "//third_party/android_tools:*" ] -} - -android_aar_prebuilt("android_support_fragment_java") { - deps = [ - ":android_support_compat_java", - ":android_support_core_ui_java", - ":android_support_core_utils_java", - ":android_support_media_compat_java", - ] - _lib_name = "support-fragment" - aar_path = "$lib_path/$_lib_name/$lib_version/$_lib_name-$lib_version.aar" - info_path = "$build_file_dir/$target_name.info" -} - -android_aar_prebuilt("android_support_media_compat_java") { - deps = [ - ":android_support_compat_java", - ] - _lib_name = "support-media-compat" - aar_path = "$lib_path/$_lib_name/$lib_version/$_lib_name-$lib_version.aar" - info_path = "$build_file_dir/$target_name.info" - ignore_aidl = true # We don't appear to need these currently. -} - -android_aar_prebuilt("android_support_v13_java") { - deps = [ - ":android_support_v4_java", - ] - _lib_name = "support-v13" - aar_path = "$lib_path/$_lib_name/$lib_version/$_lib_name-$lib_version.aar" - info_path = "$build_file_dir/$target_name.info" - visibility += [ "//third_party/android_tools:*" ] -} - -android_aar_prebuilt("android_support_vector_drawable_java") { - deps = [ - ":android_support_compat_java", - ] - _lib_name = "support-vector-drawable" - aar_path = "$lib_path/$_lib_name/$lib_version/$_lib_name-$lib_version.aar" - info_path = "$build_file_dir/$target_name.info" -} - -android_aar_prebuilt("android_support_animated_vector_drawable_java") { - deps = [ - ":android_support_core_ui_java", - ":android_support_vector_drawable_java", - ] - _lib_name = "animated-vector-drawable" - aar_path = "$lib_path/$_lib_name/$lib_version/$_lib_name-$lib_version.aar" - info_path = "$build_file_dir/$target_name.info" -} - -android_aar_prebuilt("android_support_v7_appcompat_java_internal") { - deps = [ - ":android_support_v4_java", - ] - _lib_name = "appcompat-v7" - aar_path = "$lib_path/$_lib_name/$lib_version/$_lib_name-$lib_version.aar" - info_path = "$build_file_dir/$target_name.info" -} - -java_group("android_support_v7_appcompat_java") { - deps = [ - ":android_support_animated_vector_drawable_java", - ":android_support_v4_java", - ":android_support_v7_appcompat_java_internal", - ":android_support_vector_drawable_java", - ] - visibility += [ "//third_party/android_tools:*" ] -} - -android_aar_prebuilt("android_support_v7_gridlayout_java") { - deps = [ - ":android_support_compat_java", - ":android_support_core_ui_java", - ] - _lib_name = "gridlayout-v7" - aar_path = "$lib_path/$_lib_name/$lib_version/$_lib_name-$lib_version.aar" - info_path = "$build_file_dir/$target_name.info" - visibility += [ "//third_party/android_tools:*" ] -} - -android_aar_prebuilt("android_support_v7_mediarouter_java") { - deps = [ - ":android_support_v7_appcompat_java", - ":android_support_v7_palette_java", - ] - _lib_name = "mediarouter-v7" - aar_path = "$lib_path/$_lib_name/$lib_version/$_lib_name-$lib_version.aar" - info_path = "$build_file_dir/$target_name.info" - visibility += [ "//third_party/android_tools:*" ] -} - -android_aar_prebuilt("android_support_v7_recyclerview_java") { - deps = [ - ":android_support_annotations_java", - ":android_support_compat_java", - ":android_support_core_ui_java", - ] - _lib_name = "recyclerview-v7" - aar_path = "$lib_path/$_lib_name/$lib_version/$_lib_name-$lib_version.aar" - info_path = "$build_file_dir/$target_name.info" - visibility += [ "//third_party/android_tools:*" ] -} - -android_aar_prebuilt("android_support_v7_palette_java") { - deps = [ - ":android_support_compat_java", - ":android_support_core_utils_java", - ] - _lib_name = "palette-v7" - aar_path = "$lib_path/$_lib_name/$lib_version/$_lib_name-$lib_version.aar" - info_path = "$build_file_dir/$target_name.info" -} diff --git a/chromium/build/secondary/third_party/android_tools/support/android_arch_lifecycle_runtime_java.info b/chromium/build/secondary/third_party/android_tools/support/android_arch_lifecycle_runtime_java.info deleted file mode 100644 index acf40e8f581..00000000000 --- a/chromium/build/secondary/third_party/android_tools/support/android_arch_lifecycle_runtime_java.info +++ /dev/null @@ -1,13 +0,0 @@ -# Generated by //build/android/gyp/aar.py -# To regenerate, use "update_android_aar_prebuilts = true" and run "gn gen". - -aidl = [ ] -assets = [ ] -has_classes_jar = true -has_native_libraries = false -has_proguard_flags = true -has_r_text_file = false -is_manifest_empty = false -resources = [ ] -subjar_tuples = [ ] -subjars = [ ] diff --git a/chromium/build/secondary/third_party/android_tools/support/android_support_animated_vector_drawable_java.info b/chromium/build/secondary/third_party/android_tools/support/android_support_animated_vector_drawable_java.info deleted file mode 100644 index 7103bc06d8c..00000000000 --- a/chromium/build/secondary/third_party/android_tools/support/android_support_animated_vector_drawable_java.info +++ /dev/null @@ -1,13 +0,0 @@ -# Generated by //build/android/gyp/aar.py -# To regenerate, use "update_android_aar_prebuilts = true" and run "gn gen". - -aidl = [ ] -assets = [ ] -has_classes_jar = true -has_native_libraries = false -has_proguard_flags = true -has_r_text_file = true -is_manifest_empty = true -resources = [ ] -subjar_tuples = [ ] -subjars = [ ] diff --git a/chromium/build/secondary/third_party/android_tools/support/android_support_cardview_java.info b/chromium/build/secondary/third_party/android_tools/support/android_support_cardview_java.info deleted file mode 100644 index e4587255cba..00000000000 --- a/chromium/build/secondary/third_party/android_tools/support/android_support_cardview_java.info +++ /dev/null @@ -1,13 +0,0 @@ -# Generated by //build/android/gyp/aar.py -# To regenerate, use "update_android_aar_prebuilts = true" and run "gn gen". - -aidl = [ ] -assets = [ ] -has_classes_jar = true -has_native_libraries = false -has_proguard_flags = false -has_r_text_file = true -is_manifest_empty = true -resources = [ "res/values-v23/values-v23.xml", "res/values/values.xml" ] -subjar_tuples = [ ] -subjars = [ ] diff --git a/chromium/build/secondary/third_party/android_tools/support/android_support_compat_java.info b/chromium/build/secondary/third_party/android_tools/support/android_support_compat_java.info deleted file mode 100644 index fc66ea71f4c..00000000000 --- a/chromium/build/secondary/third_party/android_tools/support/android_support_compat_java.info +++ /dev/null @@ -1,13 +0,0 @@ -# Generated by //build/android/gyp/aar.py -# To regenerate, use "update_android_aar_prebuilts = true" and run "gn gen". - -aidl = [ "aidl/android/support/v4/os/ResultReceiver.aidl" ] -assets = [ ] -has_classes_jar = true -has_native_libraries = false -has_proguard_flags = false -has_r_text_file = true -is_manifest_empty = true -resources = [ "res/values-ur/values-ur.xml", "res/values-ru/values-ru.xml", "res/values-en-rGB/values-en-rGB.xml", "res/values-pt-rBR/values-pt-rBR.xml", "res/values-el/values-el.xml", "res/drawable-hdpi-v4/notification_bg_low_normal.9.png", "res/drawable-hdpi-v4/notify_panel_notification_icon_bg.png", "res/drawable-hdpi-v4/notification_bg_normal_pressed.9.png", "res/drawable-hdpi-v4/notification_bg_normal.9.png", "res/drawable-hdpi-v4/notification_bg_low_pressed.9.png", "res/values-tr/values-tr.xml", "res/values-hu/values-hu.xml", "res/values-km/values-km.xml", "res/values-fr-rCA/values-fr-rCA.xml", "res/values-gu/values-gu.xml", "res/layout/notification_template_icon_group.xml", "res/layout/notification_template_custom_big.xml", "res/layout/notification_template_part_time.xml", "res/layout/notification_template_part_chronometer.xml", "res/layout/notification_action_tombstone.xml", "res/layout/notification_action.xml", "res/values-ms/values-ms.xml", "res/values-v21/values-v21.xml", "res/values-ja/values-ja.xml", "res/values-eu/values-eu.xml", "res/values-sv/values-sv.xml", "res/values-mn/values-mn.xml", "res/layout-v16/notification_template_custom_big.xml", "res/values-ta/values-ta.xml", "res/values-pl/values-pl.xml", "res/values-lt/values-lt.xml", "res/values-bg/values-bg.xml", "res/values-es-rUS/values-es-rUS.xml", "res/values-iw/values-iw.xml", "res/values-mr/values-mr.xml", "res/values-uz/values-uz.xml", "res/values-pa/values-pa.xml", "res/values-fi/values-fi.xml", "res/values-am/values-am.xml", "res/values-pt-rPT/values-pt-rPT.xml", "res/values-ar/values-ar.xml", "res/values-ky/values-ky.xml", "res/drawable-mdpi-v4/notification_bg_low_normal.9.png", "res/drawable-mdpi-v4/notify_panel_notification_icon_bg.png", "res/drawable-mdpi-v4/notification_bg_normal_pressed.9.png", "res/drawable-mdpi-v4/notification_bg_normal.9.png", "res/drawable-mdpi-v4/notification_bg_low_pressed.9.png", "res/values-bs/values-bs.xml", "res/values/values.xml", "res/values-hr/values-hr.xml", "res/values-en-rAU/values-en-rAU.xml", "res/values-ro/values-ro.xml", "res/drawable-xhdpi-v4/notification_bg_low_normal.9.png", "res/drawable-xhdpi-v4/notify_panel_notification_icon_bg.png", "res/drawable-xhdpi-v4/notification_bg_normal_pressed.9.png", "res/drawable-xhdpi-v4/notification_bg_normal.9.png", "res/drawable-xhdpi-v4/notification_bg_low_pressed.9.png", "res/values-vi/values-vi.xml", "res/values-ko/values-ko.xml", "res/values-zh-rTW/values-zh-rTW.xml", "res/values-cs/values-cs.xml", "res/values-ml/values-ml.xml", "res/values-te/values-te.xml", "res/values-si/values-si.xml", "res/values-es/values-es.xml", "res/values-af/values-af.xml", "res/values-zu/values-zu.xml", "res/values-lo/values-lo.xml", "res/values-mk/values-mk.xml", "res/values-sl/values-sl.xml", "res/values-sw/values-sw.xml", "res/values-bn/values-bn.xml", "res/values-sk/values-sk.xml", "res/values-lv/values-lv.xml", "res/values-is/values-is.xml", "res/values-da/values-da.xml", "res/values-it/values-it.xml", "res/values-gl/values-gl.xml", "res/values-de/values-de.xml", "res/values-be/values-be.xml", "res/values-fa/values-fa.xml", "res/values-ca/values-ca.xml", "res/values-th/values-th.xml", "res/values-nl/values-nl.xml", "res/values-hy/values-hy.xml", "res/values-zh-rHK/values-zh-rHK.xml", "res/values-tl/values-tl.xml", "res/values-kk/values-kk.xml", "res/values-pt/values-pt.xml", "res/values-my/values-my.xml", "res/values-et/values-et.xml", "res/values-en-rIN/values-en-rIN.xml", "res/values-sr/values-sr.xml", "res/values-v16/values-v16.xml", "res/values-fr/values-fr.xml", "res/values-kn/values-kn.xml", "res/values-nb/values-nb.xml", "res/values-port/values-port.xml", "res/values-ne/values-ne.xml", "res/drawable/notification_bg_low.xml", "res/drawable/notification_bg.xml", "res/drawable/notification_icon_background.xml", "res/drawable/notification_tile_bg.xml", "res/values-b+sr+Latn/values-b+sr+Latn.xml", "res/values-ka/values-ka.xml", "res/values-zh-rCN/values-zh-rCN.xml", "res/values-az/values-az.xml", "res/values-sq/values-sq.xml", "res/values-hi/values-hi.xml", "res/layout-v21/notification_template_icon_group.xml", "res/layout-v21/notification_template_custom_big.xml", "res/layout-v21/notification_action_tombstone.xml", "res/layout-v21/notification_action.xml", "res/values-in/values-in.xml", "res/values-uk/values-uk.xml", "res/drawable-v21/notification_action_background.xml" ] -subjar_tuples = [ ] -subjars = [ ] diff --git a/chromium/build/secondary/third_party/android_tools/support/android_support_core_ui_java.info b/chromium/build/secondary/third_party/android_tools/support/android_support_core_ui_java.info deleted file mode 100644 index 7103bc06d8c..00000000000 --- a/chromium/build/secondary/third_party/android_tools/support/android_support_core_ui_java.info +++ /dev/null @@ -1,13 +0,0 @@ -# Generated by //build/android/gyp/aar.py -# To regenerate, use "update_android_aar_prebuilts = true" and run "gn gen". - -aidl = [ ] -assets = [ ] -has_classes_jar = true -has_native_libraries = false -has_proguard_flags = true -has_r_text_file = true -is_manifest_empty = true -resources = [ ] -subjar_tuples = [ ] -subjars = [ ] diff --git a/chromium/build/secondary/third_party/android_tools/support/android_support_core_utils_java.info b/chromium/build/secondary/third_party/android_tools/support/android_support_core_utils_java.info deleted file mode 100644 index cd540607301..00000000000 --- a/chromium/build/secondary/third_party/android_tools/support/android_support_core_utils_java.info +++ /dev/null @@ -1,13 +0,0 @@ -# Generated by //build/android/gyp/aar.py -# To regenerate, use "update_android_aar_prebuilts = true" and run "gn gen". - -aidl = [ ] -assets = [ ] -has_classes_jar = true -has_native_libraries = false -has_proguard_flags = false -has_r_text_file = true -is_manifest_empty = true -resources = [ ] -subjar_tuples = [ ] -subjars = [ ] diff --git a/chromium/build/secondary/third_party/android_tools/support/android_support_design_java.info b/chromium/build/secondary/third_party/android_tools/support/android_support_design_java.info deleted file mode 100644 index ec2b700b1a2..00000000000 --- a/chromium/build/secondary/third_party/android_tools/support/android_support_design_java.info +++ /dev/null @@ -1,13 +0,0 @@ -# Generated by //build/android/gyp/aar.py -# To regenerate, use "update_android_aar_prebuilts = true" and run "gn gen". - -aidl = [ ] -assets = [ ] -has_classes_jar = true -has_native_libraries = false -has_proguard_flags = true -has_r_text_file = true -is_manifest_empty = true -resources = [ "res/drawable-hdpi-v4/design_ic_visibility.png", "res/drawable-hdpi-v4/design_ic_visibility_off.png", "res/layout/design_bottom_sheet_dialog.xml", "res/layout/design_layout_tab_text.xml", "res/layout/design_bottom_navigation_item.xml", "res/layout/design_navigation_item.xml", "res/layout/design_layout_snackbar_include.xml", "res/layout/design_navigation_menu.xml", "res/layout/design_navigation_item_header.xml", "res/layout/design_navigation_item_separator.xml", "res/layout/design_layout_snackbar.xml", "res/layout/design_text_input_password_icon.xml", "res/layout/design_layout_tab_icon.xml", "res/layout/design_navigation_item_subheader.xml", "res/layout/design_menu_item_action_area.xml", "res/layout/design_navigation_menu_item.xml", "res/values-v21/values-v21.xml", "res/drawable-anydpi-v21/design_ic_visibility.xml", "res/drawable-anydpi-v21/design_ic_visibility_off.xml", "res/layout-sw600dp-v13/design_layout_snackbar.xml", "res/drawable-xxhdpi-v4/design_ic_visibility.png", "res/drawable-xxhdpi-v4/design_ic_visibility_off.png", "res/color/design_error.xml", "res/color/design_tint_password_toggle.xml", "res/animator-v21/design_appbar_state_list_animator.xml", "res/drawable-mdpi-v4/design_ic_visibility.png", "res/drawable-mdpi-v4/design_ic_visibility_off.png", "res/values/values.xml", "res/drawable-xhdpi-v4/design_ic_visibility.png", "res/drawable-xhdpi-v4/design_ic_visibility_off.png", "res/values-land/values-land.xml", "res/values-sw600dp-v13/values-sw600dp-v13.xml", "res/anim/design_snackbar_out.xml", "res/anim/design_snackbar_in.xml", "res/anim/design_bottom_sheet_slide_out.xml", "res/anim/design_bottom_sheet_slide_in.xml", "res/drawable-xxxhdpi-v4/design_ic_visibility.png", "res/drawable-xxxhdpi-v4/design_ic_visibility_off.png", "res/anim-v21/design_bottom_sheet_slide_out.xml", "res/anim-v21/design_bottom_sheet_slide_in.xml", "res/values-v26/values-v26.xml", "res/color-v23/design_tint_password_toggle.xml", "res/drawable/design_snackbar_background.xml", "res/drawable/design_fab_background.xml", "res/drawable/design_password_eye.xml", "res/drawable/navigation_empty_icon.xml", "res/drawable/design_bottom_navigation_item_background.xml", "res/drawable-v21/avd_hide_password.xml", "res/drawable-v21/avd_show_password.xml", "res/drawable-v21/design_password_eye.xml", "res/drawable-v21/design_bottom_navigation_item_background.xml" ] -subjar_tuples = [ ] -subjars = [ ] diff --git a/chromium/build/secondary/third_party/android_tools/support/android_support_fragment_java.info b/chromium/build/secondary/third_party/android_tools/support/android_support_fragment_java.info deleted file mode 100644 index cd540607301..00000000000 --- a/chromium/build/secondary/third_party/android_tools/support/android_support_fragment_java.info +++ /dev/null @@ -1,13 +0,0 @@ -# Generated by //build/android/gyp/aar.py -# To regenerate, use "update_android_aar_prebuilts = true" and run "gn gen". - -aidl = [ ] -assets = [ ] -has_classes_jar = true -has_native_libraries = false -has_proguard_flags = false -has_r_text_file = true -is_manifest_empty = true -resources = [ ] -subjar_tuples = [ ] -subjars = [ ] diff --git a/chromium/build/secondary/third_party/android_tools/support/android_support_media_compat_java.info b/chromium/build/secondary/third_party/android_tools/support/android_support_media_compat_java.info deleted file mode 100644 index 6140dd1b5a0..00000000000 --- a/chromium/build/secondary/third_party/android_tools/support/android_support_media_compat_java.info +++ /dev/null @@ -1,13 +0,0 @@ -# Generated by //build/android/gyp/aar.py -# To regenerate, use "update_android_aar_prebuilts = true" and run "gn gen". - -aidl = [ "aidl/android/support/v4/media/session/PlaybackStateCompat.aidl", "aidl/android/support/v4/media/session/MediaSessionCompat.aidl", "aidl/android/support/v4/media/session/ParcelableVolumeInfo.aidl", "aidl/android/support/v4/media/RatingCompat.aidl", "aidl/android/support/v4/media/MediaMetadataCompat.aidl", "aidl/android/support/v4/media/MediaDescriptionCompat.aidl" ] -assets = [ ] -has_classes_jar = true -has_native_libraries = false -has_proguard_flags = true -has_r_text_file = true -is_manifest_empty = true -resources = [ "res/layout/notification_template_media_custom.xml", "res/layout/notification_template_big_media_narrow_custom.xml", "res/layout/notification_template_media.xml", "res/layout/notification_template_big_media.xml", "res/layout/notification_media_action.xml", "res/layout/notification_template_lines_media.xml", "res/layout/notification_media_cancel_action.xml", "res/layout/notification_template_big_media_custom.xml", "res/layout/notification_template_big_media_narrow.xml", "res/values-v21/values-v21.xml", "res/values/values.xml", "res/values-v24/values-v24.xml" ] -subjar_tuples = [ ] -subjars = [ ] diff --git a/chromium/build/secondary/third_party/android_tools/support/android_support_multidex_java.info b/chromium/build/secondary/third_party/android_tools/support/android_support_multidex_java.info deleted file mode 100644 index a2ebd4a87ea..00000000000 --- a/chromium/build/secondary/third_party/android_tools/support/android_support_multidex_java.info +++ /dev/null @@ -1,13 +0,0 @@ -# Generated by //build/android/gyp/aar.py -# To regenerate, use "update_android_aar_prebuilts = true" and run "gn gen". - -aidl = [ ] -assets = [ ] -has_classes_jar = true -has_native_libraries = false -has_proguard_flags = false -has_r_text_file = false -is_manifest_empty = true -resources = [ ] -subjar_tuples = [ ] -subjars = [ ] diff --git a/chromium/build/secondary/third_party/android_tools/support/android_support_transition_java.info b/chromium/build/secondary/third_party/android_tools/support/android_support_transition_java.info deleted file mode 100644 index a25d255caa2..00000000000 --- a/chromium/build/secondary/third_party/android_tools/support/android_support_transition_java.info +++ /dev/null @@ -1,13 +0,0 @@ -# Generated by //build/android/gyp/aar.py -# To regenerate, use "update_android_aar_prebuilts = true" and run "gn gen". - -aidl = [ ] -assets = [ ] -has_classes_jar = true -has_native_libraries = false -has_proguard_flags = true -has_r_text_file = true -is_manifest_empty = true -resources = [ "res/values/values.xml" ] -subjar_tuples = [ ] -subjars = [ ] diff --git a/chromium/build/secondary/third_party/android_tools/support/android_support_v13_java.info b/chromium/build/secondary/third_party/android_tools/support/android_support_v13_java.info deleted file mode 100644 index cd540607301..00000000000 --- a/chromium/build/secondary/third_party/android_tools/support/android_support_v13_java.info +++ /dev/null @@ -1,13 +0,0 @@ -# Generated by //build/android/gyp/aar.py -# To regenerate, use "update_android_aar_prebuilts = true" and run "gn gen". - -aidl = [ ] -assets = [ ] -has_classes_jar = true -has_native_libraries = false -has_proguard_flags = false -has_r_text_file = true -is_manifest_empty = true -resources = [ ] -subjar_tuples = [ ] -subjars = [ ] diff --git a/chromium/build/secondary/third_party/android_tools/support/android_support_v14_preference_java.info b/chromium/build/secondary/third_party/android_tools/support/android_support_v14_preference_java.info deleted file mode 100644 index 74388f45747..00000000000 --- a/chromium/build/secondary/third_party/android_tools/support/android_support_v14_preference_java.info +++ /dev/null @@ -1,13 +0,0 @@ -# Generated by //build/android/gyp/aar.py -# To regenerate, use "update_android_aar_prebuilts = true" and run "gn gen". - -aidl = [ ] -assets = [ ] -has_classes_jar = true -has_native_libraries = false -has_proguard_flags = false -has_r_text_file = true -is_manifest_empty = true -resources = [ "res/layout/preference_information_material.xml", "res/layout/preference_widget_seekbar_material.xml", "res/layout/preference_category_material.xml", "res/layout/preference_dropdown_material.xml", "res/layout/preference_widget_switch.xml", "res/layout/preference_material.xml", "res/values/values.xml", "res/values-v17/values-v17.xml", "res/drawable/preference_list_divider_material.xml", "res/layout-v21/preference_information_material.xml", "res/layout-v21/preference_category_material.xml", "res/layout-v21/preference_dropdown_material.xml", "res/layout-v21/preference_material.xml", "res/drawable-v21/preference_list_divider_material.xml", "res/layout-v17/preference_information_material.xml", "res/layout-v17/preference_category_material.xml", "res/layout-v17/preference_dropdown_material.xml", "res/layout-v17/preference_material.xml" ] -subjar_tuples = [ ] -subjars = [ ] diff --git a/chromium/build/secondary/third_party/android_tools/support/android_support_v17_leanback_java.info b/chromium/build/secondary/third_party/android_tools/support/android_support_v17_leanback_java.info deleted file mode 100644 index 34d369362a7..00000000000 --- a/chromium/build/secondary/third_party/android_tools/support/android_support_v17_leanback_java.info +++ /dev/null @@ -1,13 +0,0 @@ -# Generated by //build/android/gyp/aar.py -# To regenerate, use "update_android_aar_prebuilts = true" and run "gn gen". - -aidl = [ ] -assets = [ ] -has_classes_jar = true -has_native_libraries = false -has_proguard_flags = false -has_r_text_file = true -is_manifest_empty = true -resources = [ "res/values-ur/values-ur.xml", "res/values-ru/values-ru.xml", "res/values-en-rGB/values-en-rGB.xml", "res/values-pt-rBR/values-pt-rBR.xml", "res/values-el/values-el.xml", "res/drawable-hdpi-v4/lb_action_bg_focused.9.png", "res/drawable-hdpi-v4/lb_ic_search_mic.png", "res/drawable-hdpi-v4/lb_in_app_search_shadow_focused.9.png", "res/drawable-hdpi-v4/lb_ic_search_mic_out.png", "res/drawable-hdpi-v4/lb_in_app_search_bg.9.png", "res/drawable-hdpi-v4/lb_in_app_search_shadow_normal.9.png", "res/drawable-hdpi-v4/lb_ic_actions_right_arrow.png", "res/drawable-hdpi-v4/lb_ic_sad_cloud.png", "res/drawable-hdpi-v4/lb_ic_in_app_search.png", "res/values-tr/values-tr.xml", "res/values-hu/values-hu.xml", "res/values-v18/values-v18.xml", "res/values-km/values-km.xml", "res/values-fr-rCA/values-fr-rCA.xml", "res/values-gu/values-gu.xml", "res/layout/lb_browse_fragment.xml", "res/layout/lb_image_card_view_themed_title.xml", "res/layout/lb_list_row_hovercard.xml", "res/layout/lb_guidedactions.xml", "res/layout/lb_guidedactions_item.xml", "res/layout/lb_playback_transport_controls.xml", "res/layout/lb_image_card_view_themed_content.xml", "res/layout/lb_image_card_view_themed_badge_right.xml", "res/layout/lb_image_card_view.xml", "res/layout/lb_media_item_number_view_flipper.xml", "res/layout/lb_title_view.xml", "res/layout/lb_browse_title.xml", "res/layout/lb_control_bar.xml", "res/layout/lb_divider.xml", "res/layout/lb_background_window.xml", "res/layout/lb_guidance.xml", "res/layout/lb_shadow.xml", "res/layout/lb_video_surface.xml", "res/layout/lb_control_button_primary.xml", "res/layout/lb_fullwidth_details_overview_logo.xml", "res/layout/lb_onboarding_fragment.xml", "res/layout/lb_error_fragment.xml", "res/layout/lb_vertical_grid_fragment.xml", "res/layout/lb_action_1_line.xml", "res/layout/video_surface_fragment.xml", "res/layout/lb_guidedbuttonactions.xml", "res/layout/lb_picker_item.xml", "res/layout/lb_guidedstep_background.xml", "res/layout/lb_details_fragment.xml", "res/layout/lb_playback_controls_row.xml", "res/layout/lb_row_header.xml", "res/layout/lb_playback_transport_controls_row.xml", "res/layout/lb_search_orb.xml", "res/layout/lb_guidedstep_fragment.xml", "res/layout/lb_picker.xml", "res/layout/lb_speech_orb.xml", "res/layout/lb_playback_now_playing_bars.xml", "res/layout/lb_list_row.xml", "res/layout/lb_row_media_item_action.xml", "res/layout/lb_vertical_grid.xml", "res/layout/lb_header.xml", "res/layout/lb_row_media_item.xml", "res/layout/lb_playback_fragment.xml", "res/layout/lb_search_fragment.xml", "res/layout/lb_playback_controls.xml", "res/layout/lb_section_header.xml", "res/layout/lb_guidedactions_datepicker_item.xml", "res/layout/lb_details_description.xml", "res/layout/lb_details_overview.xml", "res/layout/lb_picker_column.xml", "res/layout/lb_media_list_header.xml", "res/layout/lb_image_card_view_themed_badge_left.xml", "res/layout/lb_rows_fragment.xml", "res/layout/lb_headers_fragment.xml", "res/layout/lb_action_2_lines.xml", "res/layout/lb_control_button_secondary.xml", "res/layout/lb_search_bar.xml", "res/layout/lb_row_container.xml", "res/layout/lb_fullwidth_details_overview.xml", "res/layout/lb_picker_separator.xml", "res/values-ms/values-ms.xml", "res/values-v21/values-v21.xml", "res/values-ja/values-ja.xml", "res/values-eu/values-eu.xml", "res/values-sv/values-sv.xml", "res/values-mn/values-mn.xml", "res/values-ta/values-ta.xml", "res/values-pl/values-pl.xml", "res/drawable-xxhdpi-v4/lb_action_bg_focused.9.png", "res/drawable-xxhdpi-v4/lb_ic_search_mic.png", "res/drawable-xxhdpi-v4/lb_in_app_search_shadow_focused.9.png", "res/drawable-xxhdpi-v4/lb_ic_search_mic_out.png", "res/drawable-xxhdpi-v4/lb_in_app_search_bg.9.png", "res/drawable-xxhdpi-v4/lb_in_app_search_shadow_normal.9.png", "res/drawable-xxhdpi-v4/lb_ic_actions_right_arrow.png", "res/drawable-xxhdpi-v4/lb_ic_sad_cloud.png", "res/drawable-xxhdpi-v4/lb_ic_in_app_search.png", "res/values-lt/values-lt.xml", "res/values-bg/values-bg.xml", "res/values-es-rUS/values-es-rUS.xml", "res/values-iw/values-iw.xml", "res/values-en-rXC/values-en-rXC.xml", "res/values-mr/values-mr.xml", "res/values-uz/values-uz.xml", "res/values-pa/values-pa.xml", "res/values-v22/values-v22.xml", "res/animator-v21/lb_onboarding_logo_exit.xml", "res/animator-v21/lb_onboarding_title_enter.xml", "res/animator-v21/lb_playback_bg_fade_out.xml", "res/animator-v21/lb_playback_bg_fade_in.xml", "res/animator-v21/lb_playback_description_fade_out.xml", "res/animator-v21/lb_onboarding_description_enter.xml", "res/animator-v21/lb_onboarding_logo_enter.xml", "res/animator-v21/lb_onboarding_page_indicator_enter.xml", "res/values-fi/values-fi.xml", "res/values-am/values-am.xml", "res/values-pt-rPT/values-pt-rPT.xml", "res/values-ar/values-ar.xml", "res/values-ky/values-ky.xml", "res/drawable-mdpi-v4/lb_action_bg_focused.9.png", "res/drawable-mdpi-v4/lb_ic_search_mic.png", "res/drawable-mdpi-v4/lb_in_app_search_shadow_focused.9.png", "res/drawable-mdpi-v4/lb_ic_search_mic_out.png", "res/drawable-mdpi-v4/lb_in_app_search_bg.9.png", "res/drawable-mdpi-v4/lb_in_app_search_shadow_normal.9.png", "res/drawable-mdpi-v4/lb_ic_actions_right_arrow.png", "res/drawable-mdpi-v4/lb_ic_sad_cloud.png", "res/drawable-mdpi-v4/lb_ic_in_app_search.png", "res/values-bs/values-bs.xml", "res/values/values.xml", "res/values-hr/values-hr.xml", "res/values-en-rAU/values-en-rAU.xml", "res/values-ro/values-ro.xml", "res/drawable-xhdpi-v4/lb_ic_pause.png", "res/drawable-xhdpi-v4/lb_ic_more.png", "res/drawable-xhdpi-v4/lb_action_bg_focused.9.png", "res/drawable-xhdpi-v4/lb_ic_skip_next.png", "res/drawable-xhdpi-v4/lb_ic_search_mic.png", "res/drawable-xhdpi-v4/lb_ic_fast_forward.png", "res/drawable-xhdpi-v4/lb_ic_shuffle.png", "res/drawable-xhdpi-v4/lb_ic_hq.png", "res/drawable-xhdpi-v4/lb_ic_skip_previous.png", "res/drawable-xhdpi-v4/lb_ic_replay.png", "res/drawable-xhdpi-v4/lb_text_dot_two.png", "res/drawable-xhdpi-v4/lb_ic_cc.png", "res/drawable-xhdpi-v4/lb_ic_thumb_up_outline.png", "res/drawable-xhdpi-v4/lb_ic_thumb_up.png", "res/drawable-xhdpi-v4/lb_in_app_search_shadow_focused.9.png", "res/drawable-xhdpi-v4/lb_ic_playback_loop.png", "res/drawable-xhdpi-v4/lb_text_dot_one.png", "res/drawable-xhdpi-v4/lb_ic_search_mic_out.png", "res/drawable-xhdpi-v4/lb_ic_loop_one.png", "res/drawable-xhdpi-v4/lb_text_dot_one_small.png", "res/drawable-xhdpi-v4/lb_ic_stop.png", "res/drawable-xhdpi-v4/lb_ic_pip.png", "res/drawable-xhdpi-v4/lb_card_shadow_normal.9.png", "res/drawable-xhdpi-v4/lb_ic_nav_arrow.png", "res/drawable-xhdpi-v4/lb_text_dot_two_small.png", "res/drawable-xhdpi-v4/lb_ic_loop.png", "res/drawable-xhdpi-v4/lb_ic_play.png", "res/drawable-xhdpi-v4/lb_ic_play_fit.png", "res/drawable-xhdpi-v4/lb_ic_fast_rewind.png", "res/drawable-xhdpi-v4/lb_in_app_search_bg.9.png", "res/drawable-xhdpi-v4/lb_ic_thumb_down_outline.png", "res/drawable-xhdpi-v4/lb_in_app_search_shadow_normal.9.png", "res/drawable-xhdpi-v4/lb_card_shadow_focused.9.png", "res/drawable-xhdpi-v4/lb_ic_actions_right_arrow.png", "res/drawable-xhdpi-v4/lb_ic_sad_cloud.png", "res/drawable-xhdpi-v4/lb_ic_thumb_down.png", "res/drawable-xhdpi-v4/lb_ic_guidedactions_item_chevron.png", "res/drawable-xhdpi-v4/lb_ic_in_app_search.png", "res/values-vi/values-vi.xml", "res/values-ko/values-ko.xml", "res/values-zh-rTW/values-zh-rTW.xml", "res/values-cs/values-cs.xml", "res/values-ml/values-ml.xml", "res/values-ldrtl-v17/values-ldrtl-v17.xml", "res/values-te/values-te.xml", "res/values-si/values-si.xml", "res/values-es/values-es.xml", "res/values-af/values-af.xml", "res/values-zu/values-zu.xml", "res/values-lo/values-lo.xml", "res/values-v19/values-v19.xml", "res/values-mk/values-mk.xml", "res/values-sl/values-sl.xml", "res/values-sw/values-sw.xml", "res/values-bn/values-bn.xml", "res/raw/lb_voice_open.ogg", "res/raw/lb_voice_success.ogg", "res/raw/lb_voice_failure.ogg", "res/raw/lb_voice_no_input.ogg", "res/transition-v21/lb_browse_headers_out.xml", "res/transition-v21/lb_browse_enter_transition.xml", "res/transition-v21/lb_return_transition.xml", "res/transition-v21/lb_details_return_transition.xml", "res/transition-v21/lb_browse_entrance_transition.xml", "res/transition-v21/lb_details_enter_transition.xml", "res/transition-v21/lb_enter_transition.xml", "res/transition-v21/lb_vertical_grid_entrance_transition.xml", "res/transition-v21/lb_shared_element_enter_transition.xml", "res/transition-v21/lb_guidedstep_activity_enter.xml", "res/transition-v21/lb_shared_element_return_transition.xml", "res/transition-v21/lb_title_in.xml", "res/transition-v21/lb_guidedstep_activity_enter_bottom.xml", "res/transition-v21/lb_title_out.xml", "res/transition-v21/lb_browse_return_transition.xml", "res/transition-v21/lb_vertical_grid_enter_transition.xml", "res/transition-v21/lb_vertical_grid_return_transition.xml", "res/transition-v21/lb_browse_headers_in.xml", "res/values-sk/values-sk.xml", "res/values-lv/values-lv.xml", "res/anim/lb_decelerator_4.xml", "res/anim/lb_decelerator_2.xml", "res/values-is/values-is.xml", "res/values-da/values-da.xml", "res/values-it/values-it.xml", "res/values-gl/values-gl.xml", "res/values-de/values-de.xml", "res/values-be/values-be.xml", "res/values-en-rCA/values-en-rCA.xml", "res/animator/lb_onboarding_page_indicator_fade_in.xml", "res/animator/lb_guidedstep_slide_down.xml", "res/animator/lb_onboarding_logo_exit.xml", "res/animator/lb_onboarding_title_enter.xml", "res/animator/lb_onboarding_start_button_fade_out.xml", "res/animator/lb_playback_rows_fade_out.xml", "res/animator/lb_playback_controls_fade_in.xml", "res/animator/lb_playback_description_fade_in.xml", "res/animator/lb_playback_bg_fade_out.xml", "res/animator/lb_playback_bg_fade_in.xml", "res/animator/lb_guidedactions_item_unpressed.xml", "res/animator/lb_playback_description_fade_out.xml", "res/animator/lb_onboarding_start_button_fade_in.xml", "res/animator/lb_playback_rows_fade_in.xml", "res/animator/lb_guidedactions_item_pressed.xml", "res/animator/lb_onboarding_description_enter.xml", "res/animator/lb_guidedstep_slide_up.xml", "res/animator/lb_onboarding_logo_enter.xml", "res/animator/lb_onboarding_page_indicator_enter.xml", "res/animator/lb_playback_controls_fade_out.xml", "res/animator/lb_onboarding_page_indicator_fade_out.xml", "res/values-fa/values-fa.xml", "res/values-ca/values-ca.xml", "res/values-th/values-th.xml", "res/values-nl/values-nl.xml", "res/values-hy/values-hy.xml", "res/values-zh-rHK/values-zh-rHK.xml", "res/values-tl/values-tl.xml", "res/values-kk/values-kk.xml", "res/values-pt/values-pt.xml", "res/values-my/values-my.xml", "res/values-et/values-et.xml", "res/values-en-rIN/values-en-rIN.xml", "res/values-sr/values-sr.xml", "res/values-fr/values-fr.xml", "res/values-kn/values-kn.xml", "res/values-nb/values-nb.xml", "res/values-ne/values-ne.xml", "res/transition-v19/lb_browse_headers_out.xml", "res/transition-v19/lb_browse_headers_in.xml", "res/drawable/lb_card_foreground.xml", "res/drawable/lb_control_button_primary.xml", "res/drawable/lb_playback_progress_bar.xml", "res/drawable/lb_onboarding_start_button_background.xml", "res/drawable/lb_search_orb.xml", "res/drawable/lb_speech_orb.xml", "res/drawable/lb_headers_right_fading.xml", "res/drawable/lb_background.xml", "res/drawable/lb_playback_now_playing_bar.xml", "res/drawable/lb_control_button_secondary.xml", "res/values-b+sr+Latn/values-b+sr+Latn.xml", "res/values-ka/values-ka.xml", "res/values-zh-rCN/values-zh-rCN.xml", "res/values-az/values-az.xml", "res/values-sq/values-sq.xml", "res/values-hi/values-hi.xml", "res/values-in/values-in.xml", "res/values-uk/values-uk.xml", "res/drawable-v21/lb_card_foreground.xml", "res/drawable-v21/lb_selectable_item_rounded_rect.xml", "res/drawable-v21/lb_control_button_primary.xml", "res/drawable-v21/lb_action_bg.xml", "res/drawable-v21/lb_control_button_secondary.xml" ] -subjar_tuples = [ ] -subjars = [ ] diff --git a/chromium/build/secondary/third_party/android_tools/support/android_support_v17_preference_java.info b/chromium/build/secondary/third_party/android_tools/support/android_support_v17_preference_java.info deleted file mode 100644 index 87ea13ee171..00000000000 --- a/chromium/build/secondary/third_party/android_tools/support/android_support_v17_preference_java.info +++ /dev/null @@ -1,13 +0,0 @@ -# Generated by //build/android/gyp/aar.py -# To regenerate, use "update_android_aar_prebuilts = true" and run "gn gen". - -aidl = [ ] -assets = [ ] -has_classes_jar = true -has_native_libraries = false -has_proguard_flags = false -has_r_text_file = true -is_manifest_empty = true -resources = [ "res/layout/leanback_preference_widget_seekbar.xml", "res/layout/leanback_preference_information.xml", "res/layout/leanback_preference.xml", "res/layout/leanback_preferences_list.xml", "res/layout/leanback_settings_fragment.xml", "res/layout/leanback_list_preference_item_single.xml", "res/layout/leanback_preference_category.xml", "res/layout/leanback_list_preference_fragment.xml", "res/layout/leanback_list_preference_item_multi.xml", "res/layout/leanback_preference_fragment.xml", "res/color/lb_preference_item_primary_text_color.xml", "res/color/lb_preference_item_secondary_text_color.xml", "res/values/values.xml", "res/layout-v21/leanback_settings_fragment.xml", "res/layout-v21/leanback_preference_category.xml" ] -subjar_tuples = [ ] -subjars = [ ] diff --git a/chromium/build/secondary/third_party/android_tools/support/android_support_v7_appcompat_java_internal.info b/chromium/build/secondary/third_party/android_tools/support/android_support_v7_appcompat_java_internal.info deleted file mode 100644 index e99e4dea947..00000000000 --- a/chromium/build/secondary/third_party/android_tools/support/android_support_v7_appcompat_java_internal.info +++ /dev/null @@ -1,13 +0,0 @@ -# Generated by //build/android/gyp/aar.py -# To regenerate, use "update_android_aar_prebuilts = true" and run "gn gen". - -aidl = [ ] -assets = [ ] -has_classes_jar = true -has_native_libraries = false -has_proguard_flags = false -has_r_text_file = true -is_manifest_empty = true -resources = [ "res/values-ur/values-ur.xml", "res/values-ru/values-ru.xml", "res/values-en-rGB/values-en-rGB.xml", "res/values-pt-rBR/values-pt-rBR.xml", "res/values-el/values-el.xml", "res/drawable-hdpi-v4/abc_ab_share_pack_mtrl_alpha.9.png", "res/drawable-hdpi-v4/abc_btn_switch_to_on_mtrl_00012.9.png", "res/drawable-hdpi-v4/abc_list_longpressed_holo.9.png", "res/drawable-hdpi-v4/abc_ic_star_black_48dp.png", "res/drawable-hdpi-v4/abc_ic_commit_search_api_mtrl_alpha.png", "res/drawable-hdpi-v4/abc_text_select_handle_middle_mtrl_light.png", "res/drawable-hdpi-v4/abc_list_focused_holo.9.png", "res/drawable-hdpi-v4/abc_popup_background_mtrl_mult.9.png", "res/drawable-hdpi-v4/abc_ic_star_black_36dp.png", "res/drawable-hdpi-v4/abc_text_select_handle_right_mtrl_dark.png", "res/drawable-hdpi-v4/abc_btn_switch_to_on_mtrl_00001.9.png", "res/drawable-hdpi-v4/abc_btn_check_to_on_mtrl_000.png", "res/drawable-hdpi-v4/abc_text_select_handle_left_mtrl_light.png", "res/drawable-hdpi-v4/abc_ic_menu_selectall_mtrl_alpha.png", "res/drawable-hdpi-v4/abc_textfield_default_mtrl_alpha.9.png", "res/drawable-hdpi-v4/abc_scrubber_primary_mtrl_alpha.9.png", "res/drawable-hdpi-v4/abc_scrubber_control_to_pressed_mtrl_000.png", "res/drawable-hdpi-v4/abc_switch_track_mtrl_alpha.9.png", "res/drawable-hdpi-v4/abc_ic_star_black_16dp.png", "res/drawable-hdpi-v4/abc_scrubber_control_off_mtrl_alpha.png", "res/drawable-hdpi-v4/abc_ic_menu_cut_mtrl_alpha.png", "res/drawable-hdpi-v4/abc_ic_star_half_black_36dp.png", "res/drawable-hdpi-v4/abc_list_selector_disabled_holo_light.9.png", "res/drawable-hdpi-v4/abc_text_select_handle_left_mtrl_dark.png", "res/drawable-hdpi-v4/abc_ic_menu_paste_mtrl_am_alpha.png", "res/drawable-hdpi-v4/abc_btn_radio_to_on_mtrl_015.png", "res/drawable-hdpi-v4/abc_list_pressed_holo_dark.9.png", "res/drawable-hdpi-v4/abc_list_pressed_holo_light.9.png", "res/drawable-hdpi-v4/abc_tab_indicator_mtrl_alpha.9.png", "res/drawable-hdpi-v4/abc_textfield_search_default_mtrl_alpha.9.png", "res/drawable-hdpi-v4/abc_text_select_handle_right_mtrl_light.png", "res/drawable-hdpi-v4/abc_btn_check_to_on_mtrl_015.png", "res/drawable-hdpi-v4/abc_list_selector_disabled_holo_dark.9.png", "res/drawable-hdpi-v4/abc_ic_star_half_black_16dp.png", "res/drawable-hdpi-v4/abc_ic_star_half_black_48dp.png", "res/drawable-hdpi-v4/abc_ic_menu_share_mtrl_alpha.png", "res/drawable-hdpi-v4/abc_textfield_search_activated_mtrl_alpha.9.png", "res/drawable-hdpi-v4/abc_btn_radio_to_on_mtrl_000.png", "res/drawable-hdpi-v4/abc_list_divider_mtrl_alpha.9.png", "res/drawable-hdpi-v4/abc_ic_menu_copy_mtrl_am_alpha.png", "res/drawable-hdpi-v4/abc_spinner_mtrl_am_alpha.9.png", "res/drawable-hdpi-v4/abc_scrubber_track_mtrl_alpha.9.png", "res/drawable-hdpi-v4/abc_text_select_handle_middle_mtrl_dark.png", "res/drawable-hdpi-v4/abc_scrubber_control_to_pressed_mtrl_005.png", "res/drawable-hdpi-v4/abc_menu_hardkey_panel_mtrl_mult.9.png", "res/drawable-hdpi-v4/abc_cab_background_top_mtrl_alpha.9.png", "res/drawable-hdpi-v4/abc_textfield_activated_mtrl_alpha.9.png", "res/values-tr/values-tr.xml", "res/values-hu/values-hu.xml", "res/values-v18/values-v18.xml", "res/values-km/values-km.xml", "res/values-fr-rCA/values-fr-rCA.xml", "res/values-gu/values-gu.xml", "res/layout/abc_list_menu_item_layout.xml", "res/layout/abc_action_menu_layout.xml", "res/layout/abc_search_dropdown_item_icons_2line.xml", "res/layout/support_simple_spinner_dropdown_item.xml", "res/layout/abc_screen_simple.xml", "res/layout/abc_action_menu_item_layout.xml", "res/layout/abc_list_menu_item_radio.xml", "res/layout/abc_alert_dialog_title_material.xml", "res/layout/abc_alert_dialog_material.xml", "res/layout/abc_screen_toolbar.xml", "res/layout/abc_screen_simple_overlay_action_mode.xml", "res/layout/abc_select_dialog_material.xml", "res/layout/abc_action_mode_bar.xml", "res/layout/abc_dialog_title_material.xml", "res/layout/abc_list_menu_item_checkbox.xml", "res/layout/abc_popup_menu_header_item_layout.xml", "res/layout/abc_action_bar_up_container.xml", "res/layout/select_dialog_singlechoice_material.xml", "res/layout/abc_action_mode_close_item_material.xml", "res/layout/tooltip.xml", "res/layout/select_dialog_multichoice_material.xml", "res/layout/abc_action_bar_title_item.xml", "res/layout/abc_activity_chooser_view_list_item.xml", "res/layout/abc_popup_menu_item_layout.xml", "res/layout/abc_alert_dialog_button_bar_material.xml", "res/layout/abc_list_menu_item_icon.xml", "res/layout/abc_expanded_menu_layout.xml", "res/layout/select_dialog_item_material.xml", "res/layout/abc_activity_chooser_view.xml", "res/layout/abc_search_view.xml", "res/layout/abc_screen_content_include.xml", "res/values-ms/values-ms.xml", "res/values-v21/values-v21.xml", "res/values-ja/values-ja.xml", "res/values-eu/values-eu.xml", "res/values-hdpi-v4/values-hdpi-v4.xml", "res/values-sv/values-sv.xml", "res/values-mn/values-mn.xml", "res/values-v14/values-v14.xml", "res/values-ta/values-ta.xml", "res/values-v23/values-v23.xml", "res/values-pl/values-pl.xml", "res/drawable-xxhdpi-v4/abc_ab_share_pack_mtrl_alpha.9.png", "res/drawable-xxhdpi-v4/abc_btn_switch_to_on_mtrl_00012.9.png", "res/drawable-xxhdpi-v4/abc_list_longpressed_holo.9.png", "res/drawable-xxhdpi-v4/abc_ic_star_black_48dp.png", "res/drawable-xxhdpi-v4/abc_ic_commit_search_api_mtrl_alpha.png", "res/drawable-xxhdpi-v4/abc_text_select_handle_middle_mtrl_light.png", "res/drawable-xxhdpi-v4/abc_list_focused_holo.9.png", "res/drawable-xxhdpi-v4/abc_popup_background_mtrl_mult.9.png", "res/drawable-xxhdpi-v4/abc_ic_star_black_36dp.png", "res/drawable-xxhdpi-v4/abc_text_select_handle_right_mtrl_dark.png", "res/drawable-xxhdpi-v4/abc_btn_switch_to_on_mtrl_00001.9.png", "res/drawable-xxhdpi-v4/abc_btn_check_to_on_mtrl_000.png", "res/drawable-xxhdpi-v4/abc_text_select_handle_left_mtrl_light.png", "res/drawable-xxhdpi-v4/abc_ic_menu_selectall_mtrl_alpha.png", "res/drawable-xxhdpi-v4/abc_textfield_default_mtrl_alpha.9.png", "res/drawable-xxhdpi-v4/abc_scrubber_primary_mtrl_alpha.9.png", "res/drawable-xxhdpi-v4/abc_scrubber_control_to_pressed_mtrl_000.png", "res/drawable-xxhdpi-v4/abc_switch_track_mtrl_alpha.9.png", "res/drawable-xxhdpi-v4/abc_ic_star_black_16dp.png", "res/drawable-xxhdpi-v4/abc_scrubber_control_off_mtrl_alpha.png", "res/drawable-xxhdpi-v4/abc_ic_menu_cut_mtrl_alpha.png", "res/drawable-xxhdpi-v4/abc_ic_star_half_black_36dp.png", "res/drawable-xxhdpi-v4/abc_list_selector_disabled_holo_light.9.png", "res/drawable-xxhdpi-v4/abc_text_select_handle_left_mtrl_dark.png", "res/drawable-xxhdpi-v4/abc_ic_menu_paste_mtrl_am_alpha.png", "res/drawable-xxhdpi-v4/abc_btn_radio_to_on_mtrl_015.png", "res/drawable-xxhdpi-v4/abc_list_pressed_holo_dark.9.png", "res/drawable-xxhdpi-v4/abc_list_pressed_holo_light.9.png", "res/drawable-xxhdpi-v4/abc_tab_indicator_mtrl_alpha.9.png", "res/drawable-xxhdpi-v4/abc_textfield_search_default_mtrl_alpha.9.png", "res/drawable-xxhdpi-v4/abc_text_select_handle_right_mtrl_light.png", "res/drawable-xxhdpi-v4/abc_btn_check_to_on_mtrl_015.png", "res/drawable-xxhdpi-v4/abc_list_selector_disabled_holo_dark.9.png", "res/drawable-xxhdpi-v4/abc_ic_star_half_black_16dp.png", "res/drawable-xxhdpi-v4/abc_ic_star_half_black_48dp.png", "res/drawable-xxhdpi-v4/abc_ic_menu_share_mtrl_alpha.png", "res/drawable-xxhdpi-v4/abc_textfield_search_activated_mtrl_alpha.9.png", "res/drawable-xxhdpi-v4/abc_btn_radio_to_on_mtrl_000.png", "res/drawable-xxhdpi-v4/abc_list_divider_mtrl_alpha.9.png", "res/drawable-xxhdpi-v4/abc_ic_menu_copy_mtrl_am_alpha.png", "res/drawable-xxhdpi-v4/abc_spinner_mtrl_am_alpha.9.png", "res/drawable-xxhdpi-v4/abc_scrubber_track_mtrl_alpha.9.png", "res/drawable-xxhdpi-v4/abc_text_select_handle_middle_mtrl_dark.png", "res/drawable-xxhdpi-v4/abc_scrubber_control_to_pressed_mtrl_005.png", "res/drawable-xxhdpi-v4/abc_menu_hardkey_panel_mtrl_mult.9.png", "res/drawable-xxhdpi-v4/abc_cab_background_top_mtrl_alpha.9.png", "res/drawable-xxhdpi-v4/abc_textfield_activated_mtrl_alpha.9.png", "res/color/abc_search_url_text.xml", "res/color/abc_btn_colored_borderless_text_material.xml", "res/color/abc_primary_text_material_light.xml", "res/color/abc_tint_seek_thumb.xml", "res/color/abc_tint_btn_checkable.xml", "res/color/abc_secondary_text_material_dark.xml", "res/color/abc_tint_edittext.xml", "res/color/abc_tint_spinner.xml", "res/color/abc_primary_text_material_dark.xml", "res/color/abc_secondary_text_material_light.xml", "res/color/switch_thumb_material_dark.xml", "res/color/abc_hint_foreground_material_dark.xml", "res/color/abc_tint_switch_track.xml", "res/color/abc_primary_text_disable_only_material_dark.xml", "res/color/abc_btn_colored_text_material.xml", "res/color/abc_hint_foreground_material_light.xml", "res/color/switch_thumb_material_light.xml", "res/color/abc_tint_default.xml", "res/color/abc_primary_text_disable_only_material_light.xml", "res/values-ldltr-v21/values-ldltr-v21.xml", "res/values-lt/values-lt.xml", "res/values-bg/values-bg.xml", "res/values-es-rUS/values-es-rUS.xml", "res/values-iw/values-iw.xml", "res/values-en-rXC/values-en-rXC.xml", "res/values-mr/values-mr.xml", "res/values-uz/values-uz.xml", "res/values-large-v4/values-large-v4.xml", "res/values-v11/values-v11.xml", "res/color-v11/abc_background_cache_hint_selector_material_light.xml", "res/color-v11/abc_background_cache_hint_selector_material_dark.xml", "res/values-pa/values-pa.xml", "res/values-v22/values-v22.xml", "res/values-v25/values-v25.xml", "res/values-fi/values-fi.xml", "res/values-am/values-am.xml", "res/values-pt-rPT/values-pt-rPT.xml", "res/values-ar/values-ar.xml", "res/values-ky/values-ky.xml", "res/values-v12/values-v12.xml", "res/drawable-mdpi-v4/abc_ab_share_pack_mtrl_alpha.9.png", "res/drawable-mdpi-v4/abc_btn_switch_to_on_mtrl_00012.9.png", "res/drawable-mdpi-v4/abc_list_longpressed_holo.9.png", "res/drawable-mdpi-v4/abc_ic_star_black_48dp.png", "res/drawable-mdpi-v4/abc_ic_commit_search_api_mtrl_alpha.png", "res/drawable-mdpi-v4/abc_text_select_handle_middle_mtrl_light.png", "res/drawable-mdpi-v4/abc_list_focused_holo.9.png", "res/drawable-mdpi-v4/abc_popup_background_mtrl_mult.9.png", "res/drawable-mdpi-v4/abc_ic_star_black_36dp.png", "res/drawable-mdpi-v4/abc_text_select_handle_right_mtrl_dark.png", "res/drawable-mdpi-v4/abc_btn_switch_to_on_mtrl_00001.9.png", "res/drawable-mdpi-v4/abc_btn_check_to_on_mtrl_000.png", "res/drawable-mdpi-v4/abc_text_select_handle_left_mtrl_light.png", "res/drawable-mdpi-v4/abc_ic_menu_selectall_mtrl_alpha.png", "res/drawable-mdpi-v4/abc_textfield_default_mtrl_alpha.9.png", "res/drawable-mdpi-v4/abc_scrubber_primary_mtrl_alpha.9.png", "res/drawable-mdpi-v4/abc_scrubber_control_to_pressed_mtrl_000.png", "res/drawable-mdpi-v4/abc_switch_track_mtrl_alpha.9.png", "res/drawable-mdpi-v4/abc_ic_star_black_16dp.png", "res/drawable-mdpi-v4/abc_scrubber_control_off_mtrl_alpha.png", "res/drawable-mdpi-v4/abc_ic_menu_cut_mtrl_alpha.png", "res/drawable-mdpi-v4/abc_ic_star_half_black_36dp.png", "res/drawable-mdpi-v4/abc_list_selector_disabled_holo_light.9.png", "res/drawable-mdpi-v4/abc_text_select_handle_left_mtrl_dark.png", "res/drawable-mdpi-v4/abc_ic_menu_paste_mtrl_am_alpha.png", "res/drawable-mdpi-v4/abc_btn_radio_to_on_mtrl_015.png", "res/drawable-mdpi-v4/abc_list_pressed_holo_dark.9.png", "res/drawable-mdpi-v4/abc_list_pressed_holo_light.9.png", "res/drawable-mdpi-v4/abc_tab_indicator_mtrl_alpha.9.png", "res/drawable-mdpi-v4/abc_textfield_search_default_mtrl_alpha.9.png", "res/drawable-mdpi-v4/abc_text_select_handle_right_mtrl_light.png", "res/drawable-mdpi-v4/abc_btn_check_to_on_mtrl_015.png", "res/drawable-mdpi-v4/abc_list_selector_disabled_holo_dark.9.png", "res/drawable-mdpi-v4/abc_ic_star_half_black_16dp.png", "res/drawable-mdpi-v4/abc_ic_star_half_black_48dp.png", "res/drawable-mdpi-v4/abc_ic_menu_share_mtrl_alpha.png", "res/drawable-mdpi-v4/abc_textfield_search_activated_mtrl_alpha.9.png", "res/drawable-mdpi-v4/abc_btn_radio_to_on_mtrl_000.png", "res/drawable-mdpi-v4/abc_list_divider_mtrl_alpha.9.png", "res/drawable-mdpi-v4/abc_ic_menu_copy_mtrl_am_alpha.png", "res/drawable-mdpi-v4/abc_spinner_mtrl_am_alpha.9.png", "res/drawable-mdpi-v4/abc_scrubber_track_mtrl_alpha.9.png", "res/drawable-mdpi-v4/abc_text_select_handle_middle_mtrl_dark.png", "res/drawable-mdpi-v4/abc_scrubber_control_to_pressed_mtrl_005.png", "res/drawable-mdpi-v4/abc_menu_hardkey_panel_mtrl_mult.9.png", "res/drawable-mdpi-v4/abc_cab_background_top_mtrl_alpha.9.png", "res/drawable-mdpi-v4/abc_textfield_activated_mtrl_alpha.9.png", "res/values-bs/values-bs.xml", "res/values/values.xml", "res/values-hr/values-hr.xml", "res/values-v24/values-v24.xml", "res/drawable-ldrtl-xxhdpi-v17/abc_ic_menu_cut_mtrl_alpha.png", "res/drawable-ldrtl-xxhdpi-v17/abc_ic_menu_copy_mtrl_am_alpha.png", "res/drawable-ldrtl-xxhdpi-v17/abc_spinner_mtrl_am_alpha.9.png", "res/drawable-ldrtl-xhdpi-v17/abc_ic_menu_cut_mtrl_alpha.png", "res/drawable-ldrtl-xhdpi-v17/abc_ic_menu_copy_mtrl_am_alpha.png", "res/drawable-ldrtl-xhdpi-v17/abc_spinner_mtrl_am_alpha.9.png", "res/values-en-rAU/values-en-rAU.xml", "res/values-ro/values-ro.xml", "res/drawable-xhdpi-v4/abc_ab_share_pack_mtrl_alpha.9.png", "res/drawable-xhdpi-v4/abc_btn_switch_to_on_mtrl_00012.9.png", "res/drawable-xhdpi-v4/abc_list_longpressed_holo.9.png", "res/drawable-xhdpi-v4/abc_ic_star_black_48dp.png", "res/drawable-xhdpi-v4/abc_ic_commit_search_api_mtrl_alpha.png", "res/drawable-xhdpi-v4/abc_text_select_handle_middle_mtrl_light.png", "res/drawable-xhdpi-v4/abc_list_focused_holo.9.png", "res/drawable-xhdpi-v4/abc_popup_background_mtrl_mult.9.png", "res/drawable-xhdpi-v4/abc_ic_star_black_36dp.png", "res/drawable-xhdpi-v4/abc_text_select_handle_right_mtrl_dark.png", "res/drawable-xhdpi-v4/abc_btn_switch_to_on_mtrl_00001.9.png", "res/drawable-xhdpi-v4/abc_btn_check_to_on_mtrl_000.png", "res/drawable-xhdpi-v4/abc_text_select_handle_left_mtrl_light.png", "res/drawable-xhdpi-v4/abc_ic_menu_selectall_mtrl_alpha.png", "res/drawable-xhdpi-v4/abc_textfield_default_mtrl_alpha.9.png", "res/drawable-xhdpi-v4/abc_scrubber_primary_mtrl_alpha.9.png", "res/drawable-xhdpi-v4/abc_scrubber_control_to_pressed_mtrl_000.png", "res/drawable-xhdpi-v4/abc_switch_track_mtrl_alpha.9.png", "res/drawable-xhdpi-v4/abc_ic_star_black_16dp.png", "res/drawable-xhdpi-v4/abc_scrubber_control_off_mtrl_alpha.png", "res/drawable-xhdpi-v4/abc_ic_menu_cut_mtrl_alpha.png", "res/drawable-xhdpi-v4/abc_ic_star_half_black_36dp.png", "res/drawable-xhdpi-v4/abc_list_selector_disabled_holo_light.9.png", "res/drawable-xhdpi-v4/abc_text_select_handle_left_mtrl_dark.png", "res/drawable-xhdpi-v4/abc_ic_menu_paste_mtrl_am_alpha.png", "res/drawable-xhdpi-v4/abc_btn_radio_to_on_mtrl_015.png", "res/drawable-xhdpi-v4/abc_list_pressed_holo_dark.9.png", "res/drawable-xhdpi-v4/abc_list_pressed_holo_light.9.png", "res/drawable-xhdpi-v4/abc_tab_indicator_mtrl_alpha.9.png", "res/drawable-xhdpi-v4/abc_textfield_search_default_mtrl_alpha.9.png", "res/drawable-xhdpi-v4/abc_text_select_handle_right_mtrl_light.png", "res/drawable-xhdpi-v4/abc_btn_check_to_on_mtrl_015.png", "res/drawable-xhdpi-v4/abc_list_selector_disabled_holo_dark.9.png", "res/drawable-xhdpi-v4/abc_ic_star_half_black_16dp.png", "res/drawable-xhdpi-v4/abc_ic_star_half_black_48dp.png", "res/drawable-xhdpi-v4/abc_ic_menu_share_mtrl_alpha.png", "res/drawable-xhdpi-v4/abc_textfield_search_activated_mtrl_alpha.9.png", "res/drawable-xhdpi-v4/abc_btn_radio_to_on_mtrl_000.png", "res/drawable-xhdpi-v4/abc_list_divider_mtrl_alpha.9.png", "res/drawable-xhdpi-v4/abc_ic_menu_copy_mtrl_am_alpha.png", "res/drawable-xhdpi-v4/abc_spinner_mtrl_am_alpha.9.png", "res/drawable-xhdpi-v4/abc_scrubber_track_mtrl_alpha.9.png", "res/drawable-xhdpi-v4/abc_text_select_handle_middle_mtrl_dark.png", "res/drawable-xhdpi-v4/abc_scrubber_control_to_pressed_mtrl_005.png", "res/drawable-xhdpi-v4/abc_menu_hardkey_panel_mtrl_mult.9.png", "res/drawable-xhdpi-v4/abc_cab_background_top_mtrl_alpha.9.png", "res/drawable-xhdpi-v4/abc_textfield_activated_mtrl_alpha.9.png", "res/values-vi/values-vi.xml", "res/values-ko/values-ko.xml", "res/values-zh-rTW/values-zh-rTW.xml", "res/drawable-ldrtl-mdpi-v17/abc_ic_menu_cut_mtrl_alpha.png", "res/drawable-ldrtl-mdpi-v17/abc_ic_menu_copy_mtrl_am_alpha.png", "res/drawable-ldrtl-mdpi-v17/abc_spinner_mtrl_am_alpha.9.png", "res/values-cs/values-cs.xml", "res/values-ml/values-ml.xml", "res/values-te/values-te.xml", "res/values-si/values-si.xml", "res/values-es/values-es.xml", "res/values-af/values-af.xml", "res/values-zu/values-zu.xml", "res/values-lo/values-lo.xml", "res/values-land/values-land.xml", "res/values-mk/values-mk.xml", "res/values-sl/values-sl.xml", "res/values-xlarge-v4/values-xlarge-v4.xml", "res/values-sw600dp-v13/values-sw600dp-v13.xml", "res/values-sw/values-sw.xml", "res/values-bn/values-bn.xml", "res/values-sk/values-sk.xml", "res/values-lv/values-lv.xml", "res/anim/abc_shrink_fade_out_from_bottom.xml", "res/anim/abc_slide_in_bottom.xml", "res/anim/abc_fade_out.xml", "res/anim/abc_slide_in_top.xml", "res/anim/abc_slide_out_top.xml", "res/anim/tooltip_exit.xml", "res/anim/abc_popup_exit.xml", "res/anim/abc_grow_fade_in_from_bottom.xml", "res/anim/tooltip_enter.xml", "res/anim/abc_fade_in.xml", "res/anim/abc_slide_out_bottom.xml", "res/anim/abc_popup_enter.xml", "res/values-is/values-is.xml", "res/values-da/values-da.xml", "res/values-it/values-it.xml", "res/values-gl/values-gl.xml", "res/values-de/values-de.xml", "res/values-be/values-be.xml", "res/values-en-rCA/values-en-rCA.xml", "res/drawable-ldrtl-xxxhdpi-v17/abc_ic_menu_cut_mtrl_alpha.png", "res/drawable-ldrtl-xxxhdpi-v17/abc_ic_menu_copy_mtrl_am_alpha.png", "res/drawable-ldrtl-xxxhdpi-v17/abc_spinner_mtrl_am_alpha.9.png", "res/values-fa/values-fa.xml", "res/values-ca/values-ca.xml", "res/values-th/values-th.xml", "res/values-nl/values-nl.xml", "res/values-hy/values-hy.xml", "res/values-zh-rHK/values-zh-rHK.xml", "res/values-tl/values-tl.xml", "res/values-kk/values-kk.xml", "res/values-pt/values-pt.xml", "res/values-my/values-my.xml", "res/values-night-v8/values-night-v8.xml", "res/drawable-v23/abc_control_background_material.xml", "res/drawable-xxxhdpi-v4/abc_btn_switch_to_on_mtrl_00012.9.png", "res/drawable-xxxhdpi-v4/abc_ic_star_black_48dp.png", "res/drawable-xxxhdpi-v4/abc_ic_star_black_36dp.png", "res/drawable-xxxhdpi-v4/abc_text_select_handle_right_mtrl_dark.png", "res/drawable-xxxhdpi-v4/abc_btn_switch_to_on_mtrl_00001.9.png", "res/drawable-xxxhdpi-v4/abc_btn_check_to_on_mtrl_000.png", "res/drawable-xxxhdpi-v4/abc_text_select_handle_left_mtrl_light.png", "res/drawable-xxxhdpi-v4/abc_ic_menu_selectall_mtrl_alpha.png", "res/drawable-xxxhdpi-v4/abc_scrubber_control_to_pressed_mtrl_000.png", "res/drawable-xxxhdpi-v4/abc_switch_track_mtrl_alpha.9.png", "res/drawable-xxxhdpi-v4/abc_ic_star_black_16dp.png", "res/drawable-xxxhdpi-v4/abc_ic_menu_cut_mtrl_alpha.png", "res/drawable-xxxhdpi-v4/abc_ic_star_half_black_36dp.png", "res/drawable-xxxhdpi-v4/abc_text_select_handle_left_mtrl_dark.png", "res/drawable-xxxhdpi-v4/abc_ic_menu_paste_mtrl_am_alpha.png", "res/drawable-xxxhdpi-v4/abc_btn_radio_to_on_mtrl_015.png", "res/drawable-xxxhdpi-v4/abc_tab_indicator_mtrl_alpha.9.png", "res/drawable-xxxhdpi-v4/abc_text_select_handle_right_mtrl_light.png", "res/drawable-xxxhdpi-v4/abc_btn_check_to_on_mtrl_015.png", "res/drawable-xxxhdpi-v4/abc_ic_star_half_black_16dp.png", "res/drawable-xxxhdpi-v4/abc_ic_star_half_black_48dp.png", "res/drawable-xxxhdpi-v4/abc_ic_menu_share_mtrl_alpha.png", "res/drawable-xxxhdpi-v4/abc_btn_radio_to_on_mtrl_000.png", "res/drawable-xxxhdpi-v4/abc_ic_menu_copy_mtrl_am_alpha.png", "res/drawable-xxxhdpi-v4/abc_spinner_mtrl_am_alpha.9.png", "res/drawable-xxxhdpi-v4/abc_scrubber_control_to_pressed_mtrl_005.png", "res/values-et/values-et.xml", "res/values-en-rIN/values-en-rIN.xml", "res/values-sr/values-sr.xml", "res/values-v16/values-v16.xml", "res/values-fr/values-fr.xml", "res/values-kn/values-kn.xml", "res/values-nb/values-nb.xml", "res/drawable-ldrtl-hdpi-v17/abc_ic_menu_cut_mtrl_alpha.png", "res/drawable-ldrtl-hdpi-v17/abc_ic_menu_copy_mtrl_am_alpha.png", "res/drawable-ldrtl-hdpi-v17/abc_spinner_mtrl_am_alpha.9.png", "res/layout-v26/abc_screen_toolbar.xml", "res/values-v26/values-v26.xml", "res/values-port/values-port.xml", "res/color-v23/abc_btn_colored_borderless_text_material.xml", "res/color-v23/abc_color_highlight_material.xml", "res/color-v23/abc_tint_seek_thumb.xml", "res/color-v23/abc_tint_btn_checkable.xml", "res/color-v23/abc_tint_edittext.xml", "res/color-v23/abc_tint_spinner.xml", "res/color-v23/abc_tint_switch_track.xml", "res/color-v23/abc_btn_colored_text_material.xml", "res/color-v23/abc_tint_default.xml", "res/values-v17/values-v17.xml", "res/values-ne/values-ne.xml", "res/values-v13/values-v13.xml", "res/drawable/abc_tab_indicator_material.xml", "res/drawable/abc_item_background_holo_dark.xml", "res/drawable/abc_edit_text_material.xml", "res/drawable/abc_ic_voice_search_api_material.xml", "res/drawable/abc_ic_menu_overflow_material.xml", "res/drawable/abc_ic_search_api_material.xml", "res/drawable/abc_cab_background_top_material.xml", "res/drawable/abc_list_selector_holo_light.xml", "res/drawable/abc_ic_arrow_drop_right_black_24dp.xml", "res/drawable/abc_spinner_textfield_background_material.xml", "res/drawable/abc_ratingbar_small_material.xml", "res/drawable/tooltip_frame_dark.xml", "res/drawable/abc_item_background_holo_light.xml", "res/drawable/abc_btn_colored_material.xml", "res/drawable/abc_ratingbar_material.xml", "res/drawable/abc_cab_background_internal_bg.xml", "res/drawable/abc_btn_radio_material.xml", "res/drawable/tooltip_frame_light.xml", "res/drawable/abc_ic_clear_material.xml", "res/drawable/abc_ic_ab_back_material.xml", "res/drawable/abc_textfield_search_material.xml", "res/drawable/abc_ic_go_search_api_material.xml", "res/drawable/abc_seekbar_track_material.xml", "res/drawable/abc_dialog_material_background.xml", "res/drawable/abc_seekbar_tick_mark_material.xml", "res/drawable/abc_list_selector_background_transition_holo_light.xml", "res/drawable/abc_text_cursor_material.xml", "res/drawable/abc_btn_default_mtrl_shape.xml", "res/drawable/abc_ratingbar_indicator_material.xml", "res/drawable/abc_switch_thumb_material.xml", "res/drawable/abc_seekbar_thumb_material.xml", "res/drawable/abc_list_selector_background_transition_holo_dark.xml", "res/drawable/abc_btn_check_material.xml", "res/drawable/abc_list_selector_holo_dark.xml", "res/drawable/abc_btn_borderless_material.xml", "res/drawable/abc_vector_test.xml", "res/values-b+sr+Latn/values-b+sr+Latn.xml", "res/values-h720dp-v13/values-h720dp-v13.xml", "res/values-ka/values-ka.xml", "res/values-zh-rCN/values-zh-rCN.xml", "res/values-az/values-az.xml", "res/values-sq/values-sq.xml", "res/values-hi/values-hi.xml", "res/values-in/values-in.xml", "res/values-uk/values-uk.xml", "res/drawable-v21/abc_edit_text_material.xml", "res/drawable-v21/abc_btn_colored_material.xml", "res/drawable-v21/abc_action_bar_item_background_material.xml" ] -subjar_tuples = [ ] -subjars = [ ] diff --git a/chromium/build/secondary/third_party/android_tools/support/android_support_v7_gridlayout_java.info b/chromium/build/secondary/third_party/android_tools/support/android_support_v7_gridlayout_java.info deleted file mode 100644 index 28c83306d8f..00000000000 --- a/chromium/build/secondary/third_party/android_tools/support/android_support_v7_gridlayout_java.info +++ /dev/null @@ -1,13 +0,0 @@ -# Generated by //build/android/gyp/aar.py -# To regenerate, use "update_android_aar_prebuilts = true" and run "gn gen". - -aidl = [ ] -assets = [ ] -has_classes_jar = true -has_native_libraries = false -has_proguard_flags = false -has_r_text_file = true -is_manifest_empty = true -resources = [ "res/values/values.xml" ] -subjar_tuples = [ ] -subjars = [ ] diff --git a/chromium/build/secondary/third_party/android_tools/support/android_support_v7_mediarouter_java.info b/chromium/build/secondary/third_party/android_tools/support/android_support_v7_mediarouter_java.info deleted file mode 100644 index 6fc7871029d..00000000000 --- a/chromium/build/secondary/third_party/android_tools/support/android_support_v7_mediarouter_java.info +++ /dev/null @@ -1,13 +0,0 @@ -# Generated by //build/android/gyp/aar.py -# To regenerate, use "update_android_aar_prebuilts = true" and run "gn gen". - -aidl = [ ] -assets = [ ] -has_classes_jar = true -has_native_libraries = false -has_proguard_flags = false -has_r_text_file = true -is_manifest_empty = true -resources = [ "res/values-ur/values-ur.xml", "res/values-ru/values-ru.xml", "res/values-en-rGB/values-en-rGB.xml", "res/values-pt-rBR/values-pt-rBR.xml", "res/values-el/values-el.xml", "res/drawable-hdpi-v4/ic_dialog_close_light.png", "res/drawable-hdpi-v4/ic_media_pause_light.png", "res/drawable-hdpi-v4/ic_mr_button_disabled_light.png", "res/drawable-hdpi-v4/ic_mr_button_grey.png", "res/drawable-hdpi-v4/ic_media_play_light.png", "res/drawable-hdpi-v4/ic_dialog_close_dark.png", "res/drawable-hdpi-v4/ic_vol_type_tv_dark.png", "res/drawable-hdpi-v4/ic_media_pause_dark.png", "res/drawable-hdpi-v4/ic_vol_type_tv_light.png", "res/drawable-hdpi-v4/ic_media_stop_dark.png", "res/drawable-hdpi-v4/ic_vol_type_speaker_dark.png", "res/drawable-hdpi-v4/ic_mr_button_disabled_dark.png", "res/drawable-hdpi-v4/ic_audiotrack_light.png", "res/drawable-hdpi-v4/ic_vol_type_speaker_group_dark.png", "res/drawable-hdpi-v4/ic_media_stop_light.png", "res/drawable-hdpi-v4/ic_media_play_dark.png", "res/drawable-hdpi-v4/ic_audiotrack_dark.png", "res/drawable-hdpi-v4/ic_vol_type_speaker_light.png", "res/drawable-hdpi-v4/ic_mr_button_disconnected_dark.png", "res/drawable-hdpi-v4/ic_mr_button_disconnected_light.png", "res/drawable-hdpi-v4/ic_vol_type_speaker_group_light.png", "res/values-tr/values-tr.xml", "res/values-hu/values-hu.xml", "res/values-km/values-km.xml", "res/values-fr-rCA/values-fr-rCA.xml", "res/values-gu/values-gu.xml", "res/interpolator/mr_fast_out_slow_in.xml", "res/interpolator/mr_linear_out_slow_in.xml", "res/layout/mr_controller_material_dialog_b.xml", "res/layout/mr_volume_control.xml", "res/layout/mr_controller_volume_item.xml", "res/layout/mr_chooser_list_item.xml", "res/layout/mr_chooser_dialog.xml", "res/layout/mr_playback_control.xml", "res/values-ms/values-ms.xml", "res/values-ja/values-ja.xml", "res/values-eu/values-eu.xml", "res/values-sv/values-sv.xml", "res/values-mn/values-mn.xml", "res/values-ta/values-ta.xml", "res/values-pl/values-pl.xml", "res/drawable-xxhdpi-v4/ic_mr_button_connected_28_light.png", "res/drawable-xxhdpi-v4/ic_mr_button_connected_00_light.png", "res/drawable-xxhdpi-v4/ic_mr_button_connected_28_dark.png", "res/drawable-xxhdpi-v4/ic_mr_button_connected_04_dark.png", "res/drawable-xxhdpi-v4/ic_mr_button_connecting_28_dark.png", "res/drawable-xxhdpi-v4/ic_mr_button_connecting_06_light.png", "res/drawable-xxhdpi-v4/ic_dialog_close_light.png", "res/drawable-xxhdpi-v4/ic_mr_button_connecting_29_dark.png", "res/drawable-xxhdpi-v4/ic_mr_button_connected_01_light.png", "res/drawable-xxhdpi-v4/ic_mr_button_connected_23_dark.png", "res/drawable-xxhdpi-v4/ic_mr_button_connecting_18_light.png", "res/drawable-xxhdpi-v4/ic_mr_button_connecting_04_dark.png", "res/drawable-xxhdpi-v4/ic_mr_button_connecting_12_light.png", "res/drawable-xxhdpi-v4/ic_media_pause_light.png", "res/drawable-xxhdpi-v4/ic_mr_button_disabled_light.png", "res/drawable-xxhdpi-v4/ic_mr_button_grey.png", "res/drawable-xxhdpi-v4/ic_mr_button_connecting_14_dark.png", "res/drawable-xxhdpi-v4/ic_media_play_light.png", "res/drawable-xxhdpi-v4/ic_mr_button_connecting_12_dark.png", "res/drawable-xxhdpi-v4/ic_mr_button_connected_14_light.png", "res/drawable-xxhdpi-v4/ic_dialog_close_dark.png", "res/drawable-xxhdpi-v4/ic_mr_button_connecting_30_dark.png", "res/drawable-xxhdpi-v4/ic_mr_button_connected_27_dark.png", "res/drawable-xxhdpi-v4/ic_mr_button_connecting_07_light.png", "res/drawable-xxhdpi-v4/ic_mr_button_connecting_25_dark.png", "res/drawable-xxhdpi-v4/ic_mr_button_connecting_18_dark.png", "res/drawable-xxhdpi-v4/ic_mr_button_connected_23_light.png", "res/drawable-xxhdpi-v4/ic_mr_button_connected_11_light.png", "res/drawable-xxhdpi-v4/ic_mr_button_connecting_08_light.png", "res/drawable-xxhdpi-v4/ic_mr_button_connected_02_dark.png", "res/drawable-xxhdpi-v4/ic_mr_button_connecting_22_dark.png", "res/drawable-xxhdpi-v4/ic_mr_button_connected_08_light.png", "res/drawable-xxhdpi-v4/ic_mr_button_connecting_20_light.png", "res/drawable-xxhdpi-v4/ic_mr_button_connected_18_light.png", "res/drawable-xxhdpi-v4/ic_mr_button_connected_19_light.png", "res/drawable-xxhdpi-v4/ic_vol_type_tv_dark.png", "res/drawable-xxhdpi-v4/ic_mr_button_connecting_05_light.png", "res/drawable-xxhdpi-v4/ic_mr_button_connecting_10_dark.png", "res/drawable-xxhdpi-v4/ic_mr_button_connecting_02_dark.png", "res/drawable-xxhdpi-v4/ic_mr_button_connected_25_dark.png", "res/drawable-xxhdpi-v4/ic_mr_button_connected_18_dark.png", "res/drawable-xxhdpi-v4/ic_mr_button_connecting_22_light.png", "res/drawable-xxhdpi-v4/ic_mr_button_connected_22_light.png", "res/drawable-xxhdpi-v4/ic_mr_button_connecting_24_dark.png", "res/drawable-xxhdpi-v4/ic_media_pause_dark.png", "res/drawable-xxhdpi-v4/ic_mr_button_connected_29_light.png", "res/drawable-xxhdpi-v4/ic_mr_button_connected_03_light.png", "res/drawable-xxhdpi-v4/ic_vol_type_tv_light.png", "res/drawable-xxhdpi-v4/ic_mr_button_connected_11_dark.png", "res/drawable-xxhdpi-v4/ic_mr_button_connected_30_light.png", "res/drawable-xxhdpi-v4/ic_mr_button_connecting_23_light.png", "res/drawable-xxhdpi-v4/ic_mr_button_connected_29_dark.png", "res/drawable-xxhdpi-v4/ic_media_stop_dark.png", "res/drawable-xxhdpi-v4/ic_mr_button_connected_27_light.png", "res/drawable-xxhdpi-v4/ic_mr_button_connected_25_light.png", "res/drawable-xxhdpi-v4/ic_mr_button_connected_06_dark.png", "res/drawable-xxhdpi-v4/ic_mr_button_connected_00_dark.png", "res/drawable-xxhdpi-v4/ic_mr_button_connected_02_light.png", "res/drawable-xxhdpi-v4/ic_mr_button_connected_17_light.png", "res/drawable-xxhdpi-v4/ic_mr_button_connecting_03_dark.png", "res/drawable-xxhdpi-v4/ic_mr_button_connected_09_dark.png", "res/drawable-xxhdpi-v4/ic_vol_type_speaker_dark.png", "res/drawable-xxhdpi-v4/ic_mr_button_connecting_00_dark.png", "res/drawable-xxhdpi-v4/ic_mr_button_connected_24_light.png", "res/drawable-xxhdpi-v4/ic_mr_button_connected_26_light.png", "res/drawable-xxhdpi-v4/ic_mr_button_connecting_29_light.png", "res/drawable-xxhdpi-v4/ic_mr_button_connecting_30_light.png", "res/drawable-xxhdpi-v4/ic_mr_button_connected_05_dark.png", "res/drawable-xxhdpi-v4/ic_mr_button_connecting_08_dark.png", "res/drawable-xxhdpi-v4/ic_mr_button_connecting_15_light.png", "res/drawable-xxhdpi-v4/ic_mr_button_connecting_17_dark.png", "res/drawable-xxhdpi-v4/ic_mr_button_disabled_dark.png", "res/drawable-xxhdpi-v4/ic_mr_button_connecting_26_light.png", "res/drawable-xxhdpi-v4/ic_mr_button_connected_24_dark.png", "res/drawable-xxhdpi-v4/ic_mr_button_connecting_16_light.png", "res/drawable-xxhdpi-v4/ic_mr_button_connecting_27_dark.png", "res/drawable-xxhdpi-v4/ic_audiotrack_light.png", "res/drawable-xxhdpi-v4/ic_mr_button_connected_13_dark.png", "res/drawable-xxhdpi-v4/ic_mr_button_connected_16_dark.png", "res/drawable-xxhdpi-v4/ic_mr_button_connecting_04_light.png", "res/drawable-xxhdpi-v4/ic_vol_type_speaker_group_dark.png", "res/drawable-xxhdpi-v4/ic_mr_button_connecting_13_light.png", "res/drawable-xxhdpi-v4/ic_media_stop_light.png", "res/drawable-xxhdpi-v4/ic_mr_button_connecting_17_light.png", "res/drawable-xxhdpi-v4/ic_mr_button_connected_16_light.png", "res/drawable-xxhdpi-v4/ic_mr_button_connecting_16_dark.png", "res/drawable-xxhdpi-v4/ic_mr_button_connecting_01_light.png", "res/drawable-xxhdpi-v4/ic_mr_button_connected_07_dark.png", "res/drawable-xxhdpi-v4/ic_mr_button_connected_13_light.png", "res/drawable-xxhdpi-v4/ic_mr_button_connected_19_dark.png", "res/drawable-xxhdpi-v4/ic_mr_button_connecting_00_light.png", "res/drawable-xxhdpi-v4/ic_mr_button_connected_14_dark.png", "res/drawable-xxhdpi-v4/ic_mr_button_connecting_03_light.png", "res/drawable-xxhdpi-v4/ic_mr_button_connecting_15_dark.png", "res/drawable-xxhdpi-v4/ic_mr_button_connected_20_light.png", "res/drawable-xxhdpi-v4/ic_media_play_dark.png", "res/drawable-xxhdpi-v4/ic_mr_button_connected_03_dark.png", "res/drawable-xxhdpi-v4/ic_mr_button_connecting_27_light.png", "res/drawable-xxhdpi-v4/ic_mr_button_connected_21_light.png", "res/drawable-xxhdpi-v4/ic_mr_button_connecting_28_light.png", "res/drawable-xxhdpi-v4/ic_mr_button_connecting_02_light.png", "res/drawable-xxhdpi-v4/ic_mr_button_connecting_10_light.png", "res/drawable-xxhdpi-v4/ic_mr_button_connecting_23_dark.png", "res/drawable-xxhdpi-v4/ic_mr_button_connected_15_dark.png", "res/drawable-xxhdpi-v4/ic_mr_button_connected_21_dark.png", "res/drawable-xxhdpi-v4/ic_mr_button_connecting_05_dark.png", "res/drawable-xxhdpi-v4/ic_mr_button_connecting_19_dark.png", "res/drawable-xxhdpi-v4/ic_mr_button_connecting_20_dark.png", "res/drawable-xxhdpi-v4/ic_mr_button_connecting_06_dark.png", "res/drawable-xxhdpi-v4/ic_audiotrack_dark.png", "res/drawable-xxhdpi-v4/ic_mr_button_connecting_21_dark.png", "res/drawable-xxhdpi-v4/ic_mr_button_connecting_09_dark.png", "res/drawable-xxhdpi-v4/ic_mr_button_connected_20_dark.png", "res/drawable-xxhdpi-v4/ic_vol_type_speaker_light.png", "res/drawable-xxhdpi-v4/ic_mr_button_disconnected_dark.png", "res/drawable-xxhdpi-v4/ic_mr_button_connecting_19_light.png", "res/drawable-xxhdpi-v4/ic_mr_button_connected_22_dark.png", "res/drawable-xxhdpi-v4/ic_mr_button_connecting_25_light.png", "res/drawable-xxhdpi-v4/ic_mr_button_connecting_09_light.png", "res/drawable-xxhdpi-v4/ic_mr_button_connecting_11_light.png", "res/drawable-xxhdpi-v4/ic_mr_button_connected_12_dark.png", "res/drawable-xxhdpi-v4/ic_mr_button_connected_10_light.png", "res/drawable-xxhdpi-v4/ic_mr_button_connecting_13_dark.png", "res/drawable-xxhdpi-v4/ic_mr_button_connecting_24_light.png", "res/drawable-xxhdpi-v4/ic_mr_button_connecting_01_dark.png", "res/drawable-xxhdpi-v4/ic_mr_button_connecting_26_dark.png", "res/drawable-xxhdpi-v4/ic_mr_button_connected_26_dark.png", "res/drawable-xxhdpi-v4/ic_mr_button_connecting_07_dark.png", "res/drawable-xxhdpi-v4/ic_mr_button_connected_04_light.png", "res/drawable-xxhdpi-v4/ic_mr_button_connected_10_dark.png", "res/drawable-xxhdpi-v4/ic_mr_button_connected_17_dark.png", "res/drawable-xxhdpi-v4/ic_mr_button_connected_05_light.png", "res/drawable-xxhdpi-v4/ic_mr_button_connected_07_light.png", "res/drawable-xxhdpi-v4/ic_mr_button_connected_15_light.png", "res/drawable-xxhdpi-v4/ic_mr_button_connected_08_dark.png", "res/drawable-xxhdpi-v4/ic_mr_button_connecting_11_dark.png", "res/drawable-xxhdpi-v4/ic_mr_button_connected_09_light.png", "res/drawable-xxhdpi-v4/ic_mr_button_disconnected_light.png", "res/drawable-xxhdpi-v4/ic_mr_button_connected_12_light.png", "res/drawable-xxhdpi-v4/ic_vol_type_speaker_group_light.png", "res/drawable-xxhdpi-v4/ic_mr_button_connecting_14_light.png", "res/drawable-xxhdpi-v4/ic_mr_button_connecting_21_light.png", "res/drawable-xxhdpi-v4/ic_mr_button_connected_30_dark.png", "res/drawable-xxhdpi-v4/ic_mr_button_connected_06_light.png", "res/drawable-xxhdpi-v4/ic_mr_button_connected_01_dark.png", "res/values-lt/values-lt.xml", "res/values-bg/values-bg.xml", "res/values-es-rUS/values-es-rUS.xml", "res/values-iw/values-iw.xml", "res/values-en-rXC/values-en-rXC.xml", "res/values-mr/values-mr.xml", "res/values-uz/values-uz.xml", "res/values-pa/values-pa.xml", "res/values-fi/values-fi.xml", "res/values-am/values-am.xml", "res/values-pt-rPT/values-pt-rPT.xml", "res/values-ar/values-ar.xml", "res/values-ky/values-ky.xml", "res/drawable-mdpi-v4/ic_dialog_close_light.png", "res/drawable-mdpi-v4/ic_media_pause_light.png", "res/drawable-mdpi-v4/ic_mr_button_disabled_light.png", "res/drawable-mdpi-v4/ic_mr_button_grey.png", "res/drawable-mdpi-v4/ic_media_play_light.png", "res/drawable-mdpi-v4/ic_dialog_close_dark.png", "res/drawable-mdpi-v4/ic_vol_type_tv_dark.png", "res/drawable-mdpi-v4/ic_media_pause_dark.png", "res/drawable-mdpi-v4/ic_vol_type_tv_light.png", "res/drawable-mdpi-v4/ic_media_stop_dark.png", "res/drawable-mdpi-v4/ic_vol_type_speaker_dark.png", "res/drawable-mdpi-v4/ic_mr_button_disabled_dark.png", "res/drawable-mdpi-v4/ic_audiotrack_light.png", "res/drawable-mdpi-v4/ic_vol_type_speaker_group_dark.png", "res/drawable-mdpi-v4/ic_media_stop_light.png", "res/drawable-mdpi-v4/ic_media_play_dark.png", "res/drawable-mdpi-v4/ic_audiotrack_dark.png", "res/drawable-mdpi-v4/ic_vol_type_speaker_light.png", "res/drawable-mdpi-v4/ic_mr_button_disconnected_dark.png", "res/drawable-mdpi-v4/ic_mr_button_disconnected_light.png", "res/drawable-mdpi-v4/ic_vol_type_speaker_group_light.png", "res/values-bs/values-bs.xml", "res/values/values.xml", "res/values-hr/values-hr.xml", "res/values-en-rAU/values-en-rAU.xml", "res/values-ro/values-ro.xml", "res/drawable-xhdpi-v4/ic_mr_button_connected_28_light.png", "res/drawable-xhdpi-v4/ic_mr_button_connected_00_light.png", "res/drawable-xhdpi-v4/ic_mr_button_connected_28_dark.png", "res/drawable-xhdpi-v4/ic_mr_button_connected_04_dark.png", "res/drawable-xhdpi-v4/ic_mr_button_connecting_28_dark.png", "res/drawable-xhdpi-v4/ic_mr_button_connecting_06_light.png", "res/drawable-xhdpi-v4/ic_dialog_close_light.png", "res/drawable-xhdpi-v4/ic_mr_button_connecting_29_dark.png", "res/drawable-xhdpi-v4/ic_mr_button_connected_01_light.png", "res/drawable-xhdpi-v4/ic_mr_button_connected_23_dark.png", "res/drawable-xhdpi-v4/ic_mr_button_connecting_18_light.png", "res/drawable-xhdpi-v4/ic_mr_button_connecting_04_dark.png", "res/drawable-xhdpi-v4/ic_mr_button_connecting_12_light.png", "res/drawable-xhdpi-v4/ic_media_pause_light.png", "res/drawable-xhdpi-v4/ic_mr_button_disabled_light.png", "res/drawable-xhdpi-v4/ic_mr_button_grey.png", "res/drawable-xhdpi-v4/ic_mr_button_connecting_14_dark.png", "res/drawable-xhdpi-v4/ic_media_play_light.png", "res/drawable-xhdpi-v4/ic_mr_button_connecting_12_dark.png", "res/drawable-xhdpi-v4/ic_mr_button_connected_14_light.png", "res/drawable-xhdpi-v4/ic_dialog_close_dark.png", "res/drawable-xhdpi-v4/ic_mr_button_connecting_30_dark.png", "res/drawable-xhdpi-v4/ic_mr_button_connected_27_dark.png", "res/drawable-xhdpi-v4/ic_mr_button_connecting_07_light.png", "res/drawable-xhdpi-v4/ic_mr_button_connecting_25_dark.png", "res/drawable-xhdpi-v4/ic_mr_button_connecting_18_dark.png", "res/drawable-xhdpi-v4/ic_mr_button_connected_23_light.png", "res/drawable-xhdpi-v4/ic_mr_button_connected_11_light.png", "res/drawable-xhdpi-v4/ic_mr_button_connecting_08_light.png", "res/drawable-xhdpi-v4/ic_mr_button_connected_02_dark.png", "res/drawable-xhdpi-v4/ic_mr_button_connecting_22_dark.png", "res/drawable-xhdpi-v4/ic_mr_button_connected_08_light.png", "res/drawable-xhdpi-v4/ic_mr_button_connecting_20_light.png", "res/drawable-xhdpi-v4/ic_mr_button_connected_18_light.png", "res/drawable-xhdpi-v4/ic_mr_button_connected_19_light.png", "res/drawable-xhdpi-v4/ic_vol_type_tv_dark.png", "res/drawable-xhdpi-v4/ic_mr_button_connecting_05_light.png", "res/drawable-xhdpi-v4/ic_mr_button_connecting_10_dark.png", "res/drawable-xhdpi-v4/ic_mr_button_connecting_02_dark.png", "res/drawable-xhdpi-v4/ic_mr_button_connected_25_dark.png", "res/drawable-xhdpi-v4/ic_mr_button_connected_18_dark.png", "res/drawable-xhdpi-v4/ic_mr_button_connecting_22_light.png", "res/drawable-xhdpi-v4/ic_mr_button_connected_22_light.png", "res/drawable-xhdpi-v4/ic_mr_button_connecting_24_dark.png", "res/drawable-xhdpi-v4/ic_media_pause_dark.png", "res/drawable-xhdpi-v4/ic_mr_button_connected_29_light.png", "res/drawable-xhdpi-v4/ic_mr_button_connected_03_light.png", "res/drawable-xhdpi-v4/ic_vol_type_tv_light.png", "res/drawable-xhdpi-v4/ic_mr_button_connected_11_dark.png", "res/drawable-xhdpi-v4/ic_mr_button_connected_30_light.png", "res/drawable-xhdpi-v4/ic_mr_button_connecting_23_light.png", "res/drawable-xhdpi-v4/ic_mr_button_connected_29_dark.png", "res/drawable-xhdpi-v4/ic_media_stop_dark.png", "res/drawable-xhdpi-v4/ic_mr_button_connected_27_light.png", "res/drawable-xhdpi-v4/ic_mr_button_connected_25_light.png", "res/drawable-xhdpi-v4/ic_mr_button_connected_06_dark.png", "res/drawable-xhdpi-v4/ic_mr_button_connected_00_dark.png", "res/drawable-xhdpi-v4/ic_mr_button_connected_02_light.png", "res/drawable-xhdpi-v4/ic_mr_button_connected_17_light.png", "res/drawable-xhdpi-v4/ic_mr_button_connecting_03_dark.png", "res/drawable-xhdpi-v4/ic_mr_button_connected_09_dark.png", "res/drawable-xhdpi-v4/ic_vol_type_speaker_dark.png", "res/drawable-xhdpi-v4/ic_mr_button_connecting_00_dark.png", "res/drawable-xhdpi-v4/ic_mr_button_connected_24_light.png", "res/drawable-xhdpi-v4/ic_mr_button_connected_26_light.png", "res/drawable-xhdpi-v4/ic_mr_button_connecting_29_light.png", "res/drawable-xhdpi-v4/ic_mr_button_connecting_30_light.png", "res/drawable-xhdpi-v4/ic_mr_button_connected_05_dark.png", "res/drawable-xhdpi-v4/ic_mr_button_connecting_08_dark.png", "res/drawable-xhdpi-v4/ic_mr_button_connecting_15_light.png", "res/drawable-xhdpi-v4/ic_mr_button_connecting_17_dark.png", "res/drawable-xhdpi-v4/ic_mr_button_disabled_dark.png", "res/drawable-xhdpi-v4/ic_mr_button_connecting_26_light.png", "res/drawable-xhdpi-v4/ic_mr_button_connected_24_dark.png", "res/drawable-xhdpi-v4/ic_mr_button_connecting_16_light.png", "res/drawable-xhdpi-v4/ic_mr_button_connecting_27_dark.png", "res/drawable-xhdpi-v4/ic_audiotrack_light.png", "res/drawable-xhdpi-v4/ic_mr_button_connected_13_dark.png", "res/drawable-xhdpi-v4/ic_mr_button_connected_16_dark.png", "res/drawable-xhdpi-v4/ic_mr_button_connecting_04_light.png", "res/drawable-xhdpi-v4/ic_vol_type_speaker_group_dark.png", "res/drawable-xhdpi-v4/ic_mr_button_connecting_13_light.png", "res/drawable-xhdpi-v4/ic_media_stop_light.png", "res/drawable-xhdpi-v4/ic_mr_button_connecting_17_light.png", "res/drawable-xhdpi-v4/ic_mr_button_connected_16_light.png", "res/drawable-xhdpi-v4/ic_mr_button_connecting_16_dark.png", "res/drawable-xhdpi-v4/ic_mr_button_connecting_01_light.png", "res/drawable-xhdpi-v4/ic_mr_button_connected_07_dark.png", "res/drawable-xhdpi-v4/ic_mr_button_connected_13_light.png", "res/drawable-xhdpi-v4/ic_mr_button_connected_19_dark.png", "res/drawable-xhdpi-v4/ic_mr_button_connecting_00_light.png", "res/drawable-xhdpi-v4/ic_mr_button_connected_14_dark.png", "res/drawable-xhdpi-v4/ic_mr_button_connecting_03_light.png", "res/drawable-xhdpi-v4/ic_mr_button_connecting_15_dark.png", "res/drawable-xhdpi-v4/ic_mr_button_connected_20_light.png", "res/drawable-xhdpi-v4/ic_media_play_dark.png", "res/drawable-xhdpi-v4/ic_mr_button_connected_03_dark.png", "res/drawable-xhdpi-v4/ic_mr_button_connecting_27_light.png", "res/drawable-xhdpi-v4/ic_mr_button_connected_21_light.png", "res/drawable-xhdpi-v4/ic_mr_button_connecting_28_light.png", "res/drawable-xhdpi-v4/ic_mr_button_connecting_02_light.png", "res/drawable-xhdpi-v4/ic_mr_button_connecting_10_light.png", "res/drawable-xhdpi-v4/ic_mr_button_connecting_23_dark.png", "res/drawable-xhdpi-v4/ic_mr_button_connected_15_dark.png", "res/drawable-xhdpi-v4/ic_mr_button_connected_21_dark.png", "res/drawable-xhdpi-v4/ic_mr_button_connecting_05_dark.png", "res/drawable-xhdpi-v4/ic_mr_button_connecting_19_dark.png", "res/drawable-xhdpi-v4/ic_mr_button_connecting_20_dark.png", "res/drawable-xhdpi-v4/ic_mr_button_connecting_06_dark.png", "res/drawable-xhdpi-v4/ic_audiotrack_dark.png", "res/drawable-xhdpi-v4/ic_mr_button_connecting_21_dark.png", "res/drawable-xhdpi-v4/ic_mr_button_connecting_09_dark.png", "res/drawable-xhdpi-v4/ic_mr_button_connected_20_dark.png", "res/drawable-xhdpi-v4/ic_vol_type_speaker_light.png", "res/drawable-xhdpi-v4/ic_mr_button_disconnected_dark.png", "res/drawable-xhdpi-v4/ic_mr_button_connecting_19_light.png", "res/drawable-xhdpi-v4/ic_mr_button_connected_22_dark.png", "res/drawable-xhdpi-v4/ic_mr_button_connecting_25_light.png", "res/drawable-xhdpi-v4/ic_mr_button_connecting_09_light.png", "res/drawable-xhdpi-v4/ic_mr_button_connecting_11_light.png", "res/drawable-xhdpi-v4/ic_mr_button_connected_12_dark.png", "res/drawable-xhdpi-v4/ic_mr_button_connected_10_light.png", "res/drawable-xhdpi-v4/ic_mr_button_connecting_13_dark.png", "res/drawable-xhdpi-v4/ic_mr_button_connecting_24_light.png", "res/drawable-xhdpi-v4/ic_mr_button_connecting_01_dark.png", "res/drawable-xhdpi-v4/ic_mr_button_connecting_26_dark.png", "res/drawable-xhdpi-v4/ic_mr_button_connected_26_dark.png", "res/drawable-xhdpi-v4/ic_mr_button_connecting_07_dark.png", "res/drawable-xhdpi-v4/ic_mr_button_connected_04_light.png", "res/drawable-xhdpi-v4/ic_mr_button_connected_10_dark.png", "res/drawable-xhdpi-v4/ic_mr_button_connected_17_dark.png", "res/drawable-xhdpi-v4/ic_mr_button_connected_05_light.png", "res/drawable-xhdpi-v4/ic_mr_button_connected_07_light.png", "res/drawable-xhdpi-v4/ic_mr_button_connected_15_light.png", "res/drawable-xhdpi-v4/ic_mr_button_connected_08_dark.png", "res/drawable-xhdpi-v4/ic_mr_button_connecting_11_dark.png", "res/drawable-xhdpi-v4/ic_mr_button_connected_09_light.png", "res/drawable-xhdpi-v4/ic_mr_button_disconnected_light.png", "res/drawable-xhdpi-v4/ic_mr_button_connected_12_light.png", "res/drawable-xhdpi-v4/ic_vol_type_speaker_group_light.png", "res/drawable-xhdpi-v4/ic_mr_button_connecting_14_light.png", "res/drawable-xhdpi-v4/ic_mr_button_connecting_21_light.png", "res/drawable-xhdpi-v4/ic_mr_button_connected_30_dark.png", "res/drawable-xhdpi-v4/ic_mr_button_connected_06_light.png", "res/drawable-xhdpi-v4/ic_mr_button_connected_01_dark.png", "res/values-vi/values-vi.xml", "res/values-ko/values-ko.xml", "res/values-zh-rTW/values-zh-rTW.xml", "res/values-cs/values-cs.xml", "res/values-ml/values-ml.xml", "res/values-te/values-te.xml", "res/values-si/values-si.xml", "res/values-es/values-es.xml", "res/values-af/values-af.xml", "res/values-zu/values-zu.xml", "res/values-lo/values-lo.xml", "res/values-land/values-land.xml", "res/values-mk/values-mk.xml", "res/values-sl/values-sl.xml", "res/values-sw600dp-v13/values-sw600dp-v13.xml", "res/values-sw/values-sw.xml", "res/values-bn/values-bn.xml", "res/values-sk/values-sk.xml", "res/values-lv/values-lv.xml", "res/values-is/values-is.xml", "res/values-da/values-da.xml", "res/values-it/values-it.xml", "res/values-gl/values-gl.xml", "res/values-de/values-de.xml", "res/values-be/values-be.xml", "res/values-en-rCA/values-en-rCA.xml", "res/values-fa/values-fa.xml", "res/values-ca/values-ca.xml", "res/values-th/values-th.xml", "res/values-nl/values-nl.xml", "res/values-hy/values-hy.xml", "res/values-zh-rHK/values-zh-rHK.xml", "res/values-tl/values-tl.xml", "res/values-kk/values-kk.xml", "res/values-pt/values-pt.xml", "res/values-my/values-my.xml", "res/drawable-xxxhdpi-v4/ic_group_collapse_13.png", "res/drawable-xxxhdpi-v4/ic_mr_button_grey.png", "res/drawable-xxxhdpi-v4/ic_group_collapse_09.png", "res/drawable-xxxhdpi-v4/ic_group_expand_06.png", "res/drawable-xxxhdpi-v4/ic_group_expand_03.png", "res/drawable-xxxhdpi-v4/ic_group_expand_09.png", "res/drawable-xxxhdpi-v4/ic_group_expand_07.png", "res/drawable-xxxhdpi-v4/ic_group_expand_08.png", "res/drawable-xxxhdpi-v4/ic_group_expand_14.png", "res/drawable-xxxhdpi-v4/ic_group_collapse_04.png", "res/drawable-xxxhdpi-v4/ic_group_collapse_14.png", "res/drawable-xxxhdpi-v4/ic_group_expand_04.png", "res/drawable-xxxhdpi-v4/ic_group_collapse_05.png", "res/drawable-xxxhdpi-v4/ic_group_expand_11.png", "res/drawable-xxxhdpi-v4/ic_group_expand_10.png", "res/drawable-xxxhdpi-v4/ic_group_expand_05.png", "res/drawable-xxxhdpi-v4/ic_group_expand_13.png", "res/drawable-xxxhdpi-v4/ic_group_collapse_06.png", "res/drawable-xxxhdpi-v4/ic_group_expand_15.png", "res/drawable-xxxhdpi-v4/ic_group_expand_02.png", "res/drawable-xxxhdpi-v4/ic_group_collapse_10.png", "res/drawable-xxxhdpi-v4/ic_group_collapse_15.png", "res/drawable-xxxhdpi-v4/ic_group_expand_00.png", "res/drawable-xxxhdpi-v4/ic_group_collapse_02.png", "res/drawable-xxxhdpi-v4/ic_group_expand_12.png", "res/drawable-xxxhdpi-v4/ic_group_collapse_03.png", "res/drawable-xxxhdpi-v4/ic_group_collapse_08.png", "res/drawable-xxxhdpi-v4/ic_group_collapse_01.png", "res/drawable-xxxhdpi-v4/ic_group_expand_01.png", "res/drawable-xxxhdpi-v4/ic_group_collapse_00.png", "res/drawable-xxxhdpi-v4/ic_group_collapse_12.png", "res/drawable-xxxhdpi-v4/ic_group_collapse_07.png", "res/drawable-xxxhdpi-v4/ic_group_collapse_11.png", "res/values-et/values-et.xml", "res/values-en-rIN/values-en-rIN.xml", "res/values-sr/values-sr.xml", "res/values-fr/values-fr.xml", "res/values-kn/values-kn.xml", "res/values-nb/values-nb.xml", "res/values-sw720dp-v13/values-sw720dp-v13.xml", "res/values-ne/values-ne.xml", "res/drawable/mr_media_pause_dark.xml", "res/drawable/mr_dialog_close_dark.xml", "res/drawable/mr_media_stop_light.xml", "res/drawable/mr_button_dark.xml", "res/drawable/mr_button_connected_dark.xml", "res/drawable/mr_dialog_material_background_dark.xml", "res/drawable/mr_button_connecting_light.xml", "res/drawable/mr_media_play_light.xml", "res/drawable/mr_media_pause_light.xml", "res/drawable/mr_dialog_material_background_light.xml", "res/drawable/mr_button_connecting_dark.xml", "res/drawable/mr_media_stop_dark.xml", "res/drawable/mr_dialog_close_light.xml", "res/drawable/mr_group_expand.xml", "res/drawable/mr_vol_type_audiotrack_dark.xml", "res/drawable/mr_vol_type_audiotrack_light.xml", "res/drawable/mr_media_play_dark.xml", "res/drawable/mr_group_collapse.xml", "res/drawable/mr_button_light.xml", "res/drawable/mr_button_connected_light.xml", "res/values-b+sr+Latn/values-b+sr+Latn.xml", "res/values-ka/values-ka.xml", "res/values-zh-rCN/values-zh-rCN.xml", "res/values-az/values-az.xml", "res/values-sq/values-sq.xml", "res/values-hi/values-hi.xml", "res/values-in/values-in.xml", "res/values-uk/values-uk.xml" ] -subjar_tuples = [ ] -subjars = [ ] diff --git a/chromium/build/secondary/third_party/android_tools/support/android_support_v7_palette_java.info b/chromium/build/secondary/third_party/android_tools/support/android_support_v7_palette_java.info deleted file mode 100644 index cd540607301..00000000000 --- a/chromium/build/secondary/third_party/android_tools/support/android_support_v7_palette_java.info +++ /dev/null @@ -1,13 +0,0 @@ -# Generated by //build/android/gyp/aar.py -# To regenerate, use "update_android_aar_prebuilts = true" and run "gn gen". - -aidl = [ ] -assets = [ ] -has_classes_jar = true -has_native_libraries = false -has_proguard_flags = false -has_r_text_file = true -is_manifest_empty = true -resources = [ ] -subjar_tuples = [ ] -subjars = [ ] diff --git a/chromium/build/secondary/third_party/android_tools/support/android_support_v7_preference_java.info b/chromium/build/secondary/third_party/android_tools/support/android_support_v7_preference_java.info deleted file mode 100644 index 25a4927e55b..00000000000 --- a/chromium/build/secondary/third_party/android_tools/support/android_support_v7_preference_java.info +++ /dev/null @@ -1,13 +0,0 @@ -# Generated by //build/android/gyp/aar.py -# To regenerate, use "update_android_aar_prebuilts = true" and run "gn gen". - -aidl = [ ] -assets = [ ] -has_classes_jar = true -has_native_libraries = false -has_proguard_flags = true -has_r_text_file = true -is_manifest_empty = true -resources = [ "res/layout-v11/preference.xml", "res/layout-v11/preference_dropdown.xml", "res/layout/preference_recyclerview.xml", "res/layout/preference_widget_checkbox.xml", "res/layout/preference_widget_seekbar.xml", "res/layout/preference_widget_switch_compat.xml", "res/layout/preference_list_fragment.xml", "res/layout/preference_dialog_edittext.xml", "res/layout/preference_information.xml", "res/layout/preference_category.xml", "res/values/values.xml", "res/values-v17/values-v17.xml" ] -subjar_tuples = [ ] -subjars = [ ] diff --git a/chromium/build/secondary/third_party/android_tools/support/android_support_v7_recyclerview_java.info b/chromium/build/secondary/third_party/android_tools/support/android_support_v7_recyclerview_java.info deleted file mode 100644 index a25d255caa2..00000000000 --- a/chromium/build/secondary/third_party/android_tools/support/android_support_v7_recyclerview_java.info +++ /dev/null @@ -1,13 +0,0 @@ -# Generated by //build/android/gyp/aar.py -# To regenerate, use "update_android_aar_prebuilts = true" and run "gn gen". - -aidl = [ ] -assets = [ ] -has_classes_jar = true -has_native_libraries = false -has_proguard_flags = true -has_r_text_file = true -is_manifest_empty = true -resources = [ "res/values/values.xml" ] -subjar_tuples = [ ] -subjars = [ ] diff --git a/chromium/build/secondary/third_party/android_tools/support/android_support_vector_drawable_java.info b/chromium/build/secondary/third_party/android_tools/support/android_support_vector_drawable_java.info deleted file mode 100644 index cd540607301..00000000000 --- a/chromium/build/secondary/third_party/android_tools/support/android_support_vector_drawable_java.info +++ /dev/null @@ -1,13 +0,0 @@ -# Generated by //build/android/gyp/aar.py -# To regenerate, use "update_android_aar_prebuilts = true" and run "gn gen". - -aidl = [ ] -assets = [ ] -has_classes_jar = true -has_native_libraries = false -has_proguard_flags = false -has_r_text_file = true -is_manifest_empty = true -resources = [ ] -subjar_tuples = [ ] -subjars = [ ] diff --git a/chromium/build/secondary/third_party/libjpeg_turbo/BUILD.gn b/chromium/build/secondary/third_party/libjpeg_turbo/BUILD.gn deleted file mode 100644 index 265d30b076c..00000000000 --- a/chromium/build/secondary/third_party/libjpeg_turbo/BUILD.gn +++ /dev/null @@ -1,221 +0,0 @@ -# Copyright 2014 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. - -# Do not use the targets in this file unless you need a certain libjpeg -# implementation. Use the meta target //third_party:jpeg instead. - -import("//build/config/sanitizers/sanitizers.gni") -if (current_cpu == "arm") { - import("//build/config/arm.gni") -} - -assert(!is_ios, "This is not used on iOS, don't drag it in unintentionally") - -if (current_cpu == "x86" || current_cpu == "x64") { - import("//third_party/yasm/yasm_assemble.gni") - - yasm_assemble("simd_asm") { - defines = [] - - if (current_cpu == "x86") { - sources = [ - "simd/jccolor-mmx.asm", - "simd/jccolor-sse2.asm", - "simd/jcgray-mmx.asm", - "simd/jcgray-sse2.asm", - "simd/jchuff-sse2.asm", - "simd/jcsample-mmx.asm", - "simd/jcsample-sse2.asm", - "simd/jdcolor-mmx.asm", - "simd/jdcolor-sse2.asm", - "simd/jdmerge-mmx.asm", - "simd/jdmerge-sse2.asm", - "simd/jdsample-mmx.asm", - "simd/jdsample-sse2.asm", - "simd/jfdctflt-3dn.asm", - "simd/jfdctflt-sse.asm", - "simd/jfdctfst-mmx.asm", - "simd/jfdctfst-sse2.asm", - "simd/jfdctint-mmx.asm", - "simd/jfdctint-sse2.asm", - "simd/jidctflt-3dn.asm", - "simd/jidctflt-sse.asm", - "simd/jidctflt-sse2.asm", - "simd/jidctfst-mmx.asm", - "simd/jidctfst-sse2.asm", - "simd/jidctint-mmx.asm", - "simd/jidctint-sse2.asm", - "simd/jidctred-mmx.asm", - "simd/jidctred-sse2.asm", - "simd/jquant-3dn.asm", - "simd/jquant-mmx.asm", - "simd/jquant-sse.asm", - "simd/jquantf-sse2.asm", - "simd/jquanti-sse2.asm", - "simd/jsimdcpu.asm", - ] - defines += [ - "__x86__", - "PIC", - ] - } else if (current_cpu == "x64") { - sources = [ - "simd/jccolor-sse2-64.asm", - "simd/jcgray-sse2-64.asm", - "simd/jchuff-sse2-64.asm", - "simd/jcsample-sse2-64.asm", - "simd/jdcolor-sse2-64.asm", - "simd/jdmerge-sse2-64.asm", - "simd/jdsample-sse2-64.asm", - "simd/jfdctflt-sse-64.asm", - "simd/jfdctfst-sse2-64.asm", - "simd/jfdctint-sse2-64.asm", - "simd/jidctflt-sse2-64.asm", - "simd/jidctfst-sse2-64.asm", - "simd/jidctint-sse2-64.asm", - "simd/jidctred-sse2-64.asm", - "simd/jquantf-sse2-64.asm", - "simd/jquanti-sse2-64.asm", - ] - defines += [ - "__x86_64__", - "PIC", - ] - } - - if (is_win) { - defines += [ "MSVC" ] - if (current_cpu == "x86") { - defines += [ "WIN32" ] - } else { - defines += [ "WIN64" ] - } - } else if (is_mac || is_ios) { - defines += [ "MACHO" ] - } else if (is_linux || is_android || is_fuchsia) { - defines += [ "ELF" ] - } - } -} - -static_library("simd") { - if (current_cpu == "x86") { - deps = [ - ":simd_asm", - ] - sources = [ - "simd/jsimd_i386.c", - ] - } else if (current_cpu == "x64") { - deps = [ - ":simd_asm", - ] - sources = [ - "simd/jsimd_x86_64.c", - ] - } else if (current_cpu == "arm" && arm_version >= 7 && - (arm_use_neon || arm_optionally_use_neon)) { - sources = [ - "simd/jsimd_arm.c", - "simd/jsimd_arm_neon.S", - ] - } else if (current_cpu == "arm64") { - sources = [ - "simd/jsimd_arm64.c", - "simd/jsimd_arm64_neon.S", - ] - } else { - sources = [ - "jsimd_none.c", - ] - } - - if (is_win) { - cflags = [ "/wd4245" ] - } -} - -config("libjpeg_config") { - include_dirs = [ "." ] -} - -static_library("libjpeg") { - sources = [ - "jcapimin.c", - "jcapistd.c", - "jccoefct.c", - "jccolor.c", - "jcdctmgr.c", - "jchuff.c", - "jchuff.h", - "jcinit.c", - "jcmainct.c", - "jcmarker.c", - "jcmaster.c", - "jcomapi.c", - "jconfig.h", - "jcparam.c", - "jcphuff.c", - "jcprepct.c", - "jcsample.c", - "jdapimin.c", - "jdapistd.c", - "jdatadst.c", - "jdatasrc.c", - "jdcoefct.c", - "jdcolor.c", - "jdct.h", - "jddctmgr.c", - "jdhuff.c", - "jdhuff.h", - "jdinput.c", - "jdmainct.c", - "jdmarker.c", - "jdmaster.c", - "jdmerge.c", - "jdphuff.c", - "jdpostct.c", - "jdsample.c", - "jerror.c", - "jerror.h", - "jfdctflt.c", - "jfdctfst.c", - "jfdctint.c", - "jidctflt.c", - "jidctfst.c", - "jidctint.c", - "jidctred.c", - "jinclude.h", - "jmemmgr.c", - "jmemnobs.c", - "jmemsys.h", - "jmorecfg.h", - "jpegint.h", - "jpeglib.h", - "jpeglibmangler.h", - "jquant1.c", - "jquant2.c", - "jutils.c", - "jversion.h", - ] - - defines = [ - "WITH_SIMD", - "NO_GETENV", - ] - - configs += [ ":libjpeg_config" ] - - public_configs = [ ":libjpeg_config" ] - - # MemorySanitizer doesn't support assembly code, so keep it disabled in - # MSan builds for now. - if (is_msan) { - sources += [ "jsimd_none.c" ] - } else { - deps = [ - ":simd", - ] - } -} diff --git a/chromium/build/timestamp.gni b/chromium/build/timestamp.gni new file mode 100644 index 00000000000..cd6375d9b8e --- /dev/null +++ b/chromium/build/timestamp.gni @@ -0,0 +1,23 @@ +# Copyright 2018 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. +# +# Defines the build_timestamp variable. + +import("//build/util/lastchange.gni") + +if (is_official_build) { + official_name = "official" +} else { + official_name = "default" +} + +# This will return a timestamp that's different each day (official builds) +# or each month (regular builds). Just rely on gn rerunning due to other +# changes to keep this up to date. (Bots run gn on each build, and for devs +# the timestamp being 100% accurate doesn't matter.) +# See compute_build_timestamp.py for tradeoffs for picking the timestamp. +build_timestamp = exec_script("compute_build_timestamp.py", + [ official_name ], + "trim string", + [ lastchange_file ]) diff --git a/chromium/build/toolchain/cros/BUILD.gn b/chromium/build/toolchain/cros/BUILD.gn index bf139dc12da..5a9561f2320 100644 --- a/chromium/build/toolchain/cros/BUILD.gn +++ b/chromium/build/toolchain/cros/BUILD.gn @@ -12,6 +12,16 @@ gcc_toolchain("target") { ar = cros_target_ar cc = cros_target_cc cxx = cros_target_cxx + + # Relativize path if compiler is specified such that not to lookup from $PATH + # and cc/cxx does not contain additional flags. + if (cc != get_path_info(cc, "file") && string_replace(cc, " ", "") == cc) { + cc = rebase_path(cc, root_build_dir) + } + if (cxx != get_path_info(cxx, "file") && string_replace(cxx, " ", "") == cxx) { + cxx = rebase_path(cxx, root_build_dir) + } + ld = cxx if (cros_target_ld != "") { ld = cros_target_ld @@ -46,6 +56,15 @@ gcc_toolchain("nacl_bootstrap") { ar = cros_target_ar cc = cros_target_cc cxx = cros_target_cxx + + # Relativize path if compiler is specified such that not to lookup from $PATH + # and cc/cxx does not contain additional flags. + if (cc != get_path_info(cc, "file") && string_replace(cc, " ", "") == cc) { + cc = rebase_path(cc, root_build_dir) + } + if (cxx != get_path_info(cxx, "file") && string_replace(cxx, " ", "") == cxx) { + cxx = rebase_path(cxx, root_build_dir) + } ld = cxx if (cros_target_ld != "") { ld = cros_target_ld @@ -77,6 +96,15 @@ gcc_toolchain("host") { ar = cros_host_ar cc = cros_host_cc cxx = cros_host_cxx + + # Relativize path if compiler is specified such that not to lookup from $PATH + # and cc/cxx does not contain additional flags. + if (cc != get_path_info(cc, "file") && string_replace(cc, " ", "") == cc) { + cc = rebase_path(cc, root_build_dir) + } + if (cxx != get_path_info(cxx, "file") && string_replace(cxx, " ", "") == cxx) { + cxx = rebase_path(cxx, root_build_dir) + } ld = cxx if (cros_host_ld != "") { ld = cros_host_ld @@ -106,6 +134,15 @@ gcc_toolchain("v8_snapshot") { ar = cros_v8_snapshot_ar cc = cros_v8_snapshot_cc cxx = cros_v8_snapshot_cxx + + # Relativize path if compiler is specified such that not to lookup from $PATH + # and cc/cxx does not contain additional flags. + if (cc != get_path_info(cc, "file") && string_replace(cc, " ", "") == cc) { + cc = rebase_path(cc, root_build_dir) + } + if (cxx != get_path_info(cxx, "file") && string_replace(cxx, " ", "") == cxx) { + cxx = rebase_path(cxx, root_build_dir) + } ld = cxx if (cros_v8_snapshot_ld != "") { ld = cros_v8_snapshot_ld diff --git a/chromium/build/toolchain/fuchsia/BUILD.gn b/chromium/build/toolchain/fuchsia/BUILD.gn index a5151e39105..7ab3a2d090d 100644 --- a/chromium/build/toolchain/fuchsia/BUILD.gn +++ b/chromium/build/toolchain/fuchsia/BUILD.gn @@ -9,14 +9,17 @@ import("//build/config/fuchsia/config.gni") # the different target architectures. template("fuchsia_clang_toolchain") { clang_toolchain(target_name) { - assert(host_os == "linux") + assert(host_os == "linux" || host_os == "mac") assert(defined(invoker.toolchain_args), "toolchain_args must be defined for fuchsia_clang_toolchain()") # We want to build and strip binaries, but retain the unstripped binaries # in runtime_deps to make them available for isolates. - strip = rebase_path("//third_party/eu-strip/bin/eu-strip", root_build_dir) - use_unstripped_as_runtime_outputs = true + # TODO(https://crbug.com/877080): Switch to llvm-strip. + if (host_os == "linux") { + strip = rebase_path("//third_party/eu-strip/bin/eu-strip", root_build_dir) + use_unstripped_as_runtime_outputs = true + } toolchain_args = invoker.toolchain_args toolchain_args.current_os = "fuchsia" diff --git a/chromium/build/toolchain/gcc_ar_wrapper.py b/chromium/build/toolchain/gcc_ar_wrapper.py deleted file mode 100755 index 5977f44f7ed..00000000000 --- a/chromium/build/toolchain/gcc_ar_wrapper.py +++ /dev/null @@ -1,78 +0,0 @@ -#!/usr/bin/env python -# Copyright 2015 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. - -"""Runs the 'ar' command after removing its output file first. - -This script is invoked like: - python gcc_ar_wrapper.py --ar=$AR --output=$OUT $OP $INPUTS -to do the equivalent of: - rm -f $OUT && $AR $OP $OUT $INPUTS -""" - -import argparse -import os -import subprocess -import sys - -import wrapper_utils - - -def main(): - parser = argparse.ArgumentParser(description=__doc__) - parser.add_argument('--ar', - required=True, - help='The ar binary to run', - metavar='PATH') - parser.add_argument('--output', - required=True, - help='Output archive file', - metavar='ARCHIVE') - parser.add_argument('--plugin', - help='Load plugin') - parser.add_argument('--resource-whitelist', - help='Merge all resource whitelists into a single file.', - metavar='PATH') - parser.add_argument('operation', - help='Operation on the archive') - parser.add_argument('inputs', nargs='+', - help='Input files') - args = parser.parse_args() - - # Specifies the type of object file ar should examine. - # The ar on linux ignores this option. - object_mode = [] - if sys.platform.startswith('aix'): - # The @file feature is not available on ar for AIX. - # For linux (and other posix like systems), the @file_name - # option reads the contents of file_name as command line arguments. - # For AIX we must parse these (rsp files) manually. - # Read rspfile. - args.inputs = wrapper_utils.ResolveRspLinks(args.inputs) - object_mode = ['-X64'] - else: - if args.resource_whitelist: - whitelist_candidates = wrapper_utils.ResolveRspLinks(args.inputs) - wrapper_utils.CombineResourceWhitelists( - whitelist_candidates, args.resource_whitelist) - - command = [args.ar] + object_mode + args.operation.split() - if args.plugin is not None: - command += ['--plugin', args.plugin] - command.append(args.output) - command += args.inputs - - # Remove the output file first. - try: - os.remove(args.output) - except OSError as e: - if e.errno != os.errno.ENOENT: - raise - - # Now just run the ar command. - return subprocess.call(wrapper_utils.CommandToRun(command)) - - -if __name__ == "__main__": - sys.exit(main()) diff --git a/chromium/build/toolchain/gcc_compile_wrapper.py b/chromium/build/toolchain/gcc_compile_wrapper.py deleted file mode 100755 index 33cac37c7e5..00000000000 --- a/chromium/build/toolchain/gcc_compile_wrapper.py +++ /dev/null @@ -1,43 +0,0 @@ -#!/usr/bin/env python -# Copyright 2016 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. - -"""Runs a compilation command. - -This script exists to avoid using complex shell commands in -gcc_toolchain.gni's tool("cxx") and tool("cc") in case the host running the -compiler does not have a POSIX-like shell (e.g. Windows). -""" - -import argparse -import sys - -import wrapper_utils - - -def main(): - parser = argparse.ArgumentParser(description=__doc__) - parser.add_argument('--resource-whitelist', - help='Generate a resource whitelist for this target.', - metavar='PATH') - parser.add_argument('command', nargs=argparse.REMAINDER, - help='Compilation command') - args = parser.parse_args() - - returncode, stderr = wrapper_utils.CaptureCommandStderr( - wrapper_utils.CommandToRun(args.command)) - - used_resources = wrapper_utils.ExtractResourceIdsFromPragmaWarnings(stderr) - sys.stderr.write(stderr) - - if args.resource_whitelist: - with open(args.resource_whitelist, 'w') as f: - if used_resources: - f.write('\n'.join(str(resource) for resource in used_resources)) - f.write('\n') - - return returncode - -if __name__ == "__main__": - sys.exit(main()) diff --git a/chromium/build/toolchain/gcc_solink_wrapper.py b/chromium/build/toolchain/gcc_solink_wrapper.py index 5159fcef385..cb1c02d24eb 100755 --- a/chromium/build/toolchain/gcc_solink_wrapper.py +++ b/chromium/build/toolchain/gcc_solink_wrapper.py @@ -86,9 +86,6 @@ def main(): required=True, help='Final output shared object file', metavar='FILE') - parser.add_argument('--resource-whitelist', - help='Merge all resource whitelists into a single file.', - metavar='PATH') parser.add_argument('command', nargs='+', help='Linking command') args = parser.parse_args() @@ -97,11 +94,6 @@ def main(): fast_env = dict(os.environ) fast_env['LC_ALL'] = 'C' - if args.resource_whitelist: - whitelist_candidates = wrapper_utils.ResolveRspLinks(args.command) - wrapper_utils.CombineResourceWhitelists( - whitelist_candidates, args.resource_whitelist) - # First, run the actual link. command = wrapper_utils.CommandToRun(args.command) result = wrapper_utils.RunLinkWithOptionalMapFile(command, env=fast_env, diff --git a/chromium/build/toolchain/gcc_toolchain.gni b/chromium/build/toolchain/gcc_toolchain.gni index b6f63d7556a..adadb7447e1 100644 --- a/chromium/build/toolchain/gcc_toolchain.gni +++ b/chromium/build/toolchain/gcc_toolchain.gni @@ -151,7 +151,11 @@ template("gcc_toolchain") { # toolchain args, use those values, otherwise default to the global one. # This works because the only reasonable override that toolchains might # supply for these values are to force-disable them. - if (toolchain_uses_goma) { + # But if has_gomacc_path is set in simple chrome build, we assumes that + # *chromeos* compiler wrapper find gomacc from GOMACC_PATH envvar. + # Note: In this case, we use gomacc for host toolchain compiling. + if (toolchain_uses_goma && + (!has_gomacc_path || invoker_toolchain_args.current_os != "chromeos")) { goma_path = "$goma_dir/gomacc" # Use the static analysis script if static analysis is turned on @@ -281,16 +285,8 @@ template("gcc_toolchain") { depsformat = "gcc" description = "CC {{output}}" outputs = [ - # The whitelist file is also an output, but ninja does not - # currently support multiple outputs for tool("cc"). "$object_subdir/{{source_name_part}}.o", ] - if (enable_resource_whitelist_generation) { - compile_wrapper = - rebase_path("//build/toolchain/gcc_compile_wrapper.py", - root_build_dir) - command = "$python_path \"$compile_wrapper\" --resource-whitelist=\"{{output}}.whitelist\" $command" - } } tool("cxx") { @@ -299,16 +295,8 @@ template("gcc_toolchain") { depsformat = "gcc" description = "CXX {{output}}" outputs = [ - # The whitelist file is also an output, but ninja does not - # currently support multiple outputs for tool("cxx"). "$object_subdir/{{source_name_part}}.o", ] - if (enable_resource_whitelist_generation) { - compile_wrapper = - rebase_path("//build/toolchain/gcc_compile_wrapper.py", - root_build_dir) - command = "$python_path \"$compile_wrapper\" --resource-whitelist=\"{{output}}.whitelist\" $command" - } } tool("asm") { @@ -323,30 +311,29 @@ template("gcc_toolchain") { } tool("alink") { - rspfile = "{{output}}.rsp" - whitelist_flag = " " - if (enable_resource_whitelist_generation) { - whitelist_flag = " --resource-whitelist=\"{{output}}.whitelist\"" + if (current_os == "aix") { + # AIX does not support either -D (deterministic output) or response + # files. + command = "$ar -X64 {{arflags}} -r -c -s {{output}} {{inputs}}" + } else { + rspfile = "{{output}}.rsp" + rspfile_content = "{{inputs}}" + command = "\"$ar\" {{arflags}} -r -c -s -D {{output}} @\"$rspfile\"" } - # This needs a Python script to avoid using simple sh features in this - # command, in case the host does not use a POSIX shell (e.g. compiling - # POSIX-like toolchains such as NaCl on Windows). - ar_wrapper = - rebase_path("//build/toolchain/gcc_ar_wrapper.py", root_build_dir) - - if (current_os == "aix") { - # We use slightly different arflags for AIX. - extra_arflags = "-r -c -s" + # Remove the output file first so that ar doesn't try to modify the + # existing file. + if (host_os == "win") { + tool_wrapper_path = + rebase_path("//build/toolchain/win/tool_wrapper.py", root_build_dir) + command = "cmd /c $python_path $tool_wrapper_path delete-file {{output}} && $command" } else { - extra_arflags = "-r -c -s -D" + command = "rm -f {{output}} && $command" } # Almost all targets build with //build/config/compiler:thin_archive which # adds -T to arflags. - command = "$python_path \"$ar_wrapper\"$whitelist_flag --output={{output}} --ar=\"$ar\" \"{{arflags}} $extra_arflags\" @\"$rspfile\"" description = "AR {{output}}" - rspfile_content = "{{inputs}}" outputs = [ "{{output_dir}}/{{target_output_name}}{{output_extension}}", ] @@ -363,11 +350,6 @@ template("gcc_toolchain") { sofile = "{{output_dir}}/$soname" # Possibly including toolchain dir. rspfile = sofile + ".rsp" pool = "//build/toolchain:link_pool($default_toolchain)" - whitelist_flag = " " - if (enable_resource_whitelist_generation) { - whitelist_file = "$sofile.whitelist" - whitelist_flag = " --resource-whitelist=\"$whitelist_file\"" - } if (defined(invoker.strip)) { unstripped_sofile = "{{root_out_dir}}/lib.unstripped/$soname" @@ -404,7 +386,7 @@ template("gcc_toolchain") { # The host might not have a POSIX shell and utilities (e.g. Windows). solink_wrapper = rebase_path("//build/toolchain/gcc_solink_wrapper.py", root_build_dir) - command = "$python_path \"$solink_wrapper\" --readelf=\"$readelf\" --nm=\"$nm\" $strip_switch--sofile=\"$unstripped_sofile\" --tocfile=\"$tocfile\"$map_switch --output=\"$sofile\"$whitelist_flag -- $link_command" + command = "$python_path \"$solink_wrapper\" --readelf=\"$readelf\" --nm=\"$nm\" $strip_switch--sofile=\"$unstripped_sofile\" --tocfile=\"$tocfile\"$map_switch --output=\"$sofile\" -- $link_command" if (target_cpu == "mipsel" && is_component_build && is_android) { rspfile_content = "-Wl,--start-group -Wl,--whole-archive {{inputs}} {{solibs}} -Wl,--no-whole-archive $solink_libs_section_prefix {{libs}} $solink_libs_section_postfix -Wl,--end-group" @@ -420,9 +402,6 @@ template("gcc_toolchain") { default_output_extension = default_shlib_extension default_output_dir = "{{root_out_dir}}" - if (shlib_subdir != ".") { - default_output_dir += "/$shlib_subdir" - } output_prefix = "lib" @@ -437,9 +416,6 @@ template("gcc_toolchain") { sofile, tocfile, ] - if (enable_resource_whitelist_generation) { - outputs += [ whitelist_file ] - } if (sofile != unstripped_sofile) { outputs += [ unstripped_sofile ] if (defined(invoker.use_unstripped_as_runtime_outputs) && @@ -486,9 +462,6 @@ template("gcc_toolchain") { } default_output_dir = "{{root_out_dir}}" - if (shlib_subdir != ".") { - default_output_dir += "/$shlib_subdir" - } output_prefix = "lib" diff --git a/chromium/build/toolchain/goma.gni b/chromium/build/toolchain/goma.gni index 29be588fc81..0e1d815ca3d 100644 --- a/chromium/build/toolchain/goma.gni +++ b/chromium/build/toolchain/goma.gni @@ -8,6 +8,11 @@ declare_args() { # Set to true to enable distributed compilation using Goma. use_goma = false + # This flag is for ChromeOS compiler wrapper. + # By passing gomacc path via GOMACC_PATH environment variable, ChromeOS' + # compiler wrapper invokes gomacc inside it. + has_gomacc_path = false + # Set the default value based on the platform. if (host_os == "win") { # Absolute directory containing the gomacc.exe binary. diff --git a/chromium/build/toolchain/linux/unbundle/README.md b/chromium/build/toolchain/linux/unbundle/README.md index ac5808a84e5..17b93c9fdee 100644 --- a/chromium/build/toolchain/linux/unbundle/README.md +++ b/chromium/build/toolchain/linux/unbundle/README.md @@ -28,7 +28,7 @@ custom_toolchain="//build/toolchain/linux/unbundle:default" host_toolchain="//build/toolchain/linux/unbundle:default" ``` -See [more docs on GN](https://chromium.googlesource.com/chromium/src/+/master/tools/gn/docs/quick_start.md). +See [more docs on GN](https://gn.googlesource.com/gn/+/master/docs/quick_start.md). To cross-compile (not fully tested), add the following: diff --git a/chromium/build/toolchain/nacl/BUILD.gn b/chromium/build/toolchain/nacl/BUILD.gn index 2083de86d60..4b53d67c00f 100644 --- a/chromium/build/toolchain/nacl/BUILD.gn +++ b/chromium/build/toolchain/nacl/BUILD.gn @@ -68,7 +68,7 @@ template("pnacl_toolchain") { cc = compiler_scriptprefix + toolprefix + "clang" + scriptsuffix cxx = compiler_scriptprefix + toolprefix + "clang++" + scriptsuffix - ar = scriptprefix + toolprefix + "ar" + scriptsuffix + ar = toolprefix + "ar" + scriptsuffix readelf = scriptprefix + toolprefix + "readelf" + scriptsuffix nm = scriptprefix + toolprefix + "nm" + scriptsuffix if (defined(invoker.strip)) { diff --git a/chromium/build/toolchain/toolchain.gni b/chromium/build/toolchain/toolchain.gni index 5b4ca3f8fef..7a87019b8b8 100644 --- a/chromium/build/toolchain/toolchain.gni +++ b/chromium/build/toolchain/toolchain.gni @@ -48,7 +48,7 @@ hermetic_xcode_path = declare_args() { if (is_clang) { # Clang compiler version. Clang files are placed at version-dependent paths. - clang_version = "7.0.0" + clang_version = "8.0.0" } } @@ -58,18 +58,6 @@ declare_args() { assert(!use_xcode_clang || target_os == "ios", "Using Xcode's clang is only supported in iOS builds") -# Subdirectory within root_out_dir for shared library files. -# TODO(agrieve): GYP sets this to "lib" for Linux & Android, but this won't work -# in GN until support for loadable_module() is added. -# See: https://codereview.chromium.org/1236503002/ -shlib_subdir = "." - -# Root out dir for shared library files. -root_shlib_dir = root_out_dir -if (shlib_subdir != ".") { - root_shlib_dir += "/$shlib_subdir" -} - # Extension for shared library files (including leading dot). if (is_mac || is_ios) { shlib_extension = ".dylib" diff --git a/chromium/build/toolchain/win/BUILD.gn b/chromium/build/toolchain/win/BUILD.gn index eb3e2b2b377..3c6c9d05d2c 100644 --- a/chromium/build/toolchain/win/BUILD.gn +++ b/chromium/build/toolchain/win/BUILD.gn @@ -143,7 +143,7 @@ template("msvc_toolchain") { # invocation requires higher cpu usage compared to ninja invocation, and # the python wrapper is only needed to work around link.exe problems. # TODO(thakis): Remove wrapper once lld-link can merge manifests without - # relying on mt.exe being in %PATH% on Windows. + # relying on mt.exe being in %PATH% on Windows, https://crbug.com/872740 linker_wrapper = "ninja -t msvc -e $env -- " # Note trailing space. sys_lib_flags = "" } else { @@ -296,21 +296,6 @@ template("msvc_toolchain") { command = "$linker_wrapper$link /nologo ${sys_lib_flags}/OUT:$exename /PDB:$pdbname @$rspfile" - if (host_os == "win") { - shellprefix = "cmd /c" - } else { - shellprefix = "" - } - not_needed([ "shellprefix" ]) - - if (is_official_build) { - # On bots, the binary's PDB grow and eventually exceed 4G, causing the - # link to fail. As there's no utility to keeping the PDB around - # incrementally anyway in this config (because we're doing - # non-incremental LTCG builds), delete it before linking. - command = "$shellprefix $python_path $tool_wrapper_path delete-file $pdbname && $command" - } - default_output_extension = ".exe" default_output_dir = "{{root_out_dir}}" description = "LINK {{output}}" diff --git a/chromium/build/toolchain/wrapper_utils.py b/chromium/build/toolchain/wrapper_utils.py index f76192e2063..5949a3727c7 100644 --- a/chromium/build/toolchain/wrapper_utils.py +++ b/chromium/build/toolchain/wrapper_utils.py @@ -14,7 +14,6 @@ import sys import threading _BAT_PREFIX = 'cmd /c call ' -_WHITELIST_RE = re.compile('whitelisted_resource_(?P<resource_id>[0-9]+)') def _GzipThenDelete(src_path, dest_path): @@ -82,62 +81,6 @@ def RunLinkWithOptionalMapFile(command, env=None, map_file=None): return result -def ResolveRspLinks(inputs): - """Return a list of files contained in a response file. - - Args: - inputs: A command containing rsp files. - - Returns: - A set containing the rsp file content.""" - rspfiles = [a[1:] for a in inputs if a.startswith('@')] - resolved = set() - for rspfile in rspfiles: - with open(rspfile, 'r') as f: - resolved.update(shlex.split(f.read())) - - return resolved - - -def CombineResourceWhitelists(whitelist_candidates, outfile): - """Combines all whitelists for a resource file into a single whitelist. - - Args: - whitelist_candidates: List of paths to rsp files containing all targets. - outfile: Path to save the combined whitelist. - """ - whitelists = ('%s.whitelist' % candidate for candidate in whitelist_candidates - if os.path.exists('%s.whitelist' % candidate)) - - resources = set() - for whitelist in whitelists: - with open(whitelist, 'r') as f: - resources.update(f.readlines()) - - with open(outfile, 'w') as f: - f.writelines(resources) - - -def ExtractResourceIdsFromPragmaWarnings(text): - """Returns set of resource IDs that are inside unknown pragma warnings. - - Args: - text: The text that will be scanned for unknown pragma warnings. - - Returns: - A set containing integers representing resource IDs. - """ - used_resources = set() - lines = text.splitlines() - for ln in lines: - match = _WHITELIST_RE.search(ln) - if match: - resource_id = int(match.group('resource_id')) - used_resources.add(resource_id) - - return used_resources - - def CaptureCommandStderr(command, env=None): """Returns the stderr of a command. diff --git a/chromium/build/update-linux-sandbox.sh b/chromium/build/update-linux-sandbox.sh index fa2d1077af6..d24cf2602d7 100755 --- a/chromium/build/update-linux-sandbox.sh +++ b/chromium/build/update-linux-sandbox.sh @@ -45,6 +45,12 @@ if [ ! -f "${CHROME_SANDBOX_BUILD_PATH}" ]; then exit 1 fi +if readelf -d "${CHROME_SANDBOX_BUILD_PATH}" | \ + grep "(RPATH)" > /dev/null 2>&1; then + echo "Build requires is_component_build=false in ${CHROME_OUT_DIR}/args.gn." + exit 1 +fi + if [ ! -f "${CHROME_SANDBOX_INST_PATH}" ]; then echo -n "Could not find ${CHROME_SANDBOX_INST_PATH}, " echo "installing it now." diff --git a/chromium/build/util/BUILD.gn b/chromium/build/util/BUILD.gn index 9f5a6f71a57..54c23c91c4a 100644 --- a/chromium/build/util/BUILD.gn +++ b/chromium/build/util/BUILD.gn @@ -2,11 +2,11 @@ # Use of this source code is governed by a BSD-style license that can be # found in the LICENSE file. +import("//build/util/lastchange.gni") + action("webkit_version") { script = "version.py" - lastchange_file = "LASTCHANGE" - template_file = "webkit_version.h.in" inputs = [ lastchange_file, diff --git a/chromium/build/util/LASTCHANGE b/chromium/build/util/LASTCHANGE index 7738287b783..6255d691444 100644 --- a/chromium/build/util/LASTCHANGE +++ b/chromium/build/util/LASTCHANGE @@ -1 +1 @@ -LASTCHANGE=cdec0adf58c577876de3d8f073dce520f0829431-refs/branch-heads/3497@{#988} +LASTCHANGE=618d94a03dcd8ad478b6005f851e2c1ade8b5ffc-refs/branch-heads/3538@{#1042} diff --git a/chromium/build/util/LASTCHANGE.committime b/chromium/build/util/LASTCHANGE.committime new file mode 100644 index 00000000000..d6efc81c1e3 --- /dev/null +++ b/chromium/build/util/LASTCHANGE.committime @@ -0,0 +1 @@ +1540339741
\ No newline at end of file diff --git a/chromium/build/util/LASTCHANGE.dummy b/chromium/build/util/LASTCHANGE.dummy new file mode 100644 index 00000000000..21bb3c33c74 --- /dev/null +++ b/chromium/build/util/LASTCHANGE.dummy @@ -0,0 +1 @@ +LASTCHANGE=0000000000000000000000000000000000000000-0000000000000000000000000000000000000000 diff --git a/chromium/build/util/lastchange.gni b/chromium/build/util/lastchange.gni new file mode 100644 index 00000000000..a13295900df --- /dev/null +++ b/chromium/build/util/lastchange.gni @@ -0,0 +1,16 @@ +# Copyright 2018 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. + +# This file is used to inject fixed dummy commit for commit independent +# reproducible binaries. + +declare_args() { + use_dummy_lastchange = false +} + +if (use_dummy_lastchange) { + lastchange_file = "//build/util/LASTCHANGE.dummy" +} else { + lastchange_file = "//build/util/LASTCHANGE" +} diff --git a/chromium/build/util/lastchange.py b/chromium/build/util/lastchange.py index 19e3237c058..82c5f39432e 100755 --- a/chromium/build/util/lastchange.py +++ b/chromium/build/util/lastchange.py @@ -15,9 +15,10 @@ import subprocess import sys class VersionInfo(object): - def __init__(self, revision_id, full_revision_string): + def __init__(self, revision_id, full_revision_string, timestamp): self.revision_id = revision_id self.revision = full_revision_string + self.timestamp = timestamp def RunGitCommand(directory, command): @@ -58,14 +59,14 @@ def FetchGitRevision(directory, filter): A VersionInfo object or None on error. """ hsh = '' - git_args = ['log', '-1', '--format=%H'] + git_args = ['log', '-1', '--format=%H %ct'] if filter is not None: git_args.append('--grep=' + filter) proc = RunGitCommand(directory, git_args) if proc: output = proc.communicate()[0].strip() if proc.returncode == 0 and output: - hsh = output + hsh, ct = output.split() else: logging.error('Git error: rc=%d, output=%r' % (proc.returncode, output)) @@ -80,7 +81,7 @@ def FetchGitRevision(directory, filter): if line.startswith('Cr-Commit-Position:'): pos = line.rsplit()[-1].strip() break - return VersionInfo(hsh, '%s-%s' % (hsh, pos)) + return VersionInfo(hsh, '%s-%s' % (hsh, pos), int(ct)) def FetchVersionInfo(directory=None, filter=None): @@ -90,7 +91,7 @@ def FetchVersionInfo(directory=None, filter=None): """ version_info = FetchGitRevision(directory, filter) if not version_info: - version_info = VersionInfo('0', '0') + version_info = VersionInfo('0', '0', 0) return version_info @@ -136,6 +137,7 @@ def WriteIfChanged(file_name, contents): """ Writes the specified contents to the specified file_name iff the contents are different than the current contents. + Returns if new data was written. """ try: old_contents = open(file_name, 'r').read() @@ -143,9 +145,10 @@ def WriteIfChanged(file_name, contents): pass else: if contents == old_contents: - return + return False os.unlink(file_name) open(file_name, 'w').write(contents) + return True def main(argv=None): @@ -211,7 +214,11 @@ def main(argv=None): sys.stdout.write(contents) else: if out_file: - WriteIfChanged(out_file, contents) + committime_file = out_file + '.committime' + out_changed = WriteIfChanged(out_file, contents) + if out_changed or not os.path.exists(committime_file): + with open(committime_file, 'w') as timefile: + timefile.write(str(version_info.timestamp)) if header: WriteIfChanged(header, GetHeaderContents(header, opts.version_macro, diff --git a/chromium/build/whitespace_file.txt b/chromium/build/whitespace_file.txt index 0646a9fdc1d..6dd1a7bb3ee 100644 --- a/chromium/build/whitespace_file.txt +++ b/chromium/build/whitespace_file.txt @@ -174,4 +174,5 @@ Mistakes are the best sometimes. This is groovy. SECRET ENDING: IT WAS _____ ALL ALONG! -testing trailing line +testing trailing line. +Hacky hacky mitigation now works in CQ.
\ No newline at end of file diff --git a/chromium/build/write_build_date_header.py b/chromium/build/write_build_date_header.py index 6fe514fd788..77388288b3b 100755 --- a/chromium/build/write_build_date_header.py +++ b/chromium/build/write_build_date_header.py @@ -2,106 +2,25 @@ # Copyright (c) 2016 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. -"""Writes a file that contains a define that approximates the build date. - -build_type impacts the timestamp generated: -- default: the build date is set to the most recent first Sunday of a month at - 5:00am. The reason is that it is a time where invalidating the build cache - shouldn't have major reprecussions (due to lower load). -- official: the build date is set to the current date at 5:00am, or the day - before if the current time is before 5:00am. -Either way, it is guaranteed to be in the past and always in UTC. - -It is also possible to explicitly set a build date to be used. -""" +"""Takes a timestamp and writes it in as readable text to a .h file.""" import argparse -import calendar import datetime -import doctest import os import sys -def GetFirstSundayOfMonth(year, month): - """Returns the first sunday of the given month of the given year. - - >>> GetFirstSundayOfMonth(2016, 2) - 7 - >>> GetFirstSundayOfMonth(2016, 3) - 6 - >>> GetFirstSundayOfMonth(2000, 1) - 2 - """ - weeks = calendar.Calendar().monthdays2calendar(year, month) - # Return the first day in the first week that is a Sunday. - return [date_day[0] for date_day in weeks[0] if date_day[1] == 6][0] - - -def GetBuildDate(build_type, utc_now): - """Gets the approximate build date given the specific build type. - - >>> GetBuildDate('default', datetime.datetime(2016, 2, 6, 1, 2, 3)) - 'Jan 03 2016 01:02:03' - >>> GetBuildDate('default', datetime.datetime(2016, 2, 7, 5)) - 'Feb 07 2016 05:00:00' - >>> GetBuildDate('default', datetime.datetime(2016, 2, 8, 5)) - 'Feb 07 2016 05:00:00' - """ - day = utc_now.day - month = utc_now.month - year = utc_now.year - if build_type != 'official': - first_sunday = GetFirstSundayOfMonth(year, month) - # If our build is after the first Sunday, we've already refreshed our build - # cache on a quiet day, so just use that day. - # Otherwise, take the first Sunday of the previous month. - if day >= first_sunday: - day = first_sunday - else: - month -= 1 - if month == 0: - month = 12 - year -= 1 - day = GetFirstSundayOfMonth(year, month) - now = datetime.datetime( - year, month, day, utc_now.hour, utc_now.minute, utc_now.second) - return '{:%b %d %Y %H:%M:%S}'.format(now) - - def main(): - if doctest.testmod()[0]: - return 1 - argument_parser = argparse.ArgumentParser( - description=sys.modules[__name__].__doc__, - formatter_class=argparse.RawDescriptionHelpFormatter) + argument_parser = argparse.ArgumentParser() argument_parser.add_argument('output_file', help='The file to write to') - argument_parser.add_argument( - 'build_type', help='The type of build', choices=('official', 'default')) - argument_parser.add_argument( - 'build_date_override', nargs='?', - help='Optional override for the build date. Format must be ' - '\'Mmm DD YYYY HH:MM:SS\'') + argument_parser.add_argument('timestamp') args = argument_parser.parse_args() - if args.build_date_override: - # Format is expected to be "Mmm DD YYYY HH:MM:SS". - build_date = args.build_date_override - else: - now = datetime.datetime.utcnow() - if now.hour < 5: - # The time is locked at 5:00 am in UTC to cause the build cache - # invalidation to not happen exactly at midnight. Use the same calculation - # as the day before. - # See //base/build_time.cc. - now = now - datetime.timedelta(days=1) - now = datetime.datetime(now.year, now.month, now.day, 5, 0, 0) - build_date = GetBuildDate(args.build_type, now) - + date = datetime.datetime.utcfromtimestamp(int(args.timestamp)) output = ('// Generated by //build/write_build_date_header.py\n' '#ifndef BUILD_DATE\n' - '#define BUILD_DATE "{}"\n' - '#endif // BUILD_DATE\n'.format(build_date)) + '#define BUILD_DATE "{:%b %d %Y %H:%M:%S}"\n' + '#endif // BUILD_DATE\n'.format(date)) current_contents = '' if os.path.isfile(args.output_file): |