# 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/fidl/fidl.gni")
import("//build/package.gni")
import("//build/rust/rustc_binary.gni")
import("//build/test/test_package.gni")
import("//build/testing/environments.gni")
import("//third_party/cobalt_config/metrics_registry.gni")

rustc_binary("bin") {
  name = "omaha_client_service"
  with_unit_tests = true
  edition = "2018"

  deps = [
    ":fuchsia.omaha.client-rustc",
    ":fuchsia.update-rustc",
    ":mos_metrics_registry_rustlib",
    "//garnet/lib/rust/fuchsia_uri",
    "//garnet/lib/rust/omaha_client",
    "//garnet/public/rust/fuchsia-async",
    "//garnet/public/rust/fuchsia-component",
    "//garnet/public/rust/fuchsia-hyper",
    "//garnet/public/rust/fuchsia-syslog",
    "//garnet/public/rust/fuchsia-zircon",
    "//src/lib/cobalt/rust:fuchsia-cobalt",
    "//third_party/rust_crates:failure",
    "//third_party/rust_crates:futures-preview",
    "//third_party/rust_crates:hyper",
    "//third_party/rust_crates:hyper-rustls",
    "//third_party/rust_crates:log",
    "//zircon/public/fidl/fuchsia-cobalt:fuchsia-cobalt-rustc",
  ]
}

package("omaha_client") {
  deps = [
    ":bin",
  ]

  binaries = [
    {
      name = "omaha_client_service"
      dest = "omaha_client_service"
    },
  ]

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

test_package("omaha_client_service_bin_tests") {
  deps = [
    ":bin",
  ]

  tests = [
    {
      name = "omaha_client_service_bin_test"
      environments = basic_envs
    },
  ]
}

fidl("fuchsia.update") {
  sources = [
    "fuchsia.update.fidl",
  ]
}

fidl("fuchsia.omaha.client") {
  sources = [
    "fuchsia.omaha.client.fidl",
  ]
}

metrics_registry("mos_metrics_registry") {
  project_name = "managed_os"
  generate_rust = true
  generate_binarypb = false
}
