# Copyright 2014 The Chromium Authors
# 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/cast.gni")
import("//build/config/chromeos/args.gni")
import("//build/config/chromeos/ui_mode.gni")
import("//build/config/ozone.gni")

declare_args() {
  # 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

  use_glib =
      is_linux && !is_castos &&
      # Avoid the need for glib when Android is building things via secondary
      # toolchains.
      target_os != "android"
}

assert(!use_glib || (is_linux && !is_castos))

use_atk = use_glib && current_toolchain == default_toolchain

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