# Copyright 2021 The Cobalt Authors. All Rights Reserved.
#
# Licensed under the Apache License, Version 2.0 (the "License");
# you may not use this file except in compliance with the License.
# You may obtain a copy of the License at
#
#     http://www.apache.org/licenses/LICENSE-2.0
#
# Unless required by applicable law or agreed to in writing, software
# distributed under the License is distributed on an "AS IS" BASIS,
# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
# See the License for the specific language governing permissions and
# limitations under the License.

config("h5vcc_internal_config") {
  # For cobalt_build_id.h
  include_dirs = [ target_gen_dir ]
}

config("h5vcc_external_config") {
  defines = []
  if (enable_account_manager) {
    defines += [ "COBALT_ENABLE_ACCOUNT_MANAGER" ]
  }
  if (enable_sso) {
    defines += [ "COBALT_ENABLE_SSO" ]
  }
}

static_library("h5vcc") {
  has_pedantic_warnings = true

  sources = [
    "dial/dial_http_request.cc",
    "dial/dial_http_request.h",
    "dial/dial_http_response.cc",
    "dial/dial_http_response.h",
    "dial/dial_server.cc",
    "dial/dial_server.h",
    "h5vcc.cc",
    "h5vcc.h",
    "h5vcc_accessibility.cc",
    "h5vcc_accessibility.h",
    "h5vcc_account_info.cc",
    "h5vcc_account_info.h",
    "h5vcc_audio_config.cc",
    "h5vcc_audio_config.h",
    "h5vcc_audio_config_array.cc",
    "h5vcc_audio_config_array.h",
    "h5vcc_crash_log.cc",
    "h5vcc_crash_log.h",
    "h5vcc_deep_link_event_target.cc",
    "h5vcc_deep_link_event_target.h",
    "h5vcc_event_listener_container.h",
    "h5vcc_platform_service.cc",
    "h5vcc_platform_service.h",
    "h5vcc_runtime.cc",
    "h5vcc_runtime.h",
    "h5vcc_runtime_event_target.cc",
    "h5vcc_runtime_event_target.h",
    "h5vcc_screen.cc",
    "h5vcc_screen.h",
    "h5vcc_settings.cc",
    "h5vcc_settings.h",
    "h5vcc_storage.cc",
    "h5vcc_storage.h",
    "h5vcc_system.cc",
    "h5vcc_system.h",
    "h5vcc_trace_event.cc",
    "h5vcc_trace_event.h",
  ]
  configs += [ ":h5vcc_internal_config" ]
  public_configs = [ ":h5vcc_external_config" ]
  deps = [
    "//cobalt/account",
    "//cobalt/base",
    "//cobalt/browser:browser_switches",
    "//cobalt/build:cobalt_build_id",
    "//cobalt/configuration",
    "//cobalt/dom",
    "//cobalt/media",
    "//cobalt/network",
    "//cobalt/persistent_storage:persistent_settings",
    "//cobalt/script",
    "//cobalt/speech",
    "//cobalt/sso",
    "//cobalt/storage",
    "//cobalt/trace_event",
    "//cobalt/watchdog",
    "//cobalt/web:dom_exception",
    "//net",
    "//net:http_server",
    "//starboard",
    "//third_party/protobuf:protobuf_lite",
  ]

  if (enable_account_manager) {
    sources += [
      "h5vcc_account_manager.cc",
      "h5vcc_account_manager.h",
    ]
  }

  if (enable_sso) {
    sources += [
      "h5vcc_sso.cc",
      "h5vcc_sso.h",
    ]
  }

  if (sb_is_evergreen) {
    sources += [
      "h5vcc_updater.cc",
      "h5vcc_updater.h",
    ]
    deps += [ "//cobalt/updater" ]
  }
}
