# 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/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" ]
  }
}
