# 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") {
  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" ]
  }
}
