# 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).
#
# There is more advice on where to put build flags in the "Build flag" section
# of //build/config/BUILDCONFIG.gn.

import("//build/config/chrome_build.gni")
import("//build/config/chromecast_build.gni")

declare_args() {
  # Enables proprietary codecs and demuxers; e.g. H264, AAC, MP3, and MP4.
  # We always build Google Chrome and Chromecast with proprietary codecs.
  #
  # Note: this flag is used by WebRTC which is DEPSed into Chrome. Moving it
  # out of //build will require using the build_overrides directory.
  #
  # Do not add any other conditions to the following line.
  #
  # TODO(crbug.com/1314528): Remove chromecast-related conditions and force
  # builds to explicitly specify this.
  proprietary_codecs = is_chrome_branded || is_castos || is_cast_android

  # libudev usage. This currently only affects the content layer.
  use_udev = (is_linux && !is_castos) || is_chromeos

  use_dbus = is_linux || is_chromeos

  use_gio = is_linux && !is_castos

  use_blink = !is_ios
}
#
# =============================================
#   PLEASE DO NOT ADD MORE FLAGS TO THIS FILE
# =============================================
#
# See comment at the top.
