# 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",
    "cryptoparams.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",
    "rtptransceiverinterface.h",
    "setremotedescriptionobserverinterface.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 = [
    ":optional",
    ":rtc_stats_api",
    "audio_codecs:audio_codecs_api",

    # Basically, don't add stuff here. You might break sensitive downstream
    # targets like pnacl. API should not depend on anything outside of this
    # file, really. All these should arguably go away in time.
    "..:webrtc_common",
    "../rtc_base:rtc_base",
    "../rtc_base:rtc_base_approved",
  ]

  # 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") {
  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.
  deps = [
    ":libjingle_peerconnection_api",
    ":optional",
    "..:webrtc_common",
    "../rtc_base:rtc_base",
  ]
  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 = [
    # TODO(phoglund): move i420 files to video_frame_api_i420 after updating
    # downstream. See bugs.webrtc.org/7504.
    "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("video_frame_api_i420") {
  sources = [
    "video/i420_buffer.h",
  ]
  deps = [
    ":video_frame_api",
    "../rtc_base:rtc_base_approved",
    "../system_wrappers",
  ]
}

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",
      "../api:peerconnection_and_implicit_call_api",
      "../media:rtc_media_base",
      "../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

    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",
      ":libjingle_peerconnection_test_api",
      ":optional",
      ":ortc_api",
      "../rtc_base:rtc_base_approved",
      "../rtc_base:rtc_base_tests_utils",
      "../test:test_support",
    ]
  }
}
