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

interfaces_bindings_gen_dir = "$root_gen_dir/mojo/public/interfaces/bindings"

component("bindings") {
  sources = [
    # Normally, targets should depend on the source_sets generated by mojom
    # targets. However, the generated source_sets use portions of the bindings
    # library. In order to avoid linker warnings about locally-defined imports
    # in Windows components build, this target depends on the generated C++
    # files directly so that the EXPORT macro defintions match.
    "$interfaces_bindings_gen_dir/interface_control_messages.mojom-shared-internal.h",
    "$interfaces_bindings_gen_dir/interface_control_messages.mojom-shared.cc",
    "$interfaces_bindings_gen_dir/interface_control_messages.mojom-shared.h",
    "$interfaces_bindings_gen_dir/interface_control_messages.mojom.cc",
    "$interfaces_bindings_gen_dir/interface_control_messages.mojom.h",
    "$interfaces_bindings_gen_dir/pipe_control_messages.mojom-shared-internal.h",
    "$interfaces_bindings_gen_dir/pipe_control_messages.mojom-shared.cc",
    "$interfaces_bindings_gen_dir/pipe_control_messages.mojom-shared.h",
    "$interfaces_bindings_gen_dir/pipe_control_messages.mojom.cc",
    "$interfaces_bindings_gen_dir/pipe_control_messages.mojom.h",
    "array_data_view.h",
    "array_traits.h",
    "array_traits_carray.h",
    "array_traits_stl.h",
    "associated_binding.h",
    "associated_binding_set.h",
    "associated_group.h",
    "associated_group_controller.h",
    "associated_interface_ptr.h",
    "associated_interface_ptr_info.h",
    "associated_interface_request.h",
    "binding.h",
    "binding_set.h",
    "bindings_export.h",
    "clone_traits.h",
    "connection_error_callback.h",
    "connector.h",
    "disconnect_reason.h",
    "filter_chain.h",
    "interface_data_view.h",
    "interface_endpoint_client.h",
    "interface_endpoint_controller.h",
    "interface_id.h",
    "interface_ptr.h",
    "interface_ptr_info.h",
    "interface_ptr_set.h",
    "interface_request.h",
    "lib/array_internal.cc",
    "lib/array_internal.h",
    "lib/array_serialization.h",
    "lib/associated_binding.cc",
    "lib/associated_group.cc",
    "lib/associated_group_controller.cc",
    "lib/associated_interface_ptr_state.h",
    "lib/binding_state.cc",
    "lib/binding_state.h",
    "lib/bindings_internal.h",
    "lib/buffer.h",
    "lib/connector.cc",
    "lib/control_message_handler.cc",
    "lib/control_message_handler.h",
    "lib/control_message_proxy.cc",
    "lib/control_message_proxy.h",
    "lib/equals_traits.h",
    "lib/filter_chain.cc",
    "lib/fixed_buffer.cc",
    "lib/fixed_buffer.h",
    "lib/handle_interface_serialization.h",
    "lib/hash_util.h",
    "lib/interface_endpoint_client.cc",
    "lib/interface_ptr_state.h",
    "lib/map_data_internal.h",
    "lib/map_serialization.h",
    "lib/may_auto_lock.h",
    "lib/message.cc",
    "lib/message_buffer.cc",
    "lib/message_buffer.h",
    "lib/message_builder.cc",
    "lib/message_builder.h",
    "lib/message_header_validator.cc",
    "lib/message_internal.h",
    "lib/multiplex_router.cc",
    "lib/multiplex_router.h",
    "lib/native_enum_data.h",
    "lib/native_enum_serialization.h",
    "lib/native_struct.cc",
    "lib/native_struct_data.cc",
    "lib/native_struct_data.h",
    "lib/native_struct_serialization.cc",
    "lib/native_struct_serialization.h",
    "lib/pipe_control_message_handler.cc",
    "lib/pipe_control_message_proxy.cc",
    "lib/scoped_interface_endpoint_handle.cc",
    "lib/serialization.h",
    "lib/serialization_context.cc",
    "lib/serialization_context.h",
    "lib/serialization_forward.h",
    "lib/serialization_util.h",
    "lib/string_serialization.h",
    "lib/string_traits_string16.cc",
    "lib/sync_call_restrictions.cc",
    "lib/sync_handle_registry.cc",
    "lib/sync_handle_watcher.cc",
    "lib/template_util.h",
    "lib/union_accessor.h",
    "lib/validate_params.h",
    "lib/validation_context.cc",
    "lib/validation_context.h",
    "lib/validation_errors.cc",
    "lib/validation_errors.h",
    "lib/validation_util.cc",
    "lib/validation_util.h",
    "map.h",
    "map_data_view.h",
    "map_traits.h",
    "map_traits_stl.h",
    "message.h",
    "message_header_validator.h",
    "native_enum.h",
    "native_struct.h",
    "native_struct_data_view.h",
    "pipe_control_message_handler.h",
    "pipe_control_message_handler_delegate.h",
    "pipe_control_message_proxy.h",
    "raw_ptr_impl_ref_traits.h",
    "scoped_interface_endpoint_handle.h",
    "string_data_view.h",
    "string_traits.h",
    "string_traits_stl.h",
    "string_traits_string16.h",
    "string_traits_string_piece.h",
    "strong_associated_binding.h",
    "strong_binding.h",
    "strong_binding_set.h",
    "struct_ptr.h",
    "sync_call_restrictions.h",
    "sync_handle_registry.h",
    "sync_handle_watcher.h",
    "thread_safe_interface_ptr.h",
    "type_converter.h",
    "union_traits.h",
    "unique_ptr_impl_ref_traits.h",
  ]

  public_deps = [
    ":struct_traits",
    "//base",
    "//ipc:param_traits",
    "//mojo/public/cpp/system",
  ]

  deps = [
    "//base",
    "//mojo/public/interfaces/bindings:bindings__generator",
    "//mojo/public/interfaces/bindings:bindings_shared__generator",
  ]

  defines = [ "MOJO_CPP_BINDINGS_IMPLEMENTATION" ]
}

source_set("struct_traits") {
  sources = [
    "enum_traits.h",
    "struct_traits.h",
  ]
}

if (!is_ios) {
  # TODO(yzshen): crbug.com/617718 Consider moving this into blink.
  source_set("wtf_support") {
    sources = [
      "array_traits_wtf_vector.h",
      "lib/string_traits_wtf.cc",
      "lib/wtf_clone_equals_util.h",
      "lib/wtf_hash_util.h",
      "lib/wtf_serialization.h",
      "map_traits_wtf_hash_map.h",
      "string_traits_wtf.h",
    ]

    public_deps = [
      ":bindings",
      "//third_party/WebKit/Source/wtf",
    ]

    public_configs = [ "//third_party/WebKit/Source:config" ]
  }
}
