# 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/dbus_glib.gni")
import("//common-mk/pkg_config.gni")

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

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

  pkg_deps = [
    "dbus-1",
    "dbus-glib-1",
    "gobject-2.0",
    "libbrillo",
    "libbrillo-glib",
    "libchrome-${libbase_ver}",
  ]
}

generate_dbus_glib("image-burner-dbus-server") {
  dbus_glib_out_dir = "include/bindings"
  dbus_glib_prefix = "image_burner"
  dbus_glib_type = "server"
  dbus_glib_header_stem = "image_burner"
  sources = [ "image_burner.xml" ]
}

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

  # The generated dbus headers use "register".
  cflags = [ "-Wno-deprecated-register" ]
  deps = [ ":image-burner-dbus-server" ]
}

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

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