# 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.h",
    "rtcerror.cc",
    "rtcerror.h",
    "rtpparameters.cc",
    "rtpparameters.h",
    "rtpreceiverinterface.h",
    "rtpsenderinterface.h",
    "statstypes.cc",
    "statstypes.h",
    "turncustomizer.h",
    "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("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",
    ]
  }
}
