# 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

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

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