# Copyright 2021 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.

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

group("time_zone_info_service") {
  testonly = true
  deps = [
    ":pkg",
    ":tests",
  ]
}

group("tests") {
  testonly = true
  deps = [
    ":pkg",
    "tests",
  ]
}

executable("bin") {
  output_name = "time-zone-info-service"
  sources = [ "main.cc" ]
  deps = [
    "//sdk/lib/sys/cpp",
    "//sdk/lib/syslog/cpp",
    "//src/lib/fxl",
    "//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",
  ]
}

fuchsia_component("component") {
  component_name = "time-zone-info-service"
  manifest = "meta/time-zone-info-service.cmx"
  deps = [ ":bin" ]
}

fuchsia_package("pkg") {
  package_name = "time-zone-info-service"
  deps = [
    ":component",
    "//src/intl:icudtl",
  ]
}

core_shard("core-shard") {
  shard_file = "meta/time-zone-info-service.core_shard.cml"
}
