# 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",
    "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 += [
    "../..:common_config",
    ":xmpp_warnings_config",
  ]

  public_configs = [
    "../..:common_inherited_config",
    ":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.
      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" ]
  }
}
