# Copyright (c) 2017 The WebRTC project authors. All Rights Reserved.
#
# Use of this source code is governed by a BSD-style license
# that can be found in the LICENSE file in the root of the source
# tree. An additional intellectual property rights grant can be found
# in the file PATENTS.  All contributing project authors may
# be found in the AUTHORS file in the root of the source tree.

import("../webrtc.gni")
if (is_android) {
  import("//build/config/android/config.gni")
  import("//build/config/android/rules.gni")
}

rtc_static_library("ortc") {
  defines = []
  sources = [
    "ortcfactory.cc",
    "ortcfactory.h",
    "ortcrtpreceiveradapter.cc",
    "ortcrtpreceiveradapter.h",
    "ortcrtpsenderadapter.cc",
    "ortcrtpsenderadapter.h",
    "rtpparametersconversion.cc",
    "rtpparametersconversion.h",
    "rtptransportadapter.cc",
    "rtptransportadapter.h",
    "rtptransportcontrolleradapter.cc",
    "rtptransportcontrolleradapter.h",
  ]

  # TODO(deadbeef): Create a separate target for the common things ORTC and
  # PeerConnection code shares, so that ortc can depend on that instead of
  # libjingle_peerconnection.
  deps = [
    "../api:optional",
    "../call:call_interfaces",
    "../call:rtp_sender",
    "../logging:rtc_event_log_api",
    "../media:rtc_media",
    "../media:rtc_media_base",
    "../modules/audio_processing:audio_processing",
    "../p2p:rtc_p2p",
    "../pc:libjingle_peerconnection",
    "../pc:rtc_pc",
    "../rtc_base:rtc_base",
    "../rtc_base:rtc_base_approved",
  ]

  public_deps = [
    "../api:ortc_api",
  ]

  if (!build_with_chromium && is_clang) {
    # Suppress warnings from the Chromium Clang plugin (bugs.webrtc.org/163).
    suppressed_configs += [ "//build/config/clang:find_bad_constructs" ]
  }
}

if (rtc_include_tests) {
  rtc_test("ortc_unittests") {
    testonly = true

    sources = [
      "ortcfactory_integrationtest.cc",
      "ortcfactory_unittest.cc",
      "ortcrtpreceiver_unittest.cc",
      "ortcrtpsender_unittest.cc",
      "rtpparametersconversion_unittest.cc",
      "rtptransport_unittest.cc",
      "rtptransportcontroller_unittest.cc",
      "srtptransport_unittest.cc",
      "testrtpparameters.cc",
      "testrtpparameters.h",
    ]

    deps = [
      ":ortc",
      "../api:libjingle_peerconnection_api",
      "../api/audio_codecs:builtin_audio_decoder_factory",
      "../api/audio_codecs:builtin_audio_encoder_factory",
      "../media:rtc_media_tests_utils",
      "../p2p:p2p_test_utils",
      "../p2p:rtc_p2p",
      "../pc:pc_test_utils",
      "../rtc_base:rtc_base",
      "../rtc_base:rtc_base_approved",
      "../rtc_base:rtc_base_tests_main",
      "../rtc_base:rtc_base_tests_utils",
      "../system_wrappers:metrics_default",
    ]

    if (!build_with_chromium && is_clang) {
      # Suppress warnings from the Chromium Clang plugin (bugs.webrtc.org/163).
      suppressed_configs += [ "//build/config/clang:find_bad_constructs" ]
    }

    if (is_android) {
      deps += [ "//testing/android/native_test:native_test_support" ]
    }
  }
}
