# Copyright 2014 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/util/process_version.gni")
import("//media/media_options.gni")
import("//remoting/build/config/remoting_build.gni")

group("all_tests") {
  testonly = true

  deps = [
    ":unit_tests",
  ]
}

group("all") {
  testonly = true

  deps = [
    ":host",
  ]
  if (enable_me2me_host) {
    deps += [ "//remoting/host:remoting_me2me_host" ]
  }

  if (is_chrome_branded) {
    deps += [ ":remoting_host_branded" ]
  }

  if (!is_chromeos && !is_android && !is_ios) {
    deps += [
      "//remoting/host:remoting_native_messaging_host",
      "//remoting/host:remoting_native_messaging_manifests",
      "//remoting/host:remoting_start_host",
      "//remoting/host/it2me:remote_assistance_host",
    ]
  }
}

process_version("remoting_version") {
  template_file = "//remoting/host/version.h.in"
  sources = [
    branding_path,
  ]
  output = "$target_gen_dir/version.h"
}

source_set("host") {
  public_deps = [
    ":common",
  ]
  deps = [
    "//remoting/host/file_transfer",
  ]
}

# This must be a static library instead of a source set because
# remoting_unittests requires that remoting_me2me_host.cc not be pulled in,
# which in turn depends on remoting_me2me_host_static which isn't part of that
# build.
#
# TODO fix this, successful builds should not depend on static libraries
# stripping code.
static_library("common") {
  sources = [
    "action_executor.cc",
    "action_executor.h",
    "action_message_handler.cc",
    "action_message_handler.h",
    "audio_capturer.cc",
    "audio_capturer.h",
    "audio_capturer_chromeos.cc",
    "audio_capturer_linux.cc",
    "audio_capturer_linux.h",
    "audio_capturer_mac.cc",
    "audio_capturer_win.cc",
    "audio_capturer_win.h",
    "audio_silence_detector.cc",
    "audio_silence_detector.h",
    "audio_volume_filter.cc",
    "audio_volume_filter.h",
    "backoff_timer.cc",
    "backoff_timer.h",
    "basic_desktop_environment.cc",
    "basic_desktop_environment.h",
    "branding.cc",
    "branding.h",
    "chromoting_host.cc",
    "chromoting_host.h",
    "chromoting_host_context.cc",
    "chromoting_host_context.h",
    "chromoting_messages.cc",
    "chromoting_messages.h",
    "chromoting_param_traits.cc",
    "chromoting_param_traits.h",
    "chromoting_param_traits_impl.h",
    "client_session.cc",
    "client_session.h",
    "client_session_control.h",
    "client_session_details.h",
    "clipboard.h",
    "clipboard_mac.mm",
    "clipboard_win.cc",
    "clipboard_x11.cc",
    "config_file_watcher.cc",
    "config_file_watcher.h",
    "config_watcher.h",
    "continue_window.cc",
    "continue_window.h",
    "continue_window_chromeos.cc",
    "continue_window_linux.cc",
    "continue_window_mac.mm",
    "continue_window_win.cc",
    "current_process_stats_agent.cc",
    "current_process_stats_agent.h",
    "curtain_mode.h",
    "curtain_mode_linux.cc",
    "curtain_mode_mac.cc",
    "curtain_mode_win.cc",
    "daemon_process.cc",
    "daemon_process.h",
    "daemon_process_win.cc",
    "desktop_capturer_proxy.cc",
    "desktop_capturer_proxy.h",
    "desktop_display_info.cc",
    "desktop_display_info.h",
    "desktop_display_info_mac.mm",
    "desktop_environment.h",
    "desktop_environment_options.cc",
    "desktop_environment_options.h",
    "desktop_process.cc",
    "desktop_process.h",
    "desktop_resizer.h",
    "desktop_resizer_mac.cc",
    "desktop_resizer_ozone.cc",
    "desktop_resizer_win.cc",
    "desktop_resizer_x11.cc",
    "desktop_session.cc",
    "desktop_session.h",
    "desktop_session_agent.cc",
    "desktop_session_agent.h",
    "desktop_session_connector.h",
    "desktop_session_proxy.cc",
    "desktop_session_proxy.h",
    "desktop_session_win.cc",
    "desktop_session_win.h",
    "disconnect_window_chromeos.cc",
    "disconnect_window_linux.cc",
    "disconnect_window_mac.h",
    "disconnect_window_mac.mm",
    "disconnect_window_win.cc",
    "evaluate_capability.cc",
    "evaluate_capability.h",
    "forward_process_stats_agent.cc",
    "forward_process_stats_agent.h",
    "ftl_host_change_notification_listener.cc",
    "ftl_host_change_notification_listener.h",
    "ftl_signaling_connector.cc",
    "ftl_signaling_connector.h",
    "gcd_rest_client.cc",
    "gcd_rest_client.h",
    "gcd_state_updater.cc",
    "gcd_state_updater.h",
    "heartbeat_sender.cc",
    "heartbeat_sender.h",
    "host_attributes.cc",
    "host_attributes.h",
    "host_config.cc",
    "host_config.h",
    "host_config_upgrader.cc",
    "host_config_upgrader.h",
    "host_details.cc",
    "host_details.h",
    "host_event_logger.h",
    "host_event_logger_win.cc",
    "host_exit_codes.cc",
    "host_exit_codes.h",
    "host_experiment_session_plugin.cc",
    "host_experiment_session_plugin.h",
    "host_export.h",
    "host_extension.h",
    "host_extension_session.h",
    "host_extension_session_manager.cc",
    "host_extension_session_manager.h",
    "host_power_save_blocker.cc",
    "host_power_save_blocker.h",
    "host_secret.cc",
    "host_secret.h",
    "host_status_logger.cc",
    "host_status_logger.h",
    "host_status_monitor.cc",
    "host_status_monitor.h",
    "host_status_observer.h",
    "host_window.cc",
    "host_window.h",
    "host_window_proxy.cc",
    "host_window_proxy.h",
    "input_injector.h",
    "input_injector_chromeos.cc",
    "input_injector_chromeos.h",
    "input_injector_mac.cc",
    "input_injector_win.cc",
    "input_injector_x11.cc",
    "ipc_action_executor.cc",
    "ipc_action_executor.h",
    "ipc_audio_capturer.cc",
    "ipc_audio_capturer.h",
    "ipc_constants.cc",
    "ipc_constants.h",
    "ipc_desktop_environment.cc",
    "ipc_desktop_environment.h",
    "ipc_host_event_logger.cc",
    "ipc_host_event_logger.h",
    "ipc_input_injector.cc",
    "ipc_input_injector.h",
    "ipc_mouse_cursor_monitor.cc",
    "ipc_mouse_cursor_monitor.h",
    "ipc_screen_controls.cc",
    "ipc_screen_controls.h",
    "ipc_video_frame_capturer.cc",
    "ipc_video_frame_capturer.h",
    "it2me_desktop_environment.cc",
    "it2me_desktop_environment.h",
    "logging.h",
    "logging_linux.cc",
    "logging_mac.cc",
    "logging_win.cc",
    "me2me_desktop_environment.cc",
    "me2me_desktop_environment.h",
    "mouse_cursor_monitor_proxy.cc",
    "mouse_cursor_monitor_proxy.h",
    "mouse_shape_pump.cc",
    "mouse_shape_pump.h",
    "pairing_registry_delegate.cc",
    "pairing_registry_delegate.h",
    "pairing_registry_delegate_linux.cc",
    "pairing_registry_delegate_linux.h",
    "pairing_registry_delegate_mac.cc",
    "pairing_registry_delegate_win.cc",
    "pairing_registry_delegate_win.h",
    "pin_hash.cc",
    "pin_hash.h",
    "policy_watcher.cc",
    "policy_watcher.h",
    "process_stats_agent.h",
    "process_stats_sender.cc",
    "process_stats_sender.h",
    "register_support_host_request.h",
    "remote_input_filter.cc",
    "remote_input_filter.h",
    "remoting_register_support_host_request.cc",
    "remoting_register_support_host_request.h",
    "resizing_host_observer.cc",
    "resizing_host_observer.h",
    "resources.h",
    "resources_linux.cc",
    "resources_mac.cc",
    "resources_win.cc",
    "sas_injector.h",
    "sas_injector_win.cc",
    "screen_controls.h",
    "screen_resolution.cc",
    "screen_resolution.h",
    "server_log_entry_host.cc",
    "server_log_entry_host.h",
    "shutdown_watchdog.cc",
    "shutdown_watchdog.h",
    "single_window_desktop_environment.cc",
    "single_window_desktop_environment.h",
    "single_window_input_injector.h",
    "single_window_input_injector_linux.cc",
    "single_window_input_injector_mac.cc",
    "single_window_input_injector_win.cc",
    "switches.cc",
    "switches.h",
    "test_echo_extension.cc",
    "test_echo_extension.h",
    "test_echo_extension_session.cc",
    "test_echo_extension_session.h",
    "third_party_auth_config.cc",
    "third_party_auth_config.h",
    "token_validator_base.cc",
    "token_validator_base.h",
    "token_validator_factory_impl.cc",
    "token_validator_factory_impl.h",
    "touch_injector_win.cc",
    "touch_injector_win.h",
    "usage_stats_consent.h",
    "usage_stats_consent_mac.cc",
    "usage_stats_consent_win.cc",
    "username.cc",
    "username.h",
    "xmpp_register_support_host_request.cc",
    "xmpp_register_support_host_request.h",
  ]

  libs = []

  configs += [
    "//build/config/compiler:wexit_time_destructors",
    "//remoting/build/config:version",
  ]

  defines = [ "WEBRTC_CHROMIUM_BUILD" ]

  deps = [
    "//base:i18n",
    "//build:branding_buildflags",
    "//components/policy/core/common",
    "//crypto",
    "//google_apis",
    "//media",
    "//remoting/base",
    "//remoting/base:authorization",
    "//remoting/base/grpc_support",
    "//remoting/host/file_transfer:common",
    "//remoting/host/input_monitor",
    "//remoting/host/security_key",
    "//remoting/proto/remoting/v1:directory_grpc_library",
    "//remoting/proto/remoting/v1:remote_support_host_grpc_library",
    "//remoting/protocol",
    "//remoting/resources",
    "//services/network:network_service",

    # //remoting uses the power_save_blocker directly. See crbug.com/689423
    "//services/device/wake_lock/power_save_blocker",
    "//ui/base",
    "//ui/events:dom_keycode_converter",
    "//ui/events/platform",
  ]

  public_deps = [
    "//ipc",
    "//remoting/proto",
  ]

  if (is_posix) {
    sources += [
      "host_event_logger_posix.cc",
      "posix/signal_handler.cc",
      "posix/signal_handler.h",
    ]
  }

  if (!is_ios) {
    deps += [ "//components/policy:generated" ]
  }

  if (is_linux && !is_chromeos) {
    public_deps += [ "//remoting/host/linux" ]
    libs += [ "pam" ]
  }

  if (use_x11) {
    configs += [
      "//build/config/linux:x11",
      "//build/config/linux:xrandr",
    ]
    deps += [ "//remoting/host/linux:x11" ]
    if (use_gtk) {
      deps += [ "//build/config/linux/gtk" ]
    }
  } else {
    sources -= [
      "clipboard_x11.cc",
      "desktop_resizer_x11.cc",
      "input_injector_x11.cc",
    ]
  }

  if (!use_ozone) {
    sources -= [ "desktop_resizer_ozone.cc" ]
  }

  if (is_chromeos) {
    # TODO(GYP): crbug.com/481627. These should only be included
    # when enable_me2me_host is true.
    sources -= [
      "audio_capturer_linux.cc",
      "audio_capturer_linux.h",
      "continue_window_linux.cc",
      "curtain_mode_linux.cc",
      "disconnect_window_linux.cc",
      "me2me_desktop_environment.cc",
      "me2me_desktop_environment.h",
    ]
    deps += [
      "//ash",
      "//remoting/host/chromeos",
      "//ui/base/ime/chromeos",
    ]

    if (use_ozone) {
      deps += [ "//ui/ozone" ]
      sources -= [ "desktop_resizer_ozone.cc" ]
    } else {
      sources -= [
        "clipboard_x11.cc",
        "desktop_resizer_x11.cc",
        "input_injector_chromeos.cc",
        "input_injector_chromeos.h",
      ]
    }
  }

  if (is_mac) {
    libs += [
      "Accelerate.framework",
      "Carbon.framework",
    ]

    deps += [
      ":remoting_version",
      "//third_party/google_toolbox_for_mac",
    ]
  }

  if (is_win) {
    deps += [
      # On Windows, we use //media/gpu/MediaFoundationVideoEncodeAcceleratorWin
      # to detect whether HW encoder is supported by the system.
      "//media",
      "//remoting/host/win",
      "//remoting/host/win:messages",
      "//remoting/host/win:remoting_lib_idl",
    ]

    public_deps += [ "//remoting/host/win" ]
  }

  if (enable_webrtc) {
    deps += [ "//third_party/webrtc/modules/desktop_capture" ]
  }
}

static_library("test_support") {
  testonly = true

  sources = [
    "fake_desktop_environment.cc",
    "fake_desktop_environment.h",
    "fake_host_extension.cc",
    "fake_host_extension.h",
    "fake_mouse_cursor_monitor.cc",
    "fake_mouse_cursor_monitor.h",
    "host_mock_objects.cc",
    "host_mock_objects.h",
  ]

  configs += [ "//remoting/build/config:version" ]

  deps = [
    "//remoting/proto",
    "//testing/gmock",
    "//testing/gtest",
  ]
  public_deps = [
    ":common",
    "//remoting/base:test_support",
    "//remoting/host/file_transfer:test_support",
    "//third_party/protobuf:protobuf_lite",
  ]

  if (enable_webrtc) {
    public_deps += [
      "//third_party/libjingle_xmpp",
      "//third_party/webrtc/modules/desktop_capture",
      "//third_party/webrtc_overrides:init_webrtc",
    ]
  }
}

# The host portions of the remoting unit tests.
source_set("unit_tests") {
  testonly = true

  sources = [
    "audio_silence_detector_unittest.cc",
    "audio_volume_filter_unittest.cc",
    "backoff_timer_unittest.cc",
    "chromoting_host_context_unittest.cc",
    "chromoting_host_unittest.cc",
    "client_session_unittest.cc",
    "config_file_watcher_unittest.cc",
    "daemon_process_unittest.cc",
    "desktop_display_info_unittest.cc",
    "desktop_process_unittest.cc",
    "desktop_session_agent_unittest.cc",
    "ftl_host_change_notification_listener_unittest.cc",
    "ftl_signaling_connector_unittest.cc",
    "gcd_rest_client_unittest.cc",
    "gcd_state_updater_unittest.cc",
    "heartbeat_sender_unittest.cc",
    "host_attributes_unittest.cc",
    "host_config_unittest.cc",
    "host_experiment_session_plugin_unittest.cc",
    "host_extension_session_manager_unittest.cc",
    "host_power_save_blocker_unittest.cc",
    "host_status_logger_unittest.cc",
    "input_monitor/local_input_monitor_unittest.cc",
    "ipc_desktop_environment_unittest.cc",
    "it2me/it2me_confirmation_dialog_proxy_unittest.cc",
    "it2me/it2me_host_unittest.cc",
    "it2me/it2me_native_messaging_host_unittest.cc",
    "mouse_cursor_monitor_proxy_unittest.cc",
    "mouse_shape_pump_unittest.cc",
    "native_messaging/native_messaging_reader_unittest.cc",
    "native_messaging/native_messaging_writer_unittest.cc",
    "pairing_registry_delegate_linux_unittest.cc",
    "pairing_registry_delegate_win_unittest.cc",
    "pin_hash_unittest.cc",
    "policy_watcher_unittest.cc",
    "process_stats_sender_unittest.cc",
    "remote_input_filter_unittest.cc",
    "remoting_register_support_host_request_unittest.cc",
    "resizing_host_observer_unittest.cc",
    "resources_unittest.cc",
    "screen_resolution_unittest.cc",
    "server_log_entry_host_unittest.cc",
    "setup/me2me_native_messaging_host_unittest.cc",
    "setup/pin_validator_unittest.cc",
    "third_party_auth_config_unittest.cc",
    "token_validator_base_unittest.cc",
    "token_validator_factory_impl_unittest.cc",
    "touch_injector_win_unittest.cc",
    "xmpp_register_support_host_request_unittest.cc",
  ]

  if (use_ozone || is_chromeos) {
    sources -= [ "input_monitor/local_input_monitor_unittest.cc" ]
  }

  configs += [ "//remoting/build/config:version" ]

  deps = [
    ":common",
    ":test_support",
    "//remoting/host/file_transfer:unit_tests",
    "//remoting/host/it2me:common",
    "//remoting/host/native_messaging",
    "//remoting/host/security_key:unit_tests",
    "//remoting/host/setup:common",
    "//remoting/proto",
    "//remoting/resources",
    "//skia",
    "//testing/gmock",
    "//testing/gtest",
    "//third_party/grpc:grpcpp",
  ]

  if (is_linux && !is_chromeos) {
    deps += [ "//remoting/host/linux:unit_tests" ]
  }

  if (is_chromeos) {
    deps += [
      "//remoting/host/chromeos:unit_tests",
      "//remoting/host/linux",  # for AudioPipeReader
    ]
  }

  if (is_win) {
    deps += [ "//remoting/host/win:unit_tests" ]
  }

  if (!is_ios) {
    deps += [ "//components/policy/core/browser:test_support" ]
  }

  if (enable_me2me_host) {
    sources += [ "evaluate_capability_unittest.cc" ]
    data_deps = [
      "//remoting/test:capability_test_stub",
    ]
  }
}

group("remoting_host_branded") {
  testonly = true
  deps = []
  if (enable_remoting_host) {
    deps += [ ":remoting_host_installation" ]
  }
  if (enable_me2me_host) {
    deps += [ "//remoting/host:remoting_me2me_host_archive" ]
  }
}

if (enable_remoting_host) {
  group("remoting_host_installation") {
    deps = []
    if (is_win) {
      deps += [ "//remoting/host/installer/win:remoting_host_installation" ]
    }
  }
}

if (enable_remoting_host) {
  executable("remoting_start_host") {
    sources = [
      "setup/start_host_entry_point.cc",
    ]

    deps = []

    configs += [ "//build/config/compiler:wexit_time_destructors" ]

    if (is_win) {
      defines = host_predefines +
                [ "REMOTING_HOST_BINARY=BINARY_REMOTING_START_HOST" ]

      deps += [
        "//build/win:default_exe_manifest",
        "//remoting/host/win:remoting_core",
        "//remoting/host/win:remoting_windows_resources",
      ]
    } else {
      sources += [
        "setup/host_starter.cc",
        "setup/host_starter.h",
        "setup/start_host_main.cc",
        "setup/start_host_main.h",
      ]

      deps += [
        "//google_apis",
        "//mojo/core/embedder",
        "//net",
        "//remoting/host/setup",
      ]
    }

    if (enable_webrtc) {
      deps += [
        "//third_party/libjingle_xmpp",
        "//third_party/webrtc_overrides:init_webrtc",
      ]
    }
  }

  action_foreach("remoting_native_messaging_manifests") {
    if (is_mac) {
      me2me_host_path = "/Library/PrivilegedHelperTools/$me2me_host_bundle_name/Contents/MacOS/$native_messaging_host_bundle_name/Contents/MacOS/native_messaging_host"
      it2me_host_path = "/Library/PrivilegedHelperTools/$me2me_host_bundle_name/Contents/MacOS/$remote_assistance_host_bundle_name/Contents/MacOS/remote_assistance_host"
    } else if (is_win) {
      me2me_host_path = "remoting_native_messaging_host.exe"
      it2me_host_path = "remote_assistance_host.exe"
    } else {
      me2me_host_path =
          "/opt/google/chrome-remote-desktop/native-messaging-host"
      it2me_host_path =
          "/opt/google/chrome-remote-desktop/remote-assistance-host"
    }

    script = "../tools/build/remoting_localize.py"

    sources = [
      "it2me/com.google.chrome.remote_assistance-firefox.json.jinja2",
      "it2me/com.google.chrome.remote_assistance.json.jinja2",
      "setup/com.google.chrome.remote_desktop-firefox.json.jinja2",
      "setup/com.google.chrome.remote_desktop.json.jinja2",
    ]

    inputs = [
      branding_path,
    ]

    outputs = [
      "$root_build_dir/remoting/{{source_name_part}}",
    ]

    args = [
      "--define",
      "ME2ME_HOST_PATH=$me2me_host_path",
      "--define",
      "IT2ME_HOST_PATH=$it2me_host_path",
      "--variables",
      rebase_path(branding_path, root_build_dir),
      "--template",
      "{{source}}",
      "--output",
      "remoting/{{source_name_part}}",
      "en",
    ]
  }

  action_foreach("remoting_infoplist_strings") {
    sources = [
      "installer/mac/uninstaller/remoting_uninstaller-InfoPlist.strings.jinja2",
      "it2me/remote_assistance_host-InfoPlist.strings.jinja2",
      "remoting_me2me_host-InfoPlist.strings.jinja2",
      "setup/native_messaging_host-InfoPlist.strings.jinja2",
    ]

    script = "//remoting/tools/build/remoting_localize.py"
    args = [
             "--locale_dir",
             rebase_path(webapp_locale_dir, root_build_dir),
             "--variables",
             rebase_path(branding_path, root_build_dir),
             "--template",
             "{{source}}",
             "--locale_output",
             rebase_path(
                 "$root_gen_dir/remoting/host/{{source_name_part}}/@{json_suffix}.lproj/InfoPlist.strings",
                 root_build_dir),
           ] + remoting_locales_with_underscores

    outputs = []
    foreach(locale, remoting_locales_with_underscores) {
      outputs += [ "$root_gen_dir/remoting/host/{{source_name_part}}/$locale.lproj/InfoPlist.strings" ]
    }

    deps = [
      "//remoting/resources",
      "//remoting/resources:strings",
    ]
  }
}

if (enable_me2me_host) {
  static_library("remoting_me2me_host_static") {
    sources = [
      "remoting_me2me_host.cc",
    ]
    defines = []

    configs += [
      "//remoting/build/config:version",
      "//remoting/build/config:remoting_me2me_host",
    ]

    deps = [
      "//base",
      "//base:i18n",
      "//components/policy/core/common",
      "//ipc",
      "//mojo/core/embedder",
      "//net",
      "//remoting/base",
      "//remoting/host",
      "//remoting/proto",
    ]

    if (is_posix) {
      sources += [
        "pam_authorization_factory_posix.cc",
        "pam_authorization_factory_posix.h",
      ]
    }

    if (!is_ios) {
      deps += [ "//components/policy:generated" ]
    }

    if (enable_webrtc) {
      deps += [
        "//third_party/libjingle_xmpp",
        "//third_party/webrtc/api:scoped_refptr",
        "//third_party/webrtc_overrides:init_webrtc",
        "//third_party/webrtc/modules/desktop_capture",
      ]
    }

    if (use_gtk) {
      deps += [ "//build/config/linux/gtk" ]
    }
    if ((is_linux && !is_chromeos) || is_mac) {
      libs = [ "pam" ]
    }

    if (is_mac && is_official_build) {
      sources += [ "internal/internal_mac-inl.h" ]
    }
  }

  if (is_win) {
    group("remoting_me2me_host") {
      deps = [
        "//remoting/host/win:remoting_me2me_host",
      ]
    }
    group("remoting_native_messaging_host") {
      deps = [
        "//remoting/host/win:remoting_native_messaging_host",
      ]
    }
  } else {
    source_set("main") {
      sources = [
        "host_main.cc",
        "host_main.h",
      ]
      deps = [
        "//base",
        "//base:debugging_buildflags",
      ]
    }
    if (is_mac) {
      group("remoting_me2me_host") {
        deps = [
          "//remoting/host/mac:remoting_me2me_host",
        ]
      }
    } else {
      target("executable", "remoting_me2me_host") {
        configs += [ "//remoting/build/config:version" ]

        sources = [
          "host_main.cc",
          "host_main.h",
        ]

        deps = [
          ":remoting_me2me_host_static",
          "//base",
          "//remoting/base:breakpad",
          "//remoting/host/installer:credits",
          "//remoting/resources",
        ]
      }
    }

    if (is_mac) {
      group("remoting_native_messaging_host") {
        deps = [
          "//remoting/host/mac:remoting_native_messaging_host",
        ]
      }
    } else {
      group("remoting_native_messaging_host") {
        deps = [
          "//remoting/host/linux:remoting_native_messaging_host",
        ]
      }
    }
  }
  if (is_chrome_branded && enable_me2me_host && is_linux && !is_chromeos) {
    group("remoting_me2me_host_archive") {
      deps = [
        "//remoting/host/installer/linux:remoting_me2me_host_archive",
      ]
    }
  } else if (is_win) {
    group("remoting_me2me_host_archive") {
      deps = [
        "//remoting/host/installer/win:remoting_me2me_host_archive",
      ]
    }
  } else if (is_mac) {
    group("remoting_me2me_host_archive") {
      deps = [
        "//remoting/host/installer/mac:remoting_me2me_host_archive",
      ]
    }
  } else {
    group("remoting_me2me_host_archive") {
    }
  }
}
