# This file is used by the GN meta build system to find the root of the source
# tree and to set startup options. For documentation on the values set in this
# file, run "gn help dotfile" at the command line.

import("//build/dotfile_settings.gni")
import("//third_party/angle/dotfile_settings.gni")

# The location of the build configuration file.
buildconfig = "//build/config/BUILDCONFIG.gn"

# These arguments override the default values for items in a declare_args
# block. "gn args" in turn can override these.
#
# In general the value for a build arg in the declare_args block should be the
# default. In some cases, a DEPS-ed in project will want different defaults for
# being built as part of Chrome vs. being built standalone. In this case, the
# Chrome defaults should go here. There should be no overrides here for
# values declared in the main Chrome repository.
#
# Important note for defining defaults: This file is executed before the
# BUILDCONFIG.gn file. That file sets up the global variables like "is_ios".
# This means that the default_args can not depend on the platform,
# architecture, or other build parameters. If you really need that, the other
# repo should define a flag that toggles on a behavior that implements the
# additional logic required by Chrome to set the variables.
default_args = {
  # TODO(brettw) bug 684096: Chrome on iOS does not build v8, so "gn gen" prints
  # a warning that "Build argument has no effect". When adding a v8 variable, it
  # also needs to be defined to src/ios/BUILD.gn (respectively removed from both
  # location when it is removed).

  v8_extra_library_files = []
  v8_experimental_extra_library_files = []
  v8_enable_gdbjit = false
  v8_imminent_deprecation_warnings = false

  # TODO(jochen): Remove this. http://crbug.com/v8/5830,
  # http://crbug.com/728583.
  v8_check_microtasks_scopes_consistency = false

  # Don't include webrtc's builtin task queue implementation.
  rtc_link_task_queue_impl = false

  # Don't include the iLBC audio codec.
  # TODO(bugs.webrtc.org/8396): Once WebRTC gets rid of its internal
  # deps on codecs, we can remove this.
  rtc_include_ilbc = false

  # Changes some setup for the Crashpad build to set them to build against
  # Chromium's zlib, base, etc.
  crashpad_dependencies = "chromium"
}

# These are the targets to skip header checking by default. The files in targets
# matching these patterns (see "gn help label_pattern" for format) will not have
# their includes checked for proper dependencies when you run either
# "gn check" or "gn gen --check".
no_check_targets = [
  # //chrome/*, https://crbug.com/949535
  "//chrome/browser/devtools:*",  # 114 errors
  "//chrome/browser/media/router/discovery:*",  # 26 errors
  "//chrome/browser/media/router:*",  # 225 errors
  "//chrome/browser/paint_preview:*",  # 4 errors
  "//chrome/browser/profiling_host:*",  # 13 errors
  "//chrome/browser/resources/chromeos/zip_archiver/cpp:*",  # 2 errors
  "//chrome/browser/safe_browsing/android:*",  # 3 errors
  "//chrome/browser/safe_browsing:*",  # 85 errors
  "//chrome/browser/safety_check/android:*",  # 3 errors
  "//chrome/browser/storage_access_api:*",  # 2 errors
  "//chrome/browser/touch_to_fill/android:*",  # 8 errors
  "//chrome/browser/updates/announcement_notification:*",  # 15 errors
  "//chrome/browser/updates/internal:*",  # 8 errors
  "//chrome/browser/updates:*",  # 21 errors
  "//chrome/install_static:*",  # 4 errors
  "//chrome/notification_helper:*",  # 4 errors
  "//chrome/renderer:*",  # 42 errors
  "//chrome/services/cups_proxy/public/cpp:*",  # 2 errors
  "//chrome/services/cups_proxy:*",  # 6 errors
  "//chrome/services/ipp_parser:*",  # 1 error
  "//chrome/services/media_gallery_util/public/cpp:*",  # 6 errors
  "//chrome/services/media_gallery_util:*",  # 3 errors
  "//chrome/services/removable_storage_writer:*",  # 1 error
  "//chrome/services/speech:*",  # 5 errors
  "//chrome/services/util_win:*",  # 1 error
  "//chrome/test/chromedriver:*",  # 115 errors
  "//chrome/test/data/nacl:*",  # 350 errors
  "//chrome/test/media_router:*",  # 5 errors
  "//chrome/test:*",  # 2682 errors

  "//clank/third_party/gvr_shim:*",  # 1 error
  "//extensions/browser/api/alarms:*",  # 2 errors
  "//extensions/browser/api/app_current_window_internal:*",  # 3 errors
  "//extensions/browser/api/app_runtime:*",  # 3 errors
  "//extensions/browser/api/app_window:*",  # 5 errors
  "//extensions/browser/api/audio:*",  # 3 errors
  "//extensions/browser/api/automation_internal:*",  # 37 errors
  "//extensions/browser/api/bluetooth_low_energy:*",  # 22 errors
  "//extensions/browser/api/bluetooth_socket:*",  # 12 errors
  "//extensions/browser/api/cast_channel:*",  # 3 errors
  "//extensions/browser/api/cec_private:*",  # 4 errors
  "//extensions/browser/api/clipboard:*",  # 3 errors
  "//extensions/browser/api/crash_report_private:*",  # 1 error
  "//extensions/browser/api/declarative:*",  # 20 errors
  "//extensions/browser/api/declarative_content:*",  # 2 errors
  "//extensions/browser/api/declarative_net_request/filter_list_converter:*",  # 1
                                                                               # error
  "//extensions/browser/api/declarative_net_request:*",  # 18 errors
  "//extensions/browser/api/declarative_webrequest:*",  # 29 errors
  "//extensions/browser/api/diagnostics:*",  # 2 errors
  "//extensions/browser/api/display_source:*",  # 7 errors
  "//extensions/browser/api/dns:*",  # 3 errors
  "//extensions/browser/api/document_scan:*",  # 2 errors
  "//extensions/browser/api/feedback_private:*",  # 2 errors
  "//extensions/browser/api/file_handlers:*",  # 3 errors
  "//extensions/browser/api/file_system:*",  # 1 error
  "//extensions/browser/api/hid:*",  # 12 errors
  "//extensions/browser/api/idle:*",  # 4 errors
  "//extensions/browser/api/management:*",  # 19 errors
  "//extensions/browser/api/messaging:*",  # 1 error
  "//extensions/browser/api/metrics_private:*",  # 3 errors
  "//extensions/browser/api/mime_handler_private:*",  # 1 error
  "//extensions/browser/api/networking_config:*",  # 7 errors
  "//extensions/browser/api/networking_private:*",  # 14 errors
  "//extensions/browser/api/power:*",  # 3 errors
  "//extensions/browser/api/printer_provider:*",  # 7 errors
  "//extensions/browser/api/printer_provider_internal:*",  # 3 errors
  "//extensions/browser/api/runtime:*",  # 6 errors
  "//extensions/browser/api/serial:*",  # 10 errors
  "//extensions/browser/api/socket:*",  # 11 errors
  "//extensions/browser/api/sockets_tcp:*",  # 6 errors
  "//extensions/browser/api/sockets_tcp_server:*",  # 8 errors
  "//extensions/browser/api/sockets_udp:*",  # 9 errors
  "//extensions/browser/api/storage:*",  # 9 errors
  "//extensions/browser/api/system_cpu:*",  # 1 error
  "//extensions/browser/api/system_display:*",  # 3 errors
  "//extensions/browser/api/system_info:*",  # 8 errors
  "//extensions/browser/api/system_memory:*",  # 1 error
  "//extensions/browser/api/system_network:*",  # 2 errors
  "//extensions/browser/api/system_power_source:*",  # 2 errors
  "//extensions/browser/api/system_storage:*",  # 6 errors
  "//extensions/browser/api/test:*",  # 1 error
  "//extensions/browser/api/usb:*",  # 12 errors
  "//extensions/browser/api/virtual_keyboard:*",  # 1 error
  "//extensions/browser/api/virtual_keyboard_private:*",  # 2 errors
  "//extensions/browser/api/vpn_provider:*",  # 13 errors
  "//extensions/browser/api/web_request:*",  # 37 errors
  "//extensions/browser/api/webcam_private:*",  # 8 errors
  "//extensions/browser/api:*",  # 7 errors
  "//extensions/browser/updater:*",  # 31 errors
  "//extensions/browser/value_store:*",  # 5 errors
  "//extensions/browser:*",  # 20 errors
  "//extensions:*",  # 75 errors
  "//headless:*",  # 167 errors
  "//jingle:*",  # 4 errors
  "//native_client/src/trusted/service_runtime:*",  # 2 errors
  "//ppapi/cpp/private:*",  # 1 error
  "//ppapi/host:*",  # 1 error
  "//ppapi/native_client/src/untrusted/pnacl_irt_shim:*",  # 197 errors
  "//ppapi/proxy:*",  # 31 errors
  "//ppapi/shared_impl:*",  # 3 errors
  "//ppapi/thunk:*",  # 1071 errors
  "//ppapi:*",  # 3 errors
  "//remoting/base/grpc_support:*",  # 14 errors
  "//remoting/base/grpc_test_support:*",  # 1 error
  "//remoting/base:*",  # 6 errors
  "//remoting/client/display:*",  # 55 errors
  "//remoting/client/jni:*",  # 8 errors
  "//remoting/codec:*",  # 32 errors
  "//remoting/host/chromeos:*",  # 10 errors
  "//remoting/host/file_transfer:*",  # 43 errors
  "//remoting/host/input_monitor:*",  # 3 errors
  "//remoting/host/installer/mac:*",  # 1 error
  "//remoting/host/it2me:*",  # 18 errors
  "//remoting/host/linux:*",  # 64 errors
  "//remoting/host/mac:*",  # 49 errors
  "//remoting/host/native_messaging:*",  # 3 errors
  "//remoting/host/security_key:*",  # 68 errors
  "//remoting/host/setup:*",  # 9 errors
  "//remoting/host/win:*",  # 43 errors
  "//remoting/host:*",  # 164 errors
  "//remoting/ios/app/settings:*",  # 6 errors
  "//remoting/ios/app:*",  # 9 errors
  "//remoting/ios/audio:*",  # 5 errors
  "//remoting/ios/domain:*",  # 2 errors
  "//remoting/ios/facade:*",  # 8 errors
  "//remoting/ios/persistence:*",  # 10 errors
  "//remoting/ios/session:*",  # 7 errors
  "//remoting/ios:*",  # 2 errors
  "//remoting/protocol:*",  # 142 errors
  "//remoting/signaling:*",  # 30 errors
  "//remoting/test:*",  # 20 errors
  "//remoting:*",  # 27 errors
  "//sandbox/linux:*",  # 13 errors
  "//sandbox/mac:*",  # 14 errors
  "//sandbox/win:*",  # 7 errors

  # //third_party/blink/*, https://crbug.com/800764
  "//third_party/blink/renderer/core/accessibility:*",  # 27 errors
  "//third_party/blink/renderer/core/animation:*",  # 506 errors
  "//third_party/blink/renderer/core/animation_frame:*",  # 4 errors
  "//third_party/blink/renderer/core/aom:*",  # 23 errors
  "//third_party/blink/renderer/core/clipboard:*",  # 43 errors
  "//third_party/blink/renderer/core/content_capture:*",  # 12 errors
  "//third_party/blink/renderer/core/context_features:*",  # 3 errors
  "//third_party/blink/renderer/core/css:*",  # 835 errors
  "//third_party/blink/renderer/core/display_lock:*",  # 36 errors
  "//third_party/blink/renderer/core/dom:*",  # 706 errors
  "//third_party/blink/renderer/core/editing:*",  # 847 errors
  "//third_party/blink/renderer/core/events:*",  # 173 errors
  "//third_party/blink/renderer/core/execution_context:*",  # 48 errors
  "//third_party/blink/renderer/core/exported:*",  # 470 errors
  "//third_party/blink/renderer/core/feature_policy:*",  # 15 errors
  "//third_party/blink/renderer/core/fetch:*",  # 134 errors
  "//third_party/blink/renderer/core/fileapi:*",  # 55 errors
  "//third_party/blink/renderer/core/frame:*",  # 864 errors
  "//third_party/blink/renderer/core/fullscreen:*",  # 32 errors
  "//third_party/blink/renderer/core/geometry:*",  # 39 errors
  "//third_party/blink/renderer/core/html/parser:*",  # 133 errors
  "//third_party/blink/renderer/core/html:*",  # 1662 errors
  "//third_party/blink/renderer/core/imagebitmap:*",  # 34 errors
  "//third_party/blink/renderer/core/input:*",  # 240 errors
  "//third_party/blink/renderer/core/inspector:*",  # 594 errors
  "//third_party/blink/renderer/core/intersection_observer:*",  # 50 errors
  "//third_party/blink/renderer/core/layout/svg:*",  # 193 errors
  "//third_party/blink/renderer/core/layout:*",  # 920 errors
  "//third_party/blink/renderer/core/loader:*",  # 421 errors
  "//third_party/blink/renderer/core/mathml:*",  # 11 errors
  "//third_party/blink/renderer/core/messaging:*",  # 30 errors
  "//third_party/blink/renderer/core/offscreencanvas:*",  # 22 errors
  "//third_party/blink/renderer/core/origin_trials:*",  # 12 errors
  "//third_party/blink/renderer/core/page:*",  # 500 errors
  "//third_party/blink/renderer/core/paint:*",  # 788 errors
  "//third_party/blink/renderer/core/probe:*",  # 9 errors
  "//third_party/blink/renderer/core/resize_observer:*",  # 29 errors
  "//third_party/blink/renderer/core/script:*",  # 155 errors
  "//third_party/blink/renderer/core/scroll:*",  # 29 errors
  "//third_party/blink/renderer/core/streams:*",  # 75 errors
  "//third_party/blink/renderer/core/style:*",  # 86 errors
  "//third_party/blink/renderer/core/svg:*",  # 297 errors
  "//third_party/blink/renderer/core/timezone:*",  # 8 errors
  "//third_party/blink/renderer/core/timing:*",  # 170 errors
  "//third_party/blink/renderer/core/trustedtypes:*",  # 27 errors
  "//third_party/blink/renderer/core/typed_arrays:*",  # 24 errors
  "//third_party/blink/renderer/core/url:*",  # 7 errors
  "//third_party/blink/renderer/core/workers:*",  # 289 errors
  "//third_party/blink/renderer/core/xmlhttprequest:*",  # 49 errors
  "//third_party/blink/renderer/core:*",  # 823 errors
  "//third_party/blink/renderer/modules/peerconnection:*",  # 43 errors

  "//third_party/breakpad:*",  # 34 errors
  "//third_party/ced/*",
  "//third_party/crashpad/crashpad/client:*",  # 1 error
  "//third_party/crashpad/crashpad/compat:*",  # 2 errors
  "//third_party/crashpad/crashpad/snapshot:*",  # 1 error
  "//third_party/crashpad/crashpad/test:*",  # 2 errors
  "//third_party/crashpad/crashpad/util:*",  # 2 errors
  "//third_party/dav1d:*",  # 95 errors
  "//third_party/ffmpeg:*",  # 1 error
  "//third_party/icu/*",
  "//third_party/libvpx:*",  # 164 errors
  "//third_party/libwebp:*",  # 80 errors, https://crbug.com/800762
  "//third_party/openscreen/src/cast/common:*",  # 4 errors
  "//third_party/openscreen/src/cast/receiver:*",  # 1 error
  "//third_party/openscreen/src/cast/streaming:*",  # 66 errors
  "//third_party/openscreen/src/discovery:*",  # 36 errors
  "//third_party/openscreen/src/osp/impl/quic:*",  # 16 errors
  "//third_party/openscreen/src/osp/msgs:*",  # 5 errors
  "//third_party/openscreen/src/osp/public:*",  # 1 error
  "//third_party/openscreen/src/osp:*",  # 13 errors
  "//third_party/openscreen/src/util:*",  # 29 errors
  "//third_party/pdfium/samples:*",  # 1 error
  "//third_party/pdfium/third_party:*",  # 2 errors
  "//third_party/pdfium:*",  # 1 error

  # //v8/*, https://crbug.com/v8/7330
  "//v8/src/inspector:*",  # 20 errors
  "//v8/test/cctest:*",  # 26 errors
  "//v8/test/unittests:*",  # 11 errors
  "//v8/test/wasm-api-tests:*",  # 13 errors
  "//v8/third_party/inspector_protocol:*",  # 2 errors
  "//v8/tools/debug_helper:*",  # 9 errors
  "//v8/tools/v8windbg:*",  # 2 errors
  "//v8:*",  # 1871 errors
]

# These are the list of GN files that run exec_script. This whitelist exists
# to force additional review for new uses of exec_script, which is strongly
# discouraged.
#
# PLEASE READ
#
# You should almost never need to add new exec_script calls. exec_script is
# slow, especially on Windows, and can cause confusing effects. Although
# individually each call isn't slow or necessarily very confusing, at the scale
# of our repo things get out of hand quickly. By strongly pushing back on all
# additions, we keep the build fast and clean. If you think you need to add a
# new call, please consider:
#
# - Do not use a script to check for the existence of a file or directory to
#   enable a different mode. Instead, use GN build args to enable or disable
#   functionality and set options. An example is checking for a file in the
#   src-internal repo to see if the corresponding src-internal feature should
#   be enabled. There are several things that can go wrong with this:
#
#    - It's mysterious what causes some things to happen. Although in many cases
#      such behavior can be conveniently automatic, GN optimizes for explicit
#      and obvious behavior so people can more easily diagnose problems.
#
#    - The user can't enable a mode for one build and not another. With GN build
#      args, the user can choose the exact configuration of multiple builds
#      using one checkout. But implicitly basing flags on the state of the
#      checkout, this functionality is broken.
#
#    - It's easy to get stale files. If for example the user edits the gclient
#      to stop checking out src-internal (or any other optional thing), it's
#      easy to end up with stale files still mysteriously triggering build
#      conditions that are no longer appropriate (yes, this happens in real
#      life).
#
# - Do not use a script to iterate files in a directory (glob):
#
#    - This has the same "stale file" problem as the above discussion. Various
#      operations can leave untracked files in the source tree which can cause
#      surprising effects.
#
#    - It becomes impossible to use "git grep" to find where a certain file is
#      referenced. This operation is very common and people really do get
#      confused when things aren't listed.
#
#    - It's easy to screw up. One common case is a build-time script that packs
#      up a directory. The author notices that the script isn't re-run when the
#      directory is updated, so adds a glob so all the files are listed as
#      inputs. This seems to work great... until a file is deleted. When a
#      file is deleted, all the inputs the glob lists will still be up to date
#      and no command-lines will have been changed. The action will not be
#      re-run and the build will be broken. It is possible to get this correct
#      using glob, and it's possible to mess it up without glob, but globs make
#      this situation much easier to create. if the build always lists the
#      files and passes them to a script, it will always be correct.

exec_script_whitelist =
    build_dotfile_settings.exec_script_whitelist +
    angle_dotfile_settings.exec_script_whitelist +
    [
      # Whitelist entries for //build should go into
      # //build/dotfile_settings.gni instead, so that they can be shared
      # with other repos. The entries in this list should be only for files
      # in the Chromium repo outside of //build.
      "//build_overrides/build.gni",

      "//chrome/android/webapk/shell_apk/prepare_upload_dir/BUILD.gn",

      # TODO(dgn): Layer violation but breaks the build otherwise, see
      # https://crbug.com/474506.
      "//clank/java/BUILD.gn",
      "//clank/native/BUILD.gn",

      "//google_apis/BUILD.gn",
      "//printing/BUILD.gn",

      "//remoting/host/installer/linux/BUILD.gn",
      "//remoting/remoting_version.gni",
      "//remoting/host/installer/win/generate_clsids.gni",

      "//tools/grit/grit_rule.gni",
      "//tools/gritsettings/BUILD.gn",
    ]
