# 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.

# =============================================
#   PLEASE DO NOT ADD MORE FLAGS TO THIS FILE
# =============================================
#
# These flags are effectively global. Your feature flag should go near the
# code it controls. Most of these items are here now because they control
# legacy global #defines passed to the compiler (now replaced with generated
# buildflag headers -- see //build/buildflag_header.gni).
#
# These flags are ui-related so should eventually be moved to various places
# in //ui/*.
#
# There is more advice on where to put build flags in the "Build flag" section
# of //build/config/BUILDCONFIG.gn.

import("//build/config/chromecast_build.gni")
import("//build/config/chromeos/args.gni")
import("//build/config/chromeos/ui_mode.gni")

declare_args() {
  # Indicates if Ozone is enabled. Ozone is a low-level library layer for Linux
  # that does not require X11.
  use_ozone =
      is_chromeos || (is_chromecast && !is_android) || is_fuchsia ||
      is_linux && !is_starboard

  # Indicates if the UI toolkit depends on X11.
  # Enabled by default. Can be disabled if Ozone only build is required and
  # vice-versa.
  use_x11 = is_linux && !is_chromecast && !is_chromeos_lacros

  # Indicates if Aura is enabled. Aura is a low-level windowing library, sort
  # of a replacement for GDI or GTK.
  use_aura = is_win || is_linux || is_chromeos || is_fuchsia
}

declare_args() {
  # True means the UI is built using the "views" framework.
  toolkit_views = is_mac || is_win || is_linux || is_chromeos || is_fuchsia

  # TODO(crbug.com/1171629): Remove is_chromeos_lacros.
  # Whether we should use glib, a low level C utility library.
  use_glib = (is_linux || is_chromeos_lacros) && !is_chromecast && !is_starboard
}

# TODO(crbug.com/1171629): Remove is_chromeos_lacros.
# Make sure glib is not used if building for ChromeOS/Chromecast
assert(!use_glib || ((is_linux || is_chromeos_lacros) && !is_chromecast))

# TODO(crbug.com/1171629): Remove is_chromeos_lacros.
# Whether to use atk, the Accessibility ToolKit library
use_atk = (is_linux || is_chromeos_lacros) && !is_chromecast && use_glib

# Whether using Xvfb to provide a display server for a test might be
# necessary.
use_xvfb_in_this_config =
    is_linux || (is_chromeos_lacros && !is_chromeos_device)
#
# =============================================
#   PLEASE DO NOT ADD MORE FLAGS TO THIS FILE
# =============================================
#
# See comment at the top.
