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

component("gin") {
  sources = [
    "arguments.cc",
    "arguments.h",
    "array_buffer.cc",
    "array_buffer.h",
    "context_holder.cc",
    "converter.cc",
    "converter.h",
    "dictionary.cc",
    "dictionary.h",
    "function_template.cc",
    "function_template.h",
    "gin_export.h",
    "handle.h",
    "interceptor.cc",
    "interceptor.h",
    "isolate_holder.cc",
    "modules/console.cc",
    "modules/console.h",
    "modules/file_module_provider.cc",
    "modules/file_module_provider.h",
    "modules/module_registry.cc",
    "modules/module_registry.h",
    "modules/module_registry_observer.h",
    "modules/module_runner_delegate.cc",
    "modules/module_runner_delegate.h",
    "modules/timer.cc",
    "modules/timer.h",
    "object_template_builder.cc",
    "object_template_builder.h",
    "per_context_data.cc",
    "per_context_data.h",
    "per_isolate_data.cc",
    "per_isolate_data.h",
    "public/context_holder.h",
    "public/gin_embedders.h",
    "public/isolate_holder.h",
    "public/v8_platform.h",
    "public/wrapper_info.h",
    "runner.cc",
    "runner.h",
    "shell_runner.cc",
    "shell_runner.h",
    "try_catch.cc",
    "try_catch.h",
    "v8_platform.cc",
    "wrappable.cc",
    "wrappable.h",
    "wrapper_info.cc",
  ]

  defines = [ "GIN_IMPLEMENTATION" ]
  deps = [
    "//base",
    "//base/third_party/dynamic_annotations",
    "//v8",
  ]

  forward_dependent_configs_from = [
    "//base",
    "//v8",
  ]
}

executable("gin_shell") {
  sources = [
    "shell/gin_main.cc",
  ]

  deps = [
    ":gin",
    "//base",
    "//base:i18n",
    "//v8",
  ]
}

source_set("gin_test") {
  sources = [
    "test/file_runner.cc",
    "test/file_runner.h",
    "test/gc.cc",
    "test/gc.h",
    "test/gtest.cc",
    "test/gtest.h",
    "test/v8_test.cc",
    "test/v8_test.h",
  ]

  deps = [
    ":gin",
    "//testing/gtest",
    "//v8",
  ]

  forward_dependent_configs_from = [
    ":gin",
    "//testing/gtest",
  ]
}

test("gin_unittests") {
  sources = [
    "converter_unittest.cc",
    "interceptor_unittest.cc",
    "modules/module_registry_unittest.cc",
    "modules/timer_unittest.cc",
    "per_context_data_unittest.cc",
    "shell_runner_unittest.cc",
    "test/run_all_unittests.cc",
    "test/run_js_tests.cc",
    "wrappable_unittest.cc",
  ]

  deps = [
    ":gin_test",
    "//base/test:test_support",
    "//v8",
  ]
}
