# 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 = [
    "main.cc",
    "moterm_app.cc",
    "moterm_app.h",
    "moterm_view.cc",
    "moterm_view.h",
  ]

  deps = [
    ":driver",
    ":key_util",
    ":model",
    "//base",
    "//mojo/application",
    "//mojo/common",
    "//mojo/public/c/gpu",
    "//mojo/public/c/system",
    "//mojo/public/cpp/application",
    "//mojo/public/cpp/bindings",
    "//mojo/public/cpp/bindings:callback",
    "//mojo/services/files/interfaces",
    "//mojo/services/geometry/interfaces",
    "//mojo/services/gfx/composition/interfaces",
    "//mojo/services/terminal/interfaces",
    "//mojo/services/ui/input/interfaces",
    "//mojo/services/ui/views/interfaces",
    "//mojo/skia",
    "//mojo/ui",
    "//mojo/ui:ganesh",
    "//mojo/ui:gl",
    "//skia",
    "//third_party/dejavu-fonts-ttf-2.34:DejaVuSansMonoRegular",
  ]
}

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

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

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

  deps = [
    "//base",
  ]

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

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

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

  public_deps = [
    "//base",
    "//third_party/libteken",
  ]
}

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

  testonly = true

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

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