# 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("//build/package.gni")
import("//src/lib/icu/tzdata/icu_tzdata_config_data.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"
}

package("tz_version_parrot") {
  deps = [
    ":icu_tz_data_for_tz_version_parrot",
    ":tz_version_parrot_bin",
  ]

  binaries = [
    {
      name = "tz_version_parrot"
    },
  ]

  meta = [
    {
      path = rebase_path("meta/tz_version_parrot.cmx")
      dest = "tz_version_parrot.cmx"
    },
    {
      path = rebase_path("meta/tz_version_parrot_with_tzdata.cmx")
      dest = "tz_version_parrot_with_tzdata.cmx"
    },
    {
      path =
          rebase_path("meta/tz_version_parrot_with_tzdata_wrong_revision.cmx")
      dest = "tz_version_parrot_with_tzdata_wrong_revision.cmx"
    },
  ]

  resources = [
    {
      path = rebase_path("//third_party/icu/common/icudtl.dat")
      dest = "icudtl.dat"
    },
    {
      path = rebase_path("newer_revision.txt")
      dest = "newer_revision.txt"
    },
  ]
}

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