# 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_validator_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_validator.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") {
  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") {
    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_validator_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") {
    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_validator_fuzzer") {
    configs += [
      "//common-mk/common_fuzzer",
      ":fuzzer_config",
      ":target_defaults",
    ]
    sources = [
      "config_validator_fuzzer.cc",
    ]
    deps = [
      ":libkerberos",
    ]
  }
}
