# 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_static_library("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" ]
  }
}
