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

import("//flutter/testing/testing.gni")

_public_headers = [ "public/flutter_glfw.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_glfw_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("flutter_glfw_headers") {
  public = _public_headers

  public_deps =
      [ "//flutter/shell/platform/common/cpp:common_cpp_library_headers" ]

  configs +=
      [ "//flutter/shell/platform/common/cpp:desktop_library_implementation" ]

  public_configs =
      [ "//flutter/shell/platform/common/cpp:relative_flutter_library_headers" ]
}

source_set("flutter_glfw") {
  public = [ "system_utils.h" ]

  sources = [
    "event_loop.cc",
    "event_loop.h",
    "flutter_glfw.cc",
    "glfw_event_loop.cc",
    "glfw_event_loop.h",
    "headless_event_loop.cc",
    "headless_event_loop.h",
    "key_event_handler.cc",
    "key_event_handler.h",
    "keyboard_hook_handler.h",
    "platform_handler.cc",
    "platform_handler.h",
    "system_utils.cc",
    "text_input_plugin.cc",
    "text_input_plugin.h",
  ]

  configs +=
      [ "//flutter/shell/platform/common/cpp:desktop_library_implementation" ]

  deps = [
    ":flutter_glfw_headers",
    "//build/secondary/third_party/glfw",
    "//flutter/shell/platform/common/cpp:common_cpp",
    "//flutter/shell/platform/common/cpp:common_cpp_input",
    "//flutter/shell/platform/common/cpp/client_wrapper:client_wrapper",
    "//flutter/shell/platform/embedder:embedder_as_internal_library",
    "//flutter/shell/platform/glfw/client_wrapper:client_wrapper_glfw",
    "//third_party/rapidjson",
  ]

  if (is_linux) {
    libs = [ "GL" ]

    configs += [ "//flutter/shell/platform/linux/config:x11" ]
  } else if (is_mac) {
    libs = [
      "CoreVideo.framework",
      "IOKit.framework",
    ]
  }
}

test_fixtures("flutter_glfw_fixtures") {
  fixtures = []
}

executable("flutter_glfw_unittests") {
  testonly = true
  sources = [ "system_utils_test.cc" ]
  deps = [
    ":flutter_glfw",
    ":flutter_glfw_fixtures",
    "//flutter/shell/platform/embedder:embedder_headers",
    "//flutter/testing",
  ]
}

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

  # The GLFW header assumes the presence of the common headers.
  deps = [ "//flutter/shell/platform/common/cpp:publish_headers" ]
}
