# 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/config/ui.gni")

if (is_android) {
  import("//build/config/android/config.gni")
} else {
  # TODO(brettw) remove this once && early-out is checked in.
  is_android_webview_build = false
}
if (cpu_arch == "arm") {
  import("//build/config/arm.gni")
} else {
  # TODO(brettw) remove this once && early-out is checked in.
  arm_version = 0
}

declare_args() {
  # Enables the Oilpan garbage-collection infrastructure.
  enable_oilpan = false

  # Set to true to enable the clang plugin that checks the usage of the Blink
  # garbage-collection infrastructure during compilation.
  blink_gc_plugin = false
  blink_gc_plugin_dump_graph = false
}

use_default_render_theme = use_aura

# Whether Android ARM or x86 build uses OpenMAX DL FFT. Currently only
# supported on Android ARMv7+, ia32 or x64 without webview. When enabled, this
# will also enable WebAudio support on Android ARM, ia32 and x64. Default is
# enabled. Whether WebAudio is actually available depends on runtime settings
# and flags.
use_openmax_dl_fft = is_android && !is_android_webview_build &&
  (cpu_arch == "x86" ||
   cpu_arch == "x64" ||
   (cpu_arch == "arm" && arm_version > 7))

use_webaudio_ffmpeg = !is_mac && !is_android

# Set this to true to enable use of concatenated impulse responses for the HRTF
# panner in WebAudio.
# TODO(brettw) do we need this or can we assume its always on?
use_concatenated_impulse_responses = true

# feature_defines_list ---------------------------------------------------------

feature_defines_list = [
  "ENABLE_CUSTOM_SCHEME_HANDLER=0",
  "ENABLE_SVG_FONTS=1",
]

if (is_debug) {
  # TODO(GYP) this should also be set when release_valgrind_build is set,
  # but we don't have that flag in the GN build yet.
  feature_defines_list += [ "WTF_USE_DYNAMIC_ANNOTATIONS=1" ]
}

if (use_concatenated_impulse_responses) {
  feature_defines_list += [ "WTF_USE_CONCATENATED_IMPULSE_RESPONSES=1" ]
}

if (is_android) {
  feature_defines_list += [
    "ENABLE_MEDIA_CAPTURE=1",
  ]
} else {
  feature_defines_list += [
    "ENABLE_INPUT_MULTIPLE_FIELDS_UI=1",
    "ENABLE_MEDIA_CAPTURE=0",
    "ENABLE_WEB_AUDIO=1",
  ]
}

if (use_webaudio_ffmpeg) {
  feature_defines_list += [ "WTF_USE_WEBAUDIO_FFMPEG=1" ]
}

if (use_openmax_dl_fft) {
  feature_defines_list += [
    "WTF_USE_WEBAUDIO_OPENMAX_DL_FFT=1",
    # Enabling the FFT is enough to enable WebAudio support to
    # allow most WebAudio features to work on Android.
    "ENABLE_WEB_AUDIO=1",
  ]
}

if (!is_mac) {
  # Mac OS X has not implemented support for ENABLE(OPENTYPE_VERTICAL) yet.
  feature_defines_list += [ "ENABLE_OPENTYPE_VERTICAL=1" ]
}

if (use_default_render_theme) {
  feature_defines_list += [ "WTF_USE_DEFAULT_RENDER_THEME=1" ]
}
if (enable_oilpan) {
  feature_defines_list += [ "ENABLE_OILPAN=1" ]
}

# feature_defines_string -------------------------------------------------------

# Convert the list to a space-separated string for passing to scripts.
# This would be the equivalent of passing '<(feature_defines)' in GYP.
feature_defines_string = exec_script(
    "build/gn_list_to_space_separated_string.py",
    feature_defines_list,
    "trim string")
