# 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/pkg_config.gni")

group("all") {
  deps = [ ":generate-chromeos-dbus-bindings" ]
  if (use.test) {
    deps += [ ":chromeos_dbus_bindings_unittest" ]
  }
  if (use.fuzzer) {
    deps += [ ":chromeos_dbus_bindings_signature_fuzzer" ]
  }
}

pkg_config("target_default_pkg_deps") {
  pkg_deps = [
    "libbrillo",
    "libchrome",
  ]
}

config("target_defaults") {
  cflags = [
    "-Wextra",
    "-Wno-unused-parameter",  # for scoped_ptr.h, included indirectly
  ]
  cflags_cc = [
    "-fno-strict-aliasing",
    "-Woverloaded-virtual",
  ]
  configs = [ ":target_default_pkg_deps" ]
}

pkg_config("libchromeos-dbus-bindings_config") {
  pkg_deps = [ "dbus-1" ]
}

pkg_config("libchromeos-dbus-bindings_config_export") {
  pkg_deps = [ "expat" ]
}

static_library("libchromeos-dbus-bindings") {
  sources = [
    "adaptor_generator.cc",
    "dbus_signature.cc",
    "disallow_copy_and_assign.cc",
    "header_generator.cc",
    "indented_text.cc",
    "method_name_generator.cc",
    "name_parser.cc",
    "proxy_generator.cc",
    "xml_interface_parser.cc",
  ]
  configs += [
    ":target_defaults",
    ":libchromeos-dbus-bindings_config",
  ]
  all_dependent_configs = [ ":libchromeos-dbus-bindings_config_export" ]
}

executable("generate-chromeos-dbus-bindings") {
  sources = [ "generate_chromeos_dbus_bindings.cc" ]
  configs += [ ":target_defaults" ]
  deps = [ ":libchromeos-dbus-bindings" ]
}

if (use.test) {
  executable("chromeos_dbus_bindings_unittest") {
    sources = [
      "adaptor_generator_test.cc",
      "dbus_signature_test.cc",
      "indented_text_test.cc",
      "method_name_generator_test.cc",
      "name_parser_test.cc",
      "proxy_generator_mock_test.cc",
      "proxy_generator_test.cc",
      "test_utils.cc",
      "xml_interface_parser_test.cc",
    ]
    configs += [
      "//common-mk:test",
      ":target_defaults",
    ]
    deps = [
      ":libchromeos-dbus-bindings",
      "//common-mk/testrunner:testrunner",
    ]
  }
}

if (use.fuzzer) {
  executable("chromeos_dbus_bindings_signature_fuzzer") {
    sources = [ "dbus_signature_fuzzer.cc" ]
    configs += [
      "//common-mk/common_fuzzer",
      ":target_defaults",
    ]
    deps = [ ":libchromeos-dbus-bindings" ]
  }
}
