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

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

# The secondary source root is a parallel directory tree where
# GN build files are placed when they can not be placed directly
# in the source tree, e.g. for third party source trees.
secondary_source = "//build/secondary/"

# These are the targets to check headers for by default. The files in targets
# matching these patterns (see "gn help label_pattern" for format) will have
# their includes checked for proper dependencies when you run either
# "gn check" or "gn gen --check".
check_targets = [
  #"//apps/*",  # Medium-hard.
  #"//ash/*",  # Medium-hard.
  "//base/*",
  "//blink/*",
  "//breakpad/*",
  "//build/*",
  "//cc/*",

  #"//chrome/*",  # Epic number of errors.
  "//chrome/app/*",
  "//chrome/common/*",
  "//chrome/installer/*",
  "//chrome/third_party/mozilla_security_manager/*",
  "//chrome/tools/*",
  "//chrome/utility/*",
  "//chromecast/*",
  "//chrome_elf/*",
  "//cloud_print/*",
  "//components/*",

  #"//content/*",  # A whole lot of errors.
  "//content/public/common:result_codes",
  "//content/public/common:static_switches",
  "//courgette/*",
  "//crypto/*",
  "//data/*",
  "//dbus/*",
  "//device/*",

  #"//extensions/*",  # Lots of errors.
  "//gin/*",
  "//google_apis/*",
  "//google_update/*",

  #"//gpu/*",  # Lots of errors.
  "//gpu:*",

  #"//ios/*",
  "//ipc/*",

  #"//jingle/*",
  "//mandoline/*",
  "//mash/*",

  #"//media/*",  # Lots of errors.
  "mojo/*",

  #"//native_client/*",
  #"//net/*",  # Needs GN binary changes to work on Android.

  #"//pdf/*",  # Medium-hard.
  #"//ppapi/*",  # Lots of errors.
  "//ppapi/examples/*",
  "//printing/*",

  #"//remoting/*",  # Medium-hard.
  #"//rlz/*",  # Needs checking on Windows.
  #"//sandbox/*",  # Medium-hard.
  "//sdch/*",
  "//skia/*",
  "//sql/*",
  "//storage/*",
  "//sync/*",
  "//testing/*",

  #"//third_party/*",  # May not ever want this.
  "//third_party/kasko/*",
  "//third_party/WebKit/Source/*",
  "//tools/*",

  #"//ui/*",  # Work left on Chromeos w/ use_ozone. Some parts of UI that work:
  "//ui/accessibility/*",
  "//ui/android/*",
  "//ui/app_list/*",
  "//ui/aura/*",
  "//ui/aura_extra/*",
  "//ui/base/*",
  "//ui/chromeos/*",
  "//ui/compositor/*",
  "//ui/display/*",
  "//ui/events:events",  # Specifically avoid //ui/events/ozone
  "//ui/events:events_base",
  "//ui/events:events_unittests",
  "//ui/file_manager/*",
  "//ui/gfx/*",
  "//ui/gl/*",
  "//ui/keyboard/*",
  "//ui/login/*",
  "//ui/message_center/*",
  "//ui/metro_viewer/*",
  "//ui/mojo/*",
  "//ui/native_theme/*",
  "//ui/platform_window/*",
  "//ui/resources/*",
  "//ui/shell_dialogs/*",
  "//ui/snapshot/*",
  "//ui/strings/*",
  "//ui/surface/*",
  "//ui/touch_selection/*",
  "//ui/views/*",
  "//ui/views_content_client/*",
  "//ui/web_dialogs/*",
  "//ui/webui/*",
  "//ui/wm/*",
  "//url/*",
  "//v8/*",
  "//win8/*",
]

# 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 except for gypi_to_gn calls.
exec_script_whitelist = [
  "//android_webview/BUILD.gn",
  "//ash/BUILD.gn",
  "//build/config/android/config.gni",
  "//build/config/android/internal_rules.gni",
  "//build/config/android/rules.gni",
  "//build/config/compiler/BUILD.gn",
  "//build/config/gcc/gcc_version.gni",
  "//build/config/ios/ios_sdk.gni",
  "//build/config/linux/BUILD.gn",
  "//build/config/linux/pkg_config.gni",
  "//build/config/mac/mac_sdk.gni",
  "//build/config/posix/BUILD.gn",
  "//build/config/sysroot.gni",
  "//build/config/win/BUILD.gn",
  "//build/config/win/visual_studio_version.gni",
  "//build/gn_helpers.py",
  "//build/gypi_to_gn.py",
  "//build/linux/BUILD.gn",
  "//build/toolchain/gcc_toolchain.gni",
  "//build/toolchain/mac/BUILD.gn",
  "//build/toolchain/nacl/BUILD.gn",
  "//build/toolchain/win/BUILD.gn",
  "//build/util/version.gni",
  "//chrome/android/BUILD.gn",
  "//chrome/browser/BUILD.gn",
  "//chrome/browser/chromeos/BUILD.gn",
  "//chrome/browser/extensions/BUILD.gn",
  "//chrome/browser/resources/chromeos/chromevox/BUILD.gn",
  "//chrome/browser/media/router/BUILD.gn",
  "//chrome/browser/ui/BUILD.gn",
  "//chrome/chrome_tests.gni",
  "//chrome/common/BUILD.gn",
  "//chrome/common/extensions/api/schemas.gni",
  "//chrome/renderer/BUILD.gn",
  "//chrome/test/BUILD.gn",
  "//chrome/utility/BUILD.gn",
  "//chromeos/BUILD.gn",

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

  "//components/domain_reliability/BUILD.gn",
  "//components/scheduler/scheduler.gni",
  "//content/browser/browser.gni",
  "//content/child/child.gni",
  "//content/common/common.gni",
  "//content/content.gni",
  "//content/public/android/BUILD.gn",
  "//content/renderer/renderer.gni",
  "//content/test/BUILD.gn",
  "//content/utility/utility.gni",
  "//extensions/common/api/schemas.gni",
  "//extensions/extensions.gni",
  "//extensions/shell/app_shell.gni",
  "//extensions/shell/common/api/schemas.gni",
  "//google_apis/BUILD.gn",
  "//gpu/gles2_conform_support/BUILD.gn",
  "//gpu/khronos_glcts_support/BUILD.gn",
  "//jingle/BUILD.gn",
  "//net/BUILD.gn",
  "//ppapi/ppapi_sources.gni",
  "//printing/BUILD.gn",
  "//remoting/host/BUILD.gn",
  "//remoting/remoting_srcs.gni",
  "//remoting/remoting_version.gni",
  "//skia/BUILD.gn",
  "//sync/protocol/protocol_sources.gni",
  "//third_party/android_platform/BUILD.gn",
  "//third_party/angle/BUILD.gn",
  "//third_party/angle/src/tests/BUILD.gn",
  "//third_party/boringssl/BUILD.gn",
  "//third_party/catapult/tracing/BUILD.gn",
  "//third_party/cld_2/BUILD.gn",
  "//third_party/cython/rules.gni",
  "//third_party/google_input_tools/inputview.gni",
  "//third_party/harfbuzz-ng/BUILD.gn",
  "//third_party/libaddressinput/BUILD.gn",
  "//third_party/opus/BUILD.gn",
  "//third_party/openh264/BUILD.gn",
  "//third_party/WebKit/Source/bindings/bindings.gni",
  "//third_party/WebKit/Source/bindings/scripts/scripts.gni",
  "//third_party/WebKit/Source/config.gni",
  "//third_party/WebKit/Source/core/core.gni",
  "//third_party/WebKit/Source/devtools/BUILD.gn",
  "//third_party/WebKit/Source/modules/modules.gni",
  "//third_party/WebKit/Source/platform/BUILD.gn",
  "//third_party/WebKit/Source/platform/platform.gni",
  "//third_party/WebKit/Source/web/BUILD.gn",
  "//third_party/WebKit/Source/wtf/BUILD.gn",
  "//third_party/WebKit/public/BUILD.gn",
  "//tools/gn/BUILD.gn",
  "//tools/gn/build_settings.h",
  "//tools/gn/command_help.cc",
  "//tools/gn/docs/language.md",
  "//tools/gn/format_test_data/053.gn",
  "//tools/gn/format_test_data/053.golden",
  "//tools/gn/format_test_data/055.gn",
  "//tools/gn/format_test_data/055.golden",
  "//tools/gn/function_exec_script.cc",
  "//tools/gn/gn.gyp",
  "//tools/gn/input_conversion.cc",
  "//tools/gn/misc/emacs/gn.el",
  "//tools/gn/misc/vim/syntax/gn.vim",
  "//tools/gn/setup.cc",
  "//ui/accessibility/BUILD.gn",
  "//ui/views/BUILD.gn",
]
