# Copyright 2015 The Chromium Authors. All rights reserved.
# Use of this source code is governed by a BSD-style license that can be
# found in the LICENSE file.

import("//build/config/chrome_build.gni")
import("//build/config/ui.gni")

enable_remoting_host =
    is_win || (is_linux && (is_chromeos || use_x11)) || is_mac
enable_me2me_host = is_win || (is_linux && !is_chromeos && use_x11) || is_mac

# These arguments can be overridden from the command line (see "gn help args").
declare_args() {
  # Set this to run the jscompile checks after building the webapp.
  enable_remoting_jscompile = false

  # Set this to enable building internal AppRemoting apps.
  enable_internal_app_remoting_targets = false
}

# Set this to use GCD instead of the remoting directory service.
remoting_use_gcd = 0

# Enable the multi-process host on Windows by default.
if (is_win) {
  remoting_multi_process = 1
} else {
  remoting_multi_process = 0
}

remoting_rdp_session = 1

if (is_chrome_branded) {
  branding_path = "//remoting/branding_Chrome"
} else {
  branding_path = "//remoting/branding_Chromium"
}

# The ar_service_environment variable is used to define the target
# environment for the app being built.
# The allowed values are dev and prod.
if (is_debug) {
  ar_service_environment = "dev"
} else {
  # Non-dev builds should default to 'prod'.
  ar_service_environment = "prod"
}

rdp_desktop_session_guid = "6a7699f0-ee43-43e7-aa30-a6738f9bd470"
