# 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/rules.gni")

if (enable_java_templates) {
  import("//third_party/ijar/ijar.gni")

  sun_tools_jar_path = "$root_gen_dir/sun_tools_jar/tools.jar"

  # Create or update the API versions cache if necessary by running a
  # functionally empty lint task. This prevents racy creation of the
  # cache while linting java targets in android_lint.
  android_lint("prepare_android_lint_cache") {
    android_manifest = "//build/android/AndroidManifest.xml"
    create_cache = true
  }

  action("find_sun_tools_jar") {
    script = "//build/android/gyp/find_sun_tools_jar.py"
    depfile = "$target_gen_dir/$target_name.d"
    outputs = [
      sun_tools_jar_path,
    ]
    args = [
      "--depfile",
      rebase_path(depfile, root_build_dir),
      "--output",
      rebase_path(sun_tools_jar_path, root_build_dir),
    ]
  }

  java_prebuilt("sun_tools_java") {
    jar_path = sun_tools_jar_path
    jar_dep = ":find_sun_tools_jar"
  }

  generate_interface_jar("android_ijar") {
    input_jar = android_sdk_jar
    output_jar = "$root_out_dir/lib.java/android.interface.jar"
  }

  # Write to a file some GN vars that are useful to scripts that use the output
  # directory. Format is chosen as easliy importable by both python and bash.
  CR = "$0x0A"
  _data = ""
  _data += "android_sdk_build_tools=" +
           rebase_path(android_sdk_build_tools, root_build_dir) + CR
  _data += "android_sdk_build_tools_version=$android_sdk_build_tools_version$CR"
  _data +=
      "android_sdk_root=" + rebase_path(android_sdk_root, root_build_dir) + CR
  _data += "android_sdk_version=$android_sdk_version$CR"
  write_file("$root_build_dir/build_vars.txt", _data)
}

# Copy to the lib.unstripped directory so that gdb can easily find it.
copy("cpplib_unstripped") {
  _soname = "libc++_shared.so"
  sources = [
    "${android_libcpp_lib_dir}/${_soname}",
  ]
  outputs = [
    "${root_out_dir}/lib.unstripped/${_soname}",
  ]
}

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}"

  deps = [
    ":cpplib_unstripped",
  ]

  script = "//build/gn_run_binary.py"
  inputs = [
    _strip_bin,
  ]
  sources = [
    _input_so,
  ]
  outputs = [
    _output_so,
  ]
  data = [
    _output_so,
  ]

  _rebased_strip_bin = rebase_path(_strip_bin, root_build_dir)
  _rebased_input_so = rebase_path(_input_so, root_build_dir)
  _rebased_output_so = rebase_path(_output_so, root_build_dir)
  args = [
    _rebased_strip_bin,
    "--strip-unneeded",
    "-o",
    _rebased_output_so,
    _rebased_input_so,
  ]
}

group("test_runner_py") {
  _py_files = read_file("test_runner.pydeps", "list lines")

  # Filter out comments.
  set_sources_assignment_filter([ "#*" ])
  sources = _py_files

  data = sources + [
           "devil_chromium.json",
           "pylib/gtest/filter/",
           "test_wrapper/logdog_wrapper.py",
           "//third_party/android_tools/sdk/build-tools/24.0.2/aapt",
           "//third_party/android_tools/sdk/build-tools/24.0.2/dexdump",
           "//third_party/android_tools/sdk/build-tools/24.0.2/lib64/libc++.so",
           "//third_party/android_tools/sdk/build-tools/24.0.2/split-select",
           "//third_party/android_tools/sdk/platform-tools/adb",
           "//third_party/catapult/third_party/gsutil/",
           "//third_party/catapult/devil/devil/devil_dependencies.json",
           "//third_party/proguard/lib/proguard.jar",
         ]
}

# Create wrapper scripts in out/bin that takes care of setting the
# --output-directory.
_scripts_to_wrap = [
  # TODO(agrieve): Once GYP is no more, delete the checked-in adb_gdb_* scripts
  # and generated a script for each android_apk() that has a native library.
  "adb_gdb_android_webview_shell",
  "adb_gdb_chrome_public",
  "adb_gdb_content_shell",
  "adb_gdb_cronet_sample",
  "adb_gdb_mojo_shell",
  "asan_symbolize.py",
  "tombstones.py",
]

_wrapper_targets = []
foreach(script, _scripts_to_wrap) {
  _target_name = get_path_info(script, "name") + "_wrapper"
  _wrapper_targets += [ ":$_target_name" ]
  wrapper_script(_target_name) {
    target = script
  }
}

group("wrapper_scripts") {
  deps = _wrapper_targets
}
