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

source_set("rtc_xmpp") {
  cflags = []
  sources = [
    "asyncsocket.h",
    "chatroommodule.h",
    "chatroommoduleimpl.cc",
    "constants.cc",
    "constants.h",
    "discoitemsquerytask.cc",
    "discoitemsquerytask.h",
    "hangoutpubsubclient.cc",
    "hangoutpubsubclient.h",
    "iqtask.cc",
    "iqtask.h",
    "jid.cc",
    "jid.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",
    "plainsaslhandler.h",
    "presenceouttask.cc",
    "presenceouttask.h",
    "presencereceivetask.cc",
    "presencereceivetask.h",
    "presencestatus.cc",
    "presencestatus.h",
    "prexmppauth.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",
    "saslcookiemechanism.h",
    "saslhandler.h",
    "saslmechanism.cc",
    "saslmechanism.h",
    "saslplainmechanism.h",
    "xmppauth.cc",
    "xmppauth.h",
    "xmppclient.cc",
    "xmppclient.h",
    "xmppclientsettings.h",
    "xmppengine.h",
    "xmppengineimpl.cc",
    "xmppengineimpl.h",
    "xmppengineimpl_iq.cc",
    "xmpplogintask.cc",
    "xmpplogintask.h",
    "xmpppump.cc",
    "xmpppump.h",
    "xmppsocket.cc",
    "xmppsocket.h",
    "xmppstanzaparser.cc",
    "xmppstanzaparser.h",
    "xmpptask.cc",
    "xmpptask.h",
    "xmppthread.cc",
    "xmppthread.h",
  ]

  defines = [ "FEATURE_ENABLE_SSL" ]

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

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

  configs += [
    "../..:common_config",
    ":xmpp_warnings_config",
  ]

  public_configs = [
    "../..:common_inherited_config",
    ":xmpp_inherited_config",
  ]

  if (!build_with_chromium) {
    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.
      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" ]
  }
}
