# Copyright 2017 The Fuchsia 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("//third_party/cobalt/cobalt_config_header.gni")
import("//third_party/protobuf/proto_library.gni")

static_library("encoder") {
  sources = [
    "encoder.cc",
    "encoder.h",
    "envelope_maker.cc",
    "envelope_maker.h",
    "project_context.cc",
    "project_context.h",
    "send_retryer.cc",
    "send_retryer.h",
    "shipping_manager.cc",
    "shipping_manager.h",
    "shuffler_client.cc",
    "shuffler_client.h",
    "system_data.cc",
    "system_data.h",
  ]
  public_configs = [ "//third_party/cobalt:cobalt_config" ]

  deps = [
    "//third_party/cobalt/algorithms/forculus:forculus_encoder",
    "//third_party/cobalt/algorithms/rappor:rappor_encoder",
  ]

  public_deps = [
    ":client_secret",
    "//garnet/public/lib/fxl",
    "//third_party/cobalt:cobalt_proto",
    "//third_party/cobalt/config:client_config",
    "//third_party/cobalt/config:cobalt_config_proto",
    "//third_party/cobalt/shuffler:shuffler_service",
    "//third_party/cobalt/util:clock",
    "//third_party/cobalt/util:encrypted_message_util",
    "//third_party/grpc:grpc++",
  ]
}

static_library("client_secret") {
  sources = [
    "client_secret.cc",
    "client_secret.h",
  ]
  configs += [ "//third_party/cobalt:cobalt_config" ]

  deps = [
    "//third_party/cobalt/util/crypto_util",
  ]
}

# Generate encoder_test_config.h from encoder_test_config.yaml.
cobalt_config_header("generate_encoder_test_config") {
  input_yaml = "encoder_test_config.yaml"
  output_file = "encoder_test_config.h"
}

# Generate envelope_maker_test_config.h from envelope_maker_test_config.yaml.
cobalt_config_header("generate_envelope_maker_test_config") {
  input_yaml = "envelope_maker_test_config.yaml"
  output_file = "envelope_maker_test_config.h"
}

# Generate shipping_manager_test_config.h from
# shipping_manager_test_config.yaml.
cobalt_config_header("generate_shipping_manager_test_config") {
  input_yaml = "shipping_manager_test_config.yaml"
  output_file = "shipping_manager_test_config.h"
}


source_set("unittests") {
  testonly = true

  sources = [
    "client_secret_test.cc",
    "encoder_test.cc",
    "encoder_test_config.h",
    "envelope_maker_test.cc",
    "envelope_maker_test_config.h",
    "send_retryer_test.cc",
    "shipping_manager_test.cc",
    "shipping_manager_test_config.h",
    "shuffler_client_test.cc",
    "system_data_test.cc",
  ]

  deps = [
    ":encoder",
    ":generate_encoder_test_config",
    ":generate_envelope_maker_test_config",
    ":generate_shipping_manager_test_config",
    "//third_party/gflags",
    "//third_party/gtest",

    # Note(rudominer) We need protobuf full here for deserializing ASCII
    # protos as part of the test.
    "//third_party/protobuf:protobuf_full",
  ]

  configs += [ "//third_party/cobalt:cobalt_config" ]
}
