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

# Create an interface jar from a normal jar.
#
# Variables
#   input_jar: Path to input .jar.
#   output_jar: Path to output .ijar.
#
template("generate_interface_jar") {
  compiled_action(target_name) {
    forward_variables_from(invoker,
                           [
                             "deps",
                             "testonly",
                           ])
    tool = "//third_party/ijar"
    inputs = [
      invoker.input_jar,
    ]
    outputs = [
      invoker.output_jar,
    ]
    args = [
      rebase_path(invoker.input_jar, root_build_dir),
      rebase_path(invoker.output_jar, root_build_dir),
    ]
  }
}
