# 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/module_args/mojo.gni")

# If using the prebuilt shell, gate its usage by the platforms for which it is
# published.
use_prebuilt_mojo_shell = false
if (!defined(build_mojo_shell_from_source) || !build_mojo_shell_from_source) {
  use_prebuilt_mojo_shell = is_linux || is_android
}

# If using the prebuilt network service, gate its usage by the platforms for
# which it is published.
use_prebuilt_network_service = false
if (!defined(build_network_service_from_source) ||
    !build_network_service_from_source) {
  use_prebuilt_network_service = is_linux || is_android
}

# The absolute path to the directory containing the mojo public SDK (i.e., the
# directory containing mojo/public). The build files within the Mojo public
# SDK use this variable to allow themselves to be parameterized by the location
# of the public SDK within a client repo.
mojo_root = get_path_info("../..", "abspath")
