| # 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. | 
 |  | 
 | import("//build/config/android/config.gni") | 
 |  | 
 | assert(is_android) | 
 |  | 
 | rebased_android_sdk = rebase_path(android_sdk, root_build_dir) | 
 | rebased_android_sdk_root = rebase_path(android_sdk_root, root_build_dir) | 
 | rebased_android_sdk_build_tools = | 
 |     rebase_path(android_sdk_build_tools, root_build_dir) | 
 |  | 
 | android_sdk_jar = "$android_sdk/android.jar" | 
 | rebased_android_sdk_jar = rebase_path(android_sdk_jar, root_build_dir) | 
 |  | 
 | template("android_lint") { | 
 |   set_sources_assignment_filter([]) | 
 |   if (defined(invoker.testonly)) { | 
 |     testonly = invoker.testonly | 
 |   } | 
 |  | 
 |   jar_path = invoker.jar_path | 
 |   android_manifest = invoker.android_manifest | 
 |   java_files = invoker.java_files | 
 |   base_path = "$target_gen_dir/$target_name" | 
 |  | 
 |   action(target_name) { | 
 |     script = "//build/android/gyp/lint.py" | 
 |     result_path = base_path + "/result.xml" | 
 |     config_path = base_path + "/config.xml" | 
 |     suppressions_file = "//build/android/lint/suppressions.xml" | 
 |     inputs = [ | 
 |                suppressions_file, | 
 |                android_manifest, | 
 |                jar_path, | 
 |              ] + java_files | 
 |  | 
 |     outputs = [ | 
 |       config_path, | 
 |       result_path, | 
 |     ] | 
 |  | 
 |     rebased_java_files = rebase_path(java_files, root_build_dir) | 
 |  | 
 |     args = [ | 
 |       "--lint-path=$rebased_android_sdk_root/tools/lint", | 
 |       "--config-path", | 
 |       rebase_path(suppressions_file, root_build_dir), | 
 |       "--manifest-path", | 
 |       rebase_path(android_manifest, root_build_dir), | 
 |       "--product-dir=.", | 
 |       "--jar-path", | 
 |       rebase_path(jar_path, root_build_dir), | 
 |       "--processed-config-path", | 
 |       rebase_path(config_path, root_build_dir), | 
 |       "--result-path", | 
 |       rebase_path(result_path, root_build_dir), | 
 |       "--java-files=$rebased_java_files", | 
 |       "--enable", | 
 |     ] | 
 |   } | 
 | } | 
 |  | 
 | template("findbugs") { | 
 |   jar_path = invoker.jar_path | 
 |  | 
 |   build_config = invoker.build_config | 
 |  | 
 |   action(target_name) { | 
 |     script = "//build/android/findbugs_diff.py" | 
 |     depfile = "$target_gen_dir/$target_name.d" | 
 |     result_path = "$target_gen_dir/$target_name/result.xml" | 
 |     exclusions_file = "//build/android/findbugs_filter/findbugs_exclude.xml" | 
 |  | 
 |     rebased_build_config = rebase_path(build_config, root_build_dir) | 
 |  | 
 |     inputs = [ | 
 |       "//build/android/pylib/utils/findbugs.py", | 
 |       exclusions_file, | 
 |       jar_path, | 
 |     ] | 
 |  | 
 |     outputs = [ | 
 |       depfile, | 
 |       result_path, | 
 |     ] | 
 |  | 
 |     args = [ | 
 |       "--depfile", | 
 |       rebase_path(depfile, root_build_dir), | 
 |       "--exclude", | 
 |       rebase_path(exclusions_file, root_build_dir), | 
 |       "--auxclasspath-gyp", | 
 |       "@FileArg($rebased_build_config:javac:classpath)", | 
 |       "--output-file", | 
 |       rebase_path(result_path, root_build_dir), | 
 |       rebase_path(jar_path, root_build_dir), | 
 |     ] | 
 |   } | 
 | } | 
 |  | 
 | template("dex") { | 
 |   set_sources_assignment_filter([]) | 
 |   if (defined(invoker.testonly)) { | 
 |     testonly = invoker.testonly | 
 |   } | 
 |  | 
 |   assert(defined(invoker.output)) | 
 |   action(target_name) { | 
 |     script = "//build/android/gyp/dex.py" | 
 |     depfile = "$target_gen_dir/$target_name.d" | 
 |     if (defined(invoker.sources)) { | 
 |       sources = invoker.sources | 
 |     } | 
 |     outputs = [ | 
 |       depfile, | 
 |       invoker.output, | 
 |     ] | 
 |     if (defined(invoker.inputs)) { | 
 |       inputs = invoker.inputs | 
 |     } | 
 |  | 
 |     if (defined(invoker.deps)) { | 
 |       deps = invoker.deps | 
 |     } | 
 |  | 
 |     rebased_output = rebase_path(invoker.output, root_build_dir) | 
 |  | 
 |     args = [ | 
 |       "--depfile", | 
 |       rebase_path(depfile, root_build_dir), | 
 |       "--android-sdk-tools", | 
 |       rebased_android_sdk_build_tools, | 
 |       "--dex-path", | 
 |       rebased_output, | 
 |     ] | 
 |  | 
 |     if (defined(invoker.no_locals) && invoker.no_locals) { | 
 |       args += [ "--no-locals=1" ] | 
 |     } | 
 |  | 
 |     if (defined(invoker.args)) { | 
 |       args += invoker.args | 
 |     } | 
 |  | 
 |     if (defined(invoker.sources)) { | 
 |       args += rebase_path(invoker.sources, root_build_dir) | 
 |     } | 
 |   } | 
 | } | 
 |  | 
 | # Creates a zip archive of the inputs. | 
 | # If base_dir is provided, the archive paths will be relative to it. | 
 | template("zip") { | 
 |   set_sources_assignment_filter([]) | 
 |   if (defined(invoker.testonly)) { | 
 |     testonly = invoker.testonly | 
 |   } | 
 |  | 
 |   assert(defined(invoker.inputs)) | 
 |   assert(defined(invoker.output)) | 
 |  | 
 |   rebase_inputs = rebase_path(invoker.inputs, root_build_dir) | 
 |   rebase_output = rebase_path(invoker.output, root_build_dir) | 
 |   action(target_name) { | 
 |     script = "//build/android/gn/zip.py" | 
 |     depfile = "$target_gen_dir/$target_name.d" | 
 |     inputs = invoker.inputs | 
 |     outputs = [ | 
 |       depfile, | 
 |       invoker.output, | 
 |     ] | 
 |     args = [ | 
 |       "--depfile", | 
 |       rebase_path(depfile, root_build_dir), | 
 |       "--inputs=$rebase_inputs", | 
 |       "--output=$rebase_output", | 
 |     ] | 
 |     if (defined(invoker.base_dir)) { | 
 |       args += [ | 
 |         "--base-dir", | 
 |         rebase_path(invoker.base_dir, root_build_dir), | 
 |       ] | 
 |     } | 
 |   } | 
 | } | 
 |  | 
 | # 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 | 
 | # at gn-time). There is a special syntax to add a value in that dictionary to | 
 | # an action/action_foreachs args: | 
 | #   --python-arg=@FileArg($rebased_build_config_path:key0:key1) | 
 | # At runtime, such an arg will be replaced by the value in the build_config. | 
 | # See build/android/gyp/write_build_config.py and | 
 | # build/android/gyp/util/build_utils.py:ExpandFileArgs | 
 | template("write_build_config") { | 
 |   set_sources_assignment_filter([]) | 
 |   if (defined(invoker.testonly)) { | 
 |     testonly = invoker.testonly | 
 |   } | 
 |  | 
 |   assert(defined(invoker.type)) | 
 |   assert(defined(invoker.build_config)) | 
 |  | 
 |   type = invoker.type | 
 |   build_config = invoker.build_config | 
 |  | 
 |   assert(type == "android_apk" || type == "java_library" || | 
 |          type == "android_resources" || type == "deps_dex") | 
 |  | 
 |   action(target_name) { | 
 |     script = "//build/android/gyp/write_build_config.py" | 
 |     depfile = "$target_gen_dir/$target_name.d" | 
 |     inputs = [] | 
 |  | 
 |     deps = [] | 
 |     if (defined(invoker.deps)) { | 
 |       deps += invoker.deps | 
 |     } | 
 |  | 
 |     possible_deps_configs = [] | 
 |     foreach(d, deps) { | 
 |       dep_gen_dir = get_label_info(d, "target_gen_dir") | 
 |       dep_name = get_label_info(d, "name") | 
 |       possible_deps_configs += [ "$dep_gen_dir/$dep_name.build_config" ] | 
 |     } | 
 |     rebase_possible_deps_configs = | 
 |         rebase_path(possible_deps_configs, root_build_dir) | 
 |  | 
 |     outputs = [ | 
 |       depfile, | 
 |       build_config, | 
 |     ] | 
 |  | 
 |     args = [ | 
 |       "--type", | 
 |       type, | 
 |       "--depfile", | 
 |       rebase_path(depfile, root_build_dir), | 
 |       "--possible-deps-configs=$rebase_possible_deps_configs", | 
 |       "--build-config", | 
 |       rebase_path(build_config, root_build_dir), | 
 |     ] | 
 |  | 
 |     is_java_library = type == "java_library" | 
 |     is_apk = type == "android_apk" | 
 |     is_android_resources = type == "android_resources" | 
 |     is_deps_dex = type == "deps_dex" | 
 |  | 
 |     supports_android = is_apk || is_android_resources || is_deps_dex || | 
 |                        (is_java_library && defined(invoker.supports_android) && | 
 |                         invoker.supports_android) | 
 |     requires_android = is_apk || is_android_resources || is_deps_dex || | 
 |                        (is_java_library && defined(invoker.requires_android) && | 
 |                         invoker.requires_android) | 
 |  | 
 |     assert(!requires_android || supports_android, | 
 |            "requires_android requires" + " supports_android") | 
 |  | 
 |     # Mark these variables as used. | 
 |     assert(is_java_library || true) | 
 |     assert(is_apk || true) | 
 |     assert(is_android_resources || true) | 
 |     assert(is_deps_dex || true) | 
 |  | 
 |     if (is_java_library || is_apk) { | 
 |       args += [ | 
 |         "--jar-path", | 
 |         rebase_path(invoker.jar_path, root_build_dir), | 
 |       ] | 
 |     } | 
 |  | 
 |     if (is_apk || is_deps_dex || (is_java_library && supports_android)) { | 
 |       args += [ | 
 |         "--dex-path", | 
 |         rebase_path(invoker.dex_path, root_build_dir), | 
 |       ] | 
 |     } | 
 |     if (supports_android) { | 
 |       args += [ "--supports-android" ] | 
 |     } | 
 |     if (requires_android) { | 
 |       args += [ "--requires-android" ] | 
 |     } | 
 |     if (defined(invoker.bypass_platform_checks) && | 
 |         invoker.bypass_platform_checks) { | 
 |       args += [ "--bypass-platform-checks" ] | 
 |     } | 
 |  | 
 |     if (defined(invoker.apk_under_test)) { | 
 |       deps += [ invoker.apk_under_test ] | 
 |       apk_under_test_gen_dir = | 
 |           get_label_info(invoker.apk_under_test, "target_gen_dir") | 
 |       apk_under_test_name = get_label_info(invoker.apk_under_test, "name") | 
 |       apk_under_test_config = | 
 |           "$apk_under_test_gen_dir/$apk_under_test_name.build_config" | 
 |       args += [ | 
 |         "--tested-apk-config", | 
 |         rebase_path(apk_under_test_config, root_build_dir), | 
 |       ] | 
 |     } | 
 |  | 
 |     if (is_android_resources || is_apk) { | 
 |       assert(defined(invoker.resources_zip)) | 
 |       args += [ | 
 |         "--resources-zip", | 
 |         rebase_path(invoker.resources_zip, root_build_dir), | 
 |       ] | 
 |       if (defined(invoker.android_manifest)) { | 
 |         inputs += [ invoker.android_manifest ] | 
 |         args += [ | 
 |           "--android-manifest", | 
 |           rebase_path(invoker.android_manifest, root_build_dir), | 
 |         ] | 
 |       } else { | 
 |         assert(!is_apk, "apk build configs require an android_manifest") | 
 |       } | 
 |       if (defined(invoker.custom_package)) { | 
 |         args += [ | 
 |           "--package-name", | 
 |           invoker.custom_package, | 
 |         ] | 
 |       } | 
 |     } | 
 |  | 
 |     if (is_apk) { | 
 |       if (defined(invoker.native_libs)) { | 
 |         inputs += invoker.native_libs | 
 |         rebased_native_libs = rebase_path(invoker.native_libs, root_build_dir) | 
 |         rebased_android_readelf = rebase_path(android_readelf, root_build_dir) | 
 |         args += [ | 
 |           "--native-libs=$rebased_native_libs", | 
 |           "--readelf-path=$rebased_android_readelf", | 
 |         ] | 
 |       } | 
 |     } | 
 |  | 
 |     if (defined(invoker.srcjar)) { | 
 |       args += [ | 
 |         "--srcjar", | 
 |         rebase_path(invoker.srcjar, root_build_dir), | 
 |       ] | 
 |     } | 
 |   } | 
 | } | 
 |  | 
 | template("process_java_prebuilt") { | 
 |   set_sources_assignment_filter([]) | 
 |   if (defined(invoker.testonly)) { | 
 |     testonly = invoker.testonly | 
 |   } | 
 |  | 
 |   _input_jar_path = invoker.input_jar_path | 
 |   _output_jar_path = invoker.output_jar_path | 
 |   _jar_toc_path = _output_jar_path + ".TOC" | 
 |  | 
 |   assert(invoker.build_config != "") | 
 |  | 
 |   if (defined(invoker.proguard_preprocess) && invoker.proguard_preprocess) { | 
 |     _proguard_jar_path = "$android_sdk_root/tools/proguard/lib/proguard.jar" | 
 |     _proguard_config_path = invoker.proguard_config | 
 |     _build_config = invoker.build_config | 
 |     _rebased_build_config = rebase_path(_build_config, root_build_dir) | 
 |     action("${target_name}__proguard_process") { | 
 |       script = "//build/android/gyp/proguard.py" | 
 |       inputs = [ | 
 |         android_sdk_jar, | 
 |         _proguard_jar_path, | 
 |         _build_config, | 
 |         _input_jar_path, | 
 |         _proguard_config_path, | 
 |       ] | 
 |       depfile = "${target_gen_dir}/${target_name}.d" | 
 |       outputs = [ | 
 |         depfile, | 
 |         _output_jar_path, | 
 |       ] | 
 |       args = [ | 
 |         "--depfile", | 
 |         rebase_path(depfile, root_build_dir), | 
 |         "--proguard-path", | 
 |         rebase_path(_proguard_jar_path, root_build_dir), | 
 |         "--input-path", | 
 |         rebase_path(_input_jar_path, root_build_dir), | 
 |         "--output-path", | 
 |         rebase_path(_output_jar_path, root_build_dir), | 
 |         "--proguard-config", | 
 |         rebase_path(_proguard_config_path, root_build_dir), | 
 |         "--classpath", | 
 |         rebased_android_sdk_jar, | 
 |         "--classpath=@FileArg($_rebased_build_config:javac:classpath)", | 
 |       ] | 
 |     } | 
 |   } else { | 
 |     copy("${target_name}__copy_jar") { | 
 |       sources = [ | 
 |         _input_jar_path, | 
 |       ] | 
 |       outputs = [ | 
 |         _output_jar_path, | 
 |       ] | 
 |     } | 
 |   } | 
 |  | 
 |   action("${target_name}__jar_toc") { | 
 |     script = "//build/android/gyp/jar_toc.py" | 
 |     depfile = "$target_gen_dir/$target_name.d" | 
 |     outputs = [ | 
 |       depfile, | 
 |       _jar_toc_path, | 
 |       _jar_toc_path + ".md5.stamp", | 
 |     ] | 
 |     inputs = [ | 
 |       _output_jar_path, | 
 |     ] | 
 |     args = [ | 
 |       "--depfile", | 
 |       rebase_path(depfile, root_build_dir), | 
 |       "--jar-path", | 
 |       rebase_path(_output_jar_path, root_build_dir), | 
 |       "--toc-path", | 
 |       rebase_path(_jar_toc_path, root_build_dir), | 
 |     ] | 
 |   } | 
 |  | 
 |   group(target_name) { | 
 |     deps = [ | 
 |       ":${target_name}__jar_toc", | 
 |     ] | 
 |   } | 
 | } | 
 |  | 
 | # Packages resources, assets, dex, and native libraries into an apk. Signs and | 
 | # zipaligns the apk. | 
 | template("create_apk") { | 
 |   set_sources_assignment_filter([]) | 
 |   if (defined(invoker.testonly)) { | 
 |     testonly = invoker.testonly | 
 |   } | 
 |  | 
 |   _android_manifest = invoker.android_manifest | 
 |   _base_path = invoker.base_path | 
 |   _final_apk_path = invoker.apk_path | 
 |   _resources_zip = invoker.resources_zip | 
 |   _dex_path = invoker.dex_path | 
 |   _keystore_path = invoker.keystore_path | 
 |   _keystore_name = invoker.keystore_name | 
 |   _keystore_password = invoker.keystore_password | 
 |   _load_library_from_apk = invoker.load_library_from_apk | 
 |  | 
 |   _deps = [] | 
 |   if (defined(invoker.deps)) { | 
 |     _deps = invoker.deps | 
 |   } | 
 |  | 
 |   _native_libs_dir = "//build/android/empty/res" | 
 |   if (defined(invoker.native_libs_dir)) { | 
 |     _native_libs_dir = invoker.native_libs_dir | 
 |   } | 
 |  | 
 |   _asset_location = "//build/android/empty/res" | 
 |   if (defined(invoker.asset_location)) { | 
 |     _asset_location = invoker.asset_location | 
 |   } | 
 |  | 
 |   _version_code = invoker.version_code | 
 |   _version_name = invoker.version_name | 
 |  | 
 |   _base_apk_path = _base_path + ".apk_intermediates" | 
 |  | 
 |   _resource_packaged_apk_path = _base_apk_path + ".ap_" | 
 |   _packaged_apk_path = _base_apk_path + ".unfinished.apk" | 
 |   _shared_resources = | 
 |       defined(invoker.shared_resources) && invoker.shared_resources | 
 |  | 
 |   _configuration_name = "Release" | 
 |   if (is_debug) { | 
 |     _configuration_name = "Debug" | 
 |   } | 
 |  | 
 |   action("${target_name}__package_resources") { | 
 |     deps = _deps | 
 |  | 
 |     script = "//build/android/gyp/package_resources.py" | 
 |     depfile = "${target_gen_dir}/${target_name}.d" | 
 |     inputs = [ | 
 |       _android_manifest, | 
 |       _resources_zip, | 
 |     ] | 
 |     outputs = [ | 
 |       depfile, | 
 |       _resource_packaged_apk_path, | 
 |     ] | 
 |  | 
 |     _rebased_resources_zips = [ rebase_path(_resources_zip, root_build_dir) ] | 
 |     args = [ | 
 |       "--depfile", | 
 |       rebase_path(depfile, root_build_dir), | 
 |       "--android-sdk", | 
 |       rebased_android_sdk, | 
 |       "--android-sdk-tools", | 
 |       rebased_android_sdk_build_tools, | 
 |       "--configuration-name=$_configuration_name", | 
 |       "--android-manifest", | 
 |       rebase_path(_android_manifest, root_build_dir), | 
 |       "--version-code", | 
 |       _version_code, | 
 |       "--version-name", | 
 |       _version_name, | 
 |       "--asset-dir", | 
 |       rebase_path(_asset_location, root_build_dir), | 
 |       "--resource-zips=$_rebased_resources_zips", | 
 |       "--apk-path", | 
 |       rebase_path(_resource_packaged_apk_path, root_build_dir), | 
 |     ] | 
 |  | 
 |     if (_shared_resources) { | 
 |       args += [ "--shared-resources" ] | 
 |     } | 
 |   } | 
 |  | 
 |   action("${target_name}__package") { | 
 |     script = "//build/android/gyp/ant.py" | 
 |     _ant_script = "//build/android/ant/apk-package.xml" | 
 |  | 
 |     depfile = "$target_gen_dir/$target_name.d" | 
 |  | 
 |     inputs = [ | 
 |       _dex_path, | 
 |       _resource_packaged_apk_path, | 
 |       _ant_script, | 
 |     ] | 
 |  | 
 |     outputs = [ | 
 |       depfile, | 
 |       _packaged_apk_path, | 
 |     ] | 
 |  | 
 |     _rebased_emma_jar = "" | 
 |     _rebased_resource_packaged_apk_path = | 
 |         rebase_path(_resource_packaged_apk_path, root_build_dir) | 
 |     _rebased_packaged_apk_path = rebase_path(_packaged_apk_path, root_build_dir) | 
 |     _rebased_native_libs_dir = rebase_path(_native_libs_dir, root_build_dir) | 
 |     _rebased_dex_path = rebase_path(_dex_path, root_build_dir) | 
 |     args = [ | 
 |       "--depfile", | 
 |       rebase_path(depfile, root_build_dir), | 
 |       "--", | 
 |       "-quiet", | 
 |       "-DANDROID_SDK_ROOT=$rebased_android_sdk_root", | 
 |       "-DANDROID_SDK_TOOLS=$rebased_android_sdk_build_tools", | 
 |       "-DRESOURCE_PACKAGED_APK_NAME=$_rebased_resource_packaged_apk_path", | 
 |       "-DCONFIGURATION_NAME=$_configuration_name", | 
 |       "-DNATIVE_LIBS_DIR=$_rebased_native_libs_dir", | 
 |       "-DOUT_DIR=", | 
 |       "-DUNSIGNED_APK_PATH=$_rebased_packaged_apk_path", | 
 |       "-DEMMA_INSTRUMENT=0", | 
 |       "-DEMMA_DEVICE_JAR=$_rebased_emma_jar", | 
 |       "-DDEX_FILE_PATH=$_rebased_dex_path", | 
 |       "-Dbasedir=.", | 
 |       "-buildfile", | 
 |       rebase_path(_ant_script, root_build_dir), | 
 |     ] | 
 |   } | 
 |  | 
 |   action("${target_name}__finalize") { | 
 |     script = "//build/android/gyp/finalize_apk.py" | 
 |     depfile = "$target_gen_dir/$target_name.d" | 
 |  | 
 |     sources = [ | 
 |       _packaged_apk_path, | 
 |     ] | 
 |     inputs = [ | 
 |       _keystore_path, | 
 |     ] | 
 |     outputs = [ | 
 |       depfile, | 
 |       _final_apk_path, | 
 |     ] | 
 |  | 
 |     args = [ | 
 |       "--depfile", | 
 |       rebase_path(depfile, root_build_dir), | 
 |       "--zipalign-path", | 
 |       rebase_path(zipalign_path, root_build_dir), | 
 |       "--unsigned-apk-path", | 
 |       rebase_path(_packaged_apk_path, root_build_dir), | 
 |       "--final-apk-path", | 
 |       rebase_path(_final_apk_path, root_build_dir), | 
 |       "--key-path", | 
 |       rebase_path(_keystore_path, root_build_dir), | 
 |       "--key-name", | 
 |       _keystore_name, | 
 |       "--key-passwd", | 
 |       _keystore_password, | 
 |     ] | 
 |     if (_load_library_from_apk) { | 
 |       _rezip_jar_path = "$root_build_dir/lib.java/rezip_apk.jar" | 
 |       inputs += [ _rezip_jar_path ] | 
 |       args += [ | 
 |         "--load-library-from-zip-file=1", | 
 |         "--rezip-apk-jar-path", | 
 |         rebase_path(_rezip_jar_path, root_build_dir), | 
 |       ] | 
 |     } | 
 |   } | 
 |  | 
 |   group(target_name) { | 
 |     deps = [ | 
 |       ":${target_name}__finalize", | 
 |     ] | 
 |   } | 
 | } | 
 |  | 
 | template("java_prebuilt_impl") { | 
 |   set_sources_assignment_filter([]) | 
 |   if (defined(invoker.testonly)) { | 
 |     testonly = invoker.testonly | 
 |   } | 
 |   _supports_android = | 
 |       defined(invoker.supports_android) && invoker.supports_android | 
 |  | 
 |   assert(defined(invoker.jar_path)) | 
 |   _base_path = "${target_gen_dir}/$target_name" | 
 |   _jar_path = _base_path + ".jar" | 
 |   _build_config = _base_path + ".build_config" | 
 |  | 
 |   if (_supports_android) { | 
 |     _dex_path = _base_path + ".dex.jar" | 
 |   } | 
 |  | 
 |   _final_deps = [] | 
 |   _template_name = target_name | 
 |  | 
 |   _final_deps += [ ":${_template_name}__build_config" ] | 
 |   write_build_config("${_template_name}__build_config") { | 
 |     type = "java_library" | 
 |     supports_android = _supports_android | 
 |     requires_android = | 
 |         defined(invoker.requires_android) && invoker.requires_android | 
 |  | 
 |     deps = [] | 
 |     if (defined(invoker.deps)) { | 
 |       deps += invoker.deps | 
 |     } | 
 |     build_config = _build_config | 
 |     jar_path = _jar_path | 
 |     if (_supports_android) { | 
 |       dex_path = _dex_path | 
 |     } | 
 |   } | 
 |  | 
 |   _final_deps += [ ":${_template_name}__process_jar" ] | 
 |   process_java_prebuilt("${_template_name}__process_jar") { | 
 |     if (defined(invoker.proguard_preprocess) && invoker.proguard_preprocess) { | 
 |       proguard_preprocess = true | 
 |       proguard_config = invoker.proguard_config | 
 |     } | 
 |  | 
 |     build_config = _build_config | 
 |     input_jar_path = invoker.jar_path | 
 |     output_jar_path = _jar_path | 
 |   } | 
 |  | 
 |   if (_supports_android) { | 
 |     _final_deps += [ ":${_template_name}__dex" ] | 
 |     dex("${_template_name}__dex") { | 
 |       sources = [ | 
 |         _jar_path, | 
 |       ] | 
 |       output = _dex_path | 
 |     } | 
 |   } | 
 |  | 
 |   group(target_name) { | 
 |     deps = _final_deps | 
 |   } | 
 | } | 
 |  | 
 | # Compiles and jars a set of java files. | 
 | # | 
 | # Outputs: | 
 | #  $jar_path.jar | 
 | #  $jar_path.jar.TOC | 
 | # | 
 | # Variables | 
 | #   java_files: List of .java files to compile. | 
 | #   java_deps: List of java dependencies. These should all have a .jar output | 
 | #     at "${target_gen_dir}/${target_name}.jar. | 
 | #   chromium_code: If true, enable extra warnings. | 
 | #   srcjar_deps: List of srcjar dependencies. The .java files contained in the | 
 | #     dependencies srcjar outputs will be compiled and added to the output jar. | 
 | #   jar_path: Use this to explicitly set the output jar path. Defaults to | 
 | #     "${target_gen_dir}/${target_name}.jar. | 
 | template("compile_java") { | 
 |   set_sources_assignment_filter([]) | 
 |   if (defined(invoker.testonly)) { | 
 |     testonly = invoker.testonly | 
 |   } | 
 |  | 
 |   assert(defined(invoker.java_files)) | 
 |   assert(defined(invoker.build_config)) | 
 |   assert(defined(invoker.jar_path)) | 
 |  | 
 |   _java_files = invoker.java_files | 
 |   _final_jar_path = invoker.jar_path | 
 |   _intermediate_jar_path = "$target_gen_dir/$target_name.initial.jar" | 
 |  | 
 |   _build_config = invoker.build_config | 
 |  | 
 |   _jar_excluded_patterns = [] | 
 |   if (defined(invoker.jar_excluded_patterns)) { | 
 |     _jar_excluded_patterns += invoker.jar_excluded_patterns | 
 |   } | 
 |  | 
 |   _chromium_code = false | 
 |   if (defined(invoker.chromium_code)) { | 
 |     _chromium_code = invoker.chromium_code | 
 |   } | 
 |   _manifest_entries = [] | 
 |   if (defined(invoker.manifest_entries)) { | 
 |     _manifest_entries = invoker.manifest_entries | 
 |   } | 
 |  | 
 |   _srcjar_deps = [] | 
 |   if (defined(invoker.srcjar_deps)) { | 
 |     _srcjar_deps += invoker.srcjar_deps | 
 |   } | 
 |  | 
 |   _java_srcjars = [] | 
 |   if (defined(invoker.srcjars)) { | 
 |     _java_srcjars = invoker.srcjars | 
 |   } | 
 |   foreach(dep, _srcjar_deps) { | 
 |     _dep_gen_dir = get_label_info(dep, "target_gen_dir") | 
 |     _dep_name = get_label_info(dep, "name") | 
 |     _java_srcjars += [ "$_dep_gen_dir/$_dep_name.srcjar" ] | 
 |   } | 
 |  | 
 |   # Mark srcjar_deps as used. | 
 |   assert(_srcjar_deps == [] || true) | 
 |  | 
 |   _system_jars = [] | 
 |   if (defined(invoker.android) && invoker.android) { | 
 |     _system_jars += [ android_sdk_jar ] | 
 |   } | 
 |  | 
 |   _rebased_build_config = rebase_path(_build_config, root_build_dir) | 
 |   _rebased_jar_path = rebase_path(_intermediate_jar_path, root_build_dir) | 
 |  | 
 |   _template_name = target_name | 
 |   _final_deps = [ ":${_template_name}__javac" ] | 
 |   action("${_template_name}__javac") { | 
 |     script = "//build/android/gyp/javac.py" | 
 |     depfile = "$target_gen_dir/$target_name.d" | 
 |     deps = [] | 
 |     outputs = [ | 
 |       depfile, | 
 |       _intermediate_jar_path, | 
 |       _intermediate_jar_path + ".md5.stamp", | 
 |     ] | 
 |     sources = _java_files + _java_srcjars | 
 |     inputs = _system_jars + [ _build_config ] | 
 |  | 
 |     _rebased_system_jars = rebase_path(_system_jars, root_build_dir) | 
 |     _rebased_java_srcjars = rebase_path(_java_srcjars, root_build_dir) | 
 |     _rebased_depfile = rebase_path(depfile, root_build_dir) | 
 |     args = [ | 
 |       "--depfile=$_rebased_depfile", | 
 |       "--classpath=$_rebased_system_jars", | 
 |       "--classpath=@FileArg($_rebased_build_config:javac:classpath)", | 
 |       "--jar-path=$_rebased_jar_path", | 
 |       "--java-srcjars=$_rebased_java_srcjars", | 
 |       "--java-srcjars=@FileArg($_rebased_build_config:javac:srcjars)", | 
 |       "--jar-excluded-classes=$_jar_excluded_patterns", | 
 |     ] | 
 |     foreach(e, _manifest_entries) { | 
 |       args += [ "--manifest-entry=" + e ] | 
 |     } | 
 |     if (_chromium_code) { | 
 |       args += [ "--chromium-code=1" ] | 
 |     } | 
 |  | 
 |     args += rebase_path(_java_files, root_build_dir) | 
 |   } | 
 |  | 
 |   _final_deps += [ ":${_template_name}__finish" ] | 
 |   process_java_prebuilt("${_template_name}__finish") { | 
 |     build_config = _build_config | 
 |     input_jar_path = _intermediate_jar_path | 
 |     output_jar_path = _final_jar_path | 
 |     if (defined(invoker.proguard_preprocess) && invoker.proguard_preprocess) { | 
 |       proguard_preprocess = invoker.proguard_preprocess | 
 |       proguard_config = invoker.proguard_config | 
 |     } | 
 |   } | 
 |  | 
 |   group(target_name) { | 
 |     deps = _final_deps | 
 |   } | 
 | } | 
 |  | 
 | template("java_library_impl") { | 
 |   set_sources_assignment_filter([]) | 
 |   if (defined(invoker.testonly)) { | 
 |     testonly = invoker.testonly | 
 |   } | 
 |  | 
 |   assert( | 
 |       defined(invoker.java_files) || defined(invoker.DEPRECATED_java_in_dir) || | 
 |       defined(invoker.srcjars) || defined(invoker.srcjar_deps)) | 
 |   _base_path = "$target_gen_dir/$target_name" | 
 |   _jar_path = _base_path + ".jar" | 
 |   if (defined(invoker.jar_path)) { | 
 |     _jar_path = invoker.jar_path | 
 |   } | 
 |   _template_name = target_name | 
 |  | 
 |   _final_deps = [] | 
 |   _final_datadeps = [] | 
 |   if (defined(invoker.datadeps)) { | 
 |     _final_datadeps = invoker.datadeps | 
 |   } | 
 |  | 
 |   _supports_android = | 
 |       defined(invoker.supports_android) && invoker.supports_android | 
 |   _requires_android = | 
 |       defined(invoker.requires_android) && invoker.requires_android | 
 |  | 
 |   if (_supports_android) { | 
 |     _dex_path = _base_path + ".dex.jar" | 
 |     if (defined(invoker.dex_path)) { | 
 |       _dex_path = invoker.dex_path | 
 |     } | 
 |   } | 
 |  | 
 |   if (defined(invoker.override_build_config)) { | 
 |     _build_config = invoker.override_build_config | 
 |   } else { | 
 |     _build_config = _base_path + ".build_config" | 
 |     _final_deps += [ ":${_template_name}__build_config" ] | 
 |     write_build_config("${_template_name}__build_config") { | 
 |       type = "java_library" | 
 |       supports_android = _supports_android | 
 |       requires_android = _requires_android | 
 |       bypass_platform_checks = defined(invoker.bypass_platform_checks) && | 
 |                                invoker.bypass_platform_checks | 
 |  | 
 |       deps = [] | 
 |       if (defined(invoker.deps)) { | 
 |         deps += invoker.deps | 
 |       } | 
 |  | 
 |       build_config = _build_config | 
 |       jar_path = _jar_path | 
 |       if (_supports_android) { | 
 |         dex_path = _dex_path | 
 |       } | 
 |     } | 
 |   } | 
 |  | 
 |   _chromium_code = true | 
 |   if (defined(invoker.chromium_code)) { | 
 |     _chromium_code = invoker.chromium_code | 
 |   } | 
 |  | 
 |   _srcjar_deps = [] | 
 |   if (defined(invoker.srcjar_deps)) { | 
 |     _srcjar_deps = invoker.srcjar_deps | 
 |   } | 
 |  | 
 |   _srcjars = [] | 
 |   if (defined(invoker.srcjars)) { | 
 |     _srcjars = invoker.srcjars | 
 |   } | 
 |  | 
 |   _java_files = [] | 
 |   if (defined(invoker.java_files)) { | 
 |     _java_files = invoker.java_files | 
 |   } else if (defined(invoker.DEPRECATED_java_in_dir)) { | 
 |     _src_dir = invoker.DEPRECATED_java_in_dir + "/src" | 
 |     _src_dir_exists = exec_script("//build/dir_exists.py", | 
 |                                   [ rebase_path(_src_dir, root_build_dir) ], | 
 |                                   "string") | 
 |     assert(_src_dir_exists == "False", | 
 |            "In GN, java_in_dir should be the fully specified java directory " + | 
 |                "(i.e. including the trailing \"/src\")") | 
 |  | 
 |     _java_files_build_rel = exec_script( | 
 |             "//build/android/gyp/find.py", | 
 |             [ | 
 |               "--pattern", | 
 |               "*.java", | 
 |               rebase_path(invoker.DEPRECATED_java_in_dir, root_build_dir), | 
 |             ], | 
 |             "list lines") | 
 |     _java_files = rebase_path(_java_files_build_rel, ".", root_build_dir) | 
 |   } | 
 |   assert(_java_files != [] || _srcjar_deps != [] || _srcjars != []) | 
 |  | 
 |   _final_deps += [ ":${_template_name}__compile_java" ] | 
 |   compile_java("${_template_name}__compile_java") { | 
 |     jar_path = _jar_path | 
 |     build_config = _build_config | 
 |     java_files = _java_files | 
 |     srcjar_deps = _srcjar_deps | 
 |     srcjars = _srcjars | 
 |     chromium_code = _chromium_code | 
 |     android = _requires_android | 
 |  | 
 |     if (defined(invoker.jar_excluded_patterns)) { | 
 |       jar_excluded_patterns = invoker.jar_excluded_patterns | 
 |     } | 
 |     if (defined(invoker.proguard_preprocess)) { | 
 |       proguard_preprocess = invoker.proguard_preprocess | 
 |     } | 
 |     if (defined(invoker.proguard_config)) { | 
 |       proguard_config = invoker.proguard_config | 
 |     } | 
 |     if (defined(invoker.dist_jar_path)) { | 
 |       dist_jar_path = invoker.dist_jar_path | 
 |     } | 
 |     if (defined(invoker.manifest_entries)) { | 
 |       manifest_entries = invoker.manifest_entries | 
 |     } | 
 |   } | 
 |  | 
 |   if (defined(invoker.main_class)) { | 
 |     _final_deps += [ ":${_template_name}__binary_script" ] | 
 |     action("${_template_name}__binary_script") { | 
 |       script = "//build/android/gyp/create_java_binary_script.py" | 
 |       depfile = "$target_gen_dir/$target_name.d" | 
 |       java_script = "$root_build_dir/bin/$_template_name" | 
 |       inputs = [ | 
 |         _build_config, | 
 |       ] | 
 |       outputs = [ | 
 |         depfile, | 
 |         java_script, | 
 |       ] | 
 |       _rebased_build_config = rebase_path(_build_config, root_build_dir) | 
 |       args = [ | 
 |         "--depfile", | 
 |         rebase_path(depfile, root_build_dir), | 
 |         "--output", | 
 |         rebase_path(java_script, root_build_dir), | 
 |         "--classpath=@FileArg($_rebased_build_config:java:full_classpath)", | 
 |         "--jar-path", | 
 |         rebase_path(_jar_path, root_build_dir), | 
 |         "--main-class", | 
 |         invoker.main_class, | 
 |       ] | 
 |     } | 
 |   } | 
 |  | 
 |   if (_supports_android) { | 
 |     if (defined(invoker.chromium_code) && invoker.chromium_code) { | 
 |       _android_manifest = "//build/android/AndroidManifest.xml" | 
 |       if (defined(invoker.android_manifest)) { | 
 |         _android_manifest = invoker.android_manifest | 
 |       } | 
 |  | 
 |       _final_datadeps += [ ":${_template_name}__lint" ] | 
 |       android_lint("${_template_name}__lint") { | 
 |         android_manifest = _android_manifest | 
 |         jar_path = _jar_path | 
 |         java_files = _java_files | 
 |       } | 
 |  | 
 |       if (run_findbugs) { | 
 |         _final_datadeps += [ ":${_template_name}__findbugs" ] | 
 |         findbugs("${_template_name}__findbugs") { | 
 |           build_config = _build_config | 
 |           jar_path = _jar_path | 
 |         } | 
 |       } | 
 |     } | 
 |  | 
 |     _final_deps += [ ":${_template_name}__dex" ] | 
 |     dex("${_template_name}__dex") { | 
 |       sources = [ | 
 |         _jar_path, | 
 |       ] | 
 |       output = _dex_path | 
 |     } | 
 |   } | 
 |  | 
 |   group(target_name) { | 
 |     if (defined(invoker.visibility)) { | 
 |       visibility = invoker.visibility | 
 |     } | 
 |     deps = _final_deps | 
 |     datadeps = _final_datadeps | 
 |   } | 
 | } | 
 |  | 
 | # Runs process_resources.py | 
 | template("process_resources") { | 
 |   set_sources_assignment_filter([]) | 
 |   if (defined(invoker.testonly)) { | 
 |     testonly = invoker.testonly | 
 |   } | 
 |  | 
 |   zip_path = invoker.zip_path | 
 |   srcjar_path = invoker.srcjar_path | 
 |   build_config = invoker.build_config | 
 |   resource_dirs = invoker.resource_dirs | 
 |   android_manifest = invoker.android_manifest | 
 |  | 
 |   non_constant_id = true | 
 |   if (defined(invoker.generate_constant_ids) && invoker.generate_constant_ids) { | 
 |     non_constant_id = false | 
 |   } | 
 |  | 
 |   action(target_name) { | 
 |     script = "//build/android/gyp/process_resources.py" | 
 |  | 
 |     depfile = "$target_gen_dir/$target_name.d" | 
 |     outputs = [ | 
 |       depfile, | 
 |       zip_path, | 
 |       srcjar_path, | 
 |     ] | 
 |  | 
 |     sources_build_rel = exec_script("//build/android/gyp/find.py", | 
 |                                     rebase_path(resource_dirs, root_build_dir), | 
 |                                     "list lines") | 
 |     sources = rebase_path(sources_build_rel, ".", root_build_dir) | 
 |  | 
 |     inputs = [ | 
 |       build_config, | 
 |       android_manifest, | 
 |     ] | 
 |  | 
 |     rebase_resource_dirs = rebase_path(resource_dirs, root_build_dir) | 
 |     rebase_build_config = rebase_path(build_config, root_build_dir) | 
 |     args = [ | 
 |       "--depfile", | 
 |       rebase_path(depfile, root_build_dir), | 
 |       "--android-sdk", | 
 |       rebase_path(android_sdk, root_build_dir), | 
 |       "--android-sdk-tools", | 
 |       rebase_path(android_sdk_build_tools, root_build_dir), | 
 |       "--android-manifest", | 
 |       rebase_path(android_manifest, root_build_dir), | 
 |       "--resource-dirs=$rebase_resource_dirs", | 
 |       "--srcjar-out", | 
 |       rebase_path(srcjar_path, root_build_dir), | 
 |       "--resource-zip-out", | 
 |       rebase_path(zip_path, root_build_dir), | 
 |       "--dependencies-res-zips=@FileArg($rebase_build_config:resources:dependency_zips)", | 
 |       "--extra-res-packages=@FileArg($rebase_build_config:resources:extra_package_names)", | 
 |     ] | 
 |  | 
 |     if (non_constant_id) { | 
 |       args += [ "--non-constant-id" ] | 
 |     } | 
 |  | 
 |     if (defined(invoker.custom_package)) { | 
 |       args += [ | 
 |         "--custom-package", | 
 |         invoker.custom_package, | 
 |       ] | 
 |     } | 
 |  | 
 |     if (defined(invoker.v14_verify_only) && invoker.v14_verify_only) { | 
 |       args += [ "--v14-verify-only" ] | 
 |     } | 
 |  | 
 |     if (defined(invoker.shared_resources) && invoker.shared_resources) { | 
 |       args += [ "--shared-resources" ] | 
 |     } | 
 |  | 
 |     if (defined(invoker.all_resources_zip_path)) { | 
 |       all_resources_zip = invoker.all_resources_zip_path | 
 |       outputs += [ all_resources_zip ] | 
 |       args += [ | 
 |         "--all-resources-zip-out", | 
 |         rebase_path(all_resources_zip, root_build_dir), | 
 |       ] | 
 |     } | 
 |  | 
 |     if (defined(invoker.args)) { | 
 |       args += invoker.args | 
 |     } | 
 |   } | 
 | } | 
 |  | 
 | template("copy_ex") { | 
 |   set_sources_assignment_filter([]) | 
 |   if (defined(invoker.testonly)) { | 
 |     testonly = invoker.testonly | 
 |   } | 
 |  | 
 |   action(target_name) { | 
 |     script = "//build/android/gyp/copy_ex.py" | 
 |  | 
 |     if (defined(invoker.deps)) { | 
 |       deps = invoker.deps | 
 |     } | 
 |  | 
 |     sources = [] | 
 |     if (defined(invoker.sources)) { | 
 |       sources += invoker.sources | 
 |     } | 
 |  | 
 |     inputs = [] | 
 |     if (defined(invoker.inputs)) { | 
 |       inputs += invoker.inputs | 
 |     } | 
 |  | 
 |     depfile = "$target_gen_dir/$target_name.d" | 
 |     outputs = [ | 
 |       depfile, | 
 |     ] | 
 |  | 
 |     args = [ | 
 |       "--depfile", | 
 |       rebase_path(depfile, root_build_dir), | 
 |       "--dest", | 
 |       rebase_path(invoker.dest, root_build_dir), | 
 |     ] | 
 |     rebased_sources = rebase_path(sources, root_build_dir) | 
 |     args += [ "--files=$rebased_sources" ] | 
 |  | 
 |     if (defined(invoker.clear_dir) && invoker.clear_dir) { | 
 |       args += [ "--clear" ] | 
 |     } | 
 |  | 
 |     if (defined(invoker.args)) { | 
 |       args += invoker.args | 
 |     } | 
 |   } | 
 | } | 
 |  | 
 | # Produces a single .dex.jar out of a set of Java dependencies. | 
 | template("deps_dex") { | 
 |   set_sources_assignment_filter([]) | 
 |   build_config = "$target_gen_dir/${target_name}.build_config" | 
 |   write_build_config("${target_name}__build_config") { | 
 |     type = "deps_dex" | 
 |     deps = invoker.deps | 
 |  | 
 |     build_config = build_config | 
 |     dex_path = invoker.dex_path | 
 |   } | 
 |  | 
 |   rebased_build_config = rebase_path(build_config, root_build_dir) | 
 |   dex(target_name) { | 
 |     inputs = [ | 
 |       build_config, | 
 |     ] | 
 |     output = invoker.dex_path | 
 |     dex_arg_key = "${rebased_build_config}:final_dex:dependency_dex_files" | 
 |     args = [ "--inputs=@FileArg($dex_arg_key)" ] | 
 |     if (defined(invoker.excluded_jars)) { | 
 |       excluded_jars = rebase_path(invoker.excluded_jars, root_build_dir) | 
 |       args += [ "--excluded-paths=${excluded_jars}" ] | 
 |     } | 
 |   } | 
 | } |