# Copyright 2018 The Chromium 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("build/config/services.gni")

source_set("osp") {
  public_deps = [ "public" ]
  deps = [ "impl" ]
}

if (use_chromium_quic) {
  source_set("osp_with_chromium_quic") {
    public_deps = [ ":osp" ]
    deps = [ "impl:chromium_quic_integration" ]
  }
}

source_set("unittests") {
  testonly = true

  sources = [
    "impl/presentation/presentation_connection_unittest.cc",
    "impl/presentation/presentation_controller_unittest.cc",
    "impl/presentation/presentation_receiver_unittest.cc",
    "impl/presentation/testing/mock_connection_delegate.h",
    "impl/presentation/url_availability_requester_unittest.cc",
    "impl/quic/quic_client_unittest.cc",
    "impl/quic/quic_server_unittest.cc",
    "impl/receiver_list_unittest.cc",
    "impl/service_listener_impl_unittest.cc",
    "impl/service_publisher_impl_unittest.cc",
    "public/endpoint_request_ids_unittest.cc",
    "public/message_demuxer_unittest.cc",
    "public/service_info_unittest.cc",
  ]

  deps = [
    "../platform:base",
    "../platform:test",
    "../third_party/abseil",
    "../third_party/googletest:gmock",
    "../third_party/googletest:gtest",
    "../third_party/tinycbor",
    "../util",
    "impl",
    "impl/quic:test_support",
    "public",
    "public:test_support",
  ]

  if (use_mdns_responder) {
    sources += [ "impl/mdns_responder_service_unittest.cc" ]

    deps += [ "impl/testing" ]
  }
}

if (use_chromium_quic && use_mdns_responder) {
  executable("osp_demo") {
    sources = [ "demo/osp_demo.cc" ]
    deps = [
      ":osp_with_chromium_quic",
      "//osp/impl/discovery/mdns",
      "//platform",
      "//util",
    ]
  }
}
