# 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/services/cups_proxy/public/cpp:*",  # 2 errors
  "//chrome/services/cups_proxy:*",  # 6 errors
  "//chrome/services/ipp_parser:*",  # 1 error
  "//chrome/services/removable_storage_writer:*",  # 1 error
  "//chrome/services/util_win:*",  # 1 error
  "//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/declarative:*",  # 20 errors
  "//extensions/browser/api/declarative_content:*",  # 2 errors
  "//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_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/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",
    ]
