# Copyright (c) 2015 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")
}

group("api") {
  public_deps = [
    ":libjingle_peerconnection_api",
  ]
}

rtc_source_set("call_api") {
  sources = [
    "call/audio_sink.h",
  ]

  deps = [
    # TODO(kjellander): Add remaining dependencies when webrtc:4243 is done.
    ":audio_mixer_api",
    ":transport_api",
    "..:webrtc_common",
    "../rtc_base:rtc_base_approved",
    "audio_codecs:audio_codecs_api",
  ]
}

rtc_static_library("libjingle_peerconnection_api") {
  cflags = []
  sources = [
    "candidate.cc",
    "candidate.h",
    "datachannelinterface.h",
    "dtmfsenderinterface.h",
    "jsep.h",
    "jsepicecandidate.h",
    "jsepsessiondescription.h",
    "mediaconstraintsinterface.cc",
    "mediaconstraintsinterface.h",
    "mediastreaminterface.cc",
    "mediastreamproxy.h",
    "mediastreamtrackproxy.h",
    "mediatypes.cc",
    "mediatypes.h",
    "notifier.h",
    "peerconnectionfactoryproxy.h",
    "peerconnectionproxy.h",
    "proxy.cc",
    "proxy.h",
    "rtcerror.cc",
    "rtcerror.h",
    "rtpparameters.cc",
    "rtpparameters.h",
    "rtpreceiverinterface.h",
    "rtpsenderinterface.h",
    "statstypes.cc",
    "statstypes.h",
    "turncustomizer.h",
    "umametrics.cc",
    "umametrics.h",
    "videosourceproxy.h",
  ]

  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" ]
  }

  public_deps = [
    ":libjingle_api_deprecated_headers",
    ":mediastream_interface_and_implicit_video_frame_api",
    ":peerconnection_and_implicit_call_api",
  ]

  deps = [
    # Basically, don't add stuff here. You might break sensitive downstream
    # targets like pnacl. API should not depend on anything, really. All these
    # should go away, in time.
    ":optional",
    ":rtc_stats_api",
    "..:webrtc_common",
    "../rtc_base:rtc_base",
    "../rtc_base:rtc_base_approved",
    "audio_codecs:audio_codecs_api",
  ]

  # This is needed until bugs.webrtc.org/7504 is removed so this target can
  # properly depend on ../media:rtc_media_base
  # TODO(kjellander): Remove this dependency.
  if (is_nacl) {
    deps += [ "//native_client_sdk/src/libraries/nacl_io" ]
  }
}

rtc_source_set("peerconnection_and_implicit_call_api") {
  # The peerconnectioninterface.h file pulls in call/callfactoryinterface.h
  # and the entire call module with it. We need to either get rid of this
  # dependency or pull most of call/ into the API. For now, silence the warnings
  # this creates since it creates a circular dependency (call very much depends
  # on API). See bugs.webrtc.org/7504.
  check_includes = false
  sources = [
    "peerconnectioninterface.h",
  ]
}

rtc_source_set("mediastream_interface_and_implicit_video_frame_api") {
  # The mediastreaminterface.h file pulls in in video_frame.h, but the
  # system_wrappers dependency that comes with that breaks pnacl downstream.
  # TODO(phoglund): solve this (see bugs.webrtc.org/7504).
  check_includes = false
  sources = [
    "mediastreaminterface.h",
  ]
}

rtc_source_set("libjingle_api_deprecated_headers") {
  # We need to include headers from undeclared targets here, since they cause
  # circular dependencies. These deprecated headers are going away anyway.
  # See http://bugs.webrtc.org/5883.
  check_includes = false
  sources = [
    "datachannel.h",
    "mediastream.h",
    "mediastreamtrack.h",
    "rtpsender.h",
    "streamcollection.h",
    "videotracksource.h",
    "webrtcsdp.h",
  ]
}

rtc_source_set("libjingle_logging_api") {
  sources = [
    "rtceventlogoutput.h",
  ]
}

rtc_source_set("ortc_api") {
  check_includes = false  # TODO(deadbeef): Remove (bugs.webrtc.org/6828)
  sources = [
    "ortc/mediadescription.cc",
    "ortc/mediadescription.h",
    "ortc/ortcfactoryinterface.h",
    "ortc/ortcrtpreceiverinterface.h",
    "ortc/ortcrtpsenderinterface.h",
    "ortc/packettransportinterface.h",
    "ortc/rtptransportcontrollerinterface.h",
    "ortc/rtptransportinterface.h",
    "ortc/sessiondescription.cc",
    "ortc/sessiondescription.h",
    "ortc/srtptransportinterface.h",
    "ortc/udptransportinterface.h",
  ]

  # For mediastreaminterface.h, etc.
  # TODO(deadbeef): Create a separate target for the common things ORTC and
  # PeerConnection code shares, so that ortc_api can depend on that instead of
  # libjingle_peerconnection_api.
  public_deps = [
    ":libjingle_peerconnection_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" ]
  }
}

# TODO(ossu): Remove once downstream projects have updated.
rtc_source_set("libjingle_peerconnection") {
  public_deps = [
    "../pc:libjingle_peerconnection",
  ]
}

rtc_source_set("rtc_stats_api") {
  cflags = []
  sources = [
    "stats/rtcstats.h",
    "stats/rtcstats_objects.h",
    "stats/rtcstatscollectorcallback.h",
    "stats/rtcstatsreport.h",
  ]

  deps = [
    "../rtc_base:rtc_base_approved",
  ]
}

rtc_source_set("audio_mixer_api") {
  sources = [
    "audio/audio_mixer.h",
  ]

  deps = [
    "../modules:module_api",
    "../rtc_base:rtc_base_approved",
  ]
}

rtc_source_set("transport_api") {
  sources = [
    "call/transport.h",
  ]
}

rtc_source_set("video_frame_api") {
  sources = [
    "video/i420_buffer.cc",
    "video/i420_buffer.h",
    "video/video_content_type.cc",
    "video/video_content_type.h",
    "video/video_frame.cc",
    "video/video_frame.h",
    "video/video_frame_buffer.cc",
    "video/video_frame_buffer.h",
    "video/video_rotation.h",
    "video/video_timing.cc",
    "video/video_timing.h",
  ]

  deps = [
    "../rtc_base:rtc_base_approved",
    "../system_wrappers",
  ]

  # TODO(nisse): This logic is duplicated in multiple places.
  # Define in a single place.
  if (rtc_build_libyuv) {
    deps += [ "$rtc_libyuv_dir" ]
    public_deps = [
      "$rtc_libyuv_dir",
    ]
  } else {
    # Need to add a directory normally exported by libyuv.
    include_dirs = [ "$rtc_libyuv_dir/include" ]
  }
}

rtc_source_set("array_view") {
  sources = [
    "array_view.h",
  ]
  deps = [
    "../rtc_base:rtc_base_approved",
  ]
}

rtc_source_set("optional") {
  sources = [
    "optional.cc",
    "optional.h",
  ]
  deps = [
    ":array_view",
    "../rtc_base:rtc_base_approved",
  ]
}

rtc_source_set("refcountedbase") {
  sources = [
    "refcountedbase.h",
  ]
  deps = [
    "../rtc_base:rtc_base_approved",
  ]
}

rtc_source_set("libjingle_peerconnection_test_api") {
  testonly = true
  sources = [
    "test/fakeconstraints.h",
  ]

  public_deps = [
    ":libjingle_peerconnection_api",
  ]

  deps = [
    "../rtc_base:rtc_base_approved",
  ]
}

if (rtc_include_tests) {
  rtc_source_set("mock_audio_mixer") {
    testonly = true
    sources = [
      "test/mock_audio_mixer.h",
    ]

    public_deps = [
      ":audio_mixer_api",
    ]

    deps = [
      "../test:test_support",
      "//testing/gmock",
    ]
  }

  rtc_source_set("mock_video_codec_factory") {
    testonly = true
    sources = [
      "test/mock_video_decoder_factory.h",
      "test/mock_video_encoder_factory.h",
    ]

    public_deps = [
      "../api/video_codecs:video_codecs_api",
    ]

    deps = [
      "../test:test_support",
      "//testing/gmock",
    ]
  }

  rtc_source_set("fakemetricsobserver") {
    testonly = true
    sources = [
      "fakemetricsobserver.cc",
      "fakemetricsobserver.h",
    ]
    deps = [
      ":libjingle_peerconnection_api",
      "../rtc_base:rtc_base_approved",
    ]
    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" ]
    }
  }

  rtc_source_set("rtc_api_unittests") {
    testonly = true

    # Skip restricting visibility on mobile platforms since the tests on those
    # gets additional generated targets which would require many lines here to
    # cover (which would be confusing to read and hard to maintain).
    if (!is_android && !is_ios) {
      visibility = [ "..:rtc_unittests" ]
    }
    sources = [
      "array_view_unittest.cc",
      "optional_unittest.cc",
      "ortc/mediadescription_unittest.cc",
      "ortc/sessiondescription_unittest.cc",
      "rtcerror_unittest.cc",
      "rtpparameters_unittest.cc",
    ]

    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" ]
    }

    deps = [
      ":array_view",
      ":libjingle_peerconnection_api",
      ":optional",
      ":ortc_api",
      "../rtc_base:rtc_base_approved",
      "../rtc_base:rtc_base_tests_utils",
      "../test:test_support",
    ]
  }
}
