# Copyright 2019 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")
import("//common-mk/proto_library.gni")

group("all") {
  deps = [
    ":container-protos",
    ":dbus_code_generator",
    ":kerberosd",
    ":libkerberos",
  ]
  if (use.test) {
    deps += [ ":kerberos_test" ]
  }
  if (use.fuzzer) {
    deps += [ ":config_parser_fuzzer" ]
  }
}

config("target_defaults") {
  cflags = [
    "-Wshadow",
    "-Wextra",

    # -Wextra enables unused parameter warnings, but there are unused parameters.
    "-Wno-unused-parameter",
  ]
}

# D-Bus code generator.
generate_dbus_adaptors("dbus_code_generator") {
  new_fd_bindings = true
  dbus_service_config = "dbus_bindings/dbus-service-config.json"
  dbus_adaptors_out_dir = "include/kerberos"
  sources = [ "dbus_bindings/org.chromium.Kerberos.xml" ]
}

# Container protos.
proto_library("container-protos") {
  configs = [ ":target_defaults" ]
  proto_in_dir = "proto"
  proto_out_dir = "include/bindings"
  sources = [ "${proto_in_dir}/kerberos_containers.proto" ]
}

pkg_config("libkerberos_config") {
  pkg_deps = [
    "dbus-1",
    "libbrillo",
    "libchrome-${libbase_ver}",
    "libminijail",
    "libpasswordprovider",
    "libsession_manager-client",
    "mit-krb5",
  ]
}

# Kerberos library (shared between executables and tests).
static_library("libkerberos") {
  configs += [
    ":libkerberos_config",
    ":target_defaults",
  ]
  sources = [
    "account_manager.cc",
    "config_parser.cc",
    "error_strings.cc",
    "fake_krb5_interface.cc",
    "kerberos_adaptor.cc",
    "kerberos_daemon.cc",
    "kerberos_metrics.cc",
    "krb5_interface_impl.cc",
    "krb5_jail_wrapper.cc",
    "platform_helper.cc",
    "tgt_renewal_scheduler.cc",
  ]
  deps = [
    ":container-protos",
    ":dbus_code_generator",
  ]
}

pkg_config("kerberosd_config") {
  # NOSORT
  pkg_deps = [
    "libbrillo",
    "libchrome-${libbase_ver}",
    "libmetrics-${libbase_ver}",
    "libminijail",

    # system_api depends on protobuf (or protobuf-lite). It must
    # appear before protobuf or the linker flags won't be in the right
    # order.
    "system_api",
  ]
  if (use.fuzzer) {
    pkg_deps += [ "protobuf" ]
  } else {
    pkg_deps += [ "protobuf-lite" ]
  }
}

# Kerberos daemon executable.
executable("kerberosd") {
  configs += [
    ":kerberosd_config",
    ":target_defaults",
  ]
  sources = [ "kerberosd_main.cc" ]
  deps = [ ":libkerberos" ]
}

# Unit tests.
if (use.test) {
  pkg_config("kerberos_test_config") {
    # NOSORT
    pkg_deps = [
      "libbrillo",
      "libchrome-${libbase_ver}",
      "libchrome-test-${libbase_ver}",
      "libmetrics-${libbase_ver}",
      "libminijail",

      # system_api depends on protobuf (or protobuf-lite). It must
      # appear before protobuf or the linker flags won't be in the right
      # order.
      "system_api",
    ]
    if (use.fuzzer) {
      pkg_deps += [ "protobuf" ]
    } else {
      pkg_deps += [ "protobuf-lite" ]
    }
  }

  executable("kerberos_test") {
    configs += [
      "//common-mk:test",
      ":kerberos_test_config",
      ":target_defaults",
    ]
    sources = [
      "account_manager_test.cc",
      "config_parser_test.cc",
      "kerberos_adaptor_test.cc",
      "kerberos_metrics_test.cc",
      "krb5_interface_impl_test.cc",
      "krb5_jail_wrapper_test.cc",
      "tgt_renewal_scheduler_test.cc",
    ]
    defines = [ "UNIT_TEST" ]
    deps = [
      ":libkerberos",
      "//common-mk/testrunner",
    ]
  }
}

# Fuzzers.
if (use.fuzzer) {
  pkg_config("fuzzer_config") {
    # NOSORT
    pkg_deps = [
      "libbrillo",
      "libchrome-${libbase_ver}",
      "libmetrics-${libbase_ver}",
      "libminijail",

      # system_api depends on protobuf (or protobuf-lite). It must
      # appear before protobuf or the linker flags won't be in the right
      # order.
      "system_api",
      "protobuf",
    ]
  }

  #pkg_config("libchrome_test_config") {
  #  pkg_deps = [ "libchrome-test-${libbase_ver}" ]
  #}
  executable("config_parser_fuzzer") {
    configs += [
      "//common-mk/common_fuzzer",
      ":fuzzer_config",
      ":target_defaults",
    ]
    sources = [ "config_parser_fuzzer.cc" ]
    deps = [ ":libkerberos" ]
  }
}
