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