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

# Depend on this on the Java side to get org.components.version_info.Channel and
# org.components.version_info.VersionConstants.
android_library("version_constants_java") {
  java_files = [
    "java/src/org/chromium/components/version_info/VersionConstantsBridge.java",
  ]
  deps = [
    "//base:base_java",
  ]
  srcjar_deps = [
    ":channel_enum_srcjar",
    ":version_constants_srcjar",
  ]
}

# Depend on this on the native side to get version_info::GetChannel. It requires
# version_constants_java for its JNI call.
static_library("channel_getter") {
  sources = [
    "channel_getter.cc",
    "channel_getter.h",
  ]
  deps = [
    ":version_constants_bridge_jni",
    "..:channel",
  ]
}

java_cpp_enum("channel_enum_srcjar") {
  sources = [
    "../channel.h",
  ]
}

version_constants_java_file = "$target_gen_dir/java/org/chromium/components/version_info/VersionConstants.java"
zip("version_constants_srcjar") {
  inputs = [
    version_constants_java_file,
  ]
  output = "$target_gen_dir/$target_name.srcjar"
  base_dir = "$target_gen_dir/java"
  deps = [
    ":generate_version_constants_java",
  ]
}

process_version("generate_version_constants_java") {
  template_file = "java/VersionConstants.java.version"
  output = version_constants_java_file
  sources = [
    "//chrome/VERSION",
  ]
  extra_args = [
    "-e",
    "CHANNEL=str.upper('$android_channel')",
  ]
}

generate_jni("version_constants_bridge_jni") {
  sources = [
    "java/src/org/chromium/components/version_info/VersionConstantsBridge.java",
  ]
  jni_package = "version_constants_bridge"
}
