# Copyright 2020 The Fuchsia Authors. All rights reserved.
# Use of this source code is governed by a BSD-style license that can be
# found in the LICENSE file.

# Add documentation to README.md if updating this file with
# more configurations.

import("//build/components.gni")
import("//build/dist/renamed_binary.gni")
import("//src/sys/core/build/core_shard.gni")

group("intl_services") {
  testonly = true
  public_deps = [
    ":intl_services_comp_v2",
    ":pkg",
    ":pkg_small",
    ":tests",
  ]
}

group("small") {
  deps = [
    ":pkg_small",
    "config:small",
  ]
}

group("tests") {
  testonly = true
  public_deps = []
}

source_set("lib") {
  sources = [
    "run.cc",
    "run.h",
  ]

  deps = [
    "//sdk/fidl/fuchsia.settings",
    "//sdk/lib/sys/cpp",
    "//sdk/lib/syslog/cpp",
    "//src/lib/fxl:fxl",
    "//src/lib/intl/intl_property_provider_impl",
    "//src/lib/intl/time_zone_info:time-zone-info-service-lib",
    "//zircon/system/ulib/async-loop:async-loop-cpp",
    "//zircon/system/ulib/async-loop:async-loop-default",
  ]
}

executable("intl_services_bin") {
  output_name = "intl_services"
  sources = [ "main.cc" ]

  deps = [
    ":lib",
    "//sdk/lib/syslog/cpp",
  ]
}

fuchsia_package_with_single_component("pkg") {
  package_name = "intl_services"
  manifest = "meta/intl_services.cmx"
  deps = [
    ":intl_services_bin",
    "//src/intl:icudtl",
  ]
}

fuchsia_component("intl_services_comp_v2") {
  manifest = "meta/intl_services.cml"
  deps = [
    ":intl_services_bin",
    "//src/intl:icudtl",
  ]
}

# The a11y_manager and intl_services binaries have been fused together for
# storage space reasons, busybox style.
renamed_binary("renamed_a11y_manager") {
  source = "$root_out_dir/a11y_manager"
  source_deps = [ "//src/ui/a11y/bin/a11y_manager:bin" ]
  dest = "bin/intl_services"
}

fuchsia_package_with_single_component("pkg_small") {
  package_name = "intl-services-small"
  component_name = "intl_services"
  manifest = "meta/intl_services.cmx"
  deps = [
    ":renamed_a11y_manager",
    "//src/intl:icudtl",
  ]
}

core_shard("intl_services_shard") {
  shard_file = "meta/intl_services.core_shard.cml"
}

core_shard("intl_services_small_shard") {
  shard_file = "meta/intl_services_small.core_shard.cml"
}

core_shard("intl_services_small_timezones_shard") {
  shard_file = "meta/intl_services_small_timezones.core_shard.cml"
}
