# 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("../build/webrtc.gni")
import("//testing/test.gni")

group("api") {
  deps = [
    ":libjingle_peerconnection",
  ]
}

config("libjingle_peerconnection_warnings_config") {
  # GN orders flags on a target before flags from configs. The default config
  # adds these flags so to cancel them out they need to come from a config and
  # cannot be on the target directly.
  if (!is_win && !is_clang) {
    cflags = [ "-Wno-maybe-uninitialized" ]  # Only exists for GCC.
  }
}

source_set("libjingle_peerconnection") {
  cflags = []
  sources = [
    "audiotrack.cc",
    "audiotrack.h",
    "datachannel.cc",
    "datachannel.h",
    "datachannelinterface.h",
    "dtlsidentitystore.h",
    "dtmfsender.cc",
    "dtmfsender.h",
    "dtmfsenderinterface.h",
    "jsep.h",
    "jsepicecandidate.cc",
    "jsepicecandidate.h",
    "jsepsessiondescription.cc",
    "jsepsessiondescription.h",
    "localaudiosource.cc",
    "localaudiosource.h",
    "mediaconstraintsinterface.cc",
    "mediaconstraintsinterface.h",
    "mediacontroller.cc",
    "mediacontroller.h",
    "mediastream.cc",
    "mediastream.h",
    "mediastreaminterface.h",
    "mediastreamobserver.cc",
    "mediastreamobserver.h",
    "mediastreamprovider.h",
    "mediastreamproxy.h",
    "mediastreamtrack.h",
    "mediastreamtrackproxy.h",
    "notifier.h",
    "peerconnection.cc",
    "peerconnection.h",
    "peerconnectionfactory.cc",
    "peerconnectionfactory.h",
    "peerconnectionfactoryproxy.h",
    "peerconnectioninterface.h",
    "peerconnectionproxy.h",
    "proxy.h",
    "remoteaudiosource.cc",
    "remoteaudiosource.h",
    "rtpparameters.h",
    "rtpreceiver.cc",
    "rtpreceiver.h",
    "rtpreceiverinterface.h",
    "rtpsender.cc",
    "rtpsender.h",
    "rtpsenderinterface.h",
    "sctputils.cc",
    "sctputils.h",
    "statscollector.cc",
    "statscollector.h",
    "statstypes.cc",
    "statstypes.h",
    "streamcollection.h",
    "videocapturertracksource.cc",
    "videocapturertracksource.h",
    "videosourceproxy.h",
    "videotrack.cc",
    "videotrack.h",
    "videotracksource.cc",
    "videotracksource.h",
    "webrtcsdp.cc",
    "webrtcsdp.h",
    "webrtcsession.cc",
    "webrtcsession.h",
    "webrtcsessiondescriptionfactory.cc",
    "webrtcsessiondescriptionfactory.h",
  ]

  configs += [
    "..:common_config",
    ":libjingle_peerconnection_warnings_config",
  ]
  public_configs = [ "..:common_inherited_config" ]

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

  deps = [
    "../call",
    "../media",
    "../pc",
  ]

  if (rtc_use_quic) {
    sources += [
      "quicdatachannel.cc",
      "quicdatachannel.h",
      "quicdatatransport.cc",
      "quicdatatransport.h",
    ]
    deps += [ "//third_party/libquic" ]
    public_deps = [
      "//third_party/libquic",
    ]
  }
}

# Exclude the targets below from the Chromium build since they cannot be built
# due to incompability with Chromium's logging implementation.
if (is_android && !build_with_chromium) {
  config("libjingle_peerconnection_jni_warnings_config") {
    # The warnings below are enabled by default. Since GN orders compiler flags
    # for a target before flags from configs, the only way to disable such
    # warnings is by having them in a separate config, loaded from the target.
    if (!is_win) {
      cflags = [
        "-Wno-sign-compare",
        "-Wno-unused-variable",
      ]
    }
  }

  source_set("libjingle_peerconnection_jni") {
    sources = [
      "androidvideocapturer.cc",
      "androidvideocapturer.h",
      "java/jni/androidmediacodeccommon.h",
      "java/jni/androidmediadecoder_jni.cc",
      "java/jni/androidmediadecoder_jni.h",
      "java/jni/androidmediaencoder_jni.cc",
      "java/jni/androidmediaencoder_jni.h",
      "java/jni/androidmetrics_jni.cc",
      "java/jni/androidnetworkmonitor_jni.cc",
      "java/jni/androidnetworkmonitor_jni.h",
      "java/jni/androidvideocapturer_jni.cc",
      "java/jni/androidvideocapturer_jni.h",
      "java/jni/classreferenceholder.cc",
      "java/jni/classreferenceholder.h",
      "java/jni/jni_helpers.cc",
      "java/jni/jni_helpers.h",
      "java/jni/native_handle_impl.cc",
      "java/jni/native_handle_impl.h",
      "java/jni/peerconnection_jni.cc",
      "java/jni/surfacetexturehelper_jni.cc",
      "java/jni/surfacetexturehelper_jni.h",
    ]

    configs += [
      "..:common_config",
      ":libjingle_peerconnection_jni_warnings_config",
    ]
    public_configs = [ "..:common_inherited_config" ]

    if (is_clang) {
      # Suppress warnings from the Chromium Clang plugin (bugs.webrtc.org/163).
      configs -= [
        "//build/config/clang:extra_warnings",
        "//build/config/clang:find_bad_constructs",
      ]
    }

    # TODO(jschuh): Bug 1348: fix this warning.
    configs += [ "//build/config/compiler:no_size_t_to_int_warning" ]

    if (is_win) {
      cflags += [
        "/wd4245",  # conversion from "int" to "size_t", signed/unsigned mismatch.
        "/wd4389",  # signed/unsigned mismatch.
      ]
    }

    deps = [
      ":libjingle_peerconnection",
      "../system_wrappers:field_trial_default",
      "../system_wrappers:metrics_default",
    ]

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

if (rtc_include_tests) {
  config("peerconnection_unittests_config") {
    # The warnings below are enabled by default. Since GN orders compiler flags
    # for a target before flags from configs, the only way to disable such
    # warnings is by having them in a separate config, loaded from the target.
    # TODO(kjellander): Make the code compile without disabling these flags.
    # See https://bugs.webrtc.org/3307.
    if (is_clang && is_win) {
      cflags = [ "-Wno-unused-function" ]
    }

    if (!is_win) {
      cflags = [ "-Wno-sign-compare" ]
      cflags_cc = [ "-Wno-overloaded-virtual" ]
    }
  }

  test("peerconnection_unittests") {
    testonly = true
    sources = [
      "datachannel_unittest.cc",
      "dtmfsender_unittest.cc",
      "fakemetricsobserver.cc",
      "fakemetricsobserver.h",
      "jsepsessiondescription_unittest.cc",
      "localaudiosource_unittest.cc",
      "mediaconstraintsinterface_unittest.cc",
      "mediastream_unittest.cc",
      "peerconnection_unittest.cc",
      "peerconnectionendtoend_unittest.cc",
      "peerconnectionfactory_unittest.cc",
      "peerconnectioninterface_unittest.cc",
      "proxy_unittest.cc",
      "rtpsenderreceiver_unittest.cc",
      "statscollector_unittest.cc",
      "test/fakeaudiocapturemodule.cc",
      "test/fakeaudiocapturemodule.h",
      "test/fakeaudiocapturemodule_unittest.cc",
      "test/fakeconstraints.h",
      "test/fakedatachannelprovider.h",
      "test/fakeperiodicvideocapturer.h",
      "test/fakertccertificategenerator.h",
      "test/fakevideotrackrenderer.h",
      "test/mockpeerconnectionobservers.h",
      "test/peerconnectiontestwrapper.cc",
      "test/peerconnectiontestwrapper.h",
      "test/testsdpstrings.h",
      "videocapturertracksource_unittest.cc",
      "videotrack_unittest.cc",
      "webrtcsdp_unittest.cc",
      "webrtcsession_unittest.cc",
    ]

    defines = [ "HAVE_SCTP" ]

    configs += [
      "..:common_config",
      ":peerconnection_unittests_config",
    ]
    public_configs = [ "..:common_inherited_config" ]

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

    # TODO(jschuh): Bug 1348: fix this warning.
    configs += [ "//build/config/compiler:no_size_t_to_int_warning" ]

    if (is_win) {
      cflags = [
        "/wd4245",  # conversion from int to size_t, signed/unsigned mismatch.
        "/wd4389",  # signed/unsigned mismatch.
      ]
    }

    if (rtc_use_quic) {
      public_deps = [
        "//third_party/libquic",
      ]
      sources += [
        "quicdatachannel_unittest.cc",
        "quicdatatransport_unittest.cc",
      ]
    }

    deps = []
    if (is_android) {
      sources += [
        "test/androidtestinitializer.cc",
        "test/androidtestinitializer.h",
      ]
      deps += [
        ":libjingle_peerconnection_jni",
        "//testing/android/native_test:native_test_support",
      ]
    }

    deps += [
      ":libjingle_peerconnection",
      "..:webrtc_common",
      "../base:rtc_base_tests_utils",
      "../media:rtc_unittest_main",
      "../pc:rtc_pc",
      "../system_wrappers:metrics_default",
      "//testing/gmock",
    ]

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