# 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.
#
# core_services should be thought of as a bundle of many of the services which
# we ship with.

import("//build/config/ui.gni")
import("//build/toolchain/toolchain.gni")
import("//mojo/public/mojo_application.gni")

mojo_native_application("core_services") {
  deps = [
    ":sources",
  ]
  if (is_win) {
    deps += [
      ":copy_files",
      "//third_party/angle:libEGL",
      "//third_party/angle:libGLESv2",
    ]
  }
}

if (is_win) {
  copy("copy_files") {
    sources = [
      "$root_shlib_dir/libEGL.dll",
      "$root_shlib_dir/libGLESv2.dll",
    ]
    outputs = [
      "$root_out_dir/core_services/{{source_file_part}}",
    ]

    deps = [
      "//third_party/angle:libEGL",
      "//third_party/angle:libGLESv2",
    ]
  }
}

source_set("sources") {
  sources = [
    "application_delegate_factory.h",
    "application_delegate_factory_linux.cc",
    "core_services_application_delegate.cc",
    "main.cc",
  ]

  deps = [
    "//base",
    "//components/clipboard:lib",
    "//components/filesystem:lib",
    "//components/web_view:lib",
    "//mojo/logging",
    "//mojo/message_pump",
    "//mojo/public/cpp/bindings",
    "//mojo/services/tracing:lib",
    "//mojo/services/tracing/public/cpp",
    "//mojo/shell/public/cpp",
    "//third_party/icu",
    "//url",
  ]

  if (!is_android) {
    sources += [ "application_delegate_factory_notandroid.cc" ]
    deps += [
      "//components/mus:lib",
      "//components/resource_provider:lib",
      "//mojo/services/network:lib",
    ]
  }

  if (is_linux) {
    deps += [ "//components/font_service:lib" ]
  } else {
    sources += [ "application_delegate_factory_default.cc" ]
  }
}
