# 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" ]
    }
  }
}
