# Copyright 2018 The ChromiumOS Authors
# Use of this source code is governed by a BSD-style license that can be
# found in the LICENSE file.

import("//common-mk/generate-dbus-adaptors.gni")
import("//common-mk/pkg_config.gni")

group("all") {
  deps = [
    ":image-burner-adaptors",
    ":image_burner",
    ":install_init",
    ":install_system_services",
    ":install_systemd",
    ":libimage-burner",
  ]
  if (use.test) {
    deps += [ ":unittest_runner" ]
  }
}

pkg_config("target_defaults") {
  libs = [ "rootdev" ]

  pkg_deps = [
    "libbrillo",
    "libchrome",
  ]
}

generate_dbus_adaptors("image-burner-adaptors") {
  dbus_service_config = "dbus_bindings/dbus-service-config.json"
  dbus_adaptors_out_dir = "include/image-burner/dbus_adaptors"
  sources = [ "dbus_bindings/org.chromium.ImageBurnerInterface.xml" ]
}

static_library("libimage-burner") {
  sources = [
    "daemon.cc",
    "image_burn_service.cc",
    "image_burner_impl.cc",
    "image_burner_utils.cc",
  ]
  configs += [ ":target_defaults" ]

  deps = [ ":image-burner-adaptors" ]
}

executable("image_burner") {
  sources = [ "image_burner_main.cc" ]
  configs += [ ":target_defaults" ]
  install_path = "sbin"
  deps = [ ":libimage-burner" ]
}

install_config("install_systemd") {
  sources = [ "ImageBurner.conf" ]
  install_path = "dbus_system_d"
}

install_config("install_system_services") {
  sources = [ "org.chromium.ImageBurner.service" ]
  install_path = "dbus_system_services"
}

install_config("install_init") {
  sources = [ "init/image-burner.conf" ]
  install_path = "upstart"
}

if (use.test) {
  executable("unittest_runner") {
    sources = [
      "image_burner_impl_test.cc",
      "image_burner_utils_test.cc",
    ]
    configs += [
      "//common-mk:test",
      ":target_defaults",
    ]
    run_test = true
    deps = [
      ":libimage-burner",
      "//common-mk/testrunner",
    ]
  }
}
