# 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")
import("//common-mk/generate-dbus-adaptors.gni")

group("all") {
  deps = [
    ":smbproviderd",
  ]
  if (use.test) {
    deps += [ ":smbprovider_test" ]
  }
  if (use.fuzzer) {
    deps += [ ":netbios_packet_fuzzer" ]
  }
}

pkg_config("target_defaults") {
  pkg_deps = [
    "libbrillo-${libbase_ver}",
    "libchrome-${libbase_ver}",
    "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",
    "protobuf-lite",
  ]
}

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

static_library("libsmbprovider") {
  configs += [ ":target_defaults" ]
  deps = [
    ":smbproviderd_adaptors",
  ]
  sources = [
    "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.cc",
    "kerberos_artifact_client.h",
    "kerberos_artifact_client_interface.h",
    "kerberos_artifact_synchronizer.cc",
    "kerberos_artifact_synchronizer.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",
  ]
}

# Unit tests.
if (use.test) {
  pkg_config("smbprovider_test_config") {
    pkg_deps = [ "libchrome-test-${libbase_ver}" ]
  }
  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",
    ]
  }
}
