# 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 = [
    ":install_dbus_config",
    ":install_dbus_service",
    ":install_init",
    ":install_policy",
    ":smbproviderd",
  ]
  if (use.test) {
    deps += [ ":smbprovider_test" ]
  }
  if (use.fuzzer) {
    deps += [ ":netbios_packet_fuzzer" ]
  }
}

pkg_config("target_defaults") {
  # NOSORT
  pkg_deps = [
    "libbrillo",
    "libchrome",
    "libpasswordprovider",
    "smbclient",

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

generate_dbus_adaptors("smbproviderd_adaptors") {
  dbus_adaptors_out_dir = "include/dbus_adaptors"
  dbus_service_config = "dbus_bindings/dbus-service-config.json"
  sources = [ "dbus_bindings/org.chromium.SmbProvider.xml" ]
}

static_library("libsmbprovider") {
  sources = [
    "authpolicy_kerberos_artifact_client.cc",
    "authpolicy_kerberos_artifact_client.h",
    "constants.cc",
    "constants.h",
    "copy_progress_interface.h",
    "file_copy_progress.cc",
    "file_copy_progress.h",
    "id_map.h",
    "iterator/caching_iterator.h",
    "iterator/depth_first_iterator.cc",
    "iterator/depth_first_iterator.h",
    "iterator/directory_iterator.cc",
    "iterator/directory_iterator.h",
    "iterator/post_depth_first_iterator.cc",
    "iterator/post_depth_first_iterator.h",
    "iterator/pre_depth_first_iterator.cc",
    "iterator/pre_depth_first_iterator.h",
    "iterator/share_iterator.h",
    "kerberos_artifact_client_interface.h",
    "kerberos_artifact_synchronizer.cc",
    "kerberos_artifact_synchronizer.h",
    "kerberos_kerberos_artifact_client.cc",
    "kerberos_kerberos_artifact_client.h",
    "metadata_cache.cc",
    "metadata_cache.h",
    "mount_manager.cc",
    "mount_manager.h",
    "mount_tracker.cc",
    "mount_tracker.h",
    "netbios_packet_parser.cc",
    "netbios_packet_parser.h",
    "proto.cc",
    "proto.h",
    "read_dir_progress.cc",
    "read_dir_progress.h",
    "recursive_copy_progress.cc",
    "recursive_copy_progress.h",
    "samba_interface.h",
    "samba_interface_impl.cc",
    "samba_interface_impl.h",
    "smbprovider.cc",
    "smbprovider.h",
    "smbprovider_helper.cc",
    "smbprovider_helper.h",
    "temp_file_manager.cc",
    "temp_file_manager.h",
  ]
  configs += [ ":target_defaults" ]
  deps = [ ":smbproviderd_adaptors" ]
}

executable("smbproviderd") {
  sources = [ "smbprovider_main.cc" ]
  configs += [ ":target_defaults" ]
  install_path = "sbin"
  libs = [ "installattributes" ]
  deps = [ ":libsmbprovider" ]
}

install_config("install_dbus_config") {
  sources = [ "etc/dbus-1/org.chromium.SmbProvider.conf" ]
  install_path = "/etc/dbus-1/system.d"
}

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

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

install_config("install_policy") {
  install_path = "/usr/share/policy"
  sources =
      [ "seccomp_filters/smbprovider-seccomp-" + getenv("ARCH") + ".policy" ]
  outputs = [ "smbprovider-seccomp.policy" ]
}

# Unit tests.
if (use.test) {
  pkg_config("smbprovider_test_config") {
    pkg_deps = [ "libchrome-test" ]
  }
  executable("smbprovider_test") {
    sources = [
      "fake_kerberos_artifact_client.cc",
      "fake_kerberos_artifact_client.h",
      "fake_samba_interface.cc",
      "fake_samba_interface.h",
      "fake_samba_proxy.cc",
      "fake_samba_proxy.h",
      "fake_samba_test.cc",
      "file_copy_progress_test.cc",
      "id_map_test.cc",
      "iterator/caching_iterator_test.cc",
      "iterator/depth_first_iterator_test.cc",
      "iterator/directory_iterator_test.cc",
      "iterator/post_depth_first_iterator_test.cc",
      "iterator/pre_depth_first_iterator_test.cc",
      "iterator/share_iterator_test.cc",
      "kerberos_artifact_synchronizer_test.cc",
      "metadata_cache_test.cc",
      "mount_manager_test.cc",
      "mount_tracker_test.cc",
      "netbios_packet_parser_test.cc",
      "proto_test.cc",
      "read_dir_progress_test.cc",
      "recursive_copy_progress_test.cc",
      "smbprovider_helper_test.cc",
      "smbprovider_test.cc",
      "smbprovider_test_helper.cc",
      "smbprovider_test_helper.h",
      "temp_file_manager_test.cc",
    ]
    configs += [
      "//common-mk:test",
      ":target_defaults",
    ]
    run_test = true
    deps = [
      ":libsmbprovider",
      "//common-mk/testrunner:testrunner",
    ]
  }
}

# Fuzzer target.
if (use.fuzzer) {
  executable("netbios_packet_fuzzer") {
    sources = [ "netbios_packet_fuzzer.cc" ]
    configs += [
      "//common-mk/common_fuzzer:common_fuzzer",
      ":target_defaults",
    ]
    deps = [ ":libsmbprovider" ]
  }
}
