# Copyright 2013 The Flutter Authors. All rights reserved.
# Use of this source code is governed by a BSD-style license that can be
# found in the LICENSE file.

config("desktop_library_implementation") {
  defines = [ "FLUTTER_DESKTOP_LIBRARY" ]
}

_public_headers = [
  "public/flutter_export.h",
  "public/flutter_messenger.h",
  "public/flutter_plugin_registrar.h",
]

# Any files that are built by clients (client_wrapper code, library headers for
# implementations using this shared code, etc.) include the public headers
# assuming they are in the include path. This configuration should be added to
# any such code that is also built by GN to make the includes work.
config("relative_flutter_library_headers") {
  include_dirs = [ "public" ]
}

# The headers are a separate source set since the client wrapper is allowed
# to depend on the public headers, but none of the rest of the code.
source_set("common_cpp_library_headers") {
  public = _public_headers

  configs += [ ":desktop_library_implementation" ]
}

source_set("common_cpp") {
  public = [
    "incoming_message_dispatcher.h",
    "text_input_model.h",
  ]

  # TODO: Refactor flutter_glfw.cc to move the implementations corresponding
  # to the _public_headers above into this target.
  sources = [
    "incoming_message_dispatcher.cc",
    "text_input_model.cc",
  ]

  configs += [ ":desktop_library_implementation" ]

  deps = [
    ":common_cpp_library_headers",
    "$flutter_root/shell/platform/common/cpp/client_wrapper:client_wrapper",
    "$flutter_root/shell/platform/embedder:embedder_with_symbol_prefix",
  ]

  # TODO: Remove once text input model refactor lands, at which point this code
  # won't have a JSON dependency.
  defines = [ "USE_RAPID_JSON" ]
  deps += [ "//third_party/rapidjson" ]
}

copy("publish_headers") {
  sources = _public_headers
  outputs = [
    "$root_out_dir/{{source_file_part}}",
  ]
}
