# Copyright 2019 The Fuchsia 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("//build/package.gni")
import("//build/test.gni")
import("//build/test/test_package.gni")

source_set("lib") {
  sources = [
    "app.cc",
    "app.h",
    "ast_builder.cc",
    "ast_builder.h",
    "command.cc",
    "command.h",
    "console.cc",
    "console.h",
    "err.h",
    "executor.cc",
    "executor.h",
    "scoped_interpreter.h",
  ]

  public_deps = [
    "//src/developer/shell/fidl/fuchsia.shell:shell_llcpp",
    "//src/developer/shell/interpreter:shell_server_lib",
    "//src/lib/fsl",
    "//src/lib/line_input",
    "//zircon/public/lib/async-cpp",
    "//zircon/public/lib/cmdline",
    "//zircon/system/fidl/fuchsia-hardware-pty:c",
  ]
}

executable("bin") {
  output_name = "cliff"

  sources = [ "main.cc" ]

  deps = [
    ":lib",
    "//zircon/public/lib/async-loop-cpp",
  ]
}

executable("console_unittests_bin") {
  testonly = true

  sources = [
    "app_unittest.cc",
    "command_unittest.cc",
    "executor_unittest.cc",
  ]

  deps = [
    ":lib",
    "//src/lib/fxl/test:gtest_main",
    "//src/lib/testing/loop_fixture",
    "//third_party/googletest:gmock",
    "//third_party/googletest:gtest",
  ]
}
