# Copyright 2018 The Chromium OS 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("//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 = "/etc/dbus-1/system.d"
}

install_config("install_system_services") {
  sources = [ "org.chromium.ImageBurner.service" ]
  install_path = "/usr/share/dbus-1/system-services"
}

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

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",
    ]
  }
}
