# 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/config.gni")
import("//build/config/android/rules.gni")

java_library("build_hooks_java") {
  jacoco_never_instrument = true
  java_files = [ "java/org/chromium/build/BuildHooks.java" ]

  # Make all targets pull in the try-with-resources support files.
  # If an apk ends up not using any such statements, ProGuard will remove
  # them.
  deps = [
    "//third_party/bazel/desugar:desugar_runtime_java",
  ]
  srcjar_deps = [ ":base_build_hooks_config" ]
  no_build_hooks = true
  supports_android = true
}

java_cpp_template("base_build_hooks_config") {
  sources = [
    "java/templates/BuildHooksConfig.template",
  ]
  package_path = "org/chromium/build"

  defines = []
  if (report_java_assert) {
    defines += [ "_REPORT_JAVA_ASSERT" ]
  }
}

build_hooks_android_impl = "java/org/chromium/build/BuildHooksAndroidImpl.java"

android_library("build_hooks_android_java") {
  jacoco_never_instrument = true
  java_files = [
    "java/org/chromium/build/BuildHooksAndroid.java",
    build_hooks_android_impl,
  ]

  jar_excluded_patterns = [ "*/BuildHooksAndroidImpl.class" ]
  no_build_hooks = true
  proguard_configs = [ "proguard/build_hooks_android_impl.flags" ]
}

# This default implementation is used if an android_apk target doesn't
# specify a different implementation via build_hooks_android_impl_deps.
android_library("build_hooks_android_impl_java") {
  jacoco_never_instrument = true
  java_files = [ build_hooks_android_impl ]
  deps = [
    ":build_hooks_android_java",
  ]
  no_build_hooks = true
}
