# Copyright 2019 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("//src/lib/icu/tzdata/icu_tzdata_config_data.gni")
import("//src/sys/build/components.gni")

executable("tz_version_parrot_bin") {
  output_name = "tz_version_parrot"

  sources = [ "main.cc" ]

  deps = [
    "//sdk/lib/sys/cpp",
    "//src/lib/files",
    "//src/lib/fxl",
    "//src/lib/icu_data/cpp",
    "//third_party/icu",
  ]
}

icu_tzdata_config_data("icu_tz_data_for_tz_version_parrot") {
  for_pkg = "tz_version_parrot"
}

fuchsia_component("tz_version_parrot_main") {
  component_name = "tz_version_parrot"
  manifest = "meta/tz_version_parrot.cmx"
  deps = [ ":tz_version_parrot_bin" ]
}

fuchsia_component("tz_version_parrot_with_tzdata") {
  manifest = "meta/tz_version_parrot_with_tzdata.cmx"
  deps = [ ":tz_version_parrot_bin" ]
}

fuchsia_component("tz_version_parrot_with_tzdata_wrong_revision") {
  manifest = "meta/tz_version_parrot_with_tzdata_wrong_revision.cmx"
  deps = [ ":tz_version_parrot_bin" ]
}

fuchsia_package("tz_version_parrot") {
  deps = [
    ":icu_tz_data_for_tz_version_parrot",
    ":tz_version_parrot_main",
    ":tz_version_parrot_resources",
    ":tz_version_parrot_with_tzdata",
    ":tz_version_parrot_with_tzdata_wrong_revision",
  ]
}

resource("tz_version_parrot_resources") {
  sources = [
    "//third_party/icu/common/icudtl.dat",
    "newer_revision.txt",
  ]
  outputs = [ "data/{{source_file_part}}" ]
}

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