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

import("//mojo/public/mojo_application.gni")

mojo_native_application("moterm") {
  sources = [
    "moterm_main.cc",
    "moterm_view.cc",
    "moterm_view.h",
  ]

  deps = [
    ":driver",
    ":gl_helper",
    ":key_util",
    ":model",
    "//base",
    "//mojo/application",
    "//mojo/common",
    "//mojo/public/c/system",
    "//mojo/public/cpp/application",
    "//mojo/public/cpp/bindings",
    "//mojo/public/cpp/bindings:callback",
    "//mojo/services/files/public/interfaces",
    "//mojo/services/surfaces/public/interfaces:surface_id",
    "//mojo/services/terminal/public/interfaces",
    "//mojo/services/view_manager/public/cpp",
    "//mojo/skia",
    "//skia",
    "//third_party/dejavu-fonts-ttf-2.34:DejaVuSansMonoRegular",
  ]
}

mojo_native_application("moterm_example_app") {
  sources = [
    "moterm_example_app.cc",
  ]

  deps = [
    "//base",
    "//examples/window_manager:bindings",
    "//mojo/application",
    "//mojo/public/cpp/bindings",
    "//mojo/public/cpp/utility",
    "//mojo/public/interfaces/application",
    "//mojo/services/files/public/interfaces",
    "//mojo/services/geometry/public/interfaces",
    "//mojo/services/view_manager/public/cpp",
    "//mojo/services/terminal/public/interfaces",
  ]
}

mojo_native_application("gl_helper_test_app") {
  sources = [
    "gl_helper_test_app.cc",
  ]

  deps = [
    ":gl_helper",
    "//base",
    "//mojo/application",
    "//mojo/services/geometry/public/interfaces",
    "//mojo/services/gpu/public/interfaces",
    "//mojo/services/native_viewport/public/interfaces",
    "//mojo/services/surfaces/public/interfaces",
  ]
}

source_set("driver") {
  sources = [
    "moterm_driver.cc",
    "moterm_driver.h",
  ]

  public_deps = [
    "//base",
    "//mojo/public/cpp/bindings",
    "//mojo/services/files/public/interfaces",
  ]
}

source_set("gl_helper") {
  sources = [
    "gl_helper.cc",
    "gl_helper.h",
  ]

  deps = [
    "//mojo/public/cpp/application",
    "//mojo/public/c/gles2",
    "//mojo/public/interfaces/application",
    "//mojo/services/gpu/public/interfaces",
    "//mojo/services/surfaces/public/interfaces",
  ]

  forward_dependent_configs_from = [
    "//mojo/public/c/gles2",
    "//mojo/services/gpu/public/interfaces",
    "//mojo/services/surfaces/public/interfaces",
  ]

  public_deps = [
    "//base",
    "//mojo/public/c/gles2:headers",
    "//mojo/services/geometry/public/cpp",
    "//mojo/services/geometry/public/interfaces",
    "//mojo/services/surfaces/public/cpp",
    "//mojo/services/surfaces/public/interfaces:surface_id",
  ]
}

source_set("key_util") {
  sources = [
    "key_util.cc",
    "key_util.h",
  ]

  deps = [
    "//base",
  ]

  public_deps = [
    "//mojo/services/input_events/public/interfaces",
  ]
}

source_set("model") {
  sources = [
    "moterm_model.cc",
    "moterm_model.h",
  ]

  deps = [
    "//third_party/libteken",
  ]

  forward_dependent_configs_from = [ "//third_party/libteken" ]

  public_deps = [
    "//base",
  ]
}

mojo_native_application("apptests") {
  output_name = "moterm_apptests"

  testonly = true

  sources = [
    "gl_helper_unittest.cc",
    "key_util_unittest.cc",
    "moterm_driver_unittest.cc",
    "moterm_model_unittest.cc",
  ]

  deps = [
    ":driver",
    ":gl_helper",
    ":key_util",
    ":model",
    "//mojo/application",
    "//mojo/application:test_support",
    "//mojo/public/cpp/bindings:callback",
    "//testing/gtest",
  ]
}
