# 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 = [ ":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") {
  configs += [ ":target_defaults" ]
  deps = [ ":smbproviderd_adaptors" ]
  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",
  ]
}

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

# Unit tests.
if (use.test) {
  pkg_config("smbprovider_test_config") {
    pkg_deps = [ "libchrome-test" ]
  }
  executable("smbprovider_test") {
    configs += [
      "//common-mk:test",
      ":target_defaults",
    ]
    deps = [
      ":libsmbprovider",
      "//common-mk/testrunner:testrunner",
    ]
    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",
    ]
  }
}

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