# 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.

template("build_closure") {
  assert(defined(invoker.sources))
  assert(defined(invoker.target))
  action(target_name) {
    script = "//third_party/google_input_tools/builder.py"
    sources = invoker.sources
    outputs = [
      invoker.target,
    ]
    args = [
      "--target",
      rebase_path(invoker.target, root_build_dir),
    ]
    if (defined(invoker.json_file)) {
      # Optionally parse list of sources from a json file. Useful when the list
      # is sufficiently long to create problems with length restrictions on the
      # command line.
      assert(defined(invoker.json_sources))
      args += [
        "--json_file",
        rebase_path(invoker.json_file, root_build_dir),
        "--json_sources",
        invoker.json_sources,
      ]
    } else {
      # If the number of source files is short, they can be directly extracted
      # from the command line.
      args += [ "--sources" ] + sources
    }
    if (defined(invoker.path)) {
      args += [
        "--path",
        rebase_path(invoker.path, root_build_dir),
      ]
    }
  }
}
