# 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_overrides/build.gni")
import("osp/build/config/services.gni")

# All compilable non-test targets in the repository (both executables and
# source_sets).
group("gn_all") {
  deps = [
    "cast/common:certificate",
    "cast/common:channel",
    "cast/common:public",
    "cast/receiver:channel",
    "cast/sender:channel",
    "cast/streaming:receiver",
    "cast/streaming:sender",
    "discovery:common",
    "discovery:dnssd",
    "discovery:mdns",
    "discovery:public",
    "platform",
    "third_party/abseil",
    "third_party/boringssl",
    "third_party/jsoncpp",
    "third_party/mozilla",
    "third_party/tinycbor",
    "tools/cddl($host_toolchain)",
    "util",
  ]

  # Mac OS X 10.15 is incompatible with the current version of QUIC.
  if (!is_mac) {
    deps += [
      "osp",
      "osp/msgs",
    ]

    if (use_mdns_responder) {
      deps += [ "osp/impl/discovery/mdns:mdns_demo" ]
    }

    if (use_chromium_quic) {
      deps += [
        "third_party/chromium_quic",
        "third_party/chromium_quic:quic_demo_server",
        "third_party/chromium_quic:quic_streaming_playback_controller",
      ]
    }

    if (use_chromium_quic && use_mdns_responder) {
      deps += [ "osp:osp_demo" ]
    }
  }

  if (!build_with_chromium) {
    deps += [
      "cast/standalone_receiver:cast_receiver",
      "cast/standalone_sender:cast_sender",
      "third_party/protobuf:protoc($host_toolchain)",
      "third_party/zlib",
    ]
  }
}

source_set("openscreen_unittests_all") {
  testonly = true
  public_deps = [
    "cast/common:unittests",
    "cast/receiver:unittests",
    "cast/sender:unittests",
    "cast/streaming:unittests",
    "cast/test:unittests",
    "platform:unittests",
    "third_party/abseil",
    "util:unittests",
  ]

  if (!build_with_chromium && is_posix) {
    public_deps += [
      "cast/test:make_crl_tests($host_toolchain)",

      # TODO(crbug.com/1132604): Discovery unittests fail in Chrome.
      "discovery:unittests",
    ]
  }

  if (!is_mac) {
    public_deps += [
      "osp:unittests",
      "osp/msgs:unittests",
    ]

    if (use_mdns_responder) {
      public_deps += [
        "osp/impl/discovery/mdns:unittests",

        # Currently this target only includes mDNS tests.
        "osp/impl/testing:unittests",
      ]
    }
  }
}

if (!build_with_chromium) {
  executable("openscreen_unittests") {
    testonly = true
    deps = [
      ":openscreen_unittests_all",
      "test:test_main",
    ]
  }
}

if (!build_with_chromium && is_posix) {
  source_set("e2e_tests_all") {
    testonly = true
    public_deps = [
      "cast/common:discovery_e2e_test",
      "cast/test:e2e_tests",
      "cast/test:make_crl_tests($host_toolchain)",
    ]
  }

  executable("e2e_tests") {
    testonly = true
    deps = [
      ":e2e_tests_all",
      "test:test_main",
    ]
  }
}
