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

group("xmpp") {
  public_deps = [
    ":rtc_xmpp",
  ]
}

config("xmpp_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_android) {
    cflags = [ "-Wno-error" ]
  }
}

config("xmpp_inherited_config") {
  defines = [
    "FEATURE_ENABLE_SSL",
    "FEATURE_ENABLE_VOICEMAIL",
  ]
}

rtc_source_set("rtc_xmpp") {
  cflags = []
  sources = [
    "asyncsocket.h",
    "constants.cc",
    "constants.h",
    "jid.cc",
    "jid.h",
    "plainsaslhandler.h",
    "prexmppauth.h",
    "saslcookiemechanism.h",
    "saslhandler.h",
    "saslmechanism.cc",
    "saslmechanism.h",
    "saslplainmechanism.h",
    "xmppclient.cc",
    "xmppclient.h",
    "xmppclientsettings.h",
    "xmppengine.h",
    "xmppengineimpl.cc",
    "xmppengineimpl.h",
    "xmppengineimpl_iq.cc",
    "xmpplogintask.cc",
    "xmpplogintask.h",
    "xmppstanzaparser.cc",
    "xmppstanzaparser.h",
    "xmpptask.cc",
    "xmpptask.h",
  ]

  defines = [ "FEATURE_ENABLE_SSL" ]

  deps = [
    "../../base:rtc_base",
    "../xmllite",
  ]

  if (rtc_build_expat) {
    deps += [ "//third_party/expat" ]
    public_deps = [
      "//third_party/expat",
    ]
  }

  configs += [ ":xmpp_warnings_config" ]

  public_configs = [ ":xmpp_inherited_config" ]

  if (build_with_chromium) {
    if (is_nacl) {
      deps += [ "//native_client_sdk/src/libraries/nacl_io" ]
    }
  } else {
    sources += [
      "chatroommodule.h",
      "chatroommoduleimpl.cc",
      "discoitemsquerytask.cc",
      "discoitemsquerytask.h",
      "hangoutpubsubclient.cc",
      "hangoutpubsubclient.h",
      "iqtask.cc",
      "iqtask.h",
      "module.h",
      "moduleimpl.cc",
      "moduleimpl.h",
      "mucroomconfigtask.cc",
      "mucroomconfigtask.h",
      "mucroomdiscoverytask.cc",
      "mucroomdiscoverytask.h",
      "mucroomlookuptask.cc",
      "mucroomlookuptask.h",
      "mucroomuniquehangoutidtask.cc",
      "mucroomuniquehangoutidtask.h",
      "pingtask.cc",
      "pingtask.h",
      "presenceouttask.cc",
      "presenceouttask.h",
      "presencereceivetask.cc",
      "presencereceivetask.h",
      "presencestatus.cc",
      "presencestatus.h",
      "pubsub_task.cc",
      "pubsub_task.h",
      "pubsubclient.cc",
      "pubsubclient.h",
      "pubsubstateclient.cc",
      "pubsubstateclient.h",
      "pubsubtasks.cc",
      "pubsubtasks.h",
      "receivetask.cc",
      "receivetask.h",
      "rostermodule.h",
      "rostermoduleimpl.cc",
      "rostermoduleimpl.h",
      "xmppauth.cc",
      "xmppauth.h",
      "xmpppump.cc",
      "xmpppump.h",
      "xmppsocket.cc",
      "xmppsocket.h",
      "xmppthread.cc",
      "xmppthread.h",
    ]

    defines += [
      "FEATURE_ENABLE_VOICEMAIL",
      "FEATURE_ENABLE_PSTN",
    ]

    if (is_clang) {
      # Suppress warnings from Chrome's Clang plugins.
      # See http://code.google.com/p/webrtc/issues/detail?id=163 for details.
      suppressed_configs += [ "//build/config/clang:find_bad_constructs" ]
    }
  }

  if (is_posix && is_debug) {
    # The Chromium build/common.gypi defines this for all posix
    # _except_ for ios & mac.  We want it there as well, e.g.
    # because ASSERT and friends trigger off of it.
    defines += [ "_DEBUG" ]
  }
}
