# 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/interfaces",
    "//mojo/services/surfaces/interfaces:surface_id",
    "//mojo/services/terminal/interfaces",
    "//mojo/services/view_manager/cpp",
    "//skia",
    "//third_party/dejavu-fonts-ttf-2.34:DejaVuSansMonoRegular",
  ]
}

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

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

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

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

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

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

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

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 = [
    "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",
  ]
}
