# Copyright 2018 The Chromium OS 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("generate_dbus_adaptors") {
  forward_variables_from(invoker,
                         [
                           "dbus_adaptors_out_dir",
                           "dbus_service_config",
                           "new_fd_bindings",
                         ])
  if (!defined(new_fd_bindings)) {
    new_fd_bindings = true
  }
  h_dir = "${root_gen_dir}/${dbus_adaptors_out_dir}"

  if (!defined(dbus_service_config) || dbus_service_config == "") {
    service_config = ""
  } else {
    service_config = rebase_path(dbus_service_config)
  }

  action_foreach(target_name) {
    sources = invoker.sources
    script = "//common-mk/file_generator_wrapper.py"
    outputs = [ "${h_dir}/{{source_name_part}}.h" ]
    args = [
      "generate-chromeos-dbus-bindings",
      "{{source}}",
      "--service-config=${service_config}",
      "--adaptor=${h_dir}/{{source_name_part}}.h",
    ]
    if (new_fd_bindings) {
      args += [ "--new-fd-bindings" ]
    }
  }
}
