# 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("base_config") {
  defines = []

  if (is_debug || is_devel) {
    defines += [
      "ENABLE_DEBUG_C_VAL",
      "ENABLE_TOKEN_ALPHABETICAL_SORTING",
    ]
  } else if (is_qa) {
    defines += [ "ENABLE_DEBUG_C_VAL" ]
  }
}

static_library("base") {
  sources = [
    "accessibility_caption_settings_changed_event.h",
    "accessibility_settings_changed_event.h",
    "accessibility_text_to_speech_settings_changed_event.h",
    "address_sanitizer.h",
    "c_val.cc",
    "c_val.h",
    "c_val_collection_entry_stats.h",
    "c_val_collection_timer_stats.h",
    "c_val_time_interval_entry_stats.h",
    "c_val_time_interval_timer_stats.h",
    "camera_transform.h",
    "circular_buffer_shell.cc",
    "circular_buffer_shell.h",
    "clock.h",
    "cobalt_paths.h",
    "compiler.h",
    "console_log.h",
    "date_time_configuration_changed_event.h",
    "deep_link_event.h",
    "event.h",
    "event_dispatcher.cc",
    "event_dispatcher.h",
    "get_application_key.cc",
    "get_application_key.h",
    "init_cobalt.cc",
    "init_cobalt.h",
    "language.cc",
    "language.h",
    "localized_strings.cc",
    "localized_strings.h",
    "log_message_handler.cc",
    "log_message_handler.h",
    "message_queue.h",
    "on_metric_upload_event.h",
    "on_screen_keyboard_hidden_event.h",
    "on_screen_keyboard_shown_event.h",
    "path_provider.cc",
    "path_provider.h",
    "poller.h",
    "polymorphic_downcast.h",
    "polymorphic_equatable.h",
    "ref_counted_lock.h",
    "source_location.cc",
    "source_location.h",
    "starboard_stats_tracker.h",
    "startup_timer.cc",
    "startup_timer.h",
    "statistics.h",
    "stop_watch.cc",
    "stop_watch.h",
    "token.cc",
    "token.h",
    "tokens.cc",
    "tokens.h",
    "type_id.h",
    "unicode/character.cc",
    "unicode/character.h",
    "unicode/character_values.h",
    "unused.h",
    "version_compatibility.cc",
    "version_compatibility.h",
    "window_size_changed_event.h",
    "wrap_main.h",
    "wrap_main_starboard.h",
  ]

  public_configs = [ ":base_config" ]

  public_deps = [ "//base" ]

  deps = [
    "//base:i18n",
    "//starboard/common",
    "//third_party/icu",
    "//third_party/libxml",
    "//url",
  ]
}

target(gtest_target_type, "base_test") {
  testonly = true
  sources = [
    "c_val_collection_entry_stats_test.cc",
    "c_val_collection_timer_stats_test.cc",
    "c_val_test.cc",
    "c_val_time_interval_entry_stats_test.cc",
    "c_val_time_interval_timer_stats_test.cc",
    "circular_buffer_shell_unittest.cc",
    "fixed_size_lru_cache_test.cc",
    "statistics_test.cc",
    "token_test.cc",
  ]
  deps = [
    ":base",
    "//cobalt/test:run_all_unittests",
    "//starboard:starboard_group",
    "//testing/gmock",
    "//testing/gtest",
  ]
  data_deps = [
    "//cobalt/network:copy_ssl_certificates",
    "//third_party/icu:icudata",
  ]
}
